From e8b7f9fc13b7a450bb03a5de0c26c1afa911f43d Mon Sep 17 00:00:00 2001 From: zhaoqing Date: Wed, 3 Jun 2026 17:13:02 +0800 Subject: [PATCH 1/2] =?UTF-8?q?update=20go=20sdk=20dir=20sdk/sandbox=20?= =?UTF-8?q?=E2=86=92=20e2b=20sdk/runtime=20=E2=86=92=20runtime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- e2b/README.md | 321 +++++++++++ e2b/README_zh-CH.md | 315 +++++++++++ {sdk/proto => e2b}/api/api_access_tokens.go | 0 {sdk/proto => e2b}/api/api_admin.go | 0 {sdk/proto => e2b}/api/api_api_keys.go | 0 {sdk/proto => e2b}/api/api_auth.go | 0 {sdk/proto => e2b}/api/api_default.go | 0 {sdk/proto => e2b}/api/api_sandboxes.go | 0 {sdk/proto => e2b}/api/api_snapshots.go | 0 {sdk/proto => e2b}/api/api_tags.go | 0 {sdk/proto => e2b}/api/api_templates.go | 0 {sdk/proto => e2b}/api/api_volumes.go | 0 {sdk/proto => e2b}/api/client.go | 0 {sdk/proto => e2b}/api/configuration.go | 0 .../model__nodes_get_200_response_inner.go | 0 ...xes__sandbox_id__refreshes_post_request.go | 0 ...xes__sandbox_id__snapshots_post_request.go | 0 ...boxes__sandbox_id__timeout_post_request.go | 0 ...model__sandboxes_get_200_response_inner.go | 0 .../model__teams_get_200_response_inner.go | 0 ...model__templates_get_200_response_inner.go | 0 .../api/model_admin_sandbox_kill_result.go | 0 .../api/model_assign_template_tags_request.go | 0 .../api/model_assigned_template_tags.go | 0 {sdk/proto => e2b}/api/model_aws_registry.go | 0 .../api/model_build_log_entry.go | 0 .../api/model_build_status_reason.go | 0 .../api/model_connect_sandbox.go | 0 .../api/model_create_sandbox_request.go | 0 .../api/model_create_team_api_key_request.go | 0 .../api/model_create_volume_request.go | 0 .../api/model_created_access_token.go | 0 .../api/model_created_team_api_key.go | 0 .../api/model_delete_template_tags_request.go | 0 {sdk/proto => e2b}/api/model_disk_metrics.go | 0 {sdk/proto => e2b}/api/model_error.go | 0 .../api/model_from_image_registry.go | 0 {sdk/proto => e2b}/api/model_gcp_registry.go | 0 .../api/model_general_registry.go | 0 .../api/model_identifier_masking_details.go | 0 .../proto => e2b}/api/model_listed_sandbox.go | 0 {sdk/proto => e2b}/api/model_log_level.go | 0 .../proto => e2b}/api/model_logs_direction.go | 0 {sdk/proto => e2b}/api/model_logs_source.go | 0 {sdk/proto => e2b}/api/model_machine_info.go | 0 .../api/model_max_team_metric.go | 0 .../api/model_new_access_token.go | 0 {sdk/proto => e2b}/api/model_node.go | 0 {sdk/proto => e2b}/api/model_node_detail.go | 0 {sdk/proto => e2b}/api/model_node_metrics.go | 0 {sdk/proto => e2b}/api/model_node_status.go | 0 .../api/model_node_status_change.go | 0 .../api/model_resumed_sandbox.go | 0 {sdk/proto => e2b}/api/model_sandbox.go | 0 .../api/model_sandbox_auto_resume_config.go | 0 .../proto => e2b}/api/model_sandbox_detail.go | 0 {sdk/proto => e2b}/api/model_sandbox_log.go | 0 .../api/model_sandbox_log_entry.go | 0 {sdk/proto => e2b}/api/model_sandbox_logs.go | 0 .../api/model_sandbox_logs_v2_response.go | 0 .../proto => e2b}/api/model_sandbox_metric.go | 0 .../api/model_sandbox_network_config.go | 0 {sdk/proto => e2b}/api/model_sandbox_state.go | 0 .../api/model_sandbox_volume_mount.go | 0 .../api/model_sandboxes_with_metrics.go | 0 {sdk/proto => e2b}/api/model_snapshot_info.go | 0 {sdk/proto => e2b}/api/model_team.go | 0 {sdk/proto => e2b}/api/model_team_api_key.go | 0 {sdk/proto => e2b}/api/model_team_metric.go | 0 {sdk/proto => e2b}/api/model_team_user.go | 0 {sdk/proto => e2b}/api/model_template.go | 0 .../api/model_template_alias_response.go | 0 .../proto => e2b}/api/model_template_build.go | 0 .../api/model_template_build_file_upload.go | 0 .../api/model_template_build_info.go | 0 .../api/model_template_build_logs_response.go | 0 .../api/model_template_build_request.go | 0 .../api/model_template_build_request_v2.go | 0 .../api/model_template_build_request_v3.go | 0 .../api/model_template_build_start_v2.go | 0 .../api/model_template_build_status.go | 0 .../api/model_template_legacy.go | 0 .../api/model_template_request_response_v3.go | 0 {sdk/proto => e2b}/api/model_template_step.go | 0 {sdk/proto => e2b}/api/model_template_tag.go | 0 .../api/model_template_update_request.go | 0 .../api/model_template_update_response.go | 0 .../api/model_template_with_builds.go | 0 .../api/model_update_team_api_key.go | 0 {sdk/proto => e2b}/api/model_volume.go | 0 {sdk/proto => e2b}/api/response.go | 0 {sdk/proto => e2b}/api/utils.go | 0 {sdk/sandbox => e2b}/config.go | 6 +- {sdk/sandbox => e2b}/sandbox.go | 5 +- {sdk/sandbox => e2b}/sandbox_api.go | 4 +- .../sandbox => examples/e2b-example}/main.go | 4 +- .../runtime-example}/main.go | 2 +- runtime/README.md | 231 ++++++++ runtime/README_zh-CH.md | 226 ++++++++ {sdk/runtime => runtime}/client.go | 4 +- {sdk/runtime => runtime}/command_handle.go | 2 +- {sdk/runtime => runtime}/commands.go | 4 +- {sdk/runtime => runtime}/config.go | 0 .../envd/filesystem/filesystem.pb.go | 0 .../filesystemconnect/filesystem.connect.go | 2 +- .../envd/process/process.pb.go | 0 .../process/processconnect/process.connect.go | 2 +- {sdk/runtime => runtime}/filesystem.go | 4 +- {sdk/runtime => runtime}/k8s.go | 0 sdk/README.md | 512 ------------------ sdk/README_zh-CH.md | 502 ----------------- 111 files changed, 1113 insertions(+), 1033 deletions(-) create mode 100644 e2b/README.md create mode 100644 e2b/README_zh-CH.md rename {sdk/proto => e2b}/api/api_access_tokens.go (100%) rename {sdk/proto => e2b}/api/api_admin.go (100%) rename {sdk/proto => e2b}/api/api_api_keys.go (100%) rename {sdk/proto => e2b}/api/api_auth.go (100%) rename {sdk/proto => e2b}/api/api_default.go (100%) rename {sdk/proto => e2b}/api/api_sandboxes.go (100%) rename {sdk/proto => e2b}/api/api_snapshots.go (100%) rename {sdk/proto => e2b}/api/api_tags.go (100%) rename {sdk/proto => e2b}/api/api_templates.go (100%) rename {sdk/proto => e2b}/api/api_volumes.go (100%) rename {sdk/proto => e2b}/api/client.go (100%) rename {sdk/proto => e2b}/api/configuration.go (100%) rename {sdk/proto => e2b}/api/model__nodes_get_200_response_inner.go (100%) rename {sdk/proto => e2b}/api/model__sandboxes__sandbox_id__refreshes_post_request.go (100%) rename {sdk/proto => e2b}/api/model__sandboxes__sandbox_id__snapshots_post_request.go (100%) rename {sdk/proto => e2b}/api/model__sandboxes__sandbox_id__timeout_post_request.go (100%) rename {sdk/proto => e2b}/api/model__sandboxes_get_200_response_inner.go (100%) rename {sdk/proto => e2b}/api/model__teams_get_200_response_inner.go (100%) rename {sdk/proto => e2b}/api/model__templates_get_200_response_inner.go (100%) rename {sdk/proto => e2b}/api/model_admin_sandbox_kill_result.go (100%) rename {sdk/proto => e2b}/api/model_assign_template_tags_request.go (100%) rename {sdk/proto => e2b}/api/model_assigned_template_tags.go (100%) rename {sdk/proto => e2b}/api/model_aws_registry.go (100%) rename {sdk/proto => e2b}/api/model_build_log_entry.go (100%) rename {sdk/proto => e2b}/api/model_build_status_reason.go (100%) rename {sdk/proto => e2b}/api/model_connect_sandbox.go (100%) rename {sdk/proto => e2b}/api/model_create_sandbox_request.go (100%) rename {sdk/proto => e2b}/api/model_create_team_api_key_request.go (100%) rename {sdk/proto => e2b}/api/model_create_volume_request.go (100%) rename {sdk/proto => e2b}/api/model_created_access_token.go (100%) rename {sdk/proto => e2b}/api/model_created_team_api_key.go (100%) rename {sdk/proto => e2b}/api/model_delete_template_tags_request.go (100%) rename {sdk/proto => e2b}/api/model_disk_metrics.go (100%) rename {sdk/proto => e2b}/api/model_error.go (100%) rename {sdk/proto => e2b}/api/model_from_image_registry.go (100%) rename {sdk/proto => e2b}/api/model_gcp_registry.go (100%) rename {sdk/proto => e2b}/api/model_general_registry.go (100%) rename {sdk/proto => e2b}/api/model_identifier_masking_details.go (100%) rename {sdk/proto => e2b}/api/model_listed_sandbox.go (100%) rename {sdk/proto => e2b}/api/model_log_level.go (100%) rename {sdk/proto => e2b}/api/model_logs_direction.go (100%) rename {sdk/proto => e2b}/api/model_logs_source.go (100%) rename {sdk/proto => e2b}/api/model_machine_info.go (100%) rename {sdk/proto => e2b}/api/model_max_team_metric.go (100%) rename {sdk/proto => e2b}/api/model_new_access_token.go (100%) rename {sdk/proto => e2b}/api/model_node.go (100%) rename {sdk/proto => e2b}/api/model_node_detail.go (100%) rename {sdk/proto => e2b}/api/model_node_metrics.go (100%) rename {sdk/proto => e2b}/api/model_node_status.go (100%) rename {sdk/proto => e2b}/api/model_node_status_change.go (100%) rename {sdk/proto => e2b}/api/model_resumed_sandbox.go (100%) rename {sdk/proto => e2b}/api/model_sandbox.go (100%) rename {sdk/proto => e2b}/api/model_sandbox_auto_resume_config.go (100%) rename {sdk/proto => e2b}/api/model_sandbox_detail.go (100%) rename {sdk/proto => e2b}/api/model_sandbox_log.go (100%) rename {sdk/proto => e2b}/api/model_sandbox_log_entry.go (100%) rename {sdk/proto => e2b}/api/model_sandbox_logs.go (100%) rename {sdk/proto => e2b}/api/model_sandbox_logs_v2_response.go (100%) rename {sdk/proto => e2b}/api/model_sandbox_metric.go (100%) rename {sdk/proto => e2b}/api/model_sandbox_network_config.go (100%) rename {sdk/proto => e2b}/api/model_sandbox_state.go (100%) rename {sdk/proto => e2b}/api/model_sandbox_volume_mount.go (100%) rename {sdk/proto => e2b}/api/model_sandboxes_with_metrics.go (100%) rename {sdk/proto => e2b}/api/model_snapshot_info.go (100%) rename {sdk/proto => e2b}/api/model_team.go (100%) rename {sdk/proto => e2b}/api/model_team_api_key.go (100%) rename {sdk/proto => e2b}/api/model_team_metric.go (100%) rename {sdk/proto => e2b}/api/model_team_user.go (100%) rename {sdk/proto => e2b}/api/model_template.go (100%) rename {sdk/proto => e2b}/api/model_template_alias_response.go (100%) rename {sdk/proto => e2b}/api/model_template_build.go (100%) rename {sdk/proto => e2b}/api/model_template_build_file_upload.go (100%) rename {sdk/proto => e2b}/api/model_template_build_info.go (100%) rename {sdk/proto => e2b}/api/model_template_build_logs_response.go (100%) rename {sdk/proto => e2b}/api/model_template_build_request.go (100%) rename {sdk/proto => e2b}/api/model_template_build_request_v2.go (100%) rename {sdk/proto => e2b}/api/model_template_build_request_v3.go (100%) rename {sdk/proto => e2b}/api/model_template_build_start_v2.go (100%) rename {sdk/proto => e2b}/api/model_template_build_status.go (100%) rename {sdk/proto => e2b}/api/model_template_legacy.go (100%) rename {sdk/proto => e2b}/api/model_template_request_response_v3.go (100%) rename {sdk/proto => e2b}/api/model_template_step.go (100%) rename {sdk/proto => e2b}/api/model_template_tag.go (100%) rename {sdk/proto => e2b}/api/model_template_update_request.go (100%) rename {sdk/proto => e2b}/api/model_template_update_response.go (100%) rename {sdk/proto => e2b}/api/model_template_with_builds.go (100%) rename {sdk/proto => e2b}/api/model_update_team_api_key.go (100%) rename {sdk/proto => e2b}/api/model_volume.go (100%) rename {sdk/proto => e2b}/api/response.go (100%) rename {sdk/proto => e2b}/api/utils.go (100%) rename {sdk/sandbox => e2b}/config.go (98%) rename {sdk/sandbox => e2b}/sandbox.go (98%) rename {sdk/sandbox => e2b}/sandbox_api.go (99%) rename {sdk/example/sandbox => examples/e2b-example}/main.go (98%) rename {sdk/example/runtime_client => examples/runtime-example}/main.go (99%) create mode 100644 runtime/README.md create mode 100644 runtime/README_zh-CH.md rename {sdk/runtime => runtime}/client.go (91%) rename {sdk/runtime => runtime}/command_handle.go (98%) rename {sdk/runtime => runtime}/commands.go (97%) rename {sdk/runtime => runtime}/config.go (100%) rename {sdk/proto => runtime}/envd/filesystem/filesystem.pb.go (100%) rename {sdk/proto => runtime}/envd/filesystem/filesystemconnect/filesystem.connect.go (99%) rename {sdk/proto => runtime}/envd/process/process.pb.go (100%) rename {sdk/proto => runtime}/envd/process/processconnect/process.connect.go (99%) rename {sdk/runtime => runtime}/filesystem.go (98%) rename {sdk/runtime => runtime}/k8s.go (100%) delete mode 100644 sdk/README.md delete mode 100644 sdk/README_zh-CH.md diff --git a/e2b/README.md b/e2b/README.md new file mode 100644 index 0000000..472038b --- /dev/null +++ b/e2b/README.md @@ -0,0 +1,321 @@ +# E2B Go SDK (Management Client) + +## Installation + +Add the `agents-api` dependency to your `go.mod`: [View Releases](https://github.com/openkruise/agents-api/releases) + +``` +require github.com/openkruise/agents-api +``` + +| Package | Import Path | Description | +|---------|----------------------------------------|-----------------------------------------------------------------------------------------------------------------------------| +| **e2b** | `github.com/openkruise/agents-api/e2b` | **Management Client**: Sandbox lifecycle management (Create / Connect / Pause / Kill) + in-container ops (Commands / Files) | + +--- + +## Package Structure + +``` +e2b/ +├── api/ # OpenAPI-generated REST client (sandbox management) +├── sandbox.go # Sandbox struct: Create / Connect / Pause / Kill +├── sandbox_api.go # Low-level REST client (SandboxApi): List / GetInfo / Kill / ... +└── config.go # ConnectionConfig: Protocol / Scheme / Domain / API URL +``` + +--- + +## Quick Start + +```go +package main + +import ( + "context" + "fmt" + "github.com/openkruise/agents-api/e2b" + "log" +) + +func main() { + ctx := context.Background() + + sb, err := e2b.Create(ctx, "code-interpreter", + e2b.WithConfig( + e2b.WithAPIKey("your-api-key"), + e2b.WithDomain("your.domain.com"), + ), + ) + if err != nil { + log.Fatal(err) + } + defer sb.Close(ctx) + + res, _ := sb.Commands.Run(ctx, "echo hello") + fmt.Println(res.Stdout) + + sb.Files.MakeDir(ctx, "/tmp/demo") +} +``` + +Full +example: [Management Client Example](https://github.com/openkruise/agents-api/blob/master/examples/e2b-example/main.go) + +--- + +## Connection Configuration + +### Scheme & Protocol + +Connection behavior is controlled by `ConnectionConfig`, determined by two orthogonal dimensions: **Scheme** and * +*Protocol**. + +#### Protocol (Routing) + +| Value | Constant | API URL | Sandbox URL | +|----------------------|-----------------------|----------------------------------|-------------------------------------------------| +| **Native (default)** | `e2b.ProtocolNative` | `https://api.` | `https://-.` | +| **Private** | `e2b.ProtocolPrivate` | `:///kruise/api` | `:///kruise//` | + +- **Native**: Subdomain-based routing for public cloud deployments +- **Private**: Path-prefix routing (`/kruise/...`) via a unified gateway, suitable for private deployments or local + port-forwarding + +#### Scheme + +| Value | Use Case | +|-------------------------|------------------------------------------| +| **`"https"` (default)** | Production / public network | +| **`"http"`** | Local port-forward, intranet without TLS | + +#### ConnectionConfigOption List + +Applied via `e2b.NewConnectionConfig(opts...)` or embedded in `Create/Connect` with `WithConfig(...)`: + +| Option | Description | +|---------------------------------------|----------------------------------------------------------------| +| `WithAPIKey(key string)` | API Key, sent as `X-API-Key` header | +| `WithDomain(domain string)` | Domain name, defaults to `your.domain.com` | +| `WithScheme(scheme string)` | URL scheme, defaults to `https` | +| `WithProtocol(p Protocol)` | Routing protocol, defaults to `ProtocolNative` | +| `WithAPIURL(url string)` | **Highest priority**: directly overrides API base URL | +| `WithSandboxBaseURL(url string)` | **Highest priority**: directly overrides sandbox envd base URL | +| `WithRequestTimeout(d time.Duration)` | HTTP request timeout, defaults to 60s | + +#### Priority + +`WithAPIURL` / `WithSandboxBaseURL` (explicit override) > `WithProtocol` + `WithDomain` assembly > environment +variables > defaults + +--- + +## Create / Connect Sandbox + +### `Create(ctx, template, opts...) (*Sandbox, error)` + +Creates a new sandbox from a template. Defaults to `"code-interpreter"` when `template` is empty. + +```go +package main + +import ( + "github.com/openkruise/agents-api/e2b" +) + +func main() { + sb, err := e2b.Create(ctx, "code-interpreter", + e2b.WithConfig( + e2b.WithAPIKey("xxx"), + e2b.WithDomain("example.com"), + e2b.WithProtocol(e2b.ProtocolPrivate), + ), + e2b.WithTimeout(600), + e2b.WithMetadata(map[string]string{"k": "v"}), + e2b.WithEnvVars(map[string]string{"FOO": "1"}), + e2b.WithAutoPause(true), + e2b.WithSecure(true), + ) +} +``` + +### `Connect(ctx, sandboxID, opts...) (*Sandbox, error)` + +Connects to an existing sandbox. + +```go +sb, err := e2b.Connect(ctx, "default--xxx-xxx", +e2b.WithConfig(e2b.WithAPIKey("xxx"), e2b.WithDomain("example.com")), +) +``` + +### SandboxOption List + +| Option | Description | +|------------------------------|---------------------------------------------| +| `WithConfig(opts...)` | Embed a set of `ConnectionConfigOption` | +| `WithTimeout(seconds int32)` | Sandbox TTL, defaults to 300s | +| `WithMetadata(map)` | Sandbox metadata | +| `WithEnvVars(map)` | Environment variables injected into sandbox | +| `WithAutoPause(bool)` | Enable auto-pause | +| `WithSecure(bool)` | Enable secure mode | + +### Sandbox Instance Methods + +| Method | Description | +|----------------------------------------|------------------------------------------| +| `SandboxID() string` | Returns the sandbox ID | +| `TemplateID() string` | Returns the template ID | +| `GetInfo(ctx) (*SandboxInfo, error)` | Get sandbox details | +| `SetTimeout(ctx, timeout int32) error` | Update timeout | +| `Pause(ctx) (string, error)` | Pause the sandbox | +| `Kill(ctx) (bool, error)` | Destroy the sandbox | +| `Close(ctx) error` | Alias for `Kill`, convenient for `defer` | + +`Sandbox` exposes two sub-modules: + +- `sb.Commands` — Command execution (`*Commands`) +- `sb.Files` — Filesystem operations (`*Filesystem`) + +--- + +## Sandbox Management API (SandboxApi) + +`SandboxApi` is a low-level REST client that can be used independently without creating a Sandbox instance (e.g., +listing all sandboxes). + +```go +api := e2b.NewSandboxApi(e2b.NewConnectionConfig( +e2b.WithAPIKey("xxx"), +e2b.WithDomain("example.com"), +)) +``` + +| Method | Description | +|------------------------------------------------------------------------------|-----------------------------------------------| +| `List(ctx) ([]SandboxInfo, error)` | List all running sandboxes | +| `GetInfo(ctx, sandboxID) (*SandboxInfo, error)` | Get sandbox details; 404 returns `not found` | +| `Kill(ctx, sandboxID) (bool, error)` | Destroy sandbox; returns `true` in Debug mode | +| `SetTimeout(ctx, sandboxID, timeout int32) error` | Update timeout | +| `CreateSandbox(ctx, opts CreateSandboxOpts) (*SandboxCreateResponse, error)` | Low-level create API | +| `ConnectSandbox(ctx, sandboxID, timeout int32) (*client.Sandbox, error)` | Low-level connect API | +| `Pause(ctx, sandboxID) (string, error)` | Pause sandbox | + +--- + +## Command Execution (Commands) + +Operate in-container processes via `sb.Commands`. Uses the envd `Process` gRPC service under the hood. + +### Methods + +| Method | Description | +|-------------------------------------------------------------|-----------------------------------------------------------------------------| +| `Run(ctx, cmd, opts...) (*CommandResult, error)` | **Foreground**: run and wait for completion, returns stdout/stderr/exitCode | +| `Start(ctx, cmd, opts...) (*CommandHandle, error)` | **Background**: returns a handle, caller decides when to `Wait` | +| `List(ctx) ([]ProcessInfo, error)` | List all running processes | +| `Kill(ctx, pid uint32) (bool, error)` | Send SIGKILL to PID; returns `false, nil` if not found | +| `SendStdin(ctx, pid uint32, data string) error` | Write data to a process's stdin | +| `ConnectToProcess(ctx, pid uint32) (*CommandHandle, error)` | Reconnect to a running process, subscribe to output | + +### `RunOpts` Fields + +```go +type RunOpts struct { +Envs map[string]string // Process environment variables +Cwd string // Working directory +Stdin bool // Allow writing via SendStdin +Background bool // Background execution (reserved) +OnStdout func (string) // Streaming stdout callback (foreground) +OnStderr func (string) // Streaming stderr callback (foreground) +} +``` + +> Commands are executed via `/bin/bash -l -c `, preserving the login environment. + +### `CommandHandle` + +Returned by `Start` / `ConnectToProcess` for interaction or waiting: + +| Method | Description | +|----------------------------------------------------|--------------------------------------------------------------| +| `Pid() uint32` | Returns the process PID | +| `Wait(onStdout, onStderr) (*CommandResult, error)` | Block until exit; non-zero exit includes `*CommandExitError` | +| `Disconnect()` | Disconnect subscription but **do not kill** process | +| `Kill() bool` | Kill the process | + +### `CommandResult` / `CommandExitError` + +```go +type CommandResult struct { +Stdout string +Stderr string +ExitCode int32 +Error string +} + +// Returned when exit code is non-zero (alongside *CommandResult) +type CommandExitError struct { +Stdout, Stderr string +ExitCode int32 +ErrorMessage string +} +``` + +### Examples + +```go +// Foreground execution + streaming output +res, err := sb.Commands.Run(ctx, "ls -la /tmp", e2b.RunOpts{ +Cwd: "/tmp", +Envs: map[string]string{"LANG": "C"}, +OnStdout: func (line string) { fmt.Print(line) }, +}) + +// Background start + manual Kill +h, _ := sb.Commands.Start(ctx, "sleep 60") +fmt.Println("pid =", h.Pid()) +h.Kill() +``` + +--- + +## Filesystem + +Operate in-container files via `sb.Files`. Metadata operations use envd Filesystem gRPC; file content read/write uses +the HTTP `/files` endpoint. + +### Methods + +| Method | Description | +|---------------------------------------------------------------------|--------------------------------------------------------------| +| `List(ctx, path, depth...) ([]EntryInfo, error)` | List directory entries; `depth` defaults to 1 | +| `Exists(ctx, path) (bool, error)` | Check if path exists (via `Stat`, 404 → false) | +| `GetInfo(ctx, path) (*EntryInfo, error)` | Get file/directory info | +| `MakeDir(ctx, path) (bool, error)` | Recursively create directory; returns `false, nil` if exists | +| `Rename(ctx, oldPath, newPath) (*EntryInfo, error)` | Rename / move | +| `Remove(ctx, path) error` | Delete file or directory | +| `Read(ctx, path, user...) ([]byte, error)` | Read file content (binary); `user` defaults to `"node"` | +| `ReadText(ctx, path, user...) (string, error)` | Read file content (text) | +| `Write(ctx, path, data []byte, user...) (*WriteInfo, error)` | Write file content (binary); auto-creates parent dirs | +| `WriteText(ctx, path, content string, user...) (*WriteInfo, error)` | Write file content (text) | + +### Examples + +```go +// Directory operations +sb.Files.MakeDir(ctx, "/tmp/work") + +entries, _ := sb.Files.List(ctx, "/tmp") +for _, e := range entries { +fmt.Printf("%s %s (%d bytes)\n", e.Type, e.Name, e.Size) +} + +sb.Files.Rename(ctx, "/tmp/work", "/tmp/done") +sb.Files.Remove(ctx, "/tmp/done") + +// File content read/write +sb.Files.WriteText(ctx, "/tmp/hello.txt", "Hello, World!") +content, _ := sb.Files.ReadText(ctx, "/tmp/hello.txt") +fmt.Println(content) // Hello, World! +``` diff --git a/e2b/README_zh-CH.md b/e2b/README_zh-CH.md new file mode 100644 index 0000000..ba89590 --- /dev/null +++ b/e2b/README_zh-CH.md @@ -0,0 +1,315 @@ +# E2B Go SDK(e2b 管理客户端) + +## 依赖导入 + +在你的 `go.mod` 中引入 `agents-api` 依赖:[版本查看](https://github.com/openkruise/agents-api/releases) + +``` +require github.com/openkruise/agents-api +``` + +| 包 | 导入路径 | 定位 | +|---------|----------------------------------------|-------------------------------------------------------------------------------------------------------| +| **e2b** | `github.com/openkruise/agents-api/e2b` | **管理客户端(Management Client)**:Sandbox 生命周期管理(Create / Connect / Pause / Kill)+ 容器内操作(Commands / Files) | + +--- + +## 包结构 + +``` +e2b/ +├── api/ # OpenAPI 生成的 REST 客户端(sandbox 管理) +├── sandbox.go # Sandbox 结构体:Create / Connect / Pause / Kill +├── sandbox_api.go # 底层 REST 客户端(SandboxApi):List / GetInfo / Kill / ... +└── config.go # ConnectionConfig:Protocol / Scheme / Domain / API URL +``` + +--- + +## 快速开始 + +```go +package main + +import ( + "context" + "fmt" + "github.com/openkruise/agents-api/e2b" + "log" +) + +func main() { + ctx := context.Background() + + sb, err := e2b.Create(ctx, "code-interpreter", + e2b.WithConfig( + e2b.WithAPIKey("your-api-key"), + e2b.WithDomain("your.domain.com"), + ), + ) + if err != nil { + log.Fatal(err) + } + defer sb.Close(ctx) + + res, _ := sb.Commands.Run(ctx, "echo hello") + fmt.Println(res.Stdout) + + sb.Files.MakeDir(ctx, "/tmp/demo") +} +``` + +完整的演示可参考:[管理客户端示例](https://github.com/openkruise/agents-api/blob/master/examples/e2b-example/main.go) + +--- + +## 连接配置 + +### Scheme 与 Protocol + +连接行为通过 `ConnectionConfig` 控制,由 **Scheme** 和 **Protocol** 两个正交维度决定 URL 形态。 + +#### Protocol(路由协议) + +| 值 | 常量 | API URL | Sandbox URL | +|----------------|-----------------------|----------------------------------|-------------------------------------------------| +| **Native(默认)** | `e2b.ProtocolNative` | `https://api.` | `https://-.` | +| **Private** | `e2b.ProtocolPrivate` | `:///kruise/api` | `:///kruise//` | + +- **Native**:基于子域名路由,对应原生公网部署 +- **Private**:基于路径前缀(`/kruise/...`)通过统一网关路由,适用于私有化或本地端口转发场景 + +#### Scheme(协议头) + +| 值 | 适用场景 | +|-------------------|-------------------| +| **`"https"`(默认)** | 生产环境 / 公网 | +| **`"http"`** | 本地端口转发、内网无 TLS 调试 | + +#### ConnectionConfigOption 列表 + +通过 `e2b.NewConnectionConfig(opts...)` 或在 `Create/Connect` 中嵌入 `WithConfig(...)` 应用: + +| 选项 | 说明 | +|---------------------------------------|---------------------------------------------------| +| `WithAPIKey(key string)` | API Key,写入请求头 `X-API-Key` | +| `WithDomain(domain string)` | 域名,默认 `your.domain.com` | +| `WithScheme(scheme string)` | URL scheme,默认 `https` | +| `WithProtocol(p Protocol)` | 路由协议,默认 `ProtocolNative` | +| `WithAPIURL(url string)` | **最高优先级**:直接覆盖 API base URL,绕过 Protocol/Domain 拼装 | +| `WithSandboxBaseURL(url string)` | **最高优先级**:直接覆盖 sandbox envd base URL | +| `WithRequestTimeout(d time.Duration)` | HTTP 请求超时,默认 60s | + +#### 优先级 + +`WithAPIURL` / `WithSandboxBaseURL`(显式覆盖) > `WithProtocol` + `WithDomain` 拼装 > 环境变量 > 默认值 + +--- + +## 创建 / 连接 Sandbox + +### `Create(ctx, template, opts...) (*Sandbox, error)` + +从一个模板创建新 sandbox。`template` 为空时默认 `"code-interpreter"`。 + +```go +package main + +import ( + "github.com/openkruise/agents-api/e2b" +) + +func main() { + sb, err := e2b.Create(ctx, "code-interpreter", + e2b.WithConfig( + e2b.WithAPIKey("xxx"), + e2b.WithDomain("example.com"), + e2b.WithProtocol(e2b.ProtocolPrivate), + ), + e2b.WithTimeout(600), + e2b.WithMetadata(map[string]string{"k": "v"}), + e2b.WithEnvVars(map[string]string{"FOO": "1"}), + e2b.WithAutoPause(true), + e2b.WithSecure(true), + ) +} +``` + +### `Connect(ctx, sandboxID, opts...) (*Sandbox, error)` + +连接到已存在 sandbox。 + +```go +sb, err := e2b.Connect(ctx, "default--xxx-xxx", +e2b.WithConfig(e2b.WithAPIKey("xxx"), e2b.WithDomain("example.com")), +) +``` + +### SandboxOption 列表 + +| 选项 | 说明 | +|------------------------------|-------------------------------| +| `WithConfig(opts...)` | 内嵌一组 `ConnectionConfigOption` | +| `WithTimeout(seconds int32)` | sandbox 存活超时,默认 300 秒 | +| `WithMetadata(map)` | sandbox 元数据 | +| `WithEnvVars(map)` | 注入 sandbox 的环境变量 | +| `WithAutoPause(bool)` | 是否启用自动暂停 | +| `WithSecure(bool)` | 启用安全模式 | + +### Sandbox 实例方法 + +| 方法 | 说明 | +|----------------------------------------|--------------------------| +| `SandboxID() string` | 返回 sandbox ID | +| `TemplateID() string` | 返回模板 ID | +| `GetInfo(ctx) (*SandboxInfo, error)` | 获取 sandbox 详情 | +| `SetTimeout(ctx, timeout int32) error` | 修改超时时间 | +| `Pause(ctx) (string, error)` | 暂停 | +| `Kill(ctx) (bool, error)` | 销毁 | +| `Close(ctx) error` | `Kill` 的别名,方便 `defer` 使用 | + +`Sandbox` 暴露两个子模块: + +- `sb.Commands` — 命令执行(`*Commands`) +- `sb.Files` — 文件系统(`*Filesystem`) + +--- + +## Sandbox 管理 API(SandboxApi) + +`SandboxApi` 是底层 REST 客户端,可在不创建具体 Sandbox 实例时单独使用(例如列出所有 sandbox)。 + +```go +api := e2b.NewSandboxApi(e2b.NewConnectionConfig( +e2b.WithAPIKey("xxx"), +e2b.WithDomain("example.com"), +)) +``` + +| 方法 | 说明 | +|------------------------------------------------------------------------------|-------------------------------------| +| `List(ctx) ([]SandboxInfo, error)` | 列出所有运行中的 sandbox | +| `GetInfo(ctx, sandboxID) (*SandboxInfo, error)` | 获取 sandbox 详情,404 返回 `not found` 错误 | +| `Kill(ctx, sandboxID) (bool, error)` | 销毁 sandbox;`Debug` 模式下直接返回 `true` | +| `SetTimeout(ctx, sandboxID, timeout int32) error` | 修改超时时间 | +| `CreateSandbox(ctx, opts CreateSandboxOpts) (*SandboxCreateResponse, error)` | 底层创建接口 | +| `ConnectSandbox(ctx, sandboxID, timeout int32) (*client.Sandbox, error)` | 底层连接接口 | +| `Pause(ctx, sandboxID) (string, error)` | 暂停 sandbox | + +--- + +## 命令执行(Commands) + +通过 `sb.Commands` 操作容器内进程。底层走 envd 的 `Process` gRPC 服务。 + +### 方法 + +| 方法 | 说明 | +|-------------------------------------------------------------|----------------------------------------------| +| `Run(ctx, cmd, opts...) (*CommandResult, error)` | **前台执行**:启动命令并等待完成,返回 stdout/stderr/exitCode | +| `Start(ctx, cmd, opts...) (*CommandHandle, error)` | **后台启动**:返回 handle,调用方决定何时 `Wait` | +| `List(ctx) ([]ProcessInfo, error)` | 列出所有运行中的进程 | +| `Kill(ctx, pid uint32) (bool, error)` | 向指定 PID 发送 SIGKILL;进程已不存在返回 `false, nil` | +| `SendStdin(ctx, pid uint32, data string) error` | 向指定进程的 stdin 写入数据 | +| `ConnectToProcess(ctx, pid uint32) (*CommandHandle, error)` | 重新连接到一个已运行的进程,订阅其后续输出 | + +### `RunOpts` 字段 + +```go +type RunOpts struct { +Envs map[string]string // 进程环境变量 +Cwd string // 工作目录 +Stdin bool // 是否允许通过 SendStdin 写入 +Background bool // 后台执行(保留字段) +OnStdout func (string) // 流式 stdout 回调(前台执行) +OnStderr func (string) // 流式 stderr 回调(前台执行) +} +``` + +> 命令统一通过 `/bin/bash -l -c ` 执行,保留登录环境。 + +### `CommandHandle` + +由 `Start` / `ConnectToProcess` 返回,用于交互或等待: + +| 方法 | 说明 | +|----------------------------------------------------|---------------------------------------| +| `Pid() uint32` | 返回进程 PID | +| `Wait(onStdout, onStderr) (*CommandResult, error)` | 阻塞等待结束;非 0 退出码会附带 `*CommandExitError` | +| `Disconnect()` | 断开订阅但**不杀进程** | +| `Kill() bool` | 杀掉进程 | + +### `CommandResult` / `CommandExitError` + +```go +type CommandResult struct { +Stdout string +Stderr string +ExitCode int32 +Error string +} + +// 退出码非 0 时返回此错误(同时返回 *CommandResult) +type CommandExitError struct { +Stdout, Stderr string +ExitCode int32 +ErrorMessage string +} +``` + +### 示例 + +```go +// 前台执行 + 流式输出 +res, err := sb.Commands.Run(ctx, "ls -la /tmp", runtime.RunOpts{ +Cwd: "/tmp", +Envs: map[string]string{"LANG": "C"}, +OnStdout: func (line string) { fmt.Print(line) }, +}) + +// 后台启动 + 主动 Kill +h, _ := sb.Commands.Start(ctx, "sleep 60") +fmt.Println("pid =", h.Pid()) +h.Kill() +``` + +--- + +## 文件系统(Filesystem) + +通过 `sb.Files` 操作容器内文件。元数据操作走 envd Filesystem gRPC,文件内容读写走 HTTP `/files` 端点。 + +### 方法 + +| 方法 | 说明 | +|---------------------------------------------------------------------|--------------------------------| +| `List(ctx, path, depth...) ([]EntryInfo, error)` | 列出目录条目;`depth` 默认 1 | +| `Exists(ctx, path) (bool, error)` | 路径是否存在(基于 `Stat`,404 返回 false) | +| `GetInfo(ctx, path) (*EntryInfo, error)` | 获取文件 / 目录信息 | +| `MakeDir(ctx, path) (bool, error)` | 递归创建目录;已存在返回 `false, nil` | +| `Rename(ctx, oldPath, newPath) (*EntryInfo, error)` | 重命名 / 移动 | +| `Remove(ctx, path) error` | 删除文件或目录 | +| `Read(ctx, path, user...) ([]byte, error)` | 读取文件内容(二进制);`user` 默认 `"node"` | +| `ReadText(ctx, path, user...) (string, error)` | 读取文件内容(文本) | +| `Write(ctx, path, data []byte, user...) (*WriteInfo, error)` | 写入文件内容(二进制);自动创建父目录 | +| `WriteText(ctx, path, content string, user...) (*WriteInfo, error)` | 写入文件内容(文本) | + +### 示例 + +```go +// 目录操作 +sb.Files.MakeDir(ctx, "/tmp/work") + +entries, _ := sb.Files.List(ctx, "/tmp") +for _, e := range entries { +fmt.Printf("%s %s (%d bytes)\n", e.Type, e.Name, e.Size) +} + +sb.Files.Rename(ctx, "/tmp/work", "/tmp/done") +sb.Files.Remove(ctx, "/tmp/done") + +// 文件内容读写 +sb.Files.WriteText(ctx, "/tmp/hello.txt", "Hello, World!") +content, _ := sb.Files.ReadText(ctx, "/tmp/hello.txt") +fmt.Println(content) // Hello, World! +``` diff --git a/sdk/proto/api/api_access_tokens.go b/e2b/api/api_access_tokens.go similarity index 100% rename from sdk/proto/api/api_access_tokens.go rename to e2b/api/api_access_tokens.go diff --git a/sdk/proto/api/api_admin.go b/e2b/api/api_admin.go similarity index 100% rename from sdk/proto/api/api_admin.go rename to e2b/api/api_admin.go diff --git a/sdk/proto/api/api_api_keys.go b/e2b/api/api_api_keys.go similarity index 100% rename from sdk/proto/api/api_api_keys.go rename to e2b/api/api_api_keys.go diff --git a/sdk/proto/api/api_auth.go b/e2b/api/api_auth.go similarity index 100% rename from sdk/proto/api/api_auth.go rename to e2b/api/api_auth.go diff --git a/sdk/proto/api/api_default.go b/e2b/api/api_default.go similarity index 100% rename from sdk/proto/api/api_default.go rename to e2b/api/api_default.go diff --git a/sdk/proto/api/api_sandboxes.go b/e2b/api/api_sandboxes.go similarity index 100% rename from sdk/proto/api/api_sandboxes.go rename to e2b/api/api_sandboxes.go diff --git a/sdk/proto/api/api_snapshots.go b/e2b/api/api_snapshots.go similarity index 100% rename from sdk/proto/api/api_snapshots.go rename to e2b/api/api_snapshots.go diff --git a/sdk/proto/api/api_tags.go b/e2b/api/api_tags.go similarity index 100% rename from sdk/proto/api/api_tags.go rename to e2b/api/api_tags.go diff --git a/sdk/proto/api/api_templates.go b/e2b/api/api_templates.go similarity index 100% rename from sdk/proto/api/api_templates.go rename to e2b/api/api_templates.go diff --git a/sdk/proto/api/api_volumes.go b/e2b/api/api_volumes.go similarity index 100% rename from sdk/proto/api/api_volumes.go rename to e2b/api/api_volumes.go diff --git a/sdk/proto/api/client.go b/e2b/api/client.go similarity index 100% rename from sdk/proto/api/client.go rename to e2b/api/client.go diff --git a/sdk/proto/api/configuration.go b/e2b/api/configuration.go similarity index 100% rename from sdk/proto/api/configuration.go rename to e2b/api/configuration.go diff --git a/sdk/proto/api/model__nodes_get_200_response_inner.go b/e2b/api/model__nodes_get_200_response_inner.go similarity index 100% rename from sdk/proto/api/model__nodes_get_200_response_inner.go rename to e2b/api/model__nodes_get_200_response_inner.go diff --git a/sdk/proto/api/model__sandboxes__sandbox_id__refreshes_post_request.go b/e2b/api/model__sandboxes__sandbox_id__refreshes_post_request.go similarity index 100% rename from sdk/proto/api/model__sandboxes__sandbox_id__refreshes_post_request.go rename to e2b/api/model__sandboxes__sandbox_id__refreshes_post_request.go diff --git a/sdk/proto/api/model__sandboxes__sandbox_id__snapshots_post_request.go b/e2b/api/model__sandboxes__sandbox_id__snapshots_post_request.go similarity index 100% rename from sdk/proto/api/model__sandboxes__sandbox_id__snapshots_post_request.go rename to e2b/api/model__sandboxes__sandbox_id__snapshots_post_request.go diff --git a/sdk/proto/api/model__sandboxes__sandbox_id__timeout_post_request.go b/e2b/api/model__sandboxes__sandbox_id__timeout_post_request.go similarity index 100% rename from sdk/proto/api/model__sandboxes__sandbox_id__timeout_post_request.go rename to e2b/api/model__sandboxes__sandbox_id__timeout_post_request.go diff --git a/sdk/proto/api/model__sandboxes_get_200_response_inner.go b/e2b/api/model__sandboxes_get_200_response_inner.go similarity index 100% rename from sdk/proto/api/model__sandboxes_get_200_response_inner.go rename to e2b/api/model__sandboxes_get_200_response_inner.go diff --git a/sdk/proto/api/model__teams_get_200_response_inner.go b/e2b/api/model__teams_get_200_response_inner.go similarity index 100% rename from sdk/proto/api/model__teams_get_200_response_inner.go rename to e2b/api/model__teams_get_200_response_inner.go diff --git a/sdk/proto/api/model__templates_get_200_response_inner.go b/e2b/api/model__templates_get_200_response_inner.go similarity index 100% rename from sdk/proto/api/model__templates_get_200_response_inner.go rename to e2b/api/model__templates_get_200_response_inner.go diff --git a/sdk/proto/api/model_admin_sandbox_kill_result.go b/e2b/api/model_admin_sandbox_kill_result.go similarity index 100% rename from sdk/proto/api/model_admin_sandbox_kill_result.go rename to e2b/api/model_admin_sandbox_kill_result.go diff --git a/sdk/proto/api/model_assign_template_tags_request.go b/e2b/api/model_assign_template_tags_request.go similarity index 100% rename from sdk/proto/api/model_assign_template_tags_request.go rename to e2b/api/model_assign_template_tags_request.go diff --git a/sdk/proto/api/model_assigned_template_tags.go b/e2b/api/model_assigned_template_tags.go similarity index 100% rename from sdk/proto/api/model_assigned_template_tags.go rename to e2b/api/model_assigned_template_tags.go diff --git a/sdk/proto/api/model_aws_registry.go b/e2b/api/model_aws_registry.go similarity index 100% rename from sdk/proto/api/model_aws_registry.go rename to e2b/api/model_aws_registry.go diff --git a/sdk/proto/api/model_build_log_entry.go b/e2b/api/model_build_log_entry.go similarity index 100% rename from sdk/proto/api/model_build_log_entry.go rename to e2b/api/model_build_log_entry.go diff --git a/sdk/proto/api/model_build_status_reason.go b/e2b/api/model_build_status_reason.go similarity index 100% rename from sdk/proto/api/model_build_status_reason.go rename to e2b/api/model_build_status_reason.go diff --git a/sdk/proto/api/model_connect_sandbox.go b/e2b/api/model_connect_sandbox.go similarity index 100% rename from sdk/proto/api/model_connect_sandbox.go rename to e2b/api/model_connect_sandbox.go diff --git a/sdk/proto/api/model_create_sandbox_request.go b/e2b/api/model_create_sandbox_request.go similarity index 100% rename from sdk/proto/api/model_create_sandbox_request.go rename to e2b/api/model_create_sandbox_request.go diff --git a/sdk/proto/api/model_create_team_api_key_request.go b/e2b/api/model_create_team_api_key_request.go similarity index 100% rename from sdk/proto/api/model_create_team_api_key_request.go rename to e2b/api/model_create_team_api_key_request.go diff --git a/sdk/proto/api/model_create_volume_request.go b/e2b/api/model_create_volume_request.go similarity index 100% rename from sdk/proto/api/model_create_volume_request.go rename to e2b/api/model_create_volume_request.go diff --git a/sdk/proto/api/model_created_access_token.go b/e2b/api/model_created_access_token.go similarity index 100% rename from sdk/proto/api/model_created_access_token.go rename to e2b/api/model_created_access_token.go diff --git a/sdk/proto/api/model_created_team_api_key.go b/e2b/api/model_created_team_api_key.go similarity index 100% rename from sdk/proto/api/model_created_team_api_key.go rename to e2b/api/model_created_team_api_key.go diff --git a/sdk/proto/api/model_delete_template_tags_request.go b/e2b/api/model_delete_template_tags_request.go similarity index 100% rename from sdk/proto/api/model_delete_template_tags_request.go rename to e2b/api/model_delete_template_tags_request.go diff --git a/sdk/proto/api/model_disk_metrics.go b/e2b/api/model_disk_metrics.go similarity index 100% rename from sdk/proto/api/model_disk_metrics.go rename to e2b/api/model_disk_metrics.go diff --git a/sdk/proto/api/model_error.go b/e2b/api/model_error.go similarity index 100% rename from sdk/proto/api/model_error.go rename to e2b/api/model_error.go diff --git a/sdk/proto/api/model_from_image_registry.go b/e2b/api/model_from_image_registry.go similarity index 100% rename from sdk/proto/api/model_from_image_registry.go rename to e2b/api/model_from_image_registry.go diff --git a/sdk/proto/api/model_gcp_registry.go b/e2b/api/model_gcp_registry.go similarity index 100% rename from sdk/proto/api/model_gcp_registry.go rename to e2b/api/model_gcp_registry.go diff --git a/sdk/proto/api/model_general_registry.go b/e2b/api/model_general_registry.go similarity index 100% rename from sdk/proto/api/model_general_registry.go rename to e2b/api/model_general_registry.go diff --git a/sdk/proto/api/model_identifier_masking_details.go b/e2b/api/model_identifier_masking_details.go similarity index 100% rename from sdk/proto/api/model_identifier_masking_details.go rename to e2b/api/model_identifier_masking_details.go diff --git a/sdk/proto/api/model_listed_sandbox.go b/e2b/api/model_listed_sandbox.go similarity index 100% rename from sdk/proto/api/model_listed_sandbox.go rename to e2b/api/model_listed_sandbox.go diff --git a/sdk/proto/api/model_log_level.go b/e2b/api/model_log_level.go similarity index 100% rename from sdk/proto/api/model_log_level.go rename to e2b/api/model_log_level.go diff --git a/sdk/proto/api/model_logs_direction.go b/e2b/api/model_logs_direction.go similarity index 100% rename from sdk/proto/api/model_logs_direction.go rename to e2b/api/model_logs_direction.go diff --git a/sdk/proto/api/model_logs_source.go b/e2b/api/model_logs_source.go similarity index 100% rename from sdk/proto/api/model_logs_source.go rename to e2b/api/model_logs_source.go diff --git a/sdk/proto/api/model_machine_info.go b/e2b/api/model_machine_info.go similarity index 100% rename from sdk/proto/api/model_machine_info.go rename to e2b/api/model_machine_info.go diff --git a/sdk/proto/api/model_max_team_metric.go b/e2b/api/model_max_team_metric.go similarity index 100% rename from sdk/proto/api/model_max_team_metric.go rename to e2b/api/model_max_team_metric.go diff --git a/sdk/proto/api/model_new_access_token.go b/e2b/api/model_new_access_token.go similarity index 100% rename from sdk/proto/api/model_new_access_token.go rename to e2b/api/model_new_access_token.go diff --git a/sdk/proto/api/model_node.go b/e2b/api/model_node.go similarity index 100% rename from sdk/proto/api/model_node.go rename to e2b/api/model_node.go diff --git a/sdk/proto/api/model_node_detail.go b/e2b/api/model_node_detail.go similarity index 100% rename from sdk/proto/api/model_node_detail.go rename to e2b/api/model_node_detail.go diff --git a/sdk/proto/api/model_node_metrics.go b/e2b/api/model_node_metrics.go similarity index 100% rename from sdk/proto/api/model_node_metrics.go rename to e2b/api/model_node_metrics.go diff --git a/sdk/proto/api/model_node_status.go b/e2b/api/model_node_status.go similarity index 100% rename from sdk/proto/api/model_node_status.go rename to e2b/api/model_node_status.go diff --git a/sdk/proto/api/model_node_status_change.go b/e2b/api/model_node_status_change.go similarity index 100% rename from sdk/proto/api/model_node_status_change.go rename to e2b/api/model_node_status_change.go diff --git a/sdk/proto/api/model_resumed_sandbox.go b/e2b/api/model_resumed_sandbox.go similarity index 100% rename from sdk/proto/api/model_resumed_sandbox.go rename to e2b/api/model_resumed_sandbox.go diff --git a/sdk/proto/api/model_sandbox.go b/e2b/api/model_sandbox.go similarity index 100% rename from sdk/proto/api/model_sandbox.go rename to e2b/api/model_sandbox.go diff --git a/sdk/proto/api/model_sandbox_auto_resume_config.go b/e2b/api/model_sandbox_auto_resume_config.go similarity index 100% rename from sdk/proto/api/model_sandbox_auto_resume_config.go rename to e2b/api/model_sandbox_auto_resume_config.go diff --git a/sdk/proto/api/model_sandbox_detail.go b/e2b/api/model_sandbox_detail.go similarity index 100% rename from sdk/proto/api/model_sandbox_detail.go rename to e2b/api/model_sandbox_detail.go diff --git a/sdk/proto/api/model_sandbox_log.go b/e2b/api/model_sandbox_log.go similarity index 100% rename from sdk/proto/api/model_sandbox_log.go rename to e2b/api/model_sandbox_log.go diff --git a/sdk/proto/api/model_sandbox_log_entry.go b/e2b/api/model_sandbox_log_entry.go similarity index 100% rename from sdk/proto/api/model_sandbox_log_entry.go rename to e2b/api/model_sandbox_log_entry.go diff --git a/sdk/proto/api/model_sandbox_logs.go b/e2b/api/model_sandbox_logs.go similarity index 100% rename from sdk/proto/api/model_sandbox_logs.go rename to e2b/api/model_sandbox_logs.go diff --git a/sdk/proto/api/model_sandbox_logs_v2_response.go b/e2b/api/model_sandbox_logs_v2_response.go similarity index 100% rename from sdk/proto/api/model_sandbox_logs_v2_response.go rename to e2b/api/model_sandbox_logs_v2_response.go diff --git a/sdk/proto/api/model_sandbox_metric.go b/e2b/api/model_sandbox_metric.go similarity index 100% rename from sdk/proto/api/model_sandbox_metric.go rename to e2b/api/model_sandbox_metric.go diff --git a/sdk/proto/api/model_sandbox_network_config.go b/e2b/api/model_sandbox_network_config.go similarity index 100% rename from sdk/proto/api/model_sandbox_network_config.go rename to e2b/api/model_sandbox_network_config.go diff --git a/sdk/proto/api/model_sandbox_state.go b/e2b/api/model_sandbox_state.go similarity index 100% rename from sdk/proto/api/model_sandbox_state.go rename to e2b/api/model_sandbox_state.go diff --git a/sdk/proto/api/model_sandbox_volume_mount.go b/e2b/api/model_sandbox_volume_mount.go similarity index 100% rename from sdk/proto/api/model_sandbox_volume_mount.go rename to e2b/api/model_sandbox_volume_mount.go diff --git a/sdk/proto/api/model_sandboxes_with_metrics.go b/e2b/api/model_sandboxes_with_metrics.go similarity index 100% rename from sdk/proto/api/model_sandboxes_with_metrics.go rename to e2b/api/model_sandboxes_with_metrics.go diff --git a/sdk/proto/api/model_snapshot_info.go b/e2b/api/model_snapshot_info.go similarity index 100% rename from sdk/proto/api/model_snapshot_info.go rename to e2b/api/model_snapshot_info.go diff --git a/sdk/proto/api/model_team.go b/e2b/api/model_team.go similarity index 100% rename from sdk/proto/api/model_team.go rename to e2b/api/model_team.go diff --git a/sdk/proto/api/model_team_api_key.go b/e2b/api/model_team_api_key.go similarity index 100% rename from sdk/proto/api/model_team_api_key.go rename to e2b/api/model_team_api_key.go diff --git a/sdk/proto/api/model_team_metric.go b/e2b/api/model_team_metric.go similarity index 100% rename from sdk/proto/api/model_team_metric.go rename to e2b/api/model_team_metric.go diff --git a/sdk/proto/api/model_team_user.go b/e2b/api/model_team_user.go similarity index 100% rename from sdk/proto/api/model_team_user.go rename to e2b/api/model_team_user.go diff --git a/sdk/proto/api/model_template.go b/e2b/api/model_template.go similarity index 100% rename from sdk/proto/api/model_template.go rename to e2b/api/model_template.go diff --git a/sdk/proto/api/model_template_alias_response.go b/e2b/api/model_template_alias_response.go similarity index 100% rename from sdk/proto/api/model_template_alias_response.go rename to e2b/api/model_template_alias_response.go diff --git a/sdk/proto/api/model_template_build.go b/e2b/api/model_template_build.go similarity index 100% rename from sdk/proto/api/model_template_build.go rename to e2b/api/model_template_build.go diff --git a/sdk/proto/api/model_template_build_file_upload.go b/e2b/api/model_template_build_file_upload.go similarity index 100% rename from sdk/proto/api/model_template_build_file_upload.go rename to e2b/api/model_template_build_file_upload.go diff --git a/sdk/proto/api/model_template_build_info.go b/e2b/api/model_template_build_info.go similarity index 100% rename from sdk/proto/api/model_template_build_info.go rename to e2b/api/model_template_build_info.go diff --git a/sdk/proto/api/model_template_build_logs_response.go b/e2b/api/model_template_build_logs_response.go similarity index 100% rename from sdk/proto/api/model_template_build_logs_response.go rename to e2b/api/model_template_build_logs_response.go diff --git a/sdk/proto/api/model_template_build_request.go b/e2b/api/model_template_build_request.go similarity index 100% rename from sdk/proto/api/model_template_build_request.go rename to e2b/api/model_template_build_request.go diff --git a/sdk/proto/api/model_template_build_request_v2.go b/e2b/api/model_template_build_request_v2.go similarity index 100% rename from sdk/proto/api/model_template_build_request_v2.go rename to e2b/api/model_template_build_request_v2.go diff --git a/sdk/proto/api/model_template_build_request_v3.go b/e2b/api/model_template_build_request_v3.go similarity index 100% rename from sdk/proto/api/model_template_build_request_v3.go rename to e2b/api/model_template_build_request_v3.go diff --git a/sdk/proto/api/model_template_build_start_v2.go b/e2b/api/model_template_build_start_v2.go similarity index 100% rename from sdk/proto/api/model_template_build_start_v2.go rename to e2b/api/model_template_build_start_v2.go diff --git a/sdk/proto/api/model_template_build_status.go b/e2b/api/model_template_build_status.go similarity index 100% rename from sdk/proto/api/model_template_build_status.go rename to e2b/api/model_template_build_status.go diff --git a/sdk/proto/api/model_template_legacy.go b/e2b/api/model_template_legacy.go similarity index 100% rename from sdk/proto/api/model_template_legacy.go rename to e2b/api/model_template_legacy.go diff --git a/sdk/proto/api/model_template_request_response_v3.go b/e2b/api/model_template_request_response_v3.go similarity index 100% rename from sdk/proto/api/model_template_request_response_v3.go rename to e2b/api/model_template_request_response_v3.go diff --git a/sdk/proto/api/model_template_step.go b/e2b/api/model_template_step.go similarity index 100% rename from sdk/proto/api/model_template_step.go rename to e2b/api/model_template_step.go diff --git a/sdk/proto/api/model_template_tag.go b/e2b/api/model_template_tag.go similarity index 100% rename from sdk/proto/api/model_template_tag.go rename to e2b/api/model_template_tag.go diff --git a/sdk/proto/api/model_template_update_request.go b/e2b/api/model_template_update_request.go similarity index 100% rename from sdk/proto/api/model_template_update_request.go rename to e2b/api/model_template_update_request.go diff --git a/sdk/proto/api/model_template_update_response.go b/e2b/api/model_template_update_response.go similarity index 100% rename from sdk/proto/api/model_template_update_response.go rename to e2b/api/model_template_update_response.go diff --git a/sdk/proto/api/model_template_with_builds.go b/e2b/api/model_template_with_builds.go similarity index 100% rename from sdk/proto/api/model_template_with_builds.go rename to e2b/api/model_template_with_builds.go diff --git a/sdk/proto/api/model_update_team_api_key.go b/e2b/api/model_update_team_api_key.go similarity index 100% rename from sdk/proto/api/model_update_team_api_key.go rename to e2b/api/model_update_team_api_key.go diff --git a/sdk/proto/api/model_volume.go b/e2b/api/model_volume.go similarity index 100% rename from sdk/proto/api/model_volume.go rename to e2b/api/model_volume.go diff --git a/sdk/proto/api/response.go b/e2b/api/response.go similarity index 100% rename from sdk/proto/api/response.go rename to e2b/api/response.go diff --git a/sdk/proto/api/utils.go b/e2b/api/utils.go similarity index 100% rename from sdk/proto/api/utils.go rename to e2b/api/utils.go diff --git a/sdk/sandbox/config.go b/e2b/config.go similarity index 98% rename from sdk/sandbox/config.go rename to e2b/config.go index a6565a3..d2447d0 100644 --- a/sdk/sandbox/config.go +++ b/e2b/config.go @@ -1,4 +1,4 @@ -package sandbox +package e2b import ( "fmt" @@ -7,8 +7,8 @@ import ( "sync" "time" - "github.com/openkruise/agents-api/sdk/proto/api" - "github.com/openkruise/agents-api/sdk/runtime" + "github.com/openkruise/agents-api/e2b/api" + "github.com/openkruise/agents-api/runtime" ) // Protocol defines the URL routing protocol. diff --git a/sdk/sandbox/sandbox.go b/e2b/sandbox.go similarity index 98% rename from sdk/sandbox/sandbox.go rename to e2b/sandbox.go index 2de7fd6..e991ae4 100644 --- a/sdk/sandbox/sandbox.go +++ b/e2b/sandbox.go @@ -1,9 +1,10 @@ -package sandbox +package e2b import ( "context" "fmt" - "github.com/openkruise/agents-api/sdk/runtime" + + "github.com/openkruise/agents-api/runtime" ) // SandboxOption configures sandbox creation or connection behavior. diff --git a/sdk/sandbox/sandbox_api.go b/e2b/sandbox_api.go similarity index 99% rename from sdk/sandbox/sandbox_api.go rename to e2b/sandbox_api.go index 935392d..e796517 100644 --- a/sdk/sandbox/sandbox_api.go +++ b/e2b/sandbox_api.go @@ -1,4 +1,4 @@ -package sandbox +package e2b import ( "context" @@ -6,7 +6,7 @@ import ( "net/http" "time" - "github.com/openkruise/agents-api/sdk/proto/api" + "github.com/openkruise/agents-api/e2b/api" ) // SandboxInfo represents information about a sandbox. diff --git a/sdk/example/sandbox/main.go b/examples/e2b-example/main.go similarity index 98% rename from sdk/example/sandbox/main.go rename to examples/e2b-example/main.go index a03909a..45096b3 100644 --- a/sdk/example/sandbox/main.go +++ b/examples/e2b-example/main.go @@ -6,8 +6,8 @@ import ( "log" "time" - "github.com/openkruise/agents-api/sdk/runtime" - "github.com/openkruise/agents-api/sdk/sandbox" + sandbox "github.com/openkruise/agents-api/e2b" + "github.com/openkruise/agents-api/runtime" ) const ( diff --git a/sdk/example/runtime_client/main.go b/examples/runtime-example/main.go similarity index 99% rename from sdk/example/runtime_client/main.go rename to examples/runtime-example/main.go index e881cdc..09aabb6 100644 --- a/sdk/example/runtime_client/main.go +++ b/examples/runtime-example/main.go @@ -7,7 +7,7 @@ import ( "os" "time" - "github.com/openkruise/agents-api/sdk/runtime" + "github.com/openkruise/agents-api/runtime" ) const ( diff --git a/runtime/README.md b/runtime/README.md new file mode 100644 index 0000000..0b4de86 --- /dev/null +++ b/runtime/README.md @@ -0,0 +1,231 @@ +# Runtime Go SDK (Runtime Client) + +## Installation + +Add the `agents-api` dependency to your `go.mod`: [View Releases](https://github.com/openkruise/agents-api/releases) + +``` +require github.com/openkruise/agents-api +``` + +| Package | Import Path | Description | +|-------------|--------------------------------------------|------------------------------------------------------------------------------------------| +| **runtime** | `github.com/openkruise/agents-api/runtime` | **Runtime Client**: Directly operate the envd service inside a running sandbox container | + +--- + +## Package Structure + +``` +runtime/ +├── client.go # Client struct: New / NewWithConfig +├── k8s.go # NewFromK8s: auto-resolve sandboxID and runtimeToken from K8s +├── config.go # Config & Options: Domain / Scheme / RuntimeToken / ... +├── commands.go # Commands: Run / Start / Kill / SendStdin / List / ConnectToProcess +├── command_handle.go # CommandHandle: Wait / Disconnect / Kill +├── filesystem.go # Filesystem: List / Exists / GetInfo / MakeDir / Rename / Remove / Read / Write +└── envd/ # protobuf generated code + ├── process/ # envd Process gRPC + │ ├── process.pb.go + │ └── processconnect/ + └── filesystem/ # envd Filesystem gRPC + ├── filesystem.pb.go + └── filesystemconnect/ +``` + +--- + +## Quick Start + +When running in-cluster or with kubeconfig access, use `NewFromK8s` to automatically resolve `sandboxID` and +`runtimeToken` from the Sandbox CR: + +```go +package main + +import ( + "context" + "fmt" + + "github.com/openkruise/agents-api/runtime" +) + +func main() { + ctx := context.Background() + + // domain is the sandbox gateway address. + // In-cluster: use K8s Service DNS, e.g. "sandbox-gateway.sandbox-system.svc:7788" + // Local dev: use port-forward address, e.g. "127.0.0.1:7788" + domain := "sandbox-gateway.sandbox-system.svc:7788" + namespace := "default" + sandboxName := "your-sandbox-name" + c, err := runtime.NewFromK8s(ctx, namespace, sandboxName, + runtime.WithDomain(domain), + ) + if err != nil { + fmt.Printf("Error: %v\n", err) + return + } + + fmt.Printf("Runtime URL: %s\n", c.RuntimeURL()) + + res, _ := c.Commands.Run(ctx, "uname -a") + fmt.Println(res.Stdout) +} +``` + +**Key Notes:** + +- `NewFromK8s` queries the Sandbox CR and extracts `runtimeToken` from annotation + `agents.kruise.io/runtime-access-token` +- `sandboxID` format is `namespace--name` (double-dash separator) +- kubeconfig resolution order: `KUBECONFIG` env var → `~/.kube/config` → in-cluster config + +Full +example: [Runtime Client Example](https://github.com/openkruise/agents-api/blob/master/runtime/examples/runtime-example/main.go) + +--- + +## Connection Configuration + +The runtime client **does not involve Protocol** — only `Scheme` + `Domain` are needed to determine the envd address ( +`://`). + +### Option List + +| Option | Description | +|---------------------------------------|------------------------------------------------| +| `WithDomain(domain string)` | envd domain, defaults to `your.domain.com` | +| `WithScheme(scheme string)` | URL scheme, defaults to `http` | +| `WithRuntimeToken(token string)` | Runtime token, sent as `X-Access-Token` header | +| `WithRuntimePort(port int)` | Runtime port, defaults to `49983` | +| `WithAPIKey(apiKey string)` | Optional API Key | +| `WithAuthHeader(header string)` | Override default Authorization header | +| `WithSandboxBaseURL(url string)` | Completely override URL assembly | +| `WithHeader(key, value string)` | Add a single custom header | +| `WithHeaders(headers map)` | Merge multiple custom headers | +| `WithRequestTimeout(d time.Duration)` | HTTP timeout, defaults to 60s | +| `WithConfig(cfg *Config)` | Pass a pre-built Config to replace defaults | + +--- + +## Command Execution (Commands) + +Operate in-container processes via `c.Commands`. Uses the envd `Process` gRPC service under the hood. + +### Methods + +| Method | Description | +|-------------------------------------------------------------|-----------------------------------------------------------------------------| +| `Run(ctx, cmd, opts...) (*CommandResult, error)` | **Foreground**: run and wait for completion, returns stdout/stderr/exitCode | +| `Start(ctx, cmd, opts...) (*CommandHandle, error)` | **Background**: returns a handle, caller decides when to `Wait` | +| `List(ctx) ([]ProcessInfo, error)` | List all running processes | +| `Kill(ctx, pid uint32) (bool, error)` | Send SIGKILL to PID; returns `false, nil` if not found | +| `SendStdin(ctx, pid uint32, data string) error` | Write data to a process's stdin | +| `ConnectToProcess(ctx, pid uint32) (*CommandHandle, error)` | Reconnect to a running process, subscribe to output | + +### `RunOpts` Fields + +```go +type RunOpts struct { +Envs map[string]string // Process environment variables +Cwd string // Working directory +Stdin bool // Allow writing via SendStdin +Background bool // Background execution (reserved) +OnStdout func (string) // Streaming stdout callback (foreground) +OnStderr func (string) // Streaming stderr callback (foreground) +} +``` + +> Commands are executed via `/bin/bash -l -c `, preserving the login environment. + +### `CommandHandle` + +Returned by `Start` / `ConnectToProcess` for interaction or waiting: + +| Method | Description | +|----------------------------------------------------|--------------------------------------------------------------| +| `Pid() uint32` | Returns the process PID | +| `Wait(onStdout, onStderr) (*CommandResult, error)` | Block until exit; non-zero exit includes `*CommandExitError` | +| `Disconnect()` | Disconnect subscription but **do not kill** process | +| `Kill() bool` | Kill the process | + +### `CommandResult` / `CommandExitError` + +```go +type CommandResult struct { +Stdout string +Stderr string +ExitCode int32 +Error string +} + +// Returned when exit code is non-zero (alongside *CommandResult) +type CommandExitError struct { +Stdout, Stderr string +ExitCode int32 +ErrorMessage string +} +``` + +### Examples + +```go +// Foreground execution + streaming output +res, err := c.Commands.Run(ctx, "ls -la /tmp", runtime.RunOpts{ +Cwd: "/tmp", +Envs: map[string]string{"LANG": "C"}, +OnStdout: func (line string) { fmt.Print(line) }, +}) + +// Background start + manual Kill +h, _ := c.Commands.Start(ctx, "sleep 60") +fmt.Println("pid =", h.Pid()) +h.Kill() +``` + +--- + +## Filesystem + +Operate in-container files via `c.Files`. Metadata operations use envd Filesystem gRPC; file content read/write uses +the HTTP `/files` endpoint. + +### Methods + +| Method | Description | +|---------------------------------------------------------------------|--------------------------------------------------------------| +| `List(ctx, path, depth...) ([]EntryInfo, error)` | List directory entries; `depth` defaults to 1 | +| `Exists(ctx, path) (bool, error)` | Check if path exists (via `Stat`, 404 → false) | +| `GetInfo(ctx, path) (*EntryInfo, error)` | Get file/directory info | +| `MakeDir(ctx, path) (bool, error)` | Recursively create directory; returns `false, nil` if exists | +| `Rename(ctx, oldPath, newPath) (*EntryInfo, error)` | Rename / move | +| `Remove(ctx, path) error` | Delete file or directory | +| `Read(ctx, path, user...) ([]byte, error)` | Read file content (binary); `user` defaults to `"node"` | +| `ReadText(ctx, path, user...) (string, error)` | Read file content (text) | +| `Write(ctx, path, data []byte, user...) (*WriteInfo, error)` | Write file content (binary); auto-creates parent dirs | +| `WriteText(ctx, path, content string, user...) (*WriteInfo, error)` | Write file content (text) | + +### Examples + +```go +// Directory operations +c.Files.MakeDir(ctx, "/tmp/work") + +entries, _ := c.Files.List(ctx, "/tmp") +for _, e := range entries { +fmt.Printf("%s %s (%d bytes)\n", e.Type, e.Name, e.Size) +} + +c.Files.Rename(ctx, "/tmp/work", "/tmp/done") +c.Files.Remove(ctx, "/tmp/done") + +// File content read/write +c.Files.WriteText(ctx, "/tmp/hello.txt", "Hello, World!") +content, _ := c.Files.ReadText(ctx, "/tmp/hello.txt") +fmt.Println(content) // Hello, World! + +// Binary read/write +c.Files.Write(ctx, "/tmp/data.bin", []byte{0x00, 0x01, 0x02}) +data, _ := c.Files.Read(ctx, "/tmp/data.bin") +``` diff --git a/runtime/README_zh-CH.md b/runtime/README_zh-CH.md new file mode 100644 index 0000000..f856104 --- /dev/null +++ b/runtime/README_zh-CH.md @@ -0,0 +1,226 @@ +# Runtime Go SDK(运行时客户端) + +## 依赖导入 + +在你的 `go.mod` 中引入 `agents-api` 依赖:[版本查看](https://github.com/openkruise/agents-api/releases) + +``` +require github.com/openkruise/agents-api +``` + +| 包 | 导入路径 | 定位 | +|-------------|--------------------------------------------|---------------------------------------------------------------| +| **runtime** | `github.com/openkruise/agents-api/runtime` | **运行时客户端(Runtime Client)**:直接操作运行中的沙箱容器内的 envd 服务,进行命令执行和文件操作 | + +--- + +## 包结构 + +``` +runtime/ +├── client.go # Client 结构体:New / NewWithConfig +├── k8s.go # NewFromK8s:从 K8s 自动解析 sandboxID 和 runtimeToken +├── config.go # Config 与 Options:Domain / Scheme / RuntimeToken / ... +├── commands.go # Commands:Run / Start / Kill / SendStdin / List / ConnectToProcess +├── command_handle.go # CommandHandle:Wait / Disconnect / Kill +├── filesystem.go # Filesystem:List / Exists / GetInfo / MakeDir / Rename / Remove / Read / Write +└── envd/ # protobuf 生成代码 + ├── process/ # envd Process gRPC + │ ├── process.pb.go + │ └── processconnect/ + └── filesystem/ # envd Filesystem gRPC + ├── filesystem.pb.go + └── filesystemconnect/ +``` + +--- + +## 快速开始 + +在集群内或有 kubeconfig 权限时,使用 `NewFromK8s` 自动从 Sandbox CR 解析 `sandboxID` 和 `runtimeToken`: + +```go +package main + +import ( + "context" + "fmt" + + "github.com/openkruise/agents-api/runtime" +) + +func main() { + ctx := context.Background() + + // domain 是 sandbox gateway 的地址。 + // 集群内访问:使用 K8s Service DNS,如 "sandbox-gateway.sandbox-system.svc:7788" + // 本地开发:使用 port-forward 地址,如 "127.0.0.1:7788" + domain := "sandbox-gateway.sandbox-system.svc:7788" + namespace := "default" + sandboxName := "your-sandbox-name" + c, err := runtime.NewFromK8s(ctx, namespace, sandboxName, + runtime.WithDomain(domain), + ) + if err != nil { + fmt.Printf("Error: %v\n", err) + return + } + + fmt.Printf("Runtime URL: %s\n", c.RuntimeURL()) + + res, _ := c.Commands.Run(ctx, "uname -a") + fmt.Println(res.Stdout) +} +``` + +**关键说明:** + +- `NewFromK8s` 查询 Sandbox CR 并从 annotation `agents.kruise.io/runtime-access-token` 提取 `runtimeToken` +- `sandboxID` 格式为 `namespace--name`(双横线连接) +- kubeconfig 解析顺序:`KUBECONFIG` 环境变量 → `~/.kube/config` → in-cluster config + +完整的演示可参考:[运行时客户端示例](https://github.com/openkruise/agents-api/blob/master/runtime/examples/runtime-example/main.go) + +--- + +## 连接配置 + +运行时客户端**不涉及 Protocol**,只需 `Scheme` + `Domain` 即可确定 envd 地址(`://`)。 + +### Option 列表 + +| 选项 | 说明 | +|---------------------------------------|----------------------------------| +| `WithDomain(domain string)` | envd 域名,默认 `your.domain.com` | +| `WithScheme(scheme string)` | URL scheme,默认 `http` | +| `WithRuntimeToken(token string)` | 运行时 Token,写入请求头 `X-Access-Token` | +| `WithRuntimePort(port int)` | 运行时端口,默认 `49983` | +| `WithAPIKey(apiKey string)` | 可选 API Key | +| `WithAuthHeader(header string)` | 覆盖默认的 Authorization 头 | +| `WithSandboxBaseURL(url string)` | 完全覆盖 URL 拼装 | +| `WithHeader(key, value string)` | 添加单个自定义 header | +| `WithHeaders(headers map)` | 合并多个自定义 headers | +| `WithRequestTimeout(d time.Duration)` | HTTP 超时,默认 60s | +| `WithConfig(cfg *Config)` | 传入预构建的 Config 替换默认配置 | + +--- + +## 命令执行(Commands) + +通过 `c.Commands` 操作容器内进程。底层走 envd 的 `Process` gRPC 服务。 + +### 方法 + +| 方法 | 说明 | +|-------------------------------------------------------------|----------------------------------------------| +| `Run(ctx, cmd, opts...) (*CommandResult, error)` | **前台执行**:启动命令并等待完成,返回 stdout/stderr/exitCode | +| `Start(ctx, cmd, opts...) (*CommandHandle, error)` | **后台启动**:返回 handle,调用方决定何时 `Wait` | +| `List(ctx) ([]ProcessInfo, error)` | 列出所有运行中的进程 | +| `Kill(ctx, pid uint32) (bool, error)` | 向指定 PID 发送 SIGKILL;进程已不存在返回 `false, nil` | +| `SendStdin(ctx, pid uint32, data string) error` | 向指定进程的 stdin 写入数据 | +| `ConnectToProcess(ctx, pid uint32) (*CommandHandle, error)` | 重新连接到一个已运行的进程,订阅其后续输出 | + +### `RunOpts` 字段 + +```go +type RunOpts struct { +Envs map[string]string // 进程环境变量 +Cwd string // 工作目录 +Stdin bool // 是否允许通过 SendStdin 写入 +Background bool // 后台执行(保留字段) +OnStdout func (string) // 流式 stdout 回调(前台执行) +OnStderr func (string) // 流式 stderr 回调(前台执行) +} +``` + +> 命令统一通过 `/bin/bash -l -c ` 执行,保留登录环境。 + +### `CommandHandle` + +由 `Start` / `ConnectToProcess` 返回,用于交互或等待: + +| 方法 | 说明 | +|----------------------------------------------------|---------------------------------------| +| `Pid() uint32` | 返回进程 PID | +| `Wait(onStdout, onStderr) (*CommandResult, error)` | 阻塞等待结束;非 0 退出码会附带 `*CommandExitError` | +| `Disconnect()` | 断开订阅但**不杀进程** | +| `Kill() bool` | 杀掉进程 | + +### `CommandResult` / `CommandExitError` + +```go +type CommandResult struct { +Stdout string +Stderr string +ExitCode int32 +Error string +} + +// 退出码非 0 时返回此错误(同时返回 *CommandResult) +type CommandExitError struct { +Stdout, Stderr string +ExitCode int32 +ErrorMessage string +} +``` + +### 示例 + +```go +// 前台执行 + 流式输出 +res, err := c.Commands.Run(ctx, "ls -la /tmp", runtime.RunOpts{ +Cwd: "/tmp", +Envs: map[string]string{"LANG": "C"}, +OnStdout: func (line string) { fmt.Print(line) }, +}) + +// 后台启动 + 主动 Kill +h, _ := c.Commands.Start(ctx, "sleep 60") +fmt.Println("pid =", h.Pid()) +h.Kill() +``` + +--- + +## 文件系统(Filesystem) + +通过 `c.Files` 操作容器内文件。元数据操作走 envd Filesystem gRPC,文件内容读写走 HTTP `/files` 端点。 + +### 方法 + +| 方法 | 说明 | +|---------------------------------------------------------------------|--------------------------------| +| `List(ctx, path, depth...) ([]EntryInfo, error)` | 列出目录条目;`depth` 默认 1 | +| `Exists(ctx, path) (bool, error)` | 路径是否存在(基于 `Stat`,404 返回 false) | +| `GetInfo(ctx, path) (*EntryInfo, error)` | 获取文件 / 目录信息 | +| `MakeDir(ctx, path) (bool, error)` | 递归创建目录;已存在返回 `false, nil` | +| `Rename(ctx, oldPath, newPath) (*EntryInfo, error)` | 重命名 / 移动 | +| `Remove(ctx, path) error` | 删除文件或目录 | +| `Read(ctx, path, user...) ([]byte, error)` | 读取文件内容(二进制);`user` 默认 `"node"` | +| `ReadText(ctx, path, user...) (string, error)` | 读取文件内容(文本) | +| `Write(ctx, path, data []byte, user...) (*WriteInfo, error)` | 写入文件内容(二进制);自动创建父目录 | +| `WriteText(ctx, path, content string, user...) (*WriteInfo, error)` | 写入文件内容(文本) | + +### 示例 + +```go +// 目录操作 +c.Files.MakeDir(ctx, "/tmp/work") + +entries, _ := c.Files.List(ctx, "/tmp") +for _, e := range entries { +fmt.Printf("%s %s (%d bytes)\n", e.Type, e.Name, e.Size) +} + +c.Files.Rename(ctx, "/tmp/work", "/tmp/done") +c.Files.Remove(ctx, "/tmp/done") + +// 文件内容读写 +c.Files.WriteText(ctx, "/tmp/hello.txt", "Hello, World!") +content, _ := c.Files.ReadText(ctx, "/tmp/hello.txt") +fmt.Println(content) // Hello, World! + +// 二进制读写 +c.Files.Write(ctx, "/tmp/data.bin", []byte{0x00, 0x01, 0x02}) +data, _ := c.Files.Read(ctx, "/tmp/data.bin") +``` diff --git a/sdk/runtime/client.go b/runtime/client.go similarity index 91% rename from sdk/runtime/client.go rename to runtime/client.go index e3bfc66..4862e16 100644 --- a/sdk/runtime/client.go +++ b/runtime/client.go @@ -3,8 +3,8 @@ package runtime import ( "net/http" - "github.com/openkruise/agents-api/sdk/proto/envd/filesystem/filesystemconnect" - "github.com/openkruise/agents-api/sdk/proto/envd/process/processconnect" + "github.com/openkruise/agents-api/runtime/envd/filesystem/filesystemconnect" + "github.com/openkruise/agents-api/runtime/envd/process/processconnect" ) // Client talks directly to the runtime service of a single sandbox, diff --git a/sdk/runtime/command_handle.go b/runtime/command_handle.go similarity index 98% rename from sdk/runtime/command_handle.go rename to runtime/command_handle.go index 5404b2a..5f55816 100644 --- a/sdk/runtime/command_handle.go +++ b/runtime/command_handle.go @@ -5,7 +5,7 @@ import ( "strings" "connectrpc.com/connect" - "github.com/openkruise/agents-api/sdk/proto/envd/process" + "github.com/openkruise/agents-api/runtime/envd/process" ) // CommandResult represents the result of a command execution. diff --git a/sdk/runtime/commands.go b/runtime/commands.go similarity index 97% rename from sdk/runtime/commands.go rename to runtime/commands.go index 4686953..195db7d 100644 --- a/sdk/runtime/commands.go +++ b/runtime/commands.go @@ -6,8 +6,8 @@ import ( "net/http" "connectrpc.com/connect" - "github.com/openkruise/agents-api/sdk/proto/envd/process" - "github.com/openkruise/agents-api/sdk/proto/envd/process/processconnect" + "github.com/openkruise/agents-api/runtime/envd/process" + "github.com/openkruise/agents-api/runtime/envd/process/processconnect" ) // ProcessInfo represents information about a running process. diff --git a/sdk/runtime/config.go b/runtime/config.go similarity index 100% rename from sdk/runtime/config.go rename to runtime/config.go diff --git a/sdk/proto/envd/filesystem/filesystem.pb.go b/runtime/envd/filesystem/filesystem.pb.go similarity index 100% rename from sdk/proto/envd/filesystem/filesystem.pb.go rename to runtime/envd/filesystem/filesystem.pb.go diff --git a/sdk/proto/envd/filesystem/filesystemconnect/filesystem.connect.go b/runtime/envd/filesystem/filesystemconnect/filesystem.connect.go similarity index 99% rename from sdk/proto/envd/filesystem/filesystemconnect/filesystem.connect.go rename to runtime/envd/filesystem/filesystemconnect/filesystem.connect.go index b008112..54cf36e 100644 --- a/sdk/proto/envd/filesystem/filesystemconnect/filesystem.connect.go +++ b/runtime/envd/filesystem/filesystemconnect/filesystem.connect.go @@ -8,7 +8,7 @@ import ( connect "connectrpc.com/connect" context "context" errors "errors" - filesystem "github.com/openkruise/agents-api/sdk/proto/envd/filesystem" + filesystem "github.com/openkruise/agents-api/runtime/envd/filesystem" http "net/http" strings "strings" ) diff --git a/sdk/proto/envd/process/process.pb.go b/runtime/envd/process/process.pb.go similarity index 100% rename from sdk/proto/envd/process/process.pb.go rename to runtime/envd/process/process.pb.go diff --git a/sdk/proto/envd/process/processconnect/process.connect.go b/runtime/envd/process/processconnect/process.connect.go similarity index 99% rename from sdk/proto/envd/process/processconnect/process.connect.go rename to runtime/envd/process/processconnect/process.connect.go index 1c78e92..1eba7e7 100644 --- a/sdk/proto/envd/process/processconnect/process.connect.go +++ b/runtime/envd/process/processconnect/process.connect.go @@ -8,7 +8,7 @@ import ( connect "connectrpc.com/connect" context "context" errors "errors" - process "github.com/openkruise/agents-api/sdk/proto/envd/process" + process "github.com/openkruise/agents-api/runtime/envd/process" http "net/http" strings "strings" ) diff --git a/sdk/runtime/filesystem.go b/runtime/filesystem.go similarity index 98% rename from sdk/runtime/filesystem.go rename to runtime/filesystem.go index 12fc7c7..fd1605b 100644 --- a/sdk/runtime/filesystem.go +++ b/runtime/filesystem.go @@ -12,8 +12,8 @@ import ( "time" "connectrpc.com/connect" - "github.com/openkruise/agents-api/sdk/proto/envd/filesystem" - "github.com/openkruise/agents-api/sdk/proto/envd/filesystem/filesystemconnect" + "github.com/openkruise/agents-api/runtime/envd/filesystem" + "github.com/openkruise/agents-api/runtime/envd/filesystem/filesystemconnect" ) const ( diff --git a/sdk/runtime/k8s.go b/runtime/k8s.go similarity index 100% rename from sdk/runtime/k8s.go rename to runtime/k8s.go diff --git a/sdk/README.md b/sdk/README.md deleted file mode 100644 index fbbdfff..0000000 --- a/sdk/README.md +++ /dev/null @@ -1,512 +0,0 @@ -# Sandbox Go SDK - -## Installation - -First, add the `agents-api` dependency to -your `go.mod`: [View Releases](https://github.com/openkruise/agents-api/releases) - -``` -require github.com/openkruise/agents-api -``` - -This package provides two ways to operate within an Sandbox environment: - -| Package | Import Path | Purpose | -|-------------|------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------| -| **sandbox** | `github.com/openkruise/agents-api/sdk/sandbox` | **Management Client**: Sandbox lifecycle management (Create / Connect / Pause / Kill) + in-container operations (Commands / Files) | -| **runtime** | `github.com/openkruise/agents-api/sdk/runtime` | **Runtime Client**: Directly operates on a running sandbox's envd service for command execution and file operations | - ---- - -## Package Structure - -``` -sdk/ -├── sandbox/ # Management Client (package sandbox) -│ ├── sandbox.go # Sandbox struct: Create / Connect / Pause / Kill -│ ├── sandbox_api.go # Low-level REST client (SandboxApi): List / GetInfo / Kill / ... -│ └── config.go # ConnectionConfig: Protocol / Scheme / Domain / API URL -│ -├── runtime/ # Runtime Client (package runtime) -│ ├── client.go # Client struct: New / NewWithConfig -│ ├── k8s.go # NewFromK8s: auto-resolve sandboxID & runtimeToken from K8s -│ ├── config.go # Config & Options: Domain / Scheme / RuntimeToken / ... -│ ├── commands.go # Commands: Run / Start / Kill / SendStdin / List / ConnectToProcess -│ ├── command_handle.go # CommandHandle: Wait / Disconnect / Kill -│ └── filesystem.go # Filesystem: List / Exists / GetInfo / MakeDir / Rename / Remove / Read / Write -│ -├── proto/ -│ ├── api/ # OpenAPI generated REST client (sandbox management) -│ └── envd/ # protobuf generated code -│ ├── process/ # envd Process gRPC -│ │ ├── process.pb.go -│ │ └── processconnect/ -│ └── filesystem/ # envd Filesystem gRPC -│ ├── filesystem.pb.go -│ └── filesystemconnect/ -│ -├── README.md -└── README_zh-CH.md -``` - ---- - -## Quick Start: sandbox (Management Client) - -```go -package main - -import ( - "context" - "fmt" - "github.com/openkruise/agents-api/sdk/sandbox" - "log" -) - -func main() { - ctx := context.Background() - - sb, err := sandbox.Create(ctx, "code-interpreter", - sandbox.WithConfig( - sandbox.WithAPIKey("your-api-key"), - sandbox.WithDomain("your.domain.com"), - ), - ) - if err != nil { - log.Fatal(err) - } - defer sb.Close(ctx) - - res, _ := sb.Commands.Run(ctx, "echo hello") - fmt.Println(res.Stdout) - - sb.Files.MakeDir(ctx, "/tmp/demo") -} - -``` - -[Full example](https://github.com/openkruise/agents-api/blob/master/sdk/example/sandbox/main.go) - ---- - -## Quick Start: runtime (Runtime Client) - -When running inside a cluster or with kubeconfig access, use `NewFromK8s` to automatically resolve `sandboxID` and `runtimeToken` from the Sandbox CR: - -```go -package main - -import ( - "context" - "fmt" - - "github.com/openkruise/agents-api/sdk/runtime" -) - -func main() { - ctx := context.Background() - - // domain is the address of the sandbox gateway. - // In-cluster: use the K8s Service DNS, e.g. "sandbox-gateway.sandbox-system.svc:7788" - // Local dev: use port-forward address, e.g. "127.0.0.1:7788" - domain := "sandbox-gateway.sandbox-system.svc:7788" - namespace := "default" - sandboxName := "your-sandbox-name" - c, err := runtime.NewFromK8s(ctx, namespace, sandboxName, - runtime.WithDomain(domain), - ) - if err != nil { - fmt.Printf("Error: %v\n", err) - return - } - - fmt.Printf("Runtime URL: %s\n", c.RuntimeURL()) - - res, _ := c.Commands.Run(ctx, "uname -a") - fmt.Println(res.Stdout) -} -``` - -**Key Notes:** -- `NewFromK8s` queries the Sandbox CR and extracts `runtimeToken` from annotation `agents.kruise.io/runtime-access-token` -- `sandboxID` is composed as `namespace--name` (double-dash separator) -- Kubeconfig resolution order: `KUBECONFIG` env → `~/.kube/config` → in-cluster config -- The underlying K8s client is created once and shared across calls (via `sync.Once`) - -[Full example](https://github.com/openkruise/agents-api/blob/master/sdk/example/runtime_client/main.go) - ---- - -## Connection Configuration - -### sandbox Package: Scheme & Protocol - -Connection behavior in the sandbox package is controlled via `ConnectionConfig`, determined by two orthogonal -dimensions: **Scheme** and **Protocol**. - -#### Protocol (Routing Mode) - -| Value | Constant | API URL | Sandbox URL | -|----------------------|---------------------------|----------------------------------|-------------------------------------------------| -| **Native (default)** | `sandbox.ProtocolNative` | `https://api.` | `https://-.` | -| **Private** | `sandbox.ProtocolPrivate` | `:///kruise/api` | `:///kruise//` | - -- **Native**: Subdomain-based routing, for standard public cloud deployments -- **Private**: Path-prefix-based routing (`/kruise/...`) through a unified gateway, for private deployments or local - port forwarding - -#### Scheme - -| Value | Use Case | -|-------------------------|----------------------------------------------------| -| **`"https"` (default)** | Production / public network | -| **`"http"`** | Local port forwarding, TLS-free intranet debugging | - -#### ConnectionConfigOption List - -Applied via `sandbox.NewConnectionConfig(opts...)` or embedded in `Create/Connect` calls via `WithConfig(...)`: - -| Option | Description | -|---------------------------------------|---------------------------------------------------------------------------------| -| `WithAPIKey(key string)` | API Key, sent as `X-API-Key` header | -| `WithDomain(domain string)` | Domain, default `your.domain.com` | -| `WithScheme(scheme string)` | URL scheme, default `https` | -| `WithProtocol(p Protocol)` | Routing protocol, default `ProtocolNative` | -| `WithAPIURL(url string)` | **Highest priority**: overrides API base URL directly, bypasses Protocol/Domain | -| `WithSandboxBaseURL(url string)` | **Highest priority**: overrides sandbox envd base URL directly | -| `WithRequestTimeout(d time.Duration)` | HTTP request timeout, default 60s | - -#### Priority - -`WithAPIURL` / `WithSandboxBaseURL` (explicit override) > `WithProtocol` + `WithDomain` composition > environment -variables > defaults - ---- - -### runtime Package: Runtime Client Config - -The Runtime Client **does not involve Protocol** — only `Scheme` + `Domain` are needed to determine the envd -address (`://`). - -#### Option List - -| Option | Description | -|---------------------------------------|------------------------------------------------| -| `WithDomain(domain string)` | envd domain, default `your.domain.com` | -| `WithScheme(scheme string)` | URL scheme, default `http` | -| `WithRuntimeToken(token string)` | Runtime token, sent as `X-Access-Token` header | -| `WithRuntimePort(port int)` | Runtime port, default `49983` | -| `WithAPIKey(apiKey string)` | Optional API Key | -| `WithAuthHeader(header string)` | Override default Authorization header | -| `WithSandboxBaseURL(url string)` | Fully override URL composition | -| `WithHeader(key, value string)` | Add a single custom header | -| `WithHeaders(headers map)` | Merge multiple custom headers | -| `WithRequestTimeout(d time.Duration)` | HTTP timeout, default 60s | -| `WithConfig(cfg *Config)` | Replace with a pre-built Config | - ---- - -## Create / Connect Sandbox - -### `Create(ctx, template, opts...) (*Sandbox, error)` - -Creates a new sandbox from a template. Defaults to `"code-interpreter"` when template is empty. - -```go -package main - -import ( - "github.com/openkruise/agents-api/sdk/sandbox" -) - -func main() { - sb, err := sandbox.Create(ctx, "code-interpreter", - sandbox.WithConfig( - sandbox.WithAPIKey("xxx"), - sandbox.WithDomain("example.com"), - sandbox.WithProtocol(sandbox.ProtocolPrivate), - ), - sandbox.WithTimeout(600), - sandbox.WithMetadata(map[string]string{"k": "v"}), - sandbox.WithEnvVars(map[string]string{"FOO": "1"}), - sandbox.WithAutoPause(true), - sandbox.WithSecure(true), - ) -} -``` - -### `Connect(ctx, sandboxID, opts...) (*Sandbox, error)` - -Connects to an existing sandbox. Automatically resumes if paused. - -```go -sb, err := sandbox.Connect(ctx, "default--xxx-xxx", -sandbox.WithConfig(sandbox.WithAPIKey("xxx"), sandbox.WithDomain("example.com")), -) -``` - -### SandboxOption List - -| Option | Description | -|------------------------------|-------------------------------------------------| -| `WithConfig(opts...)` | Embed a set of `ConnectionConfigOption` | -| `WithTimeout(seconds int32)` | Sandbox lifetime timeout, default 300 seconds | -| `WithMetadata(map)` | Sandbox metadata | -| `WithEnvVars(map)` | Environment variables injected into the sandbox | -| `WithAutoPause(bool)` | Whether to enable auto-pause | -| `WithSecure(bool)` | Enable secure mode | - -### Sandbox Instance Methods - -| Method | Description | -|----------------------------------------|------------------------------------------| -| `SandboxID() string` | Returns the sandbox ID | -| `TemplateID() string` | Returns the template ID | -| `GetInfo(ctx) (*SandboxInfo, error)` | Gets sandbox details | -| `SetTimeout(ctx, timeout int32) error` | Updates the timeout | -| `Pause(ctx) (string, error)` | Pauses the sandbox | -| `Kill(ctx) (bool, error)` | Destroys the sandbox | -| `Close(ctx) error` | Alias for `Kill`, convenient for `defer` | - -`Sandbox` exposes two sub-modules: - -- `sb.Commands` — command execution (`*Commands`) -- `sb.Files` — filesystem operations (`*Filesystem`) - ---- - -## Sandbox Management API (SandboxApi) - -`SandboxApi` is the low-level REST client that can be used independently without creating a `Sandbox` instance (e.g., to -list all sandboxes). - -```go -api := sandbox.NewSandboxApi(sandbox.NewConnectionConfig( -sandbox.WithAPIKey("xxx"), -sandbox.WithDomain("example.com"), -)) -``` - -| Method | Description | -|------------------------------------------------------------------------------|-------------------------------------------------------------| -| `List(ctx) ([]SandboxInfo, error)` | Lists all running sandboxes | -| `GetInfo(ctx, sandboxID) (*SandboxInfo, error)` | Gets sandbox details; returns `not found` error on 404 | -| `Kill(ctx, sandboxID) (bool, error)` | Destroys a sandbox; returns `true` directly in `Debug` mode | -| `SetTimeout(ctx, sandboxID, timeout int32) error` | Updates the timeout | -| `CreateSandbox(ctx, opts CreateSandboxOpts) (*SandboxCreateResponse, error)` | Low-level create API | -| `ConnectSandbox(ctx, sandboxID, timeout int32) (*client.Sandbox, error)` | Low-level connect API | -| `Pause(ctx, sandboxID) (string, error)` | Pauses a sandbox | - ---- - -## Command Execution (Commands) - -Operate in-container processes via `sb.Commands` (sandbox mode) or `c.Commands` (direct mode). Backed by -envd's `Process` gRPC service. - -### Methods - -| Method | Description | -|-------------------------------------------------------------|-----------------------------------------------------------------------------------------------------| -| `Run(ctx, cmd, opts...) (*CommandResult, error)` | **Foreground execution**: starts a command and waits for completion, returns stdout/stderr/exitCode | -| `Start(ctx, cmd, opts...) (*CommandHandle, error)` | **Background start**: returns a handle, caller decides when to `Wait` | -| `List(ctx) ([]ProcessInfo, error)` | Lists all running processes | -| `Kill(ctx, pid uint32) (bool, error)` | Sends SIGKILL to the given PID; returns `false, nil` if process doesn't exist | -| `SendStdin(ctx, pid uint32, data string) error` | Writes data to a process's stdin | -| `ConnectToProcess(ctx, pid uint32) (*CommandHandle, error)` | Reconnects to a running process, subscribing to its subsequent output | - -### `RunOpts` Fields - -```go -type RunOpts struct { -Envs map[string]string // Process environment variables -Cwd string // Working directory -Stdin bool // Whether to allow SendStdin -Background bool // Background execution (reserved) -OnStdout func (string) // Streaming stdout callback (foreground only) -OnStderr func (string) // Streaming stderr callback (foreground only) -} -``` - -> Commands are executed via `/bin/bash -l -c `, preserving the login environment. - -### `CommandHandle` - -Returned by `Start` / `ConnectToProcess` for interaction or waiting: - -| Method | Description | -|----------------------------------------------------|--------------------------------------------------------------------------| -| `Pid() uint32` | Returns the process PID | -| `Wait(onStdout, onStderr) (*CommandResult, error)` | Blocks until completion; non-zero exit code includes `*CommandExitError` | -| `Disconnect()` | Disconnects from the stream **without killing** the process | -| `Kill() bool` | Kills the process | - -### `CommandResult` / `CommandExitError` - -```go -type CommandResult struct { -Stdout string -Stderr string -ExitCode int32 -Error string -} - -// Returned when exit code is non-zero (alongside *CommandResult) -type CommandExitError struct { -Stdout, Stderr string -ExitCode int32 -ErrorMessage string -} -``` - -### Example - -```go -// Foreground execution with streaming output -res, err := sb.Commands.Run(ctx, "ls -la /tmp", runtime.RunOpts{ -Cwd: "/tmp", -Envs: map[string]string{"LANG": "C"}, -OnStdout: func (line string) { fmt.Print(line) }, -}) - -// Background start + manual Kill -h, _ := sb.Commands.Start(ctx, "sleep 60") -fmt.Println("pid =", h.Pid()) -h.Kill() -``` - ---- - -## Filesystem - -Operate in-container files via `sb.Files` (sandbox mode) or `c.Files` (direct mode). Metadata operations use envd -Filesystem gRPC, file content read/write uses the HTTP `/files` endpoint. - -### Methods - -| Method | Description | -|---------------------------------------------------------------------|-------------------------------------------------------------------------| -| `List(ctx, path, depth...) ([]EntryInfo, error)` | Lists directory entries; `depth` defaults to 1 | -| `Exists(ctx, path) (bool, error)` | Checks if a path exists (via `Stat`, returns false on 404) | -| `GetInfo(ctx, path) (*EntryInfo, error)` | Gets file/directory info | -| `MakeDir(ctx, path) (bool, error)` | Creates a directory recursively; returns `false, nil` if already exists | -| `Rename(ctx, oldPath, newPath) (*EntryInfo, error)` | Renames/moves a file or directory | -| `Remove(ctx, path) error` | Removes a file or directory | -| `Read(ctx, path, user...) ([]byte, error)` | Reads file content (binary); `user` defaults to `"node"` | -| `ReadText(ctx, path, user...) (string, error)` | Reads file content (text) | -| `Write(ctx, path, data []byte, user...) (*WriteInfo, error)` | Writes file content (binary); auto-creates parent directories | -| `WriteText(ctx, path, content string, user...) (*WriteInfo, error)` | Writes file content (text) | - -### Example - -```go -package main - -import ( - "fmt" -) - -func main() { - // Directory operations - c.Files.MakeDir(ctx, "/tmp/work") - - entries, _ := c.Files.List(ctx, "/tmp") - for _, e := range entries { - fmt.Printf("%s %s (%d bytes)\n", e.Type, e.Name, e.Size) - } - - c.Files.Rename(ctx, "/tmp/work", "/tmp/done") - c.Files.Remove(ctx, "/tmp/done") - - // File content read/write - c.Files.WriteText(ctx, "/tmp/hello.txt", "Hello, World!") - content, _ := c.Files.ReadText(ctx, "/tmp/hello.txt") - fmt.Println(content) // Hello, World! - - // Binary read/write - c.Files.Write(ctx, "/tmp/data.bin", []byte{0x00, 0x01, 0x02}) - data, _ := c.Files.Read(ctx, "/tmp/data.bin") -} -``` - ---- - -## Full Examples - -### sandbox Mode (Management Client) - -```go -package main - -import ( - "context" - "fmt" - "github.com/openkruise/agents-api/sdk/sandbox" - "log" -) - -func main() { - ctx := context.Background() - - sb, err := sandbox.Create(ctx, "code-interpreter", - sandbox.WithConfig( - sandbox.WithAPIKey("your-api-key"), - sandbox.WithDomain("your.domain.com"), - sandbox.WithProtocol(sandbox.ProtocolPrivate), - ), - sandbox.WithTimeout(600), - ) - if err != nil { - log.Fatal(err) - } - defer sb.Close(ctx) - - fmt.Println("sandbox:", sb.SandboxID()) - - if res, err := sb.Commands.Run(ctx, "uname -a"); err == nil { - fmt.Println(res.Stdout) - } - - sb.Files.MakeDir(ctx, "/tmp/demo") -} - -``` - -### runtime Mode (Runtime Client) - -```go -package main - -import ( - "context" - "fmt" - "github.com/openkruise/agents-api/sdk/runtime" -) - -func main() { - ctx := context.Background() - - c := runtime.New("your-sandbox-id", - runtime.WithDomain("your.domain.com"), - runtime.WithScheme("http"), - runtime.WithRuntimeToken("your-runtime-token"), - ) - - if res, err := c.Commands.Run(ctx, "uname -a"); err == nil { - fmt.Println(res.Stdout) - } - - c.Files.MakeDir(ctx, "/tmp/demo") - - // File content read/write - c.Files.WriteText(ctx, "/tmp/hello.txt", "Hello from Go SDK!") - content, _ := c.Files.ReadText(ctx, "/tmp/hello.txt") - fmt.Println(content) -} - -``` - -For more complete demos, see: - -- [Management Client example](https://github.com/openkruise/agents-api/blob/master/sdk/example/sandbox/main.go) -- [Runtime Client example](https://github.com/openkruise/agents-api/blob/master/sdk/example/envd_client/main.go) diff --git a/sdk/README_zh-CH.md b/sdk/README_zh-CH.md deleted file mode 100644 index 88319f8..0000000 --- a/sdk/README_zh-CH.md +++ /dev/null @@ -1,502 +0,0 @@ -# Sandbox Go SDK - -## 依赖导入 - -首先,在你的 `go.mod` 中引入 `agents-api` 依赖:[版本查看](https://github.com/openkruise/agents-api/releases) - -``` -require github.com/openkruise/agents-api -``` - -本包提供两种使用方式操作 Sandbox 内的环境: - -| 包 | 导入路径 | 定位 | -|-------------|------------------------------------------------|-------------------------------------------------------------------------------------------------------| -| **sandbox** | `github.com/openkruise/agents-api/sdk/sandbox` | **管理客户端(Management Client)**:Sandbox 生命周期管理(Create / Connect / Pause / Kill)+ 容器内操作(Commands / Files) | -| **runtime** | `github.com/openkruise/agents-api/sdk/runtime` | **运行时客户端(Runtime Client)**:直接操作运行中的沙箱容器内的 envd 服务,进行命令执行和文件操作 | - ---- - -## 包结构 - -``` -sdk/ -├── sandbox/ # 管理客户端(package sandbox) -│ ├── sandbox.go # Sandbox 结构体:Create / Connect / Pause / Kill -│ ├── sandbox_api.go # 底层 REST 客户端(SandboxApi):List / GetInfo / Kill / ... -│ └── config.go # ConnectionConfig:Protocol / Scheme / Domain / API URL -│ -├── runtime/ # 运行时客户端(package runtime) -│ ├── client.go # Client 结构体:New / NewWithConfig -│ ├── k8s.go # NewFromK8s:从 K8s 自动解析 sandboxID 和 runtimeToken -│ ├── config.go # Config 与 Options:Domain / Scheme / RuntimeToken / ... -│ ├── commands.go # Commands:Run / Start / Kill / SendStdin / List / ConnectToProcess -│ ├── command_handle.go # CommandHandle:Wait / Disconnect / Kill -│ └── filesystem.go # Filesystem:List / Exists / GetInfo / MakeDir / Rename / Remove / Read / Write -│ -├── proto/ -│ ├── api/ # OpenAPI 生成的 REST 客户端(sandbox 管理) -│ └── envd/ # protobuf 生成代码 -│ ├── process/ # envd Process gRPC -│ │ ├── process.pb.go -│ │ └── processconnect/ -│ └── filesystem/ # envd Filesystem gRPC -│ ├── filesystem.pb.go -│ └── filesystemconnect/ -│ -├── README.md -└── README_zh-CH.md -``` - -## 快速开始:sandbox(管理客户端) - -```go -package main - -import ( - "context" - "fmt" - "github.com/openkruise/agents-api/sdk/sandbox" - "log" -) - -func main() { - ctx := context.Background() - - sb, err := sandbox.Create(ctx, "code-interpreter", - sandbox.WithConfig( - sandbox.WithAPIKey("your-api-key"), - sandbox.WithDomain("your.domain.com"), - ), - ) - if err != nil { - log.Fatal(err) - } - defer sb.Close(ctx) - - res, _ := sb.Commands.Run(ctx, "echo hello") - fmt.Println(res.Stdout) - - sb.Files.MakeDir(ctx, "/tmp/demo") -} - -``` - -[完整示例](https://github.com/openkruise/agents-api/blob/master/sdk/example/sandbox/main.go) - ---- - -## 快速开始:runtime(运行时客户端) - -在集群内或有 kubeconfig 权限时,使用 `NewFromK8s` 自动从 Sandbox CR 解析 `sandboxID` 和 `runtimeToken`: - -```go -package main - -import ( - "context" - "fmt" - - "github.com/openkruise/agents-api/sdk/runtime" -) - -func main() { - ctx := context.Background() - - // domain 是 sandbox gateway 的地址。 - // 集群内访问:使用 K8s Service DNS,如 "sandbox-gateway.sandbox-system.svc:7788" - // 本地开发:使用 port-forward 地址,如 "127.0.0.1:7788" - domain := "sandbox-gateway.sandbox-system.svc:7788" - namespace := "default" - sandboxName := "your-sandbox-name" - c, err := runtime.NewFromK8s(ctx, namespace, sandboxName, - runtime.WithDomain(domain), - ) - if err != nil { - fmt.Printf("Error: %v\n", err) - return - } - - fmt.Printf("Runtime URL: %s\n", c.RuntimeURL()) - - res, _ := c.Commands.Run(ctx, "uname -a") - fmt.Println(res.Stdout) -} -``` - -**关键说明:** -- `NewFromK8s` 查询 Sandbox CR 并从 annotation `agents.kruise.io/runtime-access-token` 提取 `runtimeToken` -- `sandboxID` 格式为 `namespace--name`(双横线连接) -- kubeconfig 解析顺序:`KUBECONFIG` 环境变量 → `~/.kube/config` → in-cluster config - -[完整示例](https://github.com/openkruise/agents-api/blob/master/sdk/example/runtime_client/main.go) - ---- - -## 连接配置 - -### sandbox 包:Scheme 与 Protocol - -sandbox 包的连接行为通过 `ConnectionConfig` 控制,由 **Scheme** 和 **Protocol** 两个正交维度决定 URL 形态。 - -#### Protocol(路由协议) - -| 值 | 常量 | API URL | Sandbox URL | -|----------------|---------------------------|----------------------------------|-------------------------------------------------| -| **Native(默认)** | `sandbox.ProtocolNative` | `https://api.` | `https://-.` | -| **Private** | `sandbox.ProtocolPrivate` | `:///kruise/api` | `:///kruise//` | - -- **Native**:基于子域名路由,对应 原生公网部署 -- **Private**:基于路径前缀(`/kruise/...`)通过统一网关路由,适用于私有化或本地端口转发场景 - -#### Scheme(协议头) - -| 值 | 适用场景 | -|-------------------|-------------------| -| **`"https"`(默认)** | 生产环境 / 公网 | -| **`"http"`** | 本地端口转发、内网无 TLS 调试 | - -#### ConnectionConfigOption 列表 - -通过 `sandbox.NewConnectionConfig(opts...)` 或在 `Create/Connect` 中嵌入 `WithConfig(...)` 应用: - -| 选项 | 说明 | -|---------------------------------------|---------------------------------------------------| -| `WithAPIKey(key string)` | API Key,写入请求头 `X-API-Key` | -| `WithDomain(domain string)` | 域名,默认 `your.domain.com` | -| `WithScheme(scheme string)` | URL scheme,默认 `https` | -| `WithProtocol(p Protocol)` | 路由协议,默认 `ProtocolNative` | -| `WithAPIURL(url string)` | **最高优先级**:直接覆盖 API base URL,绕过 Protocol/Domain 拼装 | -| `WithSandboxBaseURL(url string)` | **最高优先级**:直接覆盖 sandbox envd base URL | -| `WithRequestTimeout(d time.Duration)` | HTTP 请求超时,默认 60s | - -#### 优先级 - -`WithAPIURL` / `WithSandboxBaseURL`(显式覆盖) > `WithProtocol` + `WithDomain` 拼装 > 环境变量 > 默认值 - ---- - -### runtime 包:运行时客户端配置 - -运行时客户端**不涉及 Protocol**,只需 `Scheme` + `Domain` 即可确定 envd 地址(`://`)。 - -#### Option 列表 - -| 选项 | 说明 | -|---------------------------------------|----------------------------------| -| `WithDomain(domain string)` | envd 域名,默认 `your.domain.com` | -| `WithScheme(scheme string)` | URL scheme,默认 `http` | -| `WithRuntimeToken(token string)` | 运行时 Token,写入请求头 `X-Access-Token` | -| `WithRuntimePort(port int)` | 运行时端口,默认 `49983` | -| `WithAPIKey(apiKey string)` | 可选 API Key | -| `WithAuthHeader(header string)` | 覆盖默认的 Authorization 头 | -| `WithSandboxBaseURL(url string)` | 完全覆盖 URL 拼装 | -| `WithHeader(key, value string)` | 添加单个自定义 header | -| `WithHeaders(headers map)` | 合并多个自定义 headers | -| `WithRequestTimeout(d time.Duration)` | HTTP 超时,默认 60s | -| `WithConfig(cfg *Config)` | 传入预构建的 Config 替换默认配置 | - ---- - -## 创建 / 连接 Sandbox - -### `Create(ctx, template, opts...) (*Sandbox, error)` - -从一个模板创建新 sandbox。`template` 为空时默认 `"code-interpreter"`。 - -```go -package main - -import ( - "github.com/openkruise/agents-api/sdk/sandbox" -) - -func main() { - sb, err := sandbox.Create(ctx, "code-interpreter", - sandbox.WithConfig( - sandbox.WithAPIKey("xxx"), - sandbox.WithDomain("example.com"), - sandbox.WithProtocol(sandbox.ProtocolPrivate), - ), - sandbox.WithTimeout(600), - sandbox.WithMetadata(map[string]string{"k": "v"}), - sandbox.WithEnvVars(map[string]string{"FOO": "1"}), - sandbox.WithAutoPause(true), - sandbox.WithSecure(true), - ) -} -``` - -### `Connect(ctx, sandboxID, opts...) (*Sandbox, error)` - -连接到已存在sandbox。 - -```go -sb, err := sandbox.Connect(ctx, "default--xxx-xxx", -sandbox.WithConfig(sandbox.WithAPIKey("xxx"), sandbox.WithDomain("example.com")), -) -``` - -### SandboxOption 列表 - -| 选项 | 说明 | -|------------------------------|-------------------------------| -| `WithConfig(opts...)` | 内嵌一组 `ConnectionConfigOption` | -| `WithTimeout(seconds int32)` | sandbox 存活超时,默认 300 秒 | -| `WithMetadata(map)` | sandbox 元数据 | -| `WithEnvVars(map)` | 注入 sandbox 的环境变量 | -| `WithAutoPause(bool)` | 是否启用自动暂停 | -| `WithSecure(bool)` | 启用安全模式 | - -### Sandbox 实例方法 - -| 方法 | 说明 | -|----------------------------------------|--------------------------| -| `SandboxID() string` | 返回 sandbox ID | -| `TemplateID() string` | 返回模板 ID | -| `GetInfo(ctx) (*SandboxInfo, error)` | 获取 sandbox 详情 | -| `SetTimeout(ctx, timeout int32) error` | 修改超时时间 | -| `Pause(ctx) (string, error)` | 暂停 | -| `Kill(ctx) (bool, error)` | 销毁 | -| `Close(ctx) error` | `Kill` 的别名,方便 `defer` 使用 | - -`Sandbox` 暴露两个子模块: - -- `sb.Commands` — 命令执行(`*Commands`) -- `sb.Files` — 文件系统(`*Filesystem`) - ---- - -## Sandbox 管理 API(SandboxApi) - -`SandboxApi` 是底层 REST 客户端,可在不创建具体 Sandbox 实例时单独使用(例如列出所有 sandbox)。 - -```go -api := sandbox.NewSandboxApi(sandbox.NewConnectionConfig( -sandbox.WithAPIKey("xxx"), -sandbox.WithDomain("example.com"), -)) -``` - -| 方法 | 说明 | -|------------------------------------------------------------------------------|-------------------------------------| -| `List(ctx) ([]SandboxInfo, error)` | 列出所有运行中的 sandbox | -| `GetInfo(ctx, sandboxID) (*SandboxInfo, error)` | 获取 sandbox 详情,404 返回 `not found` 错误 | -| `Kill(ctx, sandboxID) (bool, error)` | 销毁 sandbox;`Debug` 模式下直接返回 `true` | -| `SetTimeout(ctx, sandboxID, timeout int32) error` | 修改超时时间 | -| `CreateSandbox(ctx, opts CreateSandboxOpts) (*SandboxCreateResponse, error)` | 底层创建接口 | -| `ConnectSandbox(ctx, sandboxID, timeout int32) (*client.Sandbox, error)` | 底层连接接口 | -| `Pause(ctx, sandboxID) (string, error)` | 暂停 sandbox | - ---- - -## 命令执行(Commands) - -通过 `sb.Commands`(sandbox 模式)或 `c.Commands`(直连模式)操作容器内进程。底层走 envd 的 `Process` gRPC 服务。 - -### 方法 - -| 方法 | 说明 | -|-------------------------------------------------------------|----------------------------------------------| -| `Run(ctx, cmd, opts...) (*CommandResult, error)` | **前台执行**:启动命令并等待完成,返回 stdout/stderr/exitCode | -| `Start(ctx, cmd, opts...) (*CommandHandle, error)` | **后台启动**:返回 handle,调用方决定何时 `Wait` | -| `List(ctx) ([]ProcessInfo, error)` | 列出所有运行中的进程 | -| `Kill(ctx, pid uint32) (bool, error)` | 向指定 PID 发送 SIGKILL;进程已不存在返回 `false, nil` | -| `SendStdin(ctx, pid uint32, data string) error` | 向指定进程的 stdin 写入数据 | -| `ConnectToProcess(ctx, pid uint32) (*CommandHandle, error)` | 重新连接到一个已运行的进程,订阅其后续输出 | - -### `RunOpts` 字段 - -```go -type RunOpts struct { -Envs map[string]string // 进程环境变量 -Cwd string // 工作目录 -Stdin bool // 是否允许通过 SendStdin 写入 -Background bool // 后台执行(保留字段) -OnStdout func (string) // 流式 stdout 回调(前台执行) -OnStderr func (string) // 流式 stderr 回调(前台执行) -} -``` - -> 命令统一通过 `/bin/bash -l -c ` 执行,保留登录环境。 - -### `CommandHandle` - -由 `Start` / `ConnectToProcess` 返回,用于交互或等待: - -| 方法 | 说明 | -|----------------------------------------------------|---------------------------------------| -| `Pid() uint32` | 返回进程 PID | -| `Wait(onStdout, onStderr) (*CommandResult, error)` | 阻塞等待结束;非 0 退出码会附带 `*CommandExitError` | -| `Disconnect()` | 断开订阅但**不杀进程** | -| `Kill() bool` | 杀掉进程 | - -### `CommandResult` / `CommandExitError` - -```go -type CommandResult struct { -Stdout string -Stderr string -ExitCode int32 -Error string -} - -// 退出码非 0 时返回此错误(同时返回 *CommandResult) -type CommandExitError struct { -Stdout, Stderr string -ExitCode int32 -ErrorMessage string -} -``` - -### 示例 - -```go -// 前台执行 + 流式输出 -res, err := sb.Commands.Run(ctx, "ls -la /tmp", runtime.RunOpts{ -Cwd: "/tmp", -Envs: map[string]string{"LANG": "C"}, -OnStdout: func (line string) { fmt.Print(line) }, -}) - -// 后台启动 + 主动 Kill -h, _ := sb.Commands.Start(ctx, "sleep 60") -fmt.Println("pid =", h.Pid()) -h.Kill() -``` - ---- - -## 文件系统(Filesystem) - -通过 `sb.Files`(sandbox 模式)或 `c.Files`(直连模式)操作容器内文件。元数据操作走 envd Filesystem gRPC,文件内容读写走 -HTTP `/files` 端点。 - -### 方法 - -| 方法 | 说明 | -|---------------------------------------------------------------------|--------------------------------| -| `List(ctx, path, depth...) ([]EntryInfo, error)` | 列出目录条目;`depth` 默认 1 | -| `Exists(ctx, path) (bool, error)` | 路径是否存在(基于 `Stat`,404 返回 false) | -| `GetInfo(ctx, path) (*EntryInfo, error)` | 获取文件 / 目录信息 | -| `MakeDir(ctx, path) (bool, error)` | 递归创建目录;已存在返回 `false, nil` | -| `Rename(ctx, oldPath, newPath) (*EntryInfo, error)` | 重命名 / 移动 | -| `Remove(ctx, path) error` | 删除文件或目录 | -| `Read(ctx, path, user...) ([]byte, error)` | 读取文件内容(二进制);`user` 默认 `"node"` | -| `ReadText(ctx, path, user...) (string, error)` | 读取文件内容(文本) | -| `Write(ctx, path, data []byte, user...) (*WriteInfo, error)` | 写入文件内容(二进制);自动创建父目录 | -| `WriteText(ctx, path, content string, user...) (*WriteInfo, error)` | 写入文件内容(文本) | - -### 示例 - -```go -package main - -import ( - "fmt" -) - -func main() { - // 目录操作 - c.Files.MakeDir(ctx, "/tmp/work") - - entries, _ := c.Files.List(ctx, "/tmp") - for _, e := range entries { - fmt.Printf("%s %s (%d bytes)\n", e.Type, e.Name, e.Size) - } - - c.Files.Rename(ctx, "/tmp/work", "/tmp/done") - c.Files.Remove(ctx, "/tmp/done") - - // 文件内容读写 - c.Files.WriteText(ctx, "/tmp/hello.txt", "Hello, World!") - content, _ := c.Files.ReadText(ctx, "/tmp/hello.txt") - fmt.Println(content) // Hello, World! - - // 二进制读写 - c.Files.Write(ctx, "/tmp/data.bin", []byte{0x00, 0x01, 0x02}) - data, _ := c.Files.Read(ctx, "/tmp/data.bin") -} -``` - ---- - -## 完整示例 - -### sandbox 模式(管理客户端) - -```go -package main - -import ( - "context" - "fmt" - "github.com/openkruise/agents-api/sdk/sandbox" - "log" -) - -func main() { - ctx := context.Background() - - sb, err := sandbox.Create(ctx, "code-interpreter", - sandbox.WithConfig( - sandbox.WithAPIKey("your-api-key"), - sandbox.WithDomain("your.domain.com"), - sandbox.WithProtocol(sandbox.ProtocolPrivate), - ), - sandbox.WithTimeout(600), - ) - if err != nil { - log.Fatal(err) - } - defer sb.Close(ctx) - - fmt.Println("sandbox:", sb.SandboxID()) - - if res, err := sb.Commands.Run(ctx, "uname -a"); err == nil { - fmt.Println(res.Stdout) - } - - sb.Files.MakeDir(ctx, "/tmp/demo") -} - -``` - -### runtime 模式(运行时客户端) - -```go -package main - -import ( - "context" - "fmt" - "github.com/openkruise/agents-api/sdk/runtime" -) - -func main() { - ctx := context.Background() - - c := runtime.New("your-sandbox-id", - runtime.WithDomain("your.domain.com"), - runtime.WithScheme("http"), - runtime.WithRuntimeToken("your-runtime-token"), - ) - - if res, err := c.Commands.Run(ctx, "uname -a"); err == nil { - fmt.Println(res.Stdout) - } - - c.Files.MakeDir(ctx, "/tmp/demo") - - // 文件内容读写 - c.Files.WriteText(ctx, "/tmp/hello.txt", "Hello from Go SDK!") - content, _ := c.Files.ReadText(ctx, "/tmp/hello.txt") - fmt.Println(content) -} - -``` - -更完整的演示可参考: - -- [管理客户端示例](https://github.com/openkruise/agents-api/blob/master/sdk/example/sandbox/main.go) -- [运行时客户端示例](https://github.com/openkruise/agents-api/blob/master/sdk/example/envd_client/main.go) From 4df9e57b23dc7d2c086597b161ece2bbb32c2fe9 Mon Sep 17 00:00:00 2001 From: zhaoqing Date: Thu, 4 Jun 2026 11:52:43 +0800 Subject: [PATCH 2/2] =?UTF-8?q?update=20dir=20clients=20=E2=86=92=20k8s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/publish-maven-central.yml | 10 ++--- docs/sdk-codegen-zh_CN.md | 25 ++++++----- docs/sdk-codegen.md | 44 ++++++++++--------- hack/generate_java_sdk.sh | 2 +- hack/generate_python_sdk.sh | 2 +- hack/patch_sdk_types.sh | 8 ++-- hack/run-k8s-sdk-e2e-test.sh | 4 +- {clients => k8s}/codegen/patch_java_types.py | 0 .../codegen/patch_python_types.py | 0 {clients => k8s}/codegen/type_mapping.yaml | 0 {clients => k8s}/java/.gitignore | 0 {clients => k8s}/java/README.md | 2 +- .../java/docs/generate-model-from-crd.md | 6 +-- {clients => k8s}/java/generate-java-model.sh | 0 {clients => k8s}/java/pom.xml | 0 .../agents/client/e2b/api/SandboxesApi.java | 0 .../client/e2b/api/invoker/ApiCallback.java | 0 .../client/e2b/api/invoker/ApiClient.java | 0 .../client/e2b/api/invoker/ApiException.java | 0 .../client/e2b/api/invoker/ApiResponse.java | 0 .../client/e2b/api/invoker/Configuration.java | 0 .../api/invoker/GzipRequestInterceptor.java | 0 .../agents/client/e2b/api/invoker/JSON.java | 0 .../agents/client/e2b/api/invoker/Pair.java | 0 .../e2b/api/invoker/ProgressRequestBody.java | 0 .../e2b/api/invoker/ProgressResponseBody.java | 0 .../e2b/api/invoker/ServerConfiguration.java | 0 .../e2b/api/invoker/ServerVariable.java | 0 .../client/e2b/api/invoker/StringUtil.java | 0 .../e2b/api/invoker/auth/ApiKeyAuth.java | 0 .../e2b/api/invoker/auth/Authentication.java | 0 .../e2b/api/invoker/auth/HttpBasicAuth.java | 0 .../e2b/api/invoker/auth/HttpBearerAuth.java | 0 .../client/e2b/api/models/AWSRegistry.java | 0 .../e2b/api/models/AbstractOpenApiSchema.java | 0 .../api/models/AdminSandboxKillResult.java | 0 .../api/models/AssignTemplateTagsRequest.java | 0 .../e2b/api/models/AssignedTemplateTags.java | 0 .../client/e2b/api/models/BuildLogEntry.java | 0 .../e2b/api/models/BuildStatusReason.java | 0 .../client/e2b/api/models/ConnectSandbox.java | 0 .../e2b/api/models/CreatedAccessToken.java | 0 .../e2b/api/models/CreatedTeamAPIKey.java | 0 .../api/models/DeleteTemplateTagsRequest.java | 0 .../client/e2b/api/models/DiskMetrics.java | 0 .../agents/client/e2b/api/models/Error.java | 0 .../e2b/api/models/FromImageRegistry.java | 0 .../client/e2b/api/models/GCPRegistry.java | 0 .../e2b/api/models/GeneralRegistry.java | 0 .../api/models/IdentifierMaskingDetails.java | 0 .../client/e2b/api/models/ListedSandbox.java | 0 .../client/e2b/api/models/LogLevel.java | 0 .../client/e2b/api/models/LogsDirection.java | 0 .../client/e2b/api/models/LogsSource.java | 0 .../client/e2b/api/models/MachineInfo.java | 0 .../client/e2b/api/models/MaxTeamMetric.java | 0 .../client/e2b/api/models/NewAccessToken.java | 0 .../client/e2b/api/models/NewSandbox.java | 0 .../client/e2b/api/models/NewTeamAPIKey.java | 0 .../client/e2b/api/models/NewVolume.java | 0 .../agents/client/e2b/api/models/Node.java | 0 .../client/e2b/api/models/NodeDetail.java | 0 .../client/e2b/api/models/NodeMetrics.java | 0 .../client/e2b/api/models/NodeStatus.java | 0 .../e2b/api/models/NodeStatusChange.java | 0 .../api/models/NodesGet200ResponseInner.java | 0 .../client/e2b/api/models/ResumedSandbox.java | 0 .../agents/client/e2b/api/models/Sandbox.java | 0 .../api/models/SandboxAutoResumeConfig.java | 0 .../client/e2b/api/models/SandboxDetail.java | 0 .../client/e2b/api/models/SandboxLog.java | 0 .../e2b/api/models/SandboxLogEntry.java | 0 .../client/e2b/api/models/SandboxLogs.java | 0 .../e2b/api/models/SandboxLogsV2Response.java | 0 .../client/e2b/api/models/SandboxMetric.java | 0 .../e2b/api/models/SandboxNetworkConfig.java | 0 .../client/e2b/api/models/SandboxState.java | 0 .../e2b/api/models/SandboxVolumeMount.java | 0 .../models/SandboxesGet200ResponseInner.java | 0 ...andboxesSandboxIDRefreshesPostRequest.java | 0 ...andboxesSandboxIDSnapshotsPostRequest.java | 0 .../SandboxesSandboxIDTimeoutPostRequest.java | 0 .../e2b/api/models/SandboxesWithMetrics.java | 0 .../client/e2b/api/models/SnapshotInfo.java | 0 .../agents/client/e2b/api/models/Team.java | 0 .../client/e2b/api/models/TeamAPIKey.java | 0 .../client/e2b/api/models/TeamMetric.java | 0 .../client/e2b/api/models/TeamUser.java | 0 .../api/models/TeamsGet200ResponseInner.java | 0 .../client/e2b/api/models/Template.java | 0 .../e2b/api/models/TemplateAliasResponse.java | 0 .../client/e2b/api/models/TemplateBuild.java | 0 .../api/models/TemplateBuildFileUpload.java | 0 .../e2b/api/models/TemplateBuildInfo.java | 0 .../api/models/TemplateBuildLogsResponse.java | 0 .../e2b/api/models/TemplateBuildRequest.java | 0 .../api/models/TemplateBuildRequestV2.java | 0 .../api/models/TemplateBuildRequestV3.java | 0 .../e2b/api/models/TemplateBuildStartV2.java | 0 .../e2b/api/models/TemplateBuildStatus.java | 0 .../client/e2b/api/models/TemplateLegacy.java | 0 .../api/models/TemplateRequestResponseV3.java | 0 .../client/e2b/api/models/TemplateStep.java | 0 .../client/e2b/api/models/TemplateTag.java | 0 .../e2b/api/models/TemplateUpdateRequest.java | 0 .../api/models/TemplateUpdateResponse.java | 0 .../e2b/api/models/TemplateWithBuilds.java | 0 .../models/TemplatesGet200ResponseInner.java | 0 .../e2b/api/models/UpdateTeamAPIKey.java | 0 .../agents/client/e2b/api/models/Volume.java | 0 .../client/e2b/config/ConnectionConfig.java | 0 .../envd/filesystem/CreateWatcherRequest.java | 0 .../CreateWatcherRequestOrBuilder.java | 0 .../filesystem/CreateWatcherResponse.java | 0 .../CreateWatcherResponseOrBuilder.java | 0 .../client/e2b/envd/filesystem/EntryInfo.java | 0 .../envd/filesystem/EntryInfoOrBuilder.java | 0 .../client/e2b/envd/filesystem/EventType.java | 0 .../client/e2b/envd/filesystem/FileType.java | 0 .../e2b/envd/filesystem/FilesystemEvent.java | 0 .../filesystem/FilesystemEventOrBuilder.java | 0 .../e2b/envd/filesystem/FilesystemGrpc.java | 0 .../e2b/envd/filesystem/FilesystemProto.java | 0 .../filesystem/GetWatcherEventsRequest.java | 0 .../GetWatcherEventsRequestOrBuilder.java | 0 .../filesystem/GetWatcherEventsResponse.java | 0 .../GetWatcherEventsResponseOrBuilder.java | 0 .../e2b/envd/filesystem/ListDirRequest.java | 0 .../filesystem/ListDirRequestOrBuilder.java | 0 .../e2b/envd/filesystem/ListDirResponse.java | 0 .../filesystem/ListDirResponseOrBuilder.java | 0 .../e2b/envd/filesystem/MakeDirRequest.java | 0 .../filesystem/MakeDirRequestOrBuilder.java | 0 .../e2b/envd/filesystem/MakeDirResponse.java | 0 .../filesystem/MakeDirResponseOrBuilder.java | 0 .../e2b/envd/filesystem/MoveRequest.java | 0 .../envd/filesystem/MoveRequestOrBuilder.java | 0 .../e2b/envd/filesystem/MoveResponse.java | 0 .../filesystem/MoveResponseOrBuilder.java | 0 .../e2b/envd/filesystem/RemoveRequest.java | 0 .../filesystem/RemoveRequestOrBuilder.java | 0 .../e2b/envd/filesystem/RemoveResponse.java | 0 .../filesystem/RemoveResponseOrBuilder.java | 0 .../envd/filesystem/RemoveWatcherRequest.java | 0 .../RemoveWatcherRequestOrBuilder.java | 0 .../filesystem/RemoveWatcherResponse.java | 0 .../RemoveWatcherResponseOrBuilder.java | 0 .../e2b/envd/filesystem/StatRequest.java | 0 .../envd/filesystem/StatRequestOrBuilder.java | 0 .../e2b/envd/filesystem/StatResponse.java | 0 .../filesystem/StatResponseOrBuilder.java | 0 .../e2b/envd/filesystem/WatchDirRequest.java | 0 .../filesystem/WatchDirRequestOrBuilder.java | 0 .../e2b/envd/filesystem/WatchDirResponse.java | 0 .../filesystem/WatchDirResponseOrBuilder.java | 0 .../e2b/envd/process/CloseStdinRequest.java | 0 .../process/CloseStdinRequestOrBuilder.java | 0 .../e2b/envd/process/CloseStdinResponse.java | 0 .../process/CloseStdinResponseOrBuilder.java | 0 .../e2b/envd/process/ConnectRequest.java | 0 .../envd/process/ConnectRequestOrBuilder.java | 0 .../e2b/envd/process/ConnectResponse.java | 0 .../process/ConnectResponseOrBuilder.java | 0 .../client/e2b/envd/process/ListRequest.java | 0 .../envd/process/ListRequestOrBuilder.java | 0 .../client/e2b/envd/process/ListResponse.java | 0 .../envd/process/ListResponseOrBuilder.java | 0 .../agents/client/e2b/envd/process/PTY.java | 0 .../client/e2b/envd/process/PTYOrBuilder.java | 0 .../e2b/envd/process/ProcessConfig.java | 0 .../envd/process/ProcessConfigOrBuilder.java | 0 .../client/e2b/envd/process/ProcessEvent.java | 0 .../envd/process/ProcessEventOrBuilder.java | 0 .../client/e2b/envd/process/ProcessGrpc.java | 0 .../client/e2b/envd/process/ProcessInfo.java | 0 .../envd/process/ProcessInfoOrBuilder.java | 0 .../client/e2b/envd/process/ProcessInput.java | 0 .../envd/process/ProcessInputOrBuilder.java | 0 .../client/e2b/envd/process/ProcessProto.java | 0 .../e2b/envd/process/ProcessSelector.java | 0 .../process/ProcessSelectorOrBuilder.java | 0 .../e2b/envd/process/SendInputRequest.java | 0 .../process/SendInputRequestOrBuilder.java | 0 .../e2b/envd/process/SendInputResponse.java | 0 .../process/SendInputResponseOrBuilder.java | 0 .../e2b/envd/process/SendSignalRequest.java | 0 .../process/SendSignalRequestOrBuilder.java | 0 .../e2b/envd/process/SendSignalResponse.java | 0 .../process/SendSignalResponseOrBuilder.java | 0 .../client/e2b/envd/process/Signal.java | 0 .../client/e2b/envd/process/StartRequest.java | 0 .../envd/process/StartRequestOrBuilder.java | 0 .../e2b/envd/process/StartResponse.java | 0 .../envd/process/StartResponseOrBuilder.java | 0 .../e2b/envd/process/StreamInputRequest.java | 0 .../process/StreamInputRequestOrBuilder.java | 0 .../e2b/envd/process/StreamInputResponse.java | 0 .../process/StreamInputResponseOrBuilder.java | 0 .../e2b/envd/process/UpdateRequest.java | 0 .../envd/process/UpdateRequestOrBuilder.java | 0 .../e2b/envd/process/UpdateResponse.java | 0 .../envd/process/UpdateResponseOrBuilder.java | 0 .../e2b/example/SandboxClientExample.java | 0 .../exceptions/AuthenticationException.java | 0 .../exceptions/InvalidArgumentException.java | 0 .../e2b/exceptions/NotFoundException.java | 0 .../e2b/exceptions/SandboxException.java | 0 .../e2b/exceptions/TimeoutException.java | 0 .../client/e2b/sandbox/SandboxClient.java | 0 .../e2b/sandbox/commands/CommandHandle.java | 0 .../e2b/sandbox/commands/CommandResult.java | 0 .../client/e2b/sandbox/commands/Commands.java | 0 .../e2b/sandbox/filesystem/Filesystem.java | 0 .../filesystem/WatchDirResponseObserver.java | 0 .../e2b/sandbox/filesystem/WatchHandle.java | 0 .../e2b/utils/PathModifyingInterceptor.java | 0 .../agents/client/e2b/utils/RpcUtils.java | 0 .../client/models/V1alpha1Conditions.java | 0 .../models/V1alpha1DynamicVolumesMount.java | 0 .../client/models/V1alpha1InplaceUpdate.java | 0 .../client/models/V1alpha1Runtimes.java | 0 .../agents/client/models/V1alpha1Sandbox.java | 0 .../client/models/V1alpha1SandboxClaim.java | 0 .../models/V1alpha1SandboxClaimList.java | 0 .../models/V1alpha1SandboxClaimSpec.java | 0 .../models/V1alpha1SandboxClaimStatus.java | 0 .../client/models/V1alpha1SandboxList.java | 0 .../client/models/V1alpha1SandboxSet.java | 0 .../client/models/V1alpha1SandboxSetList.java | 0 .../client/models/V1alpha1SandboxSetSpec.java | 0 .../V1alpha1SandboxSetSpecTemplateRef.java | 0 .../models/V1alpha1SandboxSetStatus.java | 0 .../client/models/V1alpha1SandboxSpec.java | 0 .../client/models/V1alpha1SandboxStatus.java | 0 .../models/V1alpha1SandboxStatusPodInfo.java | 0 .../client/models/V1alpha1ScaleStrategy.java | 0 .../agents/client/v2/models/Checkpoint.java | 0 .../client/v2/models/CheckpointSpec.java | 0 .../client/v2/models/CheckpointStatus.java | 0 .../agents/client/v2/models/Sandbox.java | 0 .../agents/client/v2/models/SandboxClaim.java | 0 .../client/v2/models/SandboxClaimSpec.java | 0 .../client/v2/models/SandboxClaimStatus.java | 0 .../agents/client/v2/models/SandboxSet.java | 0 .../client/v2/models/SandboxSetSpec.java | 0 .../client/v2/models/SandboxSetStatus.java | 0 .../agents/client/v2/models/SandboxSpec.java | 0 .../client/v2/models/SandboxStatus.java | 0 .../client/v2/models/SandboxTemplate.java | 0 .../client/v2/models/SandboxTemplateSpec.java | 0 .../client/v2/models/SandboxUpdateOps.java | 0 .../v2/models/SandboxUpdateOpsSpec.java | 0 .../v2/models/SandboxUpdateOpsStatus.java | 0 .../client/v2/models/SecurityProfile.java | 0 .../client/v2/models/SecurityProfileSpec.java | 0 .../v2/models/SecurityProfileStatus.java | 0 .../sandboxclaimspec/DynamicVolumesMount.java | 0 .../sandboxclaimspec/InplaceUpdate.java | 0 .../v2/models/sandboxclaimspec/Runtimes.java | 0 .../inplaceupdate/Resources.java | 0 .../models/sandboxclaimstatus/Conditions.java | 0 .../v2/models/sandboxsetspec/Runtimes.java | 0 .../models/sandboxsetspec/ScaleStrategy.java | 0 .../v2/models/sandboxsetspec/TemplateRef.java | 0 .../models/sandboxsetspec/UpdateStrategy.java | 0 .../models/sandboxsetstatus/Conditions.java | 0 .../v2/models/sandboxspec/Lifecycle.java | 0 .../v2/models/sandboxspec/Runtimes.java | 0 .../v2/models/sandboxspec/TemplateRef.java | 0 .../v2/models/sandboxspec/UpgradePolicy.java | 0 .../sandboxspec/lifecycle/PostUpgrade.java | 0 .../sandboxspec/lifecycle/PreUpgrade.java | 0 .../lifecycle/postupgrade/Exec.java | 0 .../lifecycle/preupgrade/Exec.java | 0 .../v2/models/sandboxstatus/Conditions.java | 0 .../v2/models/sandboxstatus/PodInfo.java | 0 .../models/sandboxtemplatespec/Runtimes.java | 0 .../sandboxupdateopsspec/Lifecycle.java | 0 .../models/sandboxupdateopsspec/Selector.java | 0 .../sandboxupdateopsspec/UpdateStrategy.java | 0 .../lifecycle/PostUpgrade.java | 0 .../lifecycle/PreUpgrade.java | 0 .../lifecycle/postupgrade/Exec.java | 0 .../lifecycle/preupgrade/Exec.java | 0 .../selector/MatchExpressions.java | 0 .../sandboxupdateopsstatus/Conditions.java | 0 .../v2/models/securityprofilespec/Audit.java | 0 .../v2/models/securityprofilespec/Rules.java | 0 .../models/securityprofilespec/Selector.java | 0 .../securityprofilespec/audit/Webhook.java | 0 .../audit/webhook/Request.java | 0 .../audit/webhook/request/Body.java | 0 .../audit/webhook/request/Headers.java | 0 .../audit/webhook/request/body/Json.java | 0 .../securityprofilespec/rules/Actions.java | 0 .../securityprofilespec/rules/Match.java | 0 .../rules/actions/Audit.java | 0 .../rules/actions/Block.java | 0 .../rules/actions/audit/Webhook.java | 0 .../rules/actions/audit/webhook/Request.java | 0 .../actions/audit/webhook/request/Body.java | 0 .../audit/webhook/request/Headers.java | 0 .../audit/webhook/request/body/Json.java | 0 .../rules/match/Headers.java | 0 .../rules/match/Paths.java | 0 .../rules/match/QueryParams.java | 0 .../selector/MatchExpressions.java | 0 .../securityprofilestatus/Conditions.java | 0 .../agents/client/e2e/v2/BaseE2eTest.java | 0 .../agents/client/e2e/v2/CheckpointTest.java | 0 .../client/e2e/v2/SandboxClaimTest.java | 0 .../agents/client/e2e/v2/SandboxSetTest.java | 0 .../client/e2e/v2/SandboxTemplateTest.java | 0 .../agents/client/e2e/v2/SandboxTest.java | 0 .../client/e2e/v2/SandboxUpdateOpsTest.java | 0 .../client/e2e/v2/SecurityProfileTest.java | 0 {clients => k8s}/python/openkruise/.gitignore | 0 {clients => k8s}/python/openkruise/README.md | 4 +- .../python/openkruise/agents/__init__.py | 0 .../openkruise/agents/models/__init__.py | 0 .../openkruise/agents/models/checkpoint.py | 0 .../openkruise/agents/models/sandbox.py | 0 .../openkruise/agents/models/sandboxclaim.py | 0 .../openkruise/agents/models/sandboxset.py | 0 .../agents/models/sandboxtemplate.py | 0 .../agents/models/sandboxupdateops.py | 0 .../agents/models/securityprofile.py | 0 .../openkruise/agents/sandbox_claim_client.py | 0 .../openkruise/agents/sandbox_client.py | 0 .../openkruise/agents/sandboxset_client.py | 0 .../python/openkruise/configuration.py | 0 .../python/openkruise/generate/generate.md | 2 +- .../generate/generate_crd_models.sh | 0 .../python/openkruise/pyproject.toml | 0 .../python/openkruise/test/__init__.py | 0 .../python/openkruise/test/conftest.py | 0 .../python/openkruise/test/helpers.py | 0 .../python/openkruise/test/test_checkpoint.py | 0 .../python/openkruise/test/test_sandbox.py | 0 .../openkruise/test/test_sandboxclaim.py | 0 .../python/openkruise/test/test_sandboxset.py | 0 .../openkruise/test/test_sandboxtemplate.py | 0 .../openkruise/test/test_sandboxupdateops.py | 0 .../openkruise/test/test_securityprofile.py | 0 {clients => k8s}/python/ruff.toml | 0 345 files changed, 57 insertions(+), 52 deletions(-) rename {clients => k8s}/codegen/patch_java_types.py (100%) rename {clients => k8s}/codegen/patch_python_types.py (100%) rename {clients => k8s}/codegen/type_mapping.yaml (100%) rename {clients => k8s}/java/.gitignore (100%) rename {clients => k8s}/java/README.md (97%) rename {clients => k8s}/java/docs/generate-model-from-crd.md (94%) rename {clients => k8s}/java/generate-java-model.sh (100%) rename {clients => k8s}/java/pom.xml (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/SandboxesApi.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiCallback.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiClient.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiException.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/Configuration.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/GzipRequestInterceptor.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/JSON.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/Pair.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ProgressRequestBody.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ProgressResponseBody.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ServerConfiguration.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ServerVariable.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/StringUtil.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/ApiKeyAuth.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/Authentication.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/HttpBasicAuth.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/HttpBearerAuth.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AWSRegistry.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AbstractOpenApiSchema.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AdminSandboxKillResult.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AssignTemplateTagsRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AssignedTemplateTags.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/BuildLogEntry.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/BuildStatusReason.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ConnectSandbox.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/CreatedAccessToken.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/CreatedTeamAPIKey.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/DeleteTemplateTagsRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/DiskMetrics.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Error.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/FromImageRegistry.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/GCPRegistry.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/GeneralRegistry.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/IdentifierMaskingDetails.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ListedSandbox.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogLevel.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogsDirection.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogsSource.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/MachineInfo.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/MaxTeamMetric.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewAccessToken.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewSandbox.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewTeamAPIKey.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewVolume.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Node.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeDetail.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeMetrics.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeStatus.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeStatusChange.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodesGet200ResponseInner.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ResumedSandbox.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Sandbox.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxAutoResumeConfig.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxDetail.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLog.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogEntry.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogs.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogsV2Response.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxMetric.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxNetworkConfig.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxState.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxVolumeMount.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesGet200ResponseInner.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDRefreshesPostRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDSnapshotsPostRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDTimeoutPostRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesWithMetrics.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SnapshotInfo.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Team.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamAPIKey.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamMetric.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamUser.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamsGet200ResponseInner.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Template.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateAliasResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuild.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildFileUpload.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildInfo.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildLogsResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequestV2.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequestV3.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildStartV2.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildStatus.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateLegacy.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateRequestResponseV3.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateStep.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateTag.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateUpdateRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateUpdateResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateWithBuilds.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplatesGet200ResponseInner.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/UpdateTeamAPIKey.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Volume.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/config/ConnectionConfig.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EntryInfo.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EntryInfoOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EventType.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FileType.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemEvent.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemEventOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemGrpc.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemProto.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/PTY.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/PTYOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessConfig.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessConfigOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessEvent.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessEventOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessGrpc.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInfo.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInfoOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInput.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInputOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessProto.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessSelector.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessSelectorOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/Signal.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateRequest.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateRequestOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateResponse.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateResponseOrBuilder.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/example/SandboxClientExample.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/AuthenticationException.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/InvalidArgumentException.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/NotFoundException.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/SandboxException.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/TimeoutException.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/SandboxClient.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/CommandHandle.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/CommandResult.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/Commands.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/Filesystem.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/WatchDirResponseObserver.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/WatchHandle.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/utils/PathModifyingInterceptor.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/e2b/utils/RpcUtils.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Conditions.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1DynamicVolumesMount.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1InplaceUpdate.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Runtimes.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Sandbox.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaim.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimList.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimSpec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimStatus.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxList.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSet.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetList.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetSpec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetSpecTemplateRef.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetStatus.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSpec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxStatus.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxStatusPodInfo.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/models/V1alpha1ScaleStrategy.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/Checkpoint.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/CheckpointSpec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/CheckpointStatus.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/Sandbox.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaim.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaimSpec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaimStatus.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSet.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSetSpec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSetStatus.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSpec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxStatus.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxTemplate.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxTemplateSpec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOps.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOpsSpec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOpsStatus.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfile.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfileSpec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfileStatus.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/DynamicVolumesMount.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/InplaceUpdate.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/Runtimes.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/inplaceupdate/Resources.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimstatus/Conditions.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/Runtimes.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/ScaleStrategy.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/TemplateRef.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/UpdateStrategy.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetstatus/Conditions.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/Lifecycle.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/Runtimes.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/TemplateRef.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/UpgradePolicy.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/PostUpgrade.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/PreUpgrade.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/postupgrade/Exec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/preupgrade/Exec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxstatus/Conditions.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxstatus/PodInfo.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxtemplatespec/Runtimes.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/Lifecycle.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/Selector.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/UpdateStrategy.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/PostUpgrade.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/PreUpgrade.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/postupgrade/Exec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/preupgrade/Exec.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/selector/MatchExpressions.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsstatus/Conditions.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Audit.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Rules.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Selector.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/Webhook.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/Request.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/Body.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/Headers.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/body/Json.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/Actions.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/Match.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/Audit.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/Block.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/Webhook.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/Request.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/Body.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/Headers.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/body/Json.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/Headers.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/Paths.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/QueryParams.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/selector/MatchExpressions.java (100%) rename {clients => k8s}/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilestatus/Conditions.java (100%) rename {clients => k8s}/java/src/test/java/io/openkruise/agents/client/e2e/v2/BaseE2eTest.java (100%) rename {clients => k8s}/java/src/test/java/io/openkruise/agents/client/e2e/v2/CheckpointTest.java (100%) rename {clients => k8s}/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxClaimTest.java (100%) rename {clients => k8s}/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxSetTest.java (100%) rename {clients => k8s}/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxTemplateTest.java (100%) rename {clients => k8s}/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxTest.java (100%) rename {clients => k8s}/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxUpdateOpsTest.java (100%) rename {clients => k8s}/java/src/test/java/io/openkruise/agents/client/e2e/v2/SecurityProfileTest.java (100%) rename {clients => k8s}/python/openkruise/.gitignore (100%) rename {clients => k8s}/python/openkruise/README.md (97%) rename {clients => k8s}/python/openkruise/agents/__init__.py (100%) rename {clients => k8s}/python/openkruise/agents/models/__init__.py (100%) rename {clients => k8s}/python/openkruise/agents/models/checkpoint.py (100%) rename {clients => k8s}/python/openkruise/agents/models/sandbox.py (100%) rename {clients => k8s}/python/openkruise/agents/models/sandboxclaim.py (100%) rename {clients => k8s}/python/openkruise/agents/models/sandboxset.py (100%) rename {clients => k8s}/python/openkruise/agents/models/sandboxtemplate.py (100%) rename {clients => k8s}/python/openkruise/agents/models/sandboxupdateops.py (100%) rename {clients => k8s}/python/openkruise/agents/models/securityprofile.py (100%) rename {clients => k8s}/python/openkruise/agents/sandbox_claim_client.py (100%) rename {clients => k8s}/python/openkruise/agents/sandbox_client.py (100%) rename {clients => k8s}/python/openkruise/agents/sandboxset_client.py (100%) rename {clients => k8s}/python/openkruise/configuration.py (100%) rename {clients => k8s}/python/openkruise/generate/generate.md (94%) rename {clients => k8s}/python/openkruise/generate/generate_crd_models.sh (100%) rename {clients => k8s}/python/openkruise/pyproject.toml (100%) rename {clients => k8s}/python/openkruise/test/__init__.py (100%) rename {clients => k8s}/python/openkruise/test/conftest.py (100%) rename {clients => k8s}/python/openkruise/test/helpers.py (100%) rename {clients => k8s}/python/openkruise/test/test_checkpoint.py (100%) rename {clients => k8s}/python/openkruise/test/test_sandbox.py (100%) rename {clients => k8s}/python/openkruise/test/test_sandboxclaim.py (100%) rename {clients => k8s}/python/openkruise/test/test_sandboxset.py (100%) rename {clients => k8s}/python/openkruise/test/test_sandboxtemplate.py (100%) rename {clients => k8s}/python/openkruise/test/test_sandboxupdateops.py (100%) rename {clients => k8s}/python/openkruise/test/test_securityprofile.py (100%) rename {clients => k8s}/python/ruff.toml (100%) diff --git a/.github/workflows/publish-maven-central.yml b/.github/workflows/publish-maven-central.yml index ad6017f..09cc2e5 100644 --- a/.github/workflows/publish-maven-central.yml +++ b/.github/workflows/publish-maven-central.yml @@ -64,13 +64,13 @@ jobs: - name: Update version in pom.xml run: | - cd clients/java + cd k8s/java mvn versions:set -DnewVersion=${{ github.event.inputs.version }} mvn versions:commit - name: Build and publish to Maven Central run: | - cd clients/java + cd k8s/java mvn clean deploy -Psign-artifacts -Dgpg.passphrase="${{ secrets.GPG_PASSPHRASE }}" --batch-mode env: GPG_TTY: '' @@ -83,7 +83,7 @@ jobs: with: name: maven-artifacts path: | - clients/java/target/*.jar - clients/java/target/*.pom - clients/java/target/*.asc + k8s/java/target/*.jar + k8s/java/target/*.pom + k8s/java/target/*.asc retention-days: 1 \ No newline at end of file diff --git a/docs/sdk-codegen-zh_CN.md b/docs/sdk-codegen-zh_CN.md index bd88995..4a8d76b 100644 --- a/docs/sdk-codegen-zh_CN.md +++ b/docs/sdk-codegen-zh_CN.md @@ -6,11 +6,11 @@ 项目支持三种语言的 SDK 生成: -| 语言 | 生成工具 | 输出目录 | -|--------|-----------------------------------|-------------------| -| Go | k8s code-generator | `client/` | -| Java | Fabric8 java-generator-cli 6.14.0 | `clients/java/` | -| Python | datamodel-codegen(Pydantic v2) | `clients/python/` | +| 语言 | 生成工具 | 输出目录 | +|--------|-----------------------------------|---------------| +| Go | k8s code-generator | `client/` | +| Java | Fabric8 java-generator-cli 6.14.0 | `k8s/java/` | +| Python | datamodel-codegen(Pydantic v2) | `k8s/python/` | ## 前置依赖 @@ -45,7 +45,8 @@ make generate-all make generate-all SKIP_UPDATE=true ``` -> **⚠️ 注意:** 上游同步通过 GitHub API 下载 CRD 文件,未携带 Token 时可能触发限流(HTTP 403)。如果遇到限流,可以手动将最新的 CRD YAML 文件放到 `agents/crds/` 目录下,然后使用 `SKIP_UPDATE=true` 跳过自动同步。 +> **⚠️ 注意:** 上游同步通过 GitHub API 下载 CRD 文件,未携带 Token 时可能触发限流(HTTP 403)。如果遇到限流,可以手动将最新的 +> CRD YAML 文件放到 `agents/crds/` 目录下,然后使用 `SKIP_UPDATE=true` 跳过自动同步。 ### 单独生成某个语言 @@ -92,14 +93,14 @@ hack/generate_client.sh ``` hack/generate_java_sdk.sh → Fabric8 java-generator-cli - → 输出到 clients/java/.../models/ + → 输出到 k8s/java/.../models/ → hack/patch_sdk_types.sh --java(类型修补) ``` **生成的 Java 模型**位于: ``` -clients/java/src/main/java/io/openkruise/agents/client/v2/models/ +k8s/java/src/main/java/io/openkruise/agents/client/v2/models/ ``` 包含 Sandbox、SandboxSet、SandboxTemplate、SandboxClaim、SandboxUpdateOps、Checkpoint 等所有 CRD 资源的 Java 类型定义。 @@ -112,14 +113,14 @@ clients/java/src/main/java/io/openkruise/agents/client/v2/models/ hack/generate_python_sdk.sh → datamodel-codegen(Pydantic v2) → ruff 格式化 - → 输出到 clients/python/.../models/ + → 输出到 k8s/python/.../models/ → hack/patch_sdk_types.sh --python(类型修补 + ruff 格式化) ``` **生成的 Python 模型**位于: ``` -clients/python/openkruise/agents/models/ +k8s/python/openkruise/agents/models/ ``` 每个 CRD 对应一个 Python 文件(如 `sandbox.py`、`sandboxset.py`),包含 Pydantic BaseModel 类定义。 @@ -141,7 +142,7 @@ CRD 中标记了 `x-kubernetes-preserve-unknown-fields: true` 的字段,在代 ### 修补规则配置 -所有替换规则集中维护在 `clients/codegen/type_mapping.yaml`: +所有替换规则集中维护在 `k8s/codegen/type_mapping.yaml`: ```yaml fields: @@ -184,7 +185,7 @@ fields: agents-api/ ├── agents/crds/ # CRD YAML 定义(数据源) ├── client/ # Go clientset / lister / informer -├── clients/ +├── k8s/ │ ├── codegen/ # 代码生成后处理工具 │ │ ├── type_mapping.yaml # 类型替换规则配置 │ │ ├── patch_java_types.py # Java 类型修补脚本 diff --git a/docs/sdk-codegen.md b/docs/sdk-codegen.md index 4c799dc..35e46fd 100644 --- a/docs/sdk-codegen.md +++ b/docs/sdk-codegen.md @@ -6,11 +6,11 @@ This document describes how to generate multi-language SDK client code for the K The project supports SDK generation for three languages: -| Language | Generator | Output Directory | -| --- | --- | --- | -| Go | k8s code-generator | `client/` | -| Java | Fabric8 java-generator-cli 6.14.0 | `clients/java/` | -| Python | datamodel-codegen (Pydantic v2) | `clients/python/` | +| Language | Generator | Output Directory | +|----------|-----------------------------------|------------------| +| Go | k8s code-generator | `client/` | +| Java | Fabric8 java-generator-cli 6.14.0 | `k8s/java/` | +| Python | datamodel-codegen (Pydantic v2) | `k8s/python/` | ## Prerequisites @@ -45,7 +45,9 @@ make generate-all make generate-all SKIP_UPDATE=true ``` -> **⚠️ Note:** Upstream sync downloads CRD files via the GitHub API. Without a token, you may hit rate limiting (HTTP 403). If this happens, manually place the latest CRD YAML files into the `agents/crds/` directory, then use `SKIP_UPDATE=true` to skip the automatic sync. +> **⚠️ Note:** Upstream sync downloads CRD files via the GitHub API. Without a token, you may hit rate limiting (HTTP +> 403). If this happens, manually place the latest CRD YAML files into the `agents/crds/` directory, then use +`SKIP_UPDATE=true` to skip the automatic sync. ### Generate a Single Language @@ -92,17 +94,18 @@ Uses Fabric8 java-generator-cli to generate Java model classes from CRD YAML def ``` hack/generate_java_sdk.sh → Fabric8 java-generator-cli - → Output: clients/java/.../models/ + → Output: k8s/java/.../models/ → hack/patch_sdk_types.sh --java (type patching) ``` **Generated Java models** are located at: ``` -clients/java/src/main/java/io/openkruise/agents/client/v2/models/ +k8s/java/src/main/java/io/openkruise/agents/client/v2/models/ ``` -This includes Java type definitions for all CRD resources: Sandbox, SandboxSet, SandboxTemplate, SandboxClaim, SandboxUpdateOps, Checkpoint, etc. +This includes Java type definitions for all CRD resources: Sandbox, SandboxSet, SandboxTemplate, SandboxClaim, +SandboxUpdateOps, Checkpoint, etc. ### Python SDK @@ -112,14 +115,14 @@ Uses datamodel-codegen to generate Pydantic v2 models from CRD JSON Schema. hack/generate_python_sdk.sh → datamodel-codegen (Pydantic v2) → ruff formatting - → Output: clients/python/.../models/ + → Output: k8s/python/.../models/ → hack/patch_sdk_types.sh --python (type patching + ruff formatting) ``` **Generated Python models** are located at: ``` -clients/python/openkruise/agents/models/ +k8s/python/openkruise/agents/models/ ``` Each CRD maps to a Python file (e.g. `sandbox.py`, `sandboxset.py`), containing Pydantic BaseModel class definitions. @@ -128,20 +131,21 @@ Each CRD maps to a Python file (e.g. `sandbox.py`, `sandboxset.py`), containing ### Why Is Type Patching Needed? -CRD fields marked with `x-kubernetes-preserve-unknown-fields: true` lose concrete type information during code generation: +CRD fields marked with `x-kubernetes-preserve-unknown-fields: true` lose concrete type information during code +generation: -| Field | Go Type | Java Generated | Python Generated | -| --- | --- | --- | --- | -| `template` | `*corev1.PodTemplateSpec` | `AnyType` ❌ | `Any` ❌ | -| `volumeClaimTemplates` | `[]corev1.PersistentVolumeClaim` | `AnyType` ❌ | `Any` ❌ | -| `metadata` | `metav1.ObjectMeta` | ✅ Correct | `dict[str, Any]` ❌ | -| `patch` | `runtime.RawExtension` | `AnyType` ❌ | ✅ Kept as Any | +| Field | Go Type | Java Generated | Python Generated | +|------------------------|----------------------------------|----------------|--------------------| +| `template` | `*corev1.PodTemplateSpec` | `AnyType` ❌ | `Any` ❌ | +| `volumeClaimTemplates` | `[]corev1.PersistentVolumeClaim` | `AnyType` ❌ | `Any` ❌ | +| `metadata` | `metav1.ObjectMeta` | ✅ Correct | `dict[str, Any]` ❌ | +| `patch` | `runtime.RawExtension` | `AnyType` ❌ | ✅ Kept as Any | The type patching scripts automatically replace these placeholder types with the correct Kubernetes types. ### Patching Rules Configuration -All replacement rules are centrally maintained in `clients/codegen/type_mapping.yaml`: +All replacement rules are centrally maintained in `k8s/codegen/type_mapping.yaml`: ```yaml fields: @@ -184,7 +188,7 @@ When patching runs, the script first prints all planned changes (file, line numb agents-api/ ├── agents/crds/ # CRD YAML definitions (data source) ├── client/ # Go clientset / lister / informer -├── clients/ +├── k8s/ │ ├── codegen/ # Post-generation tooling │ │ ├── type_mapping.yaml # Type replacement rules │ │ ├── patch_java_types.py # Java type patching script diff --git a/hack/generate_java_sdk.sh b/hack/generate_java_sdk.sh index 4ddd930..8c0099c 100755 --- a/hack/generate_java_sdk.sh +++ b/hack/generate_java_sdk.sh @@ -35,7 +35,7 @@ fi # ── Configuration ───────────────────────────────────────────────────────────── FABRIC8_VERSION="6.14.0" CRD_SOURCE_DIR="${PROJECT_ROOT}/agents/crds" -JAVA_TARGET_DIR="${PROJECT_ROOT}/clients/java/src/main/java" +JAVA_TARGET_DIR="${PROJECT_ROOT}/k8s/java/src/main/java" TARGET_PACKAGE="io.openkruise.agents.client.v2.models" CLI_JAR_DIR="${PROJECT_ROOT}/bin" CLI_JAR="${CLI_JAR_DIR}/java-generator-cli-${FABRIC8_VERSION}.jar" diff --git a/hack/generate_python_sdk.sh b/hack/generate_python_sdk.sh index 833a5b7..b34583f 100755 --- a/hack/generate_python_sdk.sh +++ b/hack/generate_python_sdk.sh @@ -36,7 +36,7 @@ fi # ── Configuration ───────────────────────────────────────────────────────────── CRD_SOURCE_DIR="${PROJECT_ROOT}/agents/crds" -MODELS_DIR="${PROJECT_ROOT}/clients/python/openkruise/agents/models" +MODELS_DIR="${PROJECT_ROOT}/k8s/python/openkruise/agents/models" WORK_DIR=$(mktemp -d) trap "rm -rf ${WORK_DIR}" EXIT diff --git a/hack/patch_sdk_types.sh b/hack/patch_sdk_types.sh index 413e491..1566411 100755 --- a/hack/patch_sdk_types.sh +++ b/hack/patch_sdk_types.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Patch generated SDK type placeholders with correct Kubernetes types. # -# Reads replacement rules from clients/codegen/type_mapping.yaml and applies them to +# Reads replacement rules from k8s/codegen/type_mapping.yaml and applies them to # generated Java and Python SDK files. Prints a preview of all changes # before applying. # @@ -17,10 +17,10 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" # ── Configuration ───────────────────────────────────────────────────────────── -CODEGEN_DIR="${PROJECT_ROOT}/clients/codegen" +CODEGEN_DIR="${PROJECT_ROOT}/k8s/codegen" MAPPING_FILE="${CODEGEN_DIR}/type_mapping.yaml" -JAVA_MODELS_DIR="${PROJECT_ROOT}/clients/java/src/main/java/io/openkruise/agents/client/v2/models" -PYTHON_MODELS_DIR="${PROJECT_ROOT}/clients/python/openkruise/agents/models" +JAVA_MODELS_DIR="${PROJECT_ROOT}/k8s/java/src/main/java/io/openkruise/agents/client/v2/models" +PYTHON_MODELS_DIR="${PROJECT_ROOT}/k8s/python/openkruise/agents/models" # ── Parse arguments ─────────────────────────────────────────────────────────── PATCH_JAVA=true diff --git a/hack/run-k8s-sdk-e2e-test.sh b/hack/run-k8s-sdk-e2e-test.sh index fa4f828..722abd1 100755 --- a/hack/run-k8s-sdk-e2e-test.sh +++ b/hack/run-k8s-sdk-e2e-test.sh @@ -76,7 +76,7 @@ run_go_test() { run_java_test() { echo "" echo "=== Running Java v2 SDK E2E Test ===" - cd "${PROJECT_ROOT}/clients/java" + cd "${PROJECT_ROOT}/k8s/java" mvn test -Dtest="io.openkruise.agents.client.e2e.v2.*Test" -q echo "Java v2 SDK E2E Test PASSED" } @@ -84,7 +84,7 @@ run_java_test() { run_python_test() { echo "" echo "=== Running Python SDK E2E Test ===" - cd "${PROJECT_ROOT}/clients/python/openkruise" + cd "${PROJECT_ROOT}/k8s/python/openkruise" pip install -e ".[test]" -q 2>/dev/null || pip3 install -e ".[test]" -q 2>/dev/null python -m pytest test/ -v -s echo "Python SDK E2E Test PASSED" diff --git a/clients/codegen/patch_java_types.py b/k8s/codegen/patch_java_types.py similarity index 100% rename from clients/codegen/patch_java_types.py rename to k8s/codegen/patch_java_types.py diff --git a/clients/codegen/patch_python_types.py b/k8s/codegen/patch_python_types.py similarity index 100% rename from clients/codegen/patch_python_types.py rename to k8s/codegen/patch_python_types.py diff --git a/clients/codegen/type_mapping.yaml b/k8s/codegen/type_mapping.yaml similarity index 100% rename from clients/codegen/type_mapping.yaml rename to k8s/codegen/type_mapping.yaml diff --git a/clients/java/.gitignore b/k8s/java/.gitignore similarity index 100% rename from clients/java/.gitignore rename to k8s/java/.gitignore diff --git a/clients/java/README.md b/k8s/java/README.md similarity index 97% rename from clients/java/README.md rename to k8s/java/README.md index a795f07..f842fa2 100644 --- a/clients/java/README.md +++ b/k8s/java/README.md @@ -1,7 +1,7 @@ # client-java ## Generate -[Guide to generate Java codes from CustomResourceDefinition](/clients/java/docs/generate-model-from-crd.md) +[Guide to generate Java codes from CustomResourceDefinition](/k8s/java/docs/generate-model-from-crd.md) ## Usage diff --git a/clients/java/docs/generate-model-from-crd.md b/k8s/java/docs/generate-model-from-crd.md similarity index 94% rename from clients/java/docs/generate-model-from-crd.md rename to k8s/java/docs/generate-model-from-crd.md index 903c0c4..a079c38 100644 --- a/clients/java/docs/generate-model-from-crd.md +++ b/k8s/java/docs/generate-model-from-crd.md @@ -33,7 +33,7 @@ the bottom of the page. Just click it to download. ## Overview -[generate-java-model.sh](/clients/java/generate-java-model.sh) is a script used to generate Java model classes from OpenKruise Agents CRD (Custom Resource Definitions). +[generate-java-model.sh](/k8s/java/generate-java-model.sh) is a script used to generate Java model classes from OpenKruise Agents CRD (Custom Resource Definitions). ## Prerequisites @@ -52,7 +52,7 @@ This script supports the following environment variable configurations: ### Running the Script ``` -cd clients/java +cd k8s/java bash generate-java-model.sh ``` @@ -78,7 +78,7 @@ The generated Java model classes will be placed in the current working directory ## Customizing Output Directory Configuration -If you need to customize the output directory, you should modify [generate-java-model.sh](/clients/java/generate-java-model.sh) -u, -n, and -p parameters in the file: +If you need to customize the output directory, you should modify [generate-java-model.sh](/k8s/java/generate-java-model.sh) -u, -n, and -p parameters in the file: ### Parameters Explanation - **`-u`**: Specifies the URL addresses of CRD YAML files diff --git a/clients/java/generate-java-model.sh b/k8s/java/generate-java-model.sh similarity index 100% rename from clients/java/generate-java-model.sh rename to k8s/java/generate-java-model.sh diff --git a/clients/java/pom.xml b/k8s/java/pom.xml similarity index 100% rename from clients/java/pom.xml rename to k8s/java/pom.xml diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/SandboxesApi.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/SandboxesApi.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/SandboxesApi.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/SandboxesApi.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiCallback.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiCallback.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiCallback.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiCallback.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiClient.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiClient.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiClient.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiClient.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiException.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiException.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiException.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiException.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ApiResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/Configuration.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/Configuration.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/Configuration.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/Configuration.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/GzipRequestInterceptor.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/GzipRequestInterceptor.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/GzipRequestInterceptor.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/GzipRequestInterceptor.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/JSON.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/JSON.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/JSON.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/JSON.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/Pair.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/Pair.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/Pair.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/Pair.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ProgressRequestBody.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ProgressRequestBody.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ProgressRequestBody.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ProgressRequestBody.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ProgressResponseBody.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ProgressResponseBody.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ProgressResponseBody.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ProgressResponseBody.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ServerConfiguration.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ServerConfiguration.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ServerConfiguration.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ServerConfiguration.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ServerVariable.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ServerVariable.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ServerVariable.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/ServerVariable.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/StringUtil.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/StringUtil.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/StringUtil.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/StringUtil.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/ApiKeyAuth.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/ApiKeyAuth.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/ApiKeyAuth.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/ApiKeyAuth.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/Authentication.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/Authentication.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/Authentication.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/Authentication.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/HttpBasicAuth.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/HttpBasicAuth.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/HttpBasicAuth.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/HttpBasicAuth.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/HttpBearerAuth.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/HttpBearerAuth.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/HttpBearerAuth.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/invoker/auth/HttpBearerAuth.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AWSRegistry.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AWSRegistry.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AWSRegistry.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AWSRegistry.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AbstractOpenApiSchema.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AbstractOpenApiSchema.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AbstractOpenApiSchema.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AbstractOpenApiSchema.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AdminSandboxKillResult.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AdminSandboxKillResult.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AdminSandboxKillResult.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AdminSandboxKillResult.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AssignTemplateTagsRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AssignTemplateTagsRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AssignTemplateTagsRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AssignTemplateTagsRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AssignedTemplateTags.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AssignedTemplateTags.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AssignedTemplateTags.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/AssignedTemplateTags.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/BuildLogEntry.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/BuildLogEntry.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/BuildLogEntry.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/BuildLogEntry.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/BuildStatusReason.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/BuildStatusReason.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/BuildStatusReason.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/BuildStatusReason.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ConnectSandbox.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ConnectSandbox.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ConnectSandbox.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ConnectSandbox.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/CreatedAccessToken.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/CreatedAccessToken.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/CreatedAccessToken.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/CreatedAccessToken.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/CreatedTeamAPIKey.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/CreatedTeamAPIKey.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/CreatedTeamAPIKey.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/CreatedTeamAPIKey.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/DeleteTemplateTagsRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/DeleteTemplateTagsRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/DeleteTemplateTagsRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/DeleteTemplateTagsRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/DiskMetrics.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/DiskMetrics.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/DiskMetrics.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/DiskMetrics.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Error.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Error.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Error.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Error.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/FromImageRegistry.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/FromImageRegistry.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/FromImageRegistry.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/FromImageRegistry.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/GCPRegistry.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/GCPRegistry.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/GCPRegistry.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/GCPRegistry.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/GeneralRegistry.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/GeneralRegistry.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/GeneralRegistry.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/GeneralRegistry.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/IdentifierMaskingDetails.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/IdentifierMaskingDetails.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/IdentifierMaskingDetails.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/IdentifierMaskingDetails.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ListedSandbox.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ListedSandbox.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ListedSandbox.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ListedSandbox.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogLevel.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogLevel.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogLevel.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogLevel.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogsDirection.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogsDirection.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogsDirection.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogsDirection.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogsSource.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogsSource.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogsSource.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/LogsSource.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/MachineInfo.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/MachineInfo.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/MachineInfo.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/MachineInfo.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/MaxTeamMetric.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/MaxTeamMetric.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/MaxTeamMetric.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/MaxTeamMetric.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewAccessToken.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewAccessToken.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewAccessToken.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewAccessToken.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewSandbox.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewSandbox.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewSandbox.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewSandbox.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewTeamAPIKey.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewTeamAPIKey.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewTeamAPIKey.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewTeamAPIKey.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewVolume.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewVolume.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewVolume.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NewVolume.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Node.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Node.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Node.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Node.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeDetail.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeDetail.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeDetail.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeDetail.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeMetrics.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeMetrics.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeMetrics.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeMetrics.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeStatus.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeStatus.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeStatus.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeStatus.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeStatusChange.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeStatusChange.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeStatusChange.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodeStatusChange.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodesGet200ResponseInner.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodesGet200ResponseInner.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodesGet200ResponseInner.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/NodesGet200ResponseInner.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ResumedSandbox.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ResumedSandbox.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ResumedSandbox.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/ResumedSandbox.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Sandbox.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Sandbox.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Sandbox.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Sandbox.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxAutoResumeConfig.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxAutoResumeConfig.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxAutoResumeConfig.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxAutoResumeConfig.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxDetail.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxDetail.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxDetail.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxDetail.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLog.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLog.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLog.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLog.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogEntry.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogEntry.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogEntry.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogEntry.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogs.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogs.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogs.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogs.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogsV2Response.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogsV2Response.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogsV2Response.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxLogsV2Response.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxMetric.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxMetric.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxMetric.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxMetric.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxNetworkConfig.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxNetworkConfig.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxNetworkConfig.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxNetworkConfig.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxState.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxState.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxState.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxState.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxVolumeMount.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxVolumeMount.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxVolumeMount.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxVolumeMount.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesGet200ResponseInner.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesGet200ResponseInner.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesGet200ResponseInner.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesGet200ResponseInner.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDRefreshesPostRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDRefreshesPostRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDRefreshesPostRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDRefreshesPostRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDSnapshotsPostRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDSnapshotsPostRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDSnapshotsPostRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDSnapshotsPostRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDTimeoutPostRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDTimeoutPostRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDTimeoutPostRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesSandboxIDTimeoutPostRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesWithMetrics.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesWithMetrics.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesWithMetrics.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SandboxesWithMetrics.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SnapshotInfo.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SnapshotInfo.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SnapshotInfo.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/SnapshotInfo.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Team.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Team.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Team.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Team.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamAPIKey.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamAPIKey.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamAPIKey.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamAPIKey.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamMetric.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamMetric.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamMetric.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamMetric.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamUser.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamUser.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamUser.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamUser.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamsGet200ResponseInner.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamsGet200ResponseInner.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamsGet200ResponseInner.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TeamsGet200ResponseInner.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Template.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Template.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Template.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Template.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateAliasResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateAliasResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateAliasResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateAliasResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuild.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuild.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuild.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuild.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildFileUpload.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildFileUpload.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildFileUpload.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildFileUpload.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildInfo.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildInfo.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildInfo.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildInfo.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildLogsResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildLogsResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildLogsResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildLogsResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequestV2.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequestV2.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequestV2.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequestV2.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequestV3.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequestV3.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequestV3.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildRequestV3.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildStartV2.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildStartV2.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildStartV2.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildStartV2.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildStatus.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildStatus.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildStatus.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateBuildStatus.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateLegacy.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateLegacy.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateLegacy.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateLegacy.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateRequestResponseV3.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateRequestResponseV3.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateRequestResponseV3.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateRequestResponseV3.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateStep.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateStep.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateStep.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateStep.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateTag.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateTag.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateTag.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateTag.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateUpdateRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateUpdateRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateUpdateRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateUpdateRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateUpdateResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateUpdateResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateUpdateResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateUpdateResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateWithBuilds.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateWithBuilds.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateWithBuilds.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplateWithBuilds.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplatesGet200ResponseInner.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplatesGet200ResponseInner.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplatesGet200ResponseInner.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/TemplatesGet200ResponseInner.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/UpdateTeamAPIKey.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/UpdateTeamAPIKey.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/UpdateTeamAPIKey.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/UpdateTeamAPIKey.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Volume.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Volume.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Volume.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/api/models/Volume.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/config/ConnectionConfig.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/config/ConnectionConfig.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/config/ConnectionConfig.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/config/ConnectionConfig.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/CreateWatcherResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EntryInfo.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EntryInfo.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EntryInfo.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EntryInfo.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EntryInfoOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EntryInfoOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EntryInfoOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EntryInfoOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EventType.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EventType.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EventType.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/EventType.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FileType.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FileType.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FileType.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FileType.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemEvent.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemEvent.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemEvent.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemEvent.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemEventOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemEventOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemEventOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemEventOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemGrpc.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemGrpc.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemGrpc.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemGrpc.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemProto.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemProto.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemProto.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/FilesystemProto.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/GetWatcherEventsResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/ListDirResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MakeDirResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/MoveResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/RemoveWatcherResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/StatResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/filesystem/WatchDirResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/CloseStdinResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ConnectResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ListResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/PTY.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/PTY.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/PTY.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/PTY.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/PTYOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/PTYOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/PTYOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/PTYOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessConfig.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessConfig.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessConfig.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessConfig.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessConfigOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessConfigOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessConfigOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessConfigOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessEvent.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessEvent.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessEvent.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessEvent.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessEventOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessEventOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessEventOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessEventOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessGrpc.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessGrpc.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessGrpc.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessGrpc.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInfo.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInfo.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInfo.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInfo.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInfoOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInfoOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInfoOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInfoOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInput.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInput.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInput.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInput.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInputOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInputOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInputOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessInputOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessProto.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessProto.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessProto.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessProto.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessSelector.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessSelector.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessSelector.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessSelector.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessSelectorOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessSelectorOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessSelectorOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/ProcessSelectorOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendInputResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/SendSignalResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/Signal.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/Signal.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/Signal.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/Signal.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StartResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/StreamInputResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateRequest.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateRequest.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateRequest.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateRequest.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateRequestOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateRequestOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateRequestOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateRequestOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateResponse.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateResponse.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateResponse.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateResponse.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateResponseOrBuilder.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateResponseOrBuilder.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateResponseOrBuilder.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/envd/process/UpdateResponseOrBuilder.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/example/SandboxClientExample.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/example/SandboxClientExample.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/example/SandboxClientExample.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/example/SandboxClientExample.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/AuthenticationException.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/AuthenticationException.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/AuthenticationException.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/AuthenticationException.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/InvalidArgumentException.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/InvalidArgumentException.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/InvalidArgumentException.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/InvalidArgumentException.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/NotFoundException.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/NotFoundException.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/NotFoundException.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/NotFoundException.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/SandboxException.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/SandboxException.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/SandboxException.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/SandboxException.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/TimeoutException.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/TimeoutException.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/TimeoutException.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/exceptions/TimeoutException.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/SandboxClient.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/SandboxClient.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/SandboxClient.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/SandboxClient.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/CommandHandle.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/CommandHandle.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/CommandHandle.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/CommandHandle.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/CommandResult.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/CommandResult.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/CommandResult.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/CommandResult.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/Commands.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/Commands.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/Commands.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/commands/Commands.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/Filesystem.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/Filesystem.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/Filesystem.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/Filesystem.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/WatchDirResponseObserver.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/WatchDirResponseObserver.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/WatchDirResponseObserver.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/WatchDirResponseObserver.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/WatchHandle.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/WatchHandle.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/WatchHandle.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/sandbox/filesystem/WatchHandle.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/utils/PathModifyingInterceptor.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/utils/PathModifyingInterceptor.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/utils/PathModifyingInterceptor.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/utils/PathModifyingInterceptor.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/e2b/utils/RpcUtils.java b/k8s/java/src/main/java/io/openkruise/agents/client/e2b/utils/RpcUtils.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/e2b/utils/RpcUtils.java rename to k8s/java/src/main/java/io/openkruise/agents/client/e2b/utils/RpcUtils.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Conditions.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Conditions.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Conditions.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Conditions.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1DynamicVolumesMount.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1DynamicVolumesMount.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1DynamicVolumesMount.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1DynamicVolumesMount.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1InplaceUpdate.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1InplaceUpdate.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1InplaceUpdate.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1InplaceUpdate.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Runtimes.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Runtimes.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Runtimes.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Runtimes.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Sandbox.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Sandbox.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Sandbox.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1Sandbox.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaim.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaim.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaim.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaim.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimList.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimList.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimList.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimList.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimSpec.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimSpec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimSpec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimSpec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimStatus.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimStatus.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimStatus.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxClaimStatus.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxList.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxList.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxList.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxList.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSet.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSet.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSet.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSet.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetList.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetList.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetList.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetList.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetSpec.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetSpec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetSpec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetSpec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetSpecTemplateRef.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetSpecTemplateRef.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetSpecTemplateRef.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetSpecTemplateRef.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetStatus.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetStatus.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetStatus.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSetStatus.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSpec.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSpec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSpec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxSpec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxStatus.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxStatus.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxStatus.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxStatus.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxStatusPodInfo.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxStatusPodInfo.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxStatusPodInfo.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1SandboxStatusPodInfo.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1ScaleStrategy.java b/k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1ScaleStrategy.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/models/V1alpha1ScaleStrategy.java rename to k8s/java/src/main/java/io/openkruise/agents/client/models/V1alpha1ScaleStrategy.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/Checkpoint.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/Checkpoint.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/Checkpoint.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/Checkpoint.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/CheckpointSpec.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/CheckpointSpec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/CheckpointSpec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/CheckpointSpec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/CheckpointStatus.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/CheckpointStatus.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/CheckpointStatus.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/CheckpointStatus.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/Sandbox.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/Sandbox.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/Sandbox.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/Sandbox.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaim.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaim.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaim.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaim.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaimSpec.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaimSpec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaimSpec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaimSpec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaimStatus.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaimStatus.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaimStatus.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxClaimStatus.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSet.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSet.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSet.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSet.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSetSpec.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSetSpec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSetSpec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSetSpec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSetStatus.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSetStatus.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSetStatus.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSetStatus.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSpec.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSpec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSpec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxSpec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxStatus.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxStatus.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxStatus.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxStatus.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxTemplate.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxTemplate.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxTemplate.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxTemplate.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxTemplateSpec.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxTemplateSpec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxTemplateSpec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxTemplateSpec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOps.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOps.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOps.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOps.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOpsSpec.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOpsSpec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOpsSpec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOpsSpec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOpsStatus.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOpsStatus.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOpsStatus.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SandboxUpdateOpsStatus.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfile.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfile.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfile.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfile.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfileSpec.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfileSpec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfileSpec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfileSpec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfileStatus.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfileStatus.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfileStatus.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/SecurityProfileStatus.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/DynamicVolumesMount.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/DynamicVolumesMount.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/DynamicVolumesMount.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/DynamicVolumesMount.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/InplaceUpdate.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/InplaceUpdate.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/InplaceUpdate.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/InplaceUpdate.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/Runtimes.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/Runtimes.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/Runtimes.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/Runtimes.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/inplaceupdate/Resources.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/inplaceupdate/Resources.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/inplaceupdate/Resources.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimspec/inplaceupdate/Resources.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimstatus/Conditions.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimstatus/Conditions.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimstatus/Conditions.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxclaimstatus/Conditions.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/Runtimes.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/Runtimes.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/Runtimes.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/Runtimes.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/ScaleStrategy.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/ScaleStrategy.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/ScaleStrategy.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/ScaleStrategy.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/TemplateRef.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/TemplateRef.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/TemplateRef.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/TemplateRef.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/UpdateStrategy.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/UpdateStrategy.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/UpdateStrategy.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetspec/UpdateStrategy.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetstatus/Conditions.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetstatus/Conditions.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetstatus/Conditions.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxsetstatus/Conditions.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/Lifecycle.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/Lifecycle.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/Lifecycle.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/Lifecycle.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/Runtimes.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/Runtimes.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/Runtimes.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/Runtimes.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/TemplateRef.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/TemplateRef.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/TemplateRef.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/TemplateRef.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/UpgradePolicy.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/UpgradePolicy.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/UpgradePolicy.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/UpgradePolicy.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/PostUpgrade.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/PostUpgrade.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/PostUpgrade.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/PostUpgrade.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/PreUpgrade.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/PreUpgrade.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/PreUpgrade.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/PreUpgrade.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/postupgrade/Exec.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/postupgrade/Exec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/postupgrade/Exec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/postupgrade/Exec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/preupgrade/Exec.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/preupgrade/Exec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/preupgrade/Exec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxspec/lifecycle/preupgrade/Exec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxstatus/Conditions.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxstatus/Conditions.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxstatus/Conditions.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxstatus/Conditions.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxstatus/PodInfo.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxstatus/PodInfo.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxstatus/PodInfo.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxstatus/PodInfo.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxtemplatespec/Runtimes.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxtemplatespec/Runtimes.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxtemplatespec/Runtimes.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxtemplatespec/Runtimes.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/Lifecycle.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/Lifecycle.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/Lifecycle.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/Lifecycle.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/Selector.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/Selector.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/Selector.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/Selector.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/UpdateStrategy.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/UpdateStrategy.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/UpdateStrategy.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/UpdateStrategy.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/PostUpgrade.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/PostUpgrade.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/PostUpgrade.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/PostUpgrade.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/PreUpgrade.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/PreUpgrade.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/PreUpgrade.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/PreUpgrade.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/postupgrade/Exec.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/postupgrade/Exec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/postupgrade/Exec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/postupgrade/Exec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/preupgrade/Exec.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/preupgrade/Exec.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/preupgrade/Exec.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/lifecycle/preupgrade/Exec.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/selector/MatchExpressions.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/selector/MatchExpressions.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/selector/MatchExpressions.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsspec/selector/MatchExpressions.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsstatus/Conditions.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsstatus/Conditions.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsstatus/Conditions.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/sandboxupdateopsstatus/Conditions.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Audit.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Audit.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Audit.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Audit.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Rules.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Rules.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Rules.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Rules.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Selector.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Selector.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Selector.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/Selector.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/Webhook.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/Webhook.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/Webhook.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/Webhook.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/Request.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/Request.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/Request.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/Request.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/Body.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/Body.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/Body.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/Body.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/Headers.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/Headers.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/Headers.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/Headers.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/body/Json.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/body/Json.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/body/Json.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/audit/webhook/request/body/Json.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/Actions.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/Actions.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/Actions.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/Actions.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/Match.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/Match.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/Match.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/Match.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/Audit.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/Audit.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/Audit.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/Audit.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/Block.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/Block.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/Block.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/Block.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/Webhook.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/Webhook.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/Webhook.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/Webhook.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/Request.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/Request.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/Request.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/Request.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/Body.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/Body.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/Body.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/Body.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/Headers.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/Headers.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/Headers.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/Headers.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/body/Json.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/body/Json.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/body/Json.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/actions/audit/webhook/request/body/Json.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/Headers.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/Headers.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/Headers.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/Headers.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/Paths.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/Paths.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/Paths.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/Paths.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/QueryParams.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/QueryParams.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/QueryParams.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/rules/match/QueryParams.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/selector/MatchExpressions.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/selector/MatchExpressions.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/selector/MatchExpressions.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilespec/selector/MatchExpressions.java diff --git a/clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilestatus/Conditions.java b/k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilestatus/Conditions.java similarity index 100% rename from clients/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilestatus/Conditions.java rename to k8s/java/src/main/java/io/openkruise/agents/client/v2/models/securityprofilestatus/Conditions.java diff --git a/clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/BaseE2eTest.java b/k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/BaseE2eTest.java similarity index 100% rename from clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/BaseE2eTest.java rename to k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/BaseE2eTest.java diff --git a/clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/CheckpointTest.java b/k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/CheckpointTest.java similarity index 100% rename from clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/CheckpointTest.java rename to k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/CheckpointTest.java diff --git a/clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxClaimTest.java b/k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxClaimTest.java similarity index 100% rename from clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxClaimTest.java rename to k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxClaimTest.java diff --git a/clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxSetTest.java b/k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxSetTest.java similarity index 100% rename from clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxSetTest.java rename to k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxSetTest.java diff --git a/clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxTemplateTest.java b/k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxTemplateTest.java similarity index 100% rename from clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxTemplateTest.java rename to k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxTemplateTest.java diff --git a/clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxTest.java b/k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxTest.java similarity index 100% rename from clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxTest.java rename to k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxTest.java diff --git a/clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxUpdateOpsTest.java b/k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxUpdateOpsTest.java similarity index 100% rename from clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxUpdateOpsTest.java rename to k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SandboxUpdateOpsTest.java diff --git a/clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SecurityProfileTest.java b/k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SecurityProfileTest.java similarity index 100% rename from clients/java/src/test/java/io/openkruise/agents/client/e2e/v2/SecurityProfileTest.java rename to k8s/java/src/test/java/io/openkruise/agents/client/e2e/v2/SecurityProfileTest.java diff --git a/clients/python/openkruise/.gitignore b/k8s/python/openkruise/.gitignore similarity index 100% rename from clients/python/openkruise/.gitignore rename to k8s/python/openkruise/.gitignore diff --git a/clients/python/openkruise/README.md b/k8s/python/openkruise/README.md similarity index 97% rename from clients/python/openkruise/README.md rename to k8s/python/openkruise/README.md index 06958e5..2fe9d6d 100644 --- a/clients/python/openkruise/README.md +++ b/k8s/python/openkruise/README.md @@ -19,14 +19,14 @@ The Agents API Python Client is a comprehensive library for managing Sandbox and ```bash # Replace "main" with a specific version tag (e.g., "v0.1.0") from # https://github.com/openkruise/agents-api/releases to pin a version tag. -pip install git+https://github.com/openkruise/agents-api.git@${VERSION}#subdirectory=clients/python/openkruise +pip install git+https://github.com/openkruise/agents-api.git@${VERSION}#subdirectory=k8s/python/openkruise ``` ### Install from Source ```bash git clone https://github.com/openkruise/agents-api.git -cd clients/python/openkruise +cd k8s/python/openkruise pip install -e . ``` diff --git a/clients/python/openkruise/agents/__init__.py b/k8s/python/openkruise/agents/__init__.py similarity index 100% rename from clients/python/openkruise/agents/__init__.py rename to k8s/python/openkruise/agents/__init__.py diff --git a/clients/python/openkruise/agents/models/__init__.py b/k8s/python/openkruise/agents/models/__init__.py similarity index 100% rename from clients/python/openkruise/agents/models/__init__.py rename to k8s/python/openkruise/agents/models/__init__.py diff --git a/clients/python/openkruise/agents/models/checkpoint.py b/k8s/python/openkruise/agents/models/checkpoint.py similarity index 100% rename from clients/python/openkruise/agents/models/checkpoint.py rename to k8s/python/openkruise/agents/models/checkpoint.py diff --git a/clients/python/openkruise/agents/models/sandbox.py b/k8s/python/openkruise/agents/models/sandbox.py similarity index 100% rename from clients/python/openkruise/agents/models/sandbox.py rename to k8s/python/openkruise/agents/models/sandbox.py diff --git a/clients/python/openkruise/agents/models/sandboxclaim.py b/k8s/python/openkruise/agents/models/sandboxclaim.py similarity index 100% rename from clients/python/openkruise/agents/models/sandboxclaim.py rename to k8s/python/openkruise/agents/models/sandboxclaim.py diff --git a/clients/python/openkruise/agents/models/sandboxset.py b/k8s/python/openkruise/agents/models/sandboxset.py similarity index 100% rename from clients/python/openkruise/agents/models/sandboxset.py rename to k8s/python/openkruise/agents/models/sandboxset.py diff --git a/clients/python/openkruise/agents/models/sandboxtemplate.py b/k8s/python/openkruise/agents/models/sandboxtemplate.py similarity index 100% rename from clients/python/openkruise/agents/models/sandboxtemplate.py rename to k8s/python/openkruise/agents/models/sandboxtemplate.py diff --git a/clients/python/openkruise/agents/models/sandboxupdateops.py b/k8s/python/openkruise/agents/models/sandboxupdateops.py similarity index 100% rename from clients/python/openkruise/agents/models/sandboxupdateops.py rename to k8s/python/openkruise/agents/models/sandboxupdateops.py diff --git a/clients/python/openkruise/agents/models/securityprofile.py b/k8s/python/openkruise/agents/models/securityprofile.py similarity index 100% rename from clients/python/openkruise/agents/models/securityprofile.py rename to k8s/python/openkruise/agents/models/securityprofile.py diff --git a/clients/python/openkruise/agents/sandbox_claim_client.py b/k8s/python/openkruise/agents/sandbox_claim_client.py similarity index 100% rename from clients/python/openkruise/agents/sandbox_claim_client.py rename to k8s/python/openkruise/agents/sandbox_claim_client.py diff --git a/clients/python/openkruise/agents/sandbox_client.py b/k8s/python/openkruise/agents/sandbox_client.py similarity index 100% rename from clients/python/openkruise/agents/sandbox_client.py rename to k8s/python/openkruise/agents/sandbox_client.py diff --git a/clients/python/openkruise/agents/sandboxset_client.py b/k8s/python/openkruise/agents/sandboxset_client.py similarity index 100% rename from clients/python/openkruise/agents/sandboxset_client.py rename to k8s/python/openkruise/agents/sandboxset_client.py diff --git a/clients/python/openkruise/configuration.py b/k8s/python/openkruise/configuration.py similarity index 100% rename from clients/python/openkruise/configuration.py rename to k8s/python/openkruise/configuration.py diff --git a/clients/python/openkruise/generate/generate.md b/k8s/python/openkruise/generate/generate.md similarity index 94% rename from clients/python/openkruise/generate/generate.md rename to k8s/python/openkruise/generate/generate.md index cf71d8c..5fdbe9b 100644 --- a/clients/python/openkruise/generate/generate.md +++ b/k8s/python/openkruise/generate/generate.md @@ -44,7 +44,7 @@ The script generates the following files: - **JSON Schemas**: Stored in the `schemas/` directory. - **Python Models**: Stored in the `models/` directory. -Each generated model file corresponds to a specific Kubernetes CRD (e.g., [sandbox.py](file:///Users/issuser/codes/ZhaoQing7892/agents-api/clients/python/openkruise/agents/models/sandbox.py), [sandboxset.py](file:///Users/issuser/codes/ZhaoQing7892/agents-api/clients/python/openkruise/agents/models/sandboxset.py)). +Each generated model file corresponds to a specific Kubernetes CRD (e.g., [sandbox.py](file:///Users/issuser/codes/ZhaoQing7892/agents-api/k8s/python/openkruise/agents/models/sandbox.py), [sandboxset.py](file:///Users/issuser/codes/ZhaoQing7892/agents-api/k8s/python/openkruise/agents/models/sandboxset.py)). ## Customization diff --git a/clients/python/openkruise/generate/generate_crd_models.sh b/k8s/python/openkruise/generate/generate_crd_models.sh similarity index 100% rename from clients/python/openkruise/generate/generate_crd_models.sh rename to k8s/python/openkruise/generate/generate_crd_models.sh diff --git a/clients/python/openkruise/pyproject.toml b/k8s/python/openkruise/pyproject.toml similarity index 100% rename from clients/python/openkruise/pyproject.toml rename to k8s/python/openkruise/pyproject.toml diff --git a/clients/python/openkruise/test/__init__.py b/k8s/python/openkruise/test/__init__.py similarity index 100% rename from clients/python/openkruise/test/__init__.py rename to k8s/python/openkruise/test/__init__.py diff --git a/clients/python/openkruise/test/conftest.py b/k8s/python/openkruise/test/conftest.py similarity index 100% rename from clients/python/openkruise/test/conftest.py rename to k8s/python/openkruise/test/conftest.py diff --git a/clients/python/openkruise/test/helpers.py b/k8s/python/openkruise/test/helpers.py similarity index 100% rename from clients/python/openkruise/test/helpers.py rename to k8s/python/openkruise/test/helpers.py diff --git a/clients/python/openkruise/test/test_checkpoint.py b/k8s/python/openkruise/test/test_checkpoint.py similarity index 100% rename from clients/python/openkruise/test/test_checkpoint.py rename to k8s/python/openkruise/test/test_checkpoint.py diff --git a/clients/python/openkruise/test/test_sandbox.py b/k8s/python/openkruise/test/test_sandbox.py similarity index 100% rename from clients/python/openkruise/test/test_sandbox.py rename to k8s/python/openkruise/test/test_sandbox.py diff --git a/clients/python/openkruise/test/test_sandboxclaim.py b/k8s/python/openkruise/test/test_sandboxclaim.py similarity index 100% rename from clients/python/openkruise/test/test_sandboxclaim.py rename to k8s/python/openkruise/test/test_sandboxclaim.py diff --git a/clients/python/openkruise/test/test_sandboxset.py b/k8s/python/openkruise/test/test_sandboxset.py similarity index 100% rename from clients/python/openkruise/test/test_sandboxset.py rename to k8s/python/openkruise/test/test_sandboxset.py diff --git a/clients/python/openkruise/test/test_sandboxtemplate.py b/k8s/python/openkruise/test/test_sandboxtemplate.py similarity index 100% rename from clients/python/openkruise/test/test_sandboxtemplate.py rename to k8s/python/openkruise/test/test_sandboxtemplate.py diff --git a/clients/python/openkruise/test/test_sandboxupdateops.py b/k8s/python/openkruise/test/test_sandboxupdateops.py similarity index 100% rename from clients/python/openkruise/test/test_sandboxupdateops.py rename to k8s/python/openkruise/test/test_sandboxupdateops.py diff --git a/clients/python/openkruise/test/test_securityprofile.py b/k8s/python/openkruise/test/test_securityprofile.py similarity index 100% rename from clients/python/openkruise/test/test_securityprofile.py rename to k8s/python/openkruise/test/test_securityprofile.py diff --git a/clients/python/ruff.toml b/k8s/python/ruff.toml similarity index 100% rename from clients/python/ruff.toml rename to k8s/python/ruff.toml