From 8a3d8596e5d4c97388c1fc8110556b5aced37713 Mon Sep 17 00:00:00 2001 From: AnyEnv Sandbox Date: Sun, 25 Oct 2026 19:45:14 +0000 Subject: [PATCH 1/2] docs: align current guides and fixtures with public a6 --- .agents/README.md | 36 +- .../2026-10-25-public-a6-cloud-examples.json | 336 ++++++++++++++++++ .../verify/2026-10-25-public-a6-delivery.json | 317 +++++++++++++++++ .../verify/2026-10-25-public-a6-delivery.md | 97 +++++ .../2026-10-25-public-a6-example-cleanup.json | 97 +++++ ...2026-10-25-public-a6-example-manifest.json | 80 +++++ .../verify/2026-10-25-public-a6-examples.md | 115 ++++++ .../2026-10-25-public-a6-local-examples.json | 227 ++++++++++++ .../2026-10-25-sandbox-help-namespace.md | 10 +- .../2026-10-25-template-help-imports.md | 10 +- .../process/2026-10-25-current-public-a6.md | 59 +++ .github/workflows/ci.yml | 2 +- CHANGELOG.md | 4 + agent-sandbox-provider/SKILL.md | 6 +- agent-sandbox-sdk/SKILL.md | 10 +- docs/en/DESIGN.md | 2 +- docs/en/design/mcp-server.md | 2 +- docs/en/guide/authoring-templates.md | 2 +- docs/en/guide/client-sdk.md | 2 +- docs/en/guide/cloud-examples.md | 2 +- docs/en/guide/getting-started.md | 2 +- docs/en/guide/install-python.md | 8 +- docs/en/guide/mcp-integration.md | 4 +- docs/en/guide/migrate-from-e2b.md | 2 +- docs/en/guide/sdk-usage.md | 2 +- docs/en/guide/server-sdk.md | 4 +- docs/en/guide/template-server-api.md | 2 +- docs/en/guide/testing-e2e.md | 2 +- docs/en/guide/troubleshooting.md | 2 +- docs/zh/DESIGN.md | 2 +- docs/zh/design/mcp-server.md | 2 +- docs/zh/guide/authoring-templates.md | 2 +- docs/zh/guide/client-sdk.md | 2 +- docs/zh/guide/cloud-examples.md | 2 +- docs/zh/guide/getting-started.md | 2 +- docs/zh/guide/install-python.md | 8 +- docs/zh/guide/mcp-integration.md | 4 +- docs/zh/guide/migrate-from-e2b.md | 2 +- docs/zh/guide/sdk-usage.md | 2 +- docs/zh/guide/server-sdk.md | 4 +- docs/zh/guide/template-server-api.md | 2 +- docs/zh/guide/testing-e2e.md | 2 +- docs/zh/guide/troubleshooting.md | 2 +- examples/README.md | 4 +- examples/README.zh-CN.md | 4 +- examples/quickstart/05_decorator_usage.py | 2 +- examples/quickstart/README.md | 2 +- examples/templates/agents-cli/Dockerfile | 2 +- examples/templates/agents-cli/README.md | 4 +- examples/templates/python-hello/Dockerfile | 2 +- 50 files changed, 1431 insertions(+), 71 deletions(-) create mode 100644 .agents/evidence/verify/2026-10-25-public-a6-cloud-examples.json create mode 100644 .agents/evidence/verify/2026-10-25-public-a6-delivery.json create mode 100644 .agents/evidence/verify/2026-10-25-public-a6-delivery.md create mode 100644 .agents/evidence/verify/2026-10-25-public-a6-example-cleanup.json create mode 100644 .agents/evidence/verify/2026-10-25-public-a6-example-manifest.json create mode 100644 .agents/evidence/verify/2026-10-25-public-a6-examples.md create mode 100644 .agents/evidence/verify/2026-10-25-public-a6-local-examples.json rename .agents/notes/{proposed => implemented}/process/2026-10-25-sandbox-help-namespace.md (80%) rename .agents/notes/{proposed => implemented}/process/2026-10-25-template-help-imports.md (79%) create mode 100644 .agents/notes/proposed/process/2026-10-25-current-public-a6.md diff --git a/.agents/README.md b/.agents/README.md index 564df9b..3604a6e 100644 --- a/.agents/README.md +++ b/.agents/README.md @@ -2,18 +2,30 @@ ## Current public pair — 2026-10-25 -[Exhaustive Sandbox help follow-up](notes/proposed/process/2026-10-25-sandbox-help-namespace.md) -records four remaining class-help namespace errors in public a5 and the bounded -a6 candidate. Its [audit](evidence/verify/2026-10-25-sandbox-help-namespace.md) -distinguishes ordinary help from intentional migration/third-party examples; -the same candidate corrects current bilingual API/lifecycle examples and removes -unimplemented design menus. Candidate publication is not yet established. - -[Subsequent public-a4 example acceptance](evidence/verify/2026-10-25-public-a4-examples.md) +Client/server **0.4.0a6** are public. [Public delivery verification](evidence/verify/2026-10-25-public-a6-delivery.md) +records exact source/tag/publisher, four original/metadata/download hashes, fresh +official non-all installation, all 28 actual first-party help imports, exhaustive +installed-source namespace audit, 12 Provider help signatures and real HTTP/files +with owned-process absence. Current design examples were also rerun unchanged +on public a6 with independent owned-resource cleanup. + +The [implemented namespace correction](notes/implemented/process/2026-10-25-sandbox-help-namespace.md) +keeps root standard and interpreter entries distinct and removes inaccurate +current lifecycle/API design examples. The earlier [Template correction](notes/implemented/process/2026-10-25-template-help-imports.md) +retains its exact a5 scope. Maintained guidance, Skills and fixture recipes in this +follow-up select actual public a6; their own current-head CI/merge is separate. +Host installation does not update existing sandbox images or certify a catalog. + +[Subsequent public-a6 example acceptance](evidence/verify/2026-10-25-public-a6-examples.md) records 14 actual cloud examples, 29 independent typed-not-found checks and the -separate local runner/timeout controls. It preserves earlier browser failures and -does not certify later candidates. The [Template help correction](notes/proposed/process/2026-10-25-template-help-imports.md) -prepares a5 only; publication and final CI remain separate gates. +separate 10-check local runner with real timeout controls. Earlier version +receipts and variable browser cold-install observations remain unchanged. + +## Previous public a4 delivery — 2026-10-25 + +[Public-a4 example acceptance](evidence/verify/2026-10-25-public-a4-examples.md) +retains its actual 14-cloud/local runner results as a4 observations, not later +version passes. Historical failures and receipts are unchanged. Client/server **0.4.0a4** are public. [Current delivery verification](evidence/verify/2026-10-25-public-a4-delivery.md) records the reviewed immutable tag, original metadata-404 failure, successful @@ -22,7 +34,7 @@ hashes and fresh official installation. The 12 lifecycle async/sync docstrings match actual signatures; retired Provider keyword calls still reject. Real local HTTP health/shell/files and owned-process cleanup passed with public packages. This documentation correction does not certify new cloud/catalog/model coverage. -Maintained installation/skill examples and SDK fixture recipes select public a4. +At that delivery checkpoint, installation/skill examples and SDK fixtures selected a4. The [earlier public-a3 readiness delivery](evidence/verify/2026-10-25-public-a3-docs.md) retains its exact real-cloud delayed-readiness/failure/cancellation scope. The diff --git a/.agents/evidence/verify/2026-10-25-public-a6-cloud-examples.json b/.agents/evidence/verify/2026-10-25-public-a6-cloud-examples.json new file mode 100644 index 0000000..d47bcda --- /dev/null +++ b/.agents/evidence/verify/2026-10-25-public-a6-cloud-examples.json @@ -0,0 +1,336 @@ +{ + "source_commit": "8e610a3658040d8d6973e7951f9590ea50a4d70a", + "public_packages": { + "agent-sandbox-client": "0.4.0a6", + "agent-sandbox-server": "0.4.0a6" + }, + "home_scope": "one new isolated HOME shared by all children in this batch", + "results": [ + { + "example": "examples/quickstart/01_hello.py", + "result": "PASS", + "returncode": 0, + "seconds": 4.42, + "audit": { + "created": 1, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "fb61b2783d376cc2df55db41bfeb955ce9daee0c2612400a9f11b538b53c24f2", + "output_sha256": "2fb32aaa0d385d960b52be152f5b9f98c21e0454f329aaba50900c220c3a1324", + "log": "examples__quickstart__01_hello.py.log" + }, + { + "example": "examples/quickstart/02_file_ops.py", + "result": "PASS", + "returncode": 0, + "seconds": 4.73, + "audit": { + "created": 1, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "2d7492bdc6839f4c168d6507ee0ba70abc2edddedb3b43dafb78c20676cc62c1", + "output_sha256": "102d56e6decb160d68123e58f2c0ecb737b521a08abf9a8b0b5f1d22f37cbb98", + "log": "examples__quickstart__02_file_ops.py.log" + }, + { + "example": "examples/quickstart/03_web_service.py", + "result": "PASS", + "returncode": 0, + "seconds": 4.31, + "audit": { + "created": 1, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "c714d2f120562e6e13340586f0c4c71198be3e42d1d6ccd4477527de234ab545", + "output_sha256": "f77f631e25f09deed69b27f63e9b299bb9aec1c3c5a126e0e699f29a152167e0", + "log": "examples__quickstart__03_web_service.py.log" + }, + { + "example": "examples/quickstart/04_data_analysis.py", + "result": "PASS", + "returncode": 0, + "seconds": 37.29, + "audit": { + "created": 1, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "2b1fb005f03bb38f109fbcc68c85b318c98d1d04340f2f1e59e01cd0bd5adb96", + "output_sha256": "10dc7da179c1ed1e39e83b3dfb8ed16a28ced483370bc947f685b5dfa7485c8f", + "log": "examples__quickstart__04_data_analysis.py.log" + }, + { + "example": "examples/quickstart/05_decorator_usage.py", + "result": "PASS", + "returncode": 0, + "seconds": 16.56, + "audit": { + "created": 4, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "d0a5468573952f34fb7c3d0201115c8d3c62a0801aa08d0ac4eee48b1e49386f", + "output_sha256": "53a24cfb52a0862053b5e5dd07b77c12418bcdb6a68019dfc518a679f101260e", + "log": "examples__quickstart__05_decorator_usage.py.log" + }, + { + "example": "examples/compat-demos/e2e_capability_validation.py", + "result": "PASS", + "returncode": 0, + "seconds": 7.67, + "audit": { + "created": 2, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "dfcd33f3e6acacfa0ef1fd78cab077d21ea69cdc82c5e556e6db525ac425fada", + "output_sha256": "93cc5d5ee6ef1dc89831a9ef96488ac9dbf006c3186f2b25f7c66f33bc29ccb9", + "log": "examples__compat-demos__e2e_capability_validation.py.log" + }, + { + "example": "examples/compat-demos/comparison.py", + "result": "PASS", + "returncode": 0, + "seconds": 26.32, + "audit": { + "created": 4, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "03171c7dc45944242c21693e6370e3abd82f3ea193f9260dbd1073799a66f019", + "output_sha256": "3f0f430804892d7eede65d589cba7a8459c2e91ad8660bd172dd1ccd4a0dff27", + "log": "examples__compat-demos__comparison.py.log" + }, + { + "example": "examples/compat-demos/e2b_data_analysis.py", + "result": "PASS", + "returncode": 0, + "seconds": 22.97, + "audit": { + "created": 1, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "410f0afc639a15bdb1e20e153c4829f2944aaf06a48753b34d81dd86e410cd95", + "output_sha256": "dbc7e02a0f544de683fdda7341fe505cd88ce35c6cc50df256a5532e826a4086", + "log": "examples__compat-demos__e2b_data_analysis.py.log" + }, + { + "example": "examples/compat-demos/e2b_web_scraper.py", + "result": "PASS", + "returncode": 0, + "seconds": 7.62, + "audit": { + "created": 1, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "066967779380f6a7006b1dcdfe28a00b912998a56b87223b72a2cd59acdc4854", + "output_sha256": "84df3c7b54c7d397cb0454204a1f5edba53a68a0e5973947bee9410a102b20dc", + "log": "examples__compat-demos__e2b_web_scraper.py.log" + }, + { + "example": "examples/compat-demos/modal_compute.py", + "result": "PASS", + "returncode": 0, + "seconds": 32.28, + "audit": { + "created": 6, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "645bed63aec27865b7849f203158deca263def56b56a68f682716cde7c6f5882", + "output_sha256": "8780d11b18767782c13f2a52101720957716183e9bd64e55b82ab9d3df9fddb1", + "log": "examples__compat-demos__modal_compute.py.log" + }, + { + "example": "examples/compat-demos/modal_data_analysis.py", + "result": "PASS", + "returncode": 0, + "seconds": 21.43, + "audit": { + "created": 4, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + }, + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "cd6453302208672c1192b634f0e3ca3c00d8722ea35858b13c2d6d92082167df", + "output_sha256": "fd9a4f5f2cf26cf69b66aa9905aa80af2c069335349b4345170d1b8af5ff4eb7", + "log": "examples__compat-demos__modal_data_analysis.py.log" + }, + { + "example": "examples/compat-demos/e2b_import_migration.py", + "result": "PASS", + "returncode": 0, + "seconds": 3.21, + "audit": { + "created": 1, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "73850fb33989c4b412ce5399f2303df1ca642ad5d15fe6cbd8088e7ef0819415", + "output_sha256": "dbf100372e8f85b1c33c8c6048e670c1ea9d18b2e6b5373ba78b3e17cd4a7c6c", + "log": "examples__compat-demos__e2b_import_migration.py.log" + }, + { + "example": "examples/agents/browser_automation.py", + "result": "PASS", + "returncode": 0, + "seconds": 84.44, + "audit": { + "created": 1, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "83956ce58c50c60290663b661dec0dff616837f2fc1a089212b795fa478539f6", + "output_sha256": "dbb3027ac415e89c4456c85e987e8562382c32db41a38ac500aa1833a21f01a9", + "log": "examples__agents__browser_automation.py.log" + }, + { + "example": "examples/agents/codex_agent.py", + "result": "PASS", + "returncode": 0, + "seconds": 10.34, + "audit": { + "created": 1, + "cleanup": [ + { + "absent_before_cleanup": true, + "absent_after_cleanup": true + } + ], + "example_exit": 0 + }, + "source_sha256": "0e4392725fb84998c25ac6ceddc98ecfb467a715f33066d13541560421587da0", + "output_sha256": "4ca62a613ca80694fa58695e4c55aca013d29a1073a1844b0a39c49ca6cfff84", + "log": "examples__agents__codex_agent.py.log" + } + ] +} diff --git a/.agents/evidence/verify/2026-10-25-public-a6-delivery.json b/.agents/evidence/verify/2026-10-25-public-a6-delivery.json new file mode 100644 index 0000000..7d43476 --- /dev/null +++ b/.agents/evidence/verify/2026-10-25-public-a6-delivery.json @@ -0,0 +1,317 @@ +{ + "publication": { + "version": "0.4.0a6", + "run_id": 40225846586, + "run_attempt": 1, + "publisher": "SUCCESS", + "source_commit": "8e610a3658040d8d6973e7951f9590ea50a4d70a", + "artifact_id": 12611362808, + "files": [ + { + "package": "agent-sandbox-client", + "filename": "agent_sandbox_client-0.4.0a6-py3-none-any.whl", + "sha256": "0a4d9c4b322b1e28b4dc4bc9c4a36b867232afc61fa87b483cae65f4eebb9222", + "candidate_metadata_download_equal": true, + "metadata_http": 200, + "download_http": 200 + }, + { + "package": "agent-sandbox-client", + "filename": "agent_sandbox_client-0.4.0a6.tar.gz", + "sha256": "bf57cae0eb81dc1a95a9e7ed4862ec3af15e7b5dba2d6283b9be2bced4616aa6", + "candidate_metadata_download_equal": true, + "metadata_http": 200, + "download_http": 200 + }, + { + "package": "agent-sandbox-server", + "filename": "agent_sandbox_server-0.4.0a6-py3-none-any.whl", + "sha256": "85b937438acf943b3d92736dd6a07c4829cd80416336da35c0b25f2e5679850d", + "candidate_metadata_download_equal": true, + "metadata_http": 200, + "download_http": 200 + }, + { + "package": "agent-sandbox-server", + "filename": "agent_sandbox_server-0.4.0a6.tar.gz", + "sha256": "812388ba126973e7ab5911214eaacdd7b352a6ef81356a2ce099e2af3341e6c3", + "candidate_metadata_download_equal": true, + "metadata_http": 200, + "download_http": 200 + } + ], + "result": "PASS" + }, + "installation": { + "packages": { + "agent-sandbox-client": "0.4.0a6", + "agent-sandbox-server": "0.4.0a6" + }, + "python": "3.13.13", + "standard_sync_async_provider_server_imports": true, + "installed_package_location": "site-packages", + "reviewed_source_file_bytes_equal": true, + "old_provider_kwargs_bind_rejections": 24, + "source_injection": false, + "install_extra": "none", + "result": "PASS" + }, + "help": { + "packages": { + "agent-sandbox-client": "0.4.0a6", + "agent-sandbox-server": "0.4.0a6" + }, + "e2b_installed": false, + "e2b_code_interpreter_installed": false, + "installed_python_files_audited": 390, + "installed_docstrings_audited": 2358, + "upstream_import_residue": 0, + "template_help": [ + { + "entry": "Template.build", + "imports_resolve": true + }, + { + "entry": "Template.build_in_background", + "imports_resolve": true + }, + { + "entry": "Template.get_build_status", + "imports_resolve": true + }, + { + "entry": "Template.exists", + "imports_resolve": true + }, + { + "entry": "Template.alias_exists", + "imports_resolve": true + }, + { + "entry": "Template.assign_tags", + "imports_resolve": true + }, + { + "entry": "Template.remove_tags", + "imports_resolve": true + }, + { + "entry": "Template.get_tags", + "imports_resolve": true + }, + { + "entry": "AsyncTemplate.build", + "imports_resolve": true + }, + { + "entry": "AsyncTemplate.build_in_background", + "imports_resolve": true + }, + { + "entry": "AsyncTemplate.get_build_status", + "imports_resolve": true + }, + { + "entry": "AsyncTemplate.exists", + "imports_resolve": true + }, + { + "entry": "AsyncTemplate.alias_exists", + "imports_resolve": true + }, + { + "entry": "AsyncTemplate.assign_tags", + "imports_resolve": true + }, + { + "entry": "AsyncTemplate.remove_tags", + "imports_resolve": true + }, + { + "entry": "AsyncTemplate.get_tags", + "imports_resolve": true + }, + { + "entry": "TemplateBuilder.set_start_cmd", + "imports_resolve": true + }, + { + "entry": "TemplateBuilder.set_ready_cmd", + "imports_resolve": true + }, + { + "entry": "default_build_logger", + "imports_resolve": true + }, + { + "entry": "wait_for_port", + "imports_resolve": true + }, + { + "entry": "wait_for_url", + "imports_resolve": true + }, + { + "entry": "wait_for_process", + "imports_resolve": true + }, + { + "entry": "wait_for_file", + "imports_resolve": true + }, + { + "entry": "wait_for_timeout", + "imports_resolve": true + }, + { + "entry": "agent_sandbox.Sandbox", + "imports_resolve": true, + "correct_class_identity": true + }, + { + "entry": "agent_sandbox.AsyncSandbox", + "imports_resolve": true, + "correct_class_identity": true + }, + { + "entry": "agent_sandbox.code_interpreter.Sandbox", + "imports_resolve": true, + "correct_class_identity": true + }, + { + "entry": "agent_sandbox.code_interpreter.AsyncSandbox", + "imports_resolve": true, + "correct_class_identity": true + } + ], + "provider_help": [ + { + "method": "create", + "documented_names_valid": true + }, + { + "method": "create_sync", + "documented_names_valid": true + }, + { + "method": "connect", + "documented_names_valid": true + }, + { + "method": "connect_sync", + "documented_names_valid": true + }, + { + "method": "list", + "documented_names_valid": true + }, + { + "method": "list_sync", + "documented_names_valid": true + }, + { + "method": "kill_by_id", + "documented_names_valid": true + }, + { + "method": "kill_by_id_sync", + "documented_names_valid": true + }, + { + "method": "get_info_by_id", + "documented_names_valid": true + }, + { + "method": "get_info_by_id_sync", + "documented_names_valid": true + }, + { + "method": "set_timeout_by_id", + "documented_names_valid": true + }, + { + "method": "set_timeout_by_id_sync", + "documented_names_valid": true + } + ], + "network_operations": 0, + "source_injection": false, + "script_sha256": "ffb956785685ea33ae7b2f7ae91115aa741ad621e0a19700dee988bb59ac72e9", + "result": "PASS" + }, + "multiline_supplement": { + "actual_client": "0.4.0a6", + "actual_server": "0.4.0a6", + "unique_statements": [ + "from agent_sandbox.models.errors import EndpointNotAvailableError, FilePolicyDeniedError, PayloadTooLargeError, RateLimitedError, ServerAPIError", + "from agent_sandbox.models.errors import SandboxError, AuthenticationError, InvalidAPIKeyError, TokenExpiredError, InvalidCredentialsError, SandboxCreationError, TemplateNotFoundError, QuotaExceededError, RegionUnavailableError, TemplateParseError, ExecutionError, CommandTimeoutError, ProcessError, CodeExecutionError, CapabilityNotSupportedError, FileOperationError, FileSizeLimitError, FileNotFoundError_, PermissionDeniedError, NetworkError, ConnectionError_, GitHubRateLimitError, SessionError, SessionNotFoundError, SessionAlreadyExistsError, ProviderError, ProviderNotFoundError, ProviderConfigError, ProviderConflictError, ProviderFeatureNotSupportedError, ProviderResourceNotFoundError, ProviderInstallError, ProviderIntegrityError, ProviderTrustError, ProviderVersionError, ProviderManifestError, ProviderProtocolError, ProviderProcessError, ProviderTimeoutError, ProviderMismatchError", + "from agent_sandbox.models.errors import SandboxError, InvalidAPIKeyError, TemplateNotFoundError, SandboxNotFoundError, CapabilityNotSupportedError, FileNotFoundError_, ConnectionError_" + ], + "successful": 3, + "source_occurrences": 6, + "scope": "actual public non-all a6; independent supplement to original frozen audits", + "result": "PASS" + }, + "http": { + "packages": { + "agent-sandbox-client": "0.4.0a6", + "agent-sandbox-server": "0.4.0a6" + }, + "source_install": false, + "scope": "official public non-all PyPI a6; real local HTTP; no cloud/model call", + "health": true, + "shell_exit": 0, + "shell_stdout": "4\n", + "file_roundtrip": true, + "owned_process_exit": -15, + "owned_pid_independently_absent": true, + "script_sha256": "0e8d281c713235803c76f4f8edcbff2263db7b9088356a793458d293bb2175a8", + "result": "PASS", + "candidate_harness_reused": true + }, + "current_design_programs": { + "source_commit": "8e610a3658040d8d6973e7951f9590ea50a4d70a", + "scope": "actual public non-all a6, whole unchanged EN/ZH current design-page programs, canonical ABX, isolated batch HOME/outside checkout, no source injection/model call", + "results": [ + { + "block": "imperative", + "source_sha256": "173cc6ddad063cd124a21ae4a880cfd15332901c0e7d033f0a7a1a5118bde918", + "english_chinese_identical": true, + "public_packages": { + "agent-sandbox-client": "0.4.0a6", + "agent-sandbox-server": "0.4.0a6" + }, + "exit": 0, + "seconds": 2.73, + "expected_stdout": "Hello, Agent Sandbox!", + "created": 1, + "typed_not_found_before_observer_cleanup": true, + "observer_recovery_used": false, + "result": "PASS" + }, + { + "block": "errors", + "source_sha256": "8b634238e05cee863332480a7070bb9d36f6e90e8519a713513a666cddb6e0ac", + "english_chinese_identical": true, + "public_packages": { + "agent-sandbox-client": "0.4.0a6", + "agent-sandbox-server": "0.4.0a6" + }, + "exit": 0, + "seconds": 7.35, + "expected_stdout": "E3001", + "created": 1, + "typed_not_found_before_observer_cleanup": true, + "observer_recovery_used": false, + "result": "PASS" + } + ], + "cleanup": { + "unique_owned": 2, + "independent_typed_not_found": 2, + "recovery_used": false, + "result": "PASS" + }, + "result": "PASS" + } +} diff --git a/.agents/evidence/verify/2026-10-25-public-a6-delivery.md b/.agents/evidence/verify/2026-10-25-public-a6-delivery.md new file mode 100644 index 0000000..d12ee13 --- /dev/null +++ b/.agents/evidence/verify/2026-10-25-public-a6-delivery.md @@ -0,0 +1,97 @@ +# Verification: public a6 installation and current guidance + +- Date: 2026-10-25 +- Result: PASS for actual public checks below; this guidance follow-up's exact-head CI, independent review and merge remain pending. +- Runtime: official non-all client/server `0.4.0a6`, Python 3.13.13, Linux; new ordinary environment, isolated HOME and working directory outside the checkout, no PYTHONPATH/editable injection. +- Source/tag: `8e610a3658040d8d6973e7951f9590ea50a4d70a`, immutable `v0.4.0a6`, annotated object `21228b09e40c2ef64bf268f0db3b64f27ddf8186`. +- Source PR: https://github.com/Alibaba-Agent-Sandbox/python-sdk/pull/131 + +## Publication and artifact readback + +Exact reviewed head `4c45a404fa101d4740305f2431083a28bc6e2467` passed all 13 +required checks and independent review before normal SHA-bound squash merge. +The actual main tree equals the reviewed tree. Existing publisher +[40225846586](https://github.com/Alibaba-Agent-Sandbox/python-sdk/actions/runs/40225846586) +completed SUCCESS on attempt1 after all 12 tag-validation jobs. The tag, release +and both version-specific public metadata endpoints were absent before creation. +Initial independent metadata reads observed HTTP404 after upload; later official +metadata/downloads were HTTP200. No digest mismatch or retry mechanism change +was introduced; normal bounded publication verification passed. + +Original preserved artifact12611362808 and official metadata/actual download +bytes match for all four files: + +| File | SHA-256 | +| --- | --- | +| client wheel | `0a4d9c4b322b1e28b4dc4bc9c4a36b867232afc61fa87b483cae65f4eebb9222` | +| client sdist | `bf57cae0eb81dc1a95a9e7ed4862ec3af15e7b5dba2d6283b9be2bced4616aa6` | +| server wheel | `85b937438acf943b3d92736dd6a07c4829cd80416336da35c0b25f2e5679850d` | +| server sdist | `812388ba126973e7ab5911214eaacdd7b352a6ef81356a2ce099e2af3341e6c3` | + +The package READMEs use the official index and `--pre`; neither embedded wheel +README contains an obsolete fixed a4 installation pin. The +[sanitized combined receipt](2026-10-25-public-a6-delivery.json) records artifact, +installation, help, multiline, real HTTP and actual current-design results. + +## Fresh public installation and commands + +```bash +python3 -m venv public-sdk +public-sdk/bin/python -m pip install --no-cache-dir --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a6' +public-sdk/bin/python -m pip check +``` + +The actual install used no all extra and automatically installed matching server6. +Standard synchronous/asynchronous, Provider and server imports resolved from +site-packages. All 28 first-party Template/Sandbox help imports executed and +resolved to the correct root/interpreter identities. All 390 installed Python +files / 2358 docstrings had zero retired upstream namespace import residue; +neither e2b package was installed. Twelve Provider help/signature checks passed, +and 24 retired Provider keyword binds still rejected without network requests. +The four corrected source-file bytes matched the reviewed source. + +Three additional unique multiline error imports from six EN/ZH guide/reference +locations executed successfully on actual public a6. This is a separately scoped +supplement; earlier audit totals and line-fallback limitations remain unchanged. +The current-document scan's 33 actual public-a5 imports already included these +three, but that result is not relabeled as a6 execution. + +## Real HTTP, document programs and cleanup + +Fresh public-a6 local server/client health, shell output `4`, file roundtrip and +independent absence of the owned server PID passed. The private server was +terminated and no unrelated process was touched. + +Both complete current design-page programs were extracted unchanged from source +`8e610a3` and rerun on the public non-all a6 environment. The six EN/ZH Python +block occurrences still map to the same two exact source hashes: + +- Command/file/context cleanup: PASS, 2.730s. +- `base` plus `commands.run("sleep 100", timeout=5)`: actual typed E3001 with + finally deletion/closure, PASS, 7.350s. +- Both examples' own cleanup had already removed the resources; observer recovery + was never counted passing. A second independent process confirmed typed + SandboxNotFoundError for both exact owned resources (2/2). + +These two cloud calls are separate from the earlier public-a5 document run and +the public-a4 14-example/local runner receipts. Those histories remain unchanged. +[Subsequent public-a6 example acceptance](2026-10-25-public-a6-examples.md) separately +records the new 14-example cloud run, 29 independently absent owned resources and +local runner with real negative timeout controls. The earlier results are not +relabeled. + +## Current guidance and owner checks + +The follow-up changes 38 current install/fixture files to exact public a6, +including two Skills and both official-index Docker recipes. The existing CI +guest-version assertion selects a6. No API/runtime/version file changes occur. +The only Python example edit is an installation docstring; execution AST is +unchanged. Both already delivered help process notes are accepted with actual +merge/publication facts; older evidence is unchanged. + +Local record/link health passed (106 checks, one existing missing release.md +warning, zero failures); hygiene and diff checks passed. Exact-head remote CI, +independent review and merge remain pending for this follow-up. No Docker engine is available locally, so actual fixture builds +must pass the existing remote Docker jobs before normal merge. No new package +or release tag is created for this documentation update. Host installation does +not update older sandbox images or certify the full template catalog or models. diff --git a/.agents/evidence/verify/2026-10-25-public-a6-example-cleanup.json b/.agents/evidence/verify/2026-10-25-public-a6-example-cleanup.json new file mode 100644 index 0000000..ef17286 --- /dev/null +++ b/.agents/evidence/verify/2026-10-25-public-a6-example-cleanup.json @@ -0,0 +1,97 @@ +{ + "version": "0.4.0a6", + "source_commit": "8e610a3658040d8d6973e7951f9590ea50a4d70a", + "unique_known_owned": 29, + "typed_not_found": 29, + "recovery_deletions": 0, + "rows": [ + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + }, + { + "typed_not_found": true + } + ], + "result": "PASS" +} diff --git a/.agents/evidence/verify/2026-10-25-public-a6-example-manifest.json b/.agents/evidence/verify/2026-10-25-public-a6-example-manifest.json new file mode 100644 index 0000000..42ea6dc --- /dev/null +++ b/.agents/evidence/verify/2026-10-25-public-a6-example-manifest.json @@ -0,0 +1,80 @@ +{ + "source_commit": "8e610a3658040d8d6973e7951f9590ea50a4d70a", + "installed_public_packages": { + "agent-sandbox-client": "0.4.0a6", + "agent-sandbox-server": "0.4.0a6" + }, + "installation": "official PyPI, no cache, new virtual environment; one new isolated HOME shared by 14 children", + "examples": [ + { + "path": "examples/quickstart/01_hello.py", + "source_sha256": "fb61b2783d376cc2df55db41bfeb955ce9daee0c2612400a9f11b538b53c24f2", + "output_sha256": "2fb32aaa0d385d960b52be152f5b9f98c21e0454f329aaba50900c220c3a1324" + }, + { + "path": "examples/quickstart/02_file_ops.py", + "source_sha256": "2d7492bdc6839f4c168d6507ee0ba70abc2edddedb3b43dafb78c20676cc62c1", + "output_sha256": "102d56e6decb160d68123e58f2c0ecb737b521a08abf9a8b0b5f1d22f37cbb98" + }, + { + "path": "examples/quickstart/03_web_service.py", + "source_sha256": "c714d2f120562e6e13340586f0c4c71198be3e42d1d6ccd4477527de234ab545", + "output_sha256": "f77f631e25f09deed69b27f63e9b299bb9aec1c3c5a126e0e699f29a152167e0" + }, + { + "path": "examples/quickstart/04_data_analysis.py", + "source_sha256": "2b1fb005f03bb38f109fbcc68c85b318c98d1d04340f2f1e59e01cd0bd5adb96", + "output_sha256": "10dc7da179c1ed1e39e83b3dfb8ed16a28ced483370bc947f685b5dfa7485c8f" + }, + { + "path": "examples/quickstart/05_decorator_usage.py", + "source_sha256": "d0a5468573952f34fb7c3d0201115c8d3c62a0801aa08d0ac4eee48b1e49386f", + "output_sha256": "53a24cfb52a0862053b5e5dd07b77c12418bcdb6a68019dfc518a679f101260e" + }, + { + "path": "examples/compat-demos/e2e_capability_validation.py", + "source_sha256": "dfcd33f3e6acacfa0ef1fd78cab077d21ea69cdc82c5e556e6db525ac425fada", + "output_sha256": "93cc5d5ee6ef1dc89831a9ef96488ac9dbf006c3186f2b25f7c66f33bc29ccb9" + }, + { + "path": "examples/compat-demos/comparison.py", + "source_sha256": "03171c7dc45944242c21693e6370e3abd82f3ea193f9260dbd1073799a66f019", + "output_sha256": "3f0f430804892d7eede65d589cba7a8459c2e91ad8660bd172dd1ccd4a0dff27" + }, + { + "path": "examples/compat-demos/e2b_data_analysis.py", + "source_sha256": "410f0afc639a15bdb1e20e153c4829f2944aaf06a48753b34d81dd86e410cd95", + "output_sha256": "dbc7e02a0f544de683fdda7341fe505cd88ce35c6cc50df256a5532e826a4086" + }, + { + "path": "examples/compat-demos/e2b_web_scraper.py", + "source_sha256": "066967779380f6a7006b1dcdfe28a00b912998a56b87223b72a2cd59acdc4854", + "output_sha256": "84df3c7b54c7d397cb0454204a1f5edba53a68a0e5973947bee9410a102b20dc" + }, + { + "path": "examples/compat-demos/modal_compute.py", + "source_sha256": "645bed63aec27865b7849f203158deca263def56b56a68f682716cde7c6f5882", + "output_sha256": "8780d11b18767782c13f2a52101720957716183e9bd64e55b82ab9d3df9fddb1" + }, + { + "path": "examples/compat-demos/modal_data_analysis.py", + "source_sha256": "cd6453302208672c1192b634f0e3ca3c00d8722ea35858b13c2d6d92082167df", + "output_sha256": "fd9a4f5f2cf26cf69b66aa9905aa80af2c069335349b4345170d1b8af5ff4eb7" + }, + { + "path": "examples/compat-demos/e2b_import_migration.py", + "source_sha256": "73850fb33989c4b412ce5399f2303df1ca642ad5d15fe6cbd8088e7ef0819415", + "output_sha256": "dbf100372e8f85b1c33c8c6048e670c1ea9d18b2e6b5373ba78b3e17cd4a7c6c" + }, + { + "path": "examples/agents/browser_automation.py", + "source_sha256": "83956ce58c50c60290663b661dec0dff616837f2fc1a089212b795fa478539f6", + "output_sha256": "dbb3027ac415e89c4456c85e987e8562382c32db41a38ac500aa1833a21f01a9" + }, + { + "path": "examples/agents/codex_agent.py", + "source_sha256": "0e4392725fb84998c25ac6ceddc98ecfb467a715f33066d13541560421587da0", + "output_sha256": "4ca62a613ca80694fa58695e4c55aca013d29a1073a1844b0a39c49ca6cfff84" + } + ] +} diff --git a/.agents/evidence/verify/2026-10-25-public-a6-examples.md b/.agents/evidence/verify/2026-10-25-public-a6-examples.md new file mode 100644 index 0000000..4f6c4e2 --- /dev/null +++ b/.agents/evidence/verify/2026-10-25-public-a6-examples.md @@ -0,0 +1,115 @@ +# Verification: published a6 cloud and local examples + +- Date: 2026-10-25 +- Result: PASS for the stated examples; not whole-catalog or production certification. +- Source: `8e610a3658040d8d6973e7951f9590ea50a4d70a`, merged [PR131](https://github.com/Alibaba-Agent-Sandbox/python-sdk/pull/131). +- Runtime: official PyPI client/server `0.4.0a6`; Linux, Python 3.13.13. One new isolated HOME shared by the 14 example child processes for this batch, outside checkout configuration; canonical ABX settings, no E2B overrides or source injection. + +## What was verified + +All 14 unchanged cloud examples exited zero with public packages. The real model +example used a configured OpenAI-compatible endpoint supporting `qwen3-coder-flash`, +executed generated quicksort code and compared five inputs with independent +`sorted()` results. It did not invoke the Codex CLI. The browser installed Chromium, +rendered its owned page, checked title/heading/link and retrieved an 11,473-byte PNG. +The [source/output manifest](2026-10-25-public-a6-example-manifest.json) freezes the +tested scripts; [cloud results](2026-10-25-public-a6-cloud-examples.json) retain +each outcome and cleanup observation without resource identifiers. + +| Example | Result | Seconds | Owned resources | +| --- | --- | --- | --- | +| `examples/quickstart/01_hello.py` | PASS | 4.42 | 1 | +| `examples/quickstart/02_file_ops.py` | PASS | 4.73 | 1 | +| `examples/quickstart/03_web_service.py` | PASS | 4.31 | 1 | +| `examples/quickstart/04_data_analysis.py` | PASS | 37.29 | 1 | +| `examples/quickstart/05_decorator_usage.py` | PASS | 16.56 | 4 | +| `examples/compat-demos/e2e_capability_validation.py` | PASS | 7.67 | 2 | +| `examples/compat-demos/comparison.py` | PASS | 26.32 | 4 | +| `examples/compat-demos/e2b_data_analysis.py` | PASS | 22.97 | 1 | +| `examples/compat-demos/e2b_web_scraper.py` | PASS | 7.62 | 1 | +| `examples/compat-demos/modal_compute.py` | PASS | 32.28 | 6 | +| `examples/compat-demos/modal_data_analysis.py` | PASS | 21.43 | 4 | +| `examples/compat-demos/e2b_import_migration.py` | PASS | 3.21 | 1 | +| `examples/agents/browser_automation.py` | PASS | 84.44 | 1 | +| `examples/agents/codex_agent.py` | PASS | 10.34 | 1 | + +The original local runner returned zero: 10 successful checks, zero failures, +11 explicitly needing a provider. Those 10 comprise one compilation check and +nine real local HTTP/file/process/script checks. Hosted Codex/Qwen checks use +controlled protocol fixtures, not real model calls. An observer shortened only +the hosted-Codex child budget: the original main returned one with nine successful +checks and one expected failure, continued to later cases and printed its final +table. A separate actual exit-7 child, actual 0.5-second timeout and successful +child produced `[7, 124, 0]` and `[fail, fail, ok]`. The earlier failure was retained; +`TimeoutExpired` did not abort the remaining cases. See [local results](2026-10-25-public-a6-local-examples.json). +The maintained runner hash is `642e2abbbb8a9ba6c43bef04ed4fc4c7ae3977c942ca6e48d7764dad5b1ea63e`, +unchanged from the earlier checkpoint; these are new actual a6 runs. + +## Commands run and reproduction + +Install public packages independently of the source checkout. No editable SDK +installation or PYTHONPATH is used. Cloud examples used the all extra; the local +runner used ordinary `agent-sandbox-client==0.4.0a6` without extras. + +```bash +python3 -m venv public-sdk +. public-sdk/bin/activate +python -m pip install --index-url https://pypi.org/simple --no-cache-dir 'agent-sandbox-client[all]==0.4.0a6' +python -m pip check +git clone https://github.com/Alibaba-Agent-Sandbox/python-sdk.git source +git -C source checkout 8e610a3658040d8d6973e7951f9590ea50a4d70a +python source/examples/quickstart/01_hello.py +``` + +Repeat the final command with each exact table path. Supply your own documented +`ABX_PROVIDER=alicloud-express`, `ABX_SANDBOX_API_KEY`, `ABX_SANDBOX_BASE_URL` and +`ABX_SANDBOX_DOMAIN` through private environment configuration. Remove conflicting +E2B overrides and use one new isolated HOME outside checkout configuration for +the batch, shared by its example child processes. +For the real model example additionally supply `OPENAI_API_KEY`, `OPENAI_BASE_URL` +and `OPENAI_MODEL=qwen3-coder-flash` for an endpoint that supports this model. +Never print credentials or publish ownership journals. Local checks require no +provider/model credentials: + +```bash +python source/examples/run_examples_e2e.py +``` + +The timeout control calls the maintained runner's `run_script` on three temporary +scripts in order: `raise SystemExit(7)` with a two-second budget; a script writing +its own PID then `time.sleep(30)` with a 0.5-second budget; and `print('continued')` +with a two-second budget. Require row statuses `fail, fail, ok`, timeout exit124, +and `os.kill(pid, 0)` to raise `ProcessLookupError` for that owned timeout child. +This tests actual subprocess timeout handling; it does not mock `TimeoutExpired`. + +## Cleanup + +Each example's own cleanup had already removed every one of the 29 created +resources when observed. Recovery deletion was never counted as a passing example. +A separate public-SDK readback returned typed `SandboxNotFoundError` for all 29 +owned identifiers: [independent cleanup summary](2026-10-25-public-a6-example-cleanup.json). +All 27 directly observed owned local child PIDs and unique-marker process scans +were independently absent; the timeout child was also checked individually. +Raw logs and ownership journals remain private; no IDs or credentials are copied. + +## Problems found and limits + +The browser took 84.44 seconds. Earlier a4 took 236.28 seconds, a3 observations +took 105.53 and 157.62 seconds, and a2 cold installation failed at 300 seconds. +Those historical receipts remain unchanged. This success does not establish the +earlier timeout's root cause or promise a stable cold-install duration. This is +an alpha package and scoped sample result. + +These runs do not cover fresh CLI installation, all catalog templates, other +platforms, real hosted Codex/Qwen model invocations, PTY or desktop support. +They are not the complete `make e2e` suite. Local fixtures, real cloud calls and +static documentation checks retain separate scopes. + +## Owner checks and current guidance + +The following guidance PR changes the decorator example's installation docstring +from a4 to a6 only. Its executable AST is identical to the actually tested source; +these receipts retain the original full-file hash, not a claim to have executed +a later edited file. No API, runtime, example execution logic or version changes +are included in that documentation follow-up. Its exact-head CI/review/merge are +separate pending gates; no new package release is performed. diff --git a/.agents/evidence/verify/2026-10-25-public-a6-local-examples.json b/.agents/evidence/verify/2026-10-25-public-a6-local-examples.json new file mode 100644 index 0000000..cb389b8 --- /dev/null +++ b/.agents/evidence/verify/2026-10-25-public-a6-local-examples.json @@ -0,0 +1,227 @@ +{ + "source_commit": "8e610a3658040d8d6973e7951f9590ea50a4d70a", + "runner_sha256": "642e2abbbb8a9ba6c43bef04ed4fc4c7ae3977c942ca6e48d7764dad5b1ea63e", + "public_packages": { + "agent-sandbox-client": "0.4.0a6", + "agent-sandbox-server": "0.4.0a6" + }, + "model_scope": "controlled local Codex/Qwen protocol fixtures, no real model call", + "cases": [ + { + "mode": "forced-hosted-timeout", + "exit_code": 1, + "seconds": 4.429, + "rows": [ + { + "status": "ok", + "example": "py_compile examples" + }, + { + "status": "ok", + "example": "examples/scenarios/agent_loop_local.py" + }, + { + "status": "ok", + "example": "examples/agents/local_files_and_session.py" + }, + { + "status": "ok", + "example": "examples/agents/complete_case.py" + }, + { + "status": "ok", + "example": "examples/templates/python-hello/call_api.py" + }, + { + "status": "ok", + "example": "examples/templates/agents-cli/e2e_test.py" + }, + { + "status": "fail", + "example": "examples/agents/hosted_codex.py" + }, + { + "status": "ok", + "example": "examples/agents/hosted_qwen.py" + }, + { + "status": "ok", + "example": "examples/quickstart/01_hello.py via local-process" + }, + { + "status": "ok", + "example": "examples/quickstart/02_file_ops.py via local-process" + }, + { + "status": "needs-provider", + "example": "examples/quickstart/03_web_service.py" + }, + { + "status": "needs-provider", + "example": "examples/quickstart/04_data_analysis.py" + }, + { + "status": "needs-provider", + "example": "examples/quickstart/05_decorator_usage.py" + }, + { + "status": "needs-provider", + "example": "examples/agents/codex_agent.py" + }, + { + "status": "needs-provider", + "example": "examples/agents/browser_automation.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/comparison.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/e2b_data_analysis.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/e2b_web_scraper.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/modal_compute.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/modal_data_analysis.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/e2e_capability_validation.py" + } + ], + "counts": { + "ok": 9, + "fail": 1, + "needs-provider": 11 + }, + "tagged_owned_processes_absent": true, + "result": "PASS" + }, + { + "mode": "normal", + "exit_code": 0, + "seconds": 4.818, + "rows": [ + { + "status": "ok", + "example": "py_compile examples" + }, + { + "status": "ok", + "example": "examples/scenarios/agent_loop_local.py" + }, + { + "status": "ok", + "example": "examples/agents/local_files_and_session.py" + }, + { + "status": "ok", + "example": "examples/agents/complete_case.py" + }, + { + "status": "ok", + "example": "examples/templates/python-hello/call_api.py" + }, + { + "status": "ok", + "example": "examples/templates/agents-cli/e2e_test.py" + }, + { + "status": "ok", + "example": "examples/agents/hosted_codex.py" + }, + { + "status": "ok", + "example": "examples/agents/hosted_qwen.py" + }, + { + "status": "ok", + "example": "examples/quickstart/01_hello.py via local-process" + }, + { + "status": "ok", + "example": "examples/quickstart/02_file_ops.py via local-process" + }, + { + "status": "needs-provider", + "example": "examples/quickstart/03_web_service.py" + }, + { + "status": "needs-provider", + "example": "examples/quickstart/04_data_analysis.py" + }, + { + "status": "needs-provider", + "example": "examples/quickstart/05_decorator_usage.py" + }, + { + "status": "needs-provider", + "example": "examples/agents/codex_agent.py" + }, + { + "status": "needs-provider", + "example": "examples/agents/browser_automation.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/comparison.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/e2b_data_analysis.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/e2b_web_scraper.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/modal_compute.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/modal_data_analysis.py" + }, + { + "status": "needs-provider", + "example": "examples/compat-demos/e2e_capability_validation.py" + } + ], + "counts": { + "ok": 10, + "fail": 0, + "needs-provider": 11 + }, + "tagged_owned_processes_absent": true, + "result": "PASS" + } + ], + "timeout_control": { + "return_codes": [ + 7, + 124, + 0 + ], + "row_statuses": [ + "fail", + "fail", + "ok" + ], + "earlier_failure_retained": true, + "continued_after_timeout": true, + "exact_owned_timeout_child_absent": true, + "result": "PASS" + }, + "tracked_direct_processes": 27, + "all_tracked_owned_pids_independently_absent": true, + "result": "PASS", + "script_sha256": "84c9e8c4729e3c54379ead427d244dfdb5feb3a843790bf7125cbf2dd4d8c521" +} diff --git a/.agents/notes/proposed/process/2026-10-25-sandbox-help-namespace.md b/.agents/notes/implemented/process/2026-10-25-sandbox-help-namespace.md similarity index 80% rename from .agents/notes/proposed/process/2026-10-25-sandbox-help-namespace.md rename to .agents/notes/implemented/process/2026-10-25-sandbox-help-namespace.md index 426045e..29bbb90 100644 --- a/.agents/notes/proposed/process/2026-10-25-sandbox-help-namespace.md +++ b/.agents/notes/implemented/process/2026-10-25-sandbox-help-namespace.md @@ -1,6 +1,6 @@ # Decision: finish owned namespaces in public Sandbox help -Status: proposed +Status: implemented ## Problem @@ -66,3 +66,11 @@ independent review and merge precede the existing paired publisher and official readback. No new runtime feature, API, alias, dependency or release framework. [Verification](../../../evidence/verify/2026-10-25-sandbox-help-namespace.md). + +## Implementation + +PR131 was normally merged as 8e610a3658040d8d6973e7951f9590ea50a4d70a after exact4c45 passed all 13 checks and independent review. Immutable tag v0.4.0a6 publisher40225846586 succeeded on attempt1. Fresh official non-all a6 verified all 28 imports, 390 installed source files/2358 docstrings, 12 Provider help signatures, multiline imports, four public artifact hashes, real local HTTP and independently absent owned process. The current design programs also passed on public a6 with both owned resources independently typed-not-found. + +[Subsequent public-a6 delivery](../../../evidence/verify/2026-10-25-public-a6-delivery.md) +records the actual public results. This installation-guidance follow-up has its +own pending CI/review/merge; no later tag or package is created for it. diff --git a/.agents/notes/proposed/process/2026-10-25-template-help-imports.md b/.agents/notes/implemented/process/2026-10-25-template-help-imports.md similarity index 79% rename from .agents/notes/proposed/process/2026-10-25-template-help-imports.md rename to .agents/notes/implemented/process/2026-10-25-template-help-imports.md index 390bc36..223380e 100644 --- a/.agents/notes/proposed/process/2026-10-25-template-help-imports.md +++ b/.agents/notes/implemented/process/2026-10-25-template-help-imports.md @@ -1,6 +1,6 @@ # Decision: use installed public imports in template help -Status: proposed +Status: implemented ## Problem @@ -52,3 +52,11 @@ Publication and public readback must complete before recommending a5. No runtime feature, alias, new framework or additional publication retry mechanism is added. [Candidate verification](../../../evidence/verify/2026-10-25-template-help-imports.md). + +## Implementation + +PR129 was normally merged as c7b4a55ff930753eb35866b161184f946b04d46c; immutable public a5 publisher40222172993 succeeded on attempt1. All 24 Template help imports passed actual public installation. Four remaining class-help errors were separately found and fixed by PR131/public a6; this does not expand the original a5 evidence. + +[Subsequent public-a6 delivery](../../../evidence/verify/2026-10-25-public-a6-delivery.md) +records the actual public results. This installation-guidance follow-up has its +own pending CI/review/merge; no later tag or package is created for it. diff --git a/.agents/notes/proposed/process/2026-10-25-current-public-a6.md b/.agents/notes/proposed/process/2026-10-25-current-public-a6.md new file mode 100644 index 0000000..ce5bc38 --- /dev/null +++ b/.agents/notes/proposed/process/2026-10-25-current-public-a6.md @@ -0,0 +1,59 @@ +# Decision: select verified public a6 in current SDK guidance + +Status: proposed + +## Problem + +Current guides, two Skills and offline fixture recipes still select a4 after +immutable a6 publication and independent official artifact/installation checks. +The delivered help/API corrections need accurate current installation guidance. + +## Decision + +Select exact public a6 with the existing official index in maintained installs +and both fixture recipes; align the existing guest-version assertion. Accept the +already merged/published Template and Sandbox help notes using actual facts. +Add new dated public-a6 delivery and 14-cloud/local example evidence; preserve all historical receipts, initial +metadata404 observations and prior browser failures. No API or example execution +code changes; the decorator example changes only its installation docstring. + +## API Design + +N/A — no SDK runtime, signature, alias, dependency feature or version change. +Client/server remain immutable public a6. This follow-up publishes no new package. + +## Alternatives considered + +Recommending a6 before publication would be inaccurate. Relabeling a4/a5 results +would erase verification boundaries. New compatibility helpers, release retries +or another package version provide no benefit for current guidance. + +## Dependencies + +- https://github.com/Alibaba-Agent-Sandbox/python-sdk/issues/130 +- https://github.com/Alibaba-Agent-Sandbox/python-sdk/pull/131 +- https://github.com/Alibaba-Agent-Sandbox/python-sdk/releases/tag/v0.4.0a6 +- https://github.com/Alibaba-Agent-Sandbox/python-sdk/actions/runs/40225846586 + +## Test Strategy + +Compare all four preserved candidate files with official metadata and downloaded +bytes. Fresh-install non-all a6, then check public exports, all 28 help imports, +390 installed files/2358 docstrings, 12 Provider help signatures and three explicit +multiline import statements. Verify real HTTP/files and owned-process absence. +Rerun both full current design programs on public a6 and independently verify +their exact owned resources absent. Record the separate actual 14-example public-a6 +cloud batch with 29 typed-not-found checks, and the unchanged local runner with +10 successful checks, real timeout continuation and 27 absent owned processes. Run owner record/link/hygiene checks and +required exact-head CI, including actual public-a6 Docker fixture jobs. + +## Acceptance criteria + +Current guidance selects actually public a6 without changing callable behavior. +New evidence retains exact versions, scopes and cleanup. Required current-head +CI and independent review pass before normal merge; old receipts and immutable +tags/artifacts remain unchanged. No new SDK release is performed. + +[Verification](../../../evidence/verify/2026-10-25-public-a6-delivery.md). + +[Public-a6 example acceptance](../../../evidence/verify/2026-10-25-public-a6-examples.md). diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 80646a3..3288597 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -203,7 +203,7 @@ jobs: run: docker build --tag abx-sdk-fixture:current "examples/templates/${{ matrix.fixture }}" - name: Verify the published guest runtime run: | - docker run --rm --entrypoint python3 abx-sdk-fixture:current -c 'from importlib.metadata import version; from agent_sandbox.server import start; assert version("agent-sandbox-server") == "0.4.0a4" and callable(start)' + docker run --rm --entrypoint python3 abx-sdk-fixture:current -c 'from importlib.metadata import version; from agent_sandbox.server import start; assert version("agent-sandbox-server") == "0.4.0a6" and callable(start)' - name: Start the fixture and check its real HTTP application env: FIXTURE_NAME: ${{ matrix.fixture }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fe3e0f..78f3c82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/). ## [Unreleased] +### Changed + +- Select verified public client/server a6 in maintained bilingual installs, Skills and runtime fixtures. Preserve immutable publication hashes, exhaustive help checks and real current-design cleanup separately from earlier a4/a5 receipts. No runtime/API change or new package publication. / 维护中的双语安装、技能与运行夹具统一使用已验证公开 a6;另存不可变产物摘要、完整帮助检查与真实设计示例清理结果,不改旧 a4/a5 证据,不改运行接口或另发包。 + ### Fixed - Correct current bilingual API/lifecycle examples to use actual base commands/files, canonical Provider parameters and typed timeout cleanup; remove unimplemented global cleanup and speculative persistence/billing guarantees. / 修正当前双语 API/生命周期示例,使用真实 base 命令/文件、规范 Provider 参数与类型化超时清理;删除未实现全局策略及推测的持久化/计费承诺。 diff --git a/agent-sandbox-provider/SKILL.md b/agent-sandbox-provider/SKILL.md index 505fa99..a1e08f9 100644 --- a/agent-sandbox-provider/SKILL.md +++ b/agent-sandbox-provider/SKILL.md @@ -5,7 +5,7 @@ description: Write an Agent Sandbox provider plugin so ProviderSandbox.create(pr # Write an Agent Sandbox provider -Specification 5 is implemented in the published 0.4.0a4 client/server alpha pair. +Specification 5 is implemented in the published 0.4.0a6 client/server alpha pair. This file is instructions for a coding agent. It is not executed by the SDK. Calling `Sandbox.create` against a backend that already exists is @@ -14,11 +14,11 @@ The client distribution is `agent-sandbox-client` (import `agent_sandbox`). Install the published alpha client; it installs its matching server dependency: ```bash -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a6' python -m pip check ``` -The image needs only `agent-sandbox-server==0.4.0a4`. Installing that package on the host does not update an existing image. Development source installations must use a matching client/server revision. +The image needs only `agent-sandbox-server==0.4.0a6`. Installing that package on the host does not update an existing image. Development source installations must use a matching client/server revision. Do not install `agent-sandbox`; that PyPI project is unrelated. Only `alicloud-express` is built in. Do not reinstall it and do not reuse diff --git a/agent-sandbox-sdk/SKILL.md b/agent-sandbox-sdk/SKILL.md index 46ba6c1..7a86de5 100644 --- a/agent-sandbox-sdk/SKILL.md +++ b/agent-sandbox-sdk/SKILL.md @@ -5,7 +5,7 @@ description: Write a Python client or a sandbox template for Agent Sandbox. Use # Write an Agent Sandbox client or template -Specification 5 is implemented in the published 0.4.0a4 client/server alpha pair. +Specification 5 is implemented in the published 0.4.0a6 client/server alpha pair. This file is instructions for a coding agent. It is not executed by the SDK. Operating a sandbox with `abx` or MCP is the `agent-sandbox` skill. This skill @@ -21,11 +21,11 @@ Two packages share one version: Install the published alpha client; it installs its matching server dependency: ```bash -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a6' python -m pip check ``` -The image needs only `agent-sandbox-server==0.4.0a4`. Installing that package on the host does not update an existing image. Development source installations must use a matching client/server revision. +The image needs only `agent-sandbox-server==0.4.0a6`. Installing that package on the host does not update an existing image. Development source installations must use a matching client/server revision. Do not run `pip install agent-sandbox`. That PyPI name is an unrelated project. ## Credentials @@ -195,7 +195,7 @@ Do not listen on 49983, 5000, or 49999. `` defaults to `cn-hangzhou`. ```dockerfile FROM fc-e2b-registry..cr.aliyuncs.com/runtime/base: -RUN pip install --index-url https://pypi.org/simple --no-cache-dir 'agent-sandbox-server==0.4.0a4' +RUN pip install --index-url https://pypi.org/simple --no-cache-dir 'agent-sandbox-server==0.4.0a6' WORKDIR /home/user/app COPY commands.py /home/user/app/commands.py EXPOSE 9000 @@ -207,7 +207,7 @@ The CLI can prepare the supported official native base recipe for both Express a ```dockerfile FROM python:3.12-slim -RUN pip install --index-url https://pypi.org/simple --no-cache-dir 'agent-sandbox-server==0.4.0a4' +RUN pip install --index-url https://pypi.org/simple --no-cache-dir 'agent-sandbox-server==0.4.0a6' WORKDIR /home/user/app COPY commands.py /home/user/app/commands.py EXPOSE 9000 diff --git a/docs/en/DESIGN.md b/docs/en/DESIGN.md index 3f5452a..e1a10cb 100644 --- a/docs/en/DESIGN.md +++ b/docs/en/DESIGN.md @@ -21,7 +21,7 @@ This repository holds the Python SDK as two lock-step PyPI distributions — `ag ### Quick Start ```bash -python -m pip install --index-url https://pypi.org/simple agent-sandbox-client==0.4.0a4 +python -m pip install --index-url https://pypi.org/simple agent-sandbox-client==0.4.0a6 export ABX_SANDBOX_API_KEY=your-api-key ``` diff --git a/docs/en/design/mcp-server.md b/docs/en/design/mcp-server.md index bba61bf..23c0e12 100644 --- a/docs/en/design/mcp-server.md +++ b/docs/en/design/mcp-server.md @@ -292,7 +292,7 @@ graph LR - **Sessions**: in-process `SessionStore`; idle TTL 3600 s (default), max 100 concurrent sessions (default); capacity exhaustion returns 503 with JSON-RPC error `-32000` - **Version negotiation**: `initialize` echoes the client-requested `protocolVersion` when supported; this transport supports `2025-06-18` only, matching `GET /health`. Missing or unsupported requested versions negotiate to `2025-06-18` — per the MCP spec the server responds with a version it supports, and clients that cannot accept it may disconnect. The STDIO transport independently keeps `2024-11-05` - **Use case**: remote service, team sharing, multiple clients; deploy to Alibaba Cloud FC via the artifact generated by the CLI's `abx mcp deploy`, or run locally with uvicorn -- **Optional dependency**: Starlette + uvicorn (`pip install --index-url https://pypi.org/simple 'agent-sandbox-client[mcp]==0.4.0a4'`) +- **Optional dependency**: Starlette + uvicorn (`pip install --index-url https://pypi.org/simple 'agent-sandbox-client[mcp]==0.4.0a6'`) ### Authentication diff --git a/docs/en/guide/authoring-templates.md b/docs/en/guide/authoring-templates.md index f80fe80..3819744 100644 --- a/docs/en/guide/authoring-templates.md +++ b/docs/en/guide/authoring-templates.md @@ -136,7 +136,7 @@ The server does not select a provider. Port 9000 is the application HTTP listen `commands.py` imports only `agent_sandbox.server` and calls `start(port)` from its main entry; the image explicitly installs the server SDK. For the provider-native -application API in the published 0.4.0a4 alpha, import `ProviderSandbox` from +application API in the published 0.4.0a6 alpha, import `ProviderSandbox` from `agent_sandbox` and connect with `await ProviderSandbox.connect(ID)`. This instance supports `async with await sandbox.application_client(9000, token=application_token)`; the standard `Sandbox`/`AsyncSandbox` classes have a different interface. diff --git a/docs/en/guide/client-sdk.md b/docs/en/guide/client-sdk.md index ffbbc8d..a85a821 100644 --- a/docs/en/guide/client-sdk.md +++ b/docs/en/guide/client-sdk.md @@ -5,7 +5,7 @@ For current SDK installation, use the [installation guide](install-python.md). The Client SDK runs on **your machine**. It creates a sandbox, connects to one that already exists, and then runs commands, reads and writes files, and calls the code interpreter. The package is `agent-sandbox-client`. Import `agent_sandbox`. ```bash -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a6' python -m pip check ``` diff --git a/docs/en/guide/cloud-examples.md b/docs/en/guide/cloud-examples.md index d6641dc..fc9e2f3 100644 --- a/docs/en/guide/cloud-examples.md +++ b/docs/en/guide/cloud-examples.md @@ -3,7 +3,7 @@ Install the public Python pair through the client dependency: ```bash -python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client[all]==0.4.0a4" +python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client[all]==0.4.0a6" export ABX_SANDBOX_API_KEY="your-express-sandbox-api-key" # Configure ABX_SANDBOX_BASE_URL and ABX_SANDBOX_DOMAIN for your region if needed. ``` diff --git a/docs/en/guide/getting-started.md b/docs/en/guide/getting-started.md index 3ac47af..260f98c 100644 --- a/docs/en/guide/getting-started.md +++ b/docs/en/guide/getting-started.md @@ -12,7 +12,7 @@ Use Python 3.10 or later. Create and activate a virtual environment following th [installation guide](install-python.md), then install: ```bash -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a6' python -m pip check export ABX_SANDBOX_API_KEY='your-api-key' ``` diff --git a/docs/en/guide/install-python.md b/docs/en/guide/install-python.md index 05e12c4..4b34822 100644 --- a/docs/en/guide/install-python.md +++ b/docs/en/guide/install-python.md @@ -1,6 +1,6 @@ # Install the Python packages -> Specification 5 template launch requires the matching `agent-sandbox-client==0.4.0a4` and `agent-sandbox-server==0.4.0a4` alpha packages used in this guide. The previous 0.3.x packages do not implement this entry point. To validate a source revision, install both distributions from the same checkout as described below. +> Specification 5 template launch requires the matching `agent-sandbox-client==0.4.0a6` and `agent-sandbox-server==0.4.0a6` alpha packages used in this guide. The previous 0.3.x packages do not implement this entry point. To validate a source revision, install both distributions from the same checkout as described below. Use Python 3.10 or newer and a virtual environment: @@ -9,7 +9,7 @@ python -m venv .venv # Linux or macOS: source .venv/bin/activate # Windows PowerShell: .venv\Scripts\Activate.ps1 -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a6' python -m pip check ``` @@ -31,7 +31,7 @@ entry's documented contract; the standard `api_key=` parameter remains valid. ## Optional dependencies ```bash -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client[all]==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client[all]==0.4.0a6' ``` Replace `[all]` with `[mcp]`, `[session]` or `[fast]` for that subset. Template YAML and the declarative decorator belong to the base client; they need no extra. Browser automation requires Playwright installed inside the sandbox image. @@ -39,7 +39,7 @@ Replace `[all]` with `[mcp]`, `[session]` or `[fast]` for that subset. Template ## Server-only installation inside an image ```bash -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-server==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-server==0.4.0a6' ``` The server runs the application inside an image. Installing it does not create a sandbox. See the [server guide](server-sdk.md) to register commands and start the service. diff --git a/docs/en/guide/mcp-integration.md b/docs/en/guide/mcp-integration.md index c107980..621ad6e 100644 --- a/docs/en/guide/mcp-integration.md +++ b/docs/en/guide/mcp-integration.md @@ -13,7 +13,7 @@ MCP (Model Context Protocol) is an open protocol that allows AI models to intera ### Requirements ```bash -pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a4" # the SDK's own MCP STDIO server: python -m agent_sandbox.agent.mcp +pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a6" # the SDK's own MCP STDIO server: python -m agent_sandbox.agent.mcp export ABX_SANDBOX_API_KEY=your-api-key ``` @@ -97,7 +97,7 @@ For team sharing or remote access, run the MCP Server as a Streamable HTTP servi ### Run Locally with uvicorn ```bash -pip install --index-url https://pypi.org/simple "agent-sandbox-client[mcp]==0.4.0a4" +pip install --index-url https://pypi.org/simple "agent-sandbox-client[mcp]==0.4.0a6" export ABX_MCP_AUTH_TOKEN=replace_me # Bearer token (omit to disable auth) export ABX_SANDBOX_API_KEY=your-api-key diff --git a/docs/en/guide/migrate-from-e2b.md b/docs/en/guide/migrate-from-e2b.md index 7b755de..c6922b9 100644 --- a/docs/en/guide/migrate-from-e2b.md +++ b/docs/en/guide/migrate-from-e2b.md @@ -4,7 +4,7 @@ The standard Python API targets `e2b==2.31.0` and `e2b-code-interpreter==2.8.1`, ## Installation and imports -Install the published client with `python -m pip install --index-url https://pypi.org/simple agent-sandbox-client==0.4.0a4`. Configure the Express account with `ABX_SANDBOX_API_KEY`, `ABX_SANDBOX_BASE_URL` and `ABX_SANDBOX_DOMAIN`; these project settings work for standard `Sandbox` / `AsyncSandbox`, `code_interpreter` and `ProviderSandbox`. `abx config` and project/home configuration files also feed these settings. The standard client's public `api_key=` parameter remains part of its pinned contract. A separate application still using the third-party E2B SDK uses that SDK's native configuration names; do not send credentials from another provider account. +Install the published client with `python -m pip install --index-url https://pypi.org/simple agent-sandbox-client==0.4.0a6`. Configure the Express account with `ABX_SANDBOX_API_KEY`, `ABX_SANDBOX_BASE_URL` and `ABX_SANDBOX_DOMAIN`; these project settings work for standard `Sandbox` / `AsyncSandbox`, `code_interpreter` and `ProviderSandbox`. `abx config` and project/home configuration files also feed these settings. The standard client's public `api_key=` parameter remains part of its pinned contract. A separate application still using the third-party E2B SDK uses that SDK's native configuration names; do not send credentials from another provider account. | Previous import | New import | diff --git a/docs/en/guide/sdk-usage.md b/docs/en/guide/sdk-usage.md index 493bb92..94bbec2 100644 --- a/docs/en/guide/sdk-usage.md +++ b/docs/en/guide/sdk-usage.md @@ -6,7 +6,7 @@ This page documents the asynchronous **ProviderSandbox** provider/server extensi ## Installation -Follow the [installation guide](install-python.md). The public client/server alpha pair is 0.4.0a4; installing the client installs the matching server dependency. Host package installation does not change existing sandbox images. +Follow the [installation guide](install-python.md). The public client/server alpha pair is 0.4.0a6; installing the client installs the matching server dependency. Host package installation does not change existing sandbox images. Do not run `pip install agent-sandbox`. That name on PyPI is an unrelated project. diff --git a/docs/en/guide/server-sdk.md b/docs/en/guide/server-sdk.md index 42e6bf9..2d3937c 100644 --- a/docs/en/guide/server-sdk.md +++ b/docs/en/guide/server-sdk.md @@ -5,12 +5,12 @@ For current SDK installation, use the [installation guide](install-python.md). The Server SDK runs **inside the sandbox**. It is the HTTP service the image keeps listening on, port 9000 by default. The package is `agent-sandbox-server`. Import `agent_sandbox.server`. A template's `commands.py` uses it to register commands, turn capabilities on, and call `start(9000)`. The following explicitly opts into the published alpha. The matching client version -is 0.4.0a4. The explicit official index makes this example independent of a locally +is 0.4.0a6. The explicit official index makes this example independent of a locally configured mirror; it does not imply that mirrors are generally unavailable. Development from a checkout is covered in the installation guide. ```bash -python -m pip install --index-url https://pypi.org/simple "agent-sandbox-server==0.4.0a4" +python -m pip install --index-url https://pypi.org/simple "agent-sandbox-server==0.4.0a6" ``` ```python diff --git a/docs/en/guide/template-server-api.md b/docs/en/guide/template-server-api.md index 96be145..92f1e52 100644 --- a/docs/en/guide/template-server-api.md +++ b/docs/en/guide/template-server-api.md @@ -13,7 +13,7 @@ A short client for a server that is already running is [`examples/templates/pyth The server defaults to `0.0.0.0:9000`. The provider must implement the required port resolution and network path, and the service must actually listen. Do not treat every endpoint as a `{port}-{sandbox_id}.{domain}` hostname. Resolve application HTTP independently from internal envd/EPP transport: This example uses the provider-native `ProviderSandbox` API in the published -`agent-sandbox-client==0.4.0a4` alpha; the standard `Sandbox`/`AsyncSandbox` classes +`agent-sandbox-client==0.4.0a6` alpha; the standard `Sandbox`/`AsyncSandbox` classes have a different interface. See [installation](install-python.md) for the exact package/source choices. Set `SANDBOX_ID` to an existing sandbox whose application server is running, and `ABX_SERVER_TOKEN` only if that server was started with it. diff --git a/docs/en/guide/testing-e2e.md b/docs/en/guide/testing-e2e.md index 95374d7..25c051b 100644 --- a/docs/en/guide/testing-e2e.md +++ b/docs/en/guide/testing-e2e.md @@ -68,7 +68,7 @@ run once after installation succeeds; their failures stop the release. ## SDK fixture images The SDK repository keeps offline python-hello and agents-cli fixtures, separate -from the template catalog. Their Dockerfiles install public server 0.4.0a4 from +from the template catalog. Their Dockerfiles install public server 0.4.0a6 from the official PyPI index without local wheels. CI builds both, checks the actual guest package and HTTP application, and confirms owned container cleanup. Agents runtime listing does not prove an installed agent or a real model call. diff --git a/docs/en/guide/troubleshooting.md b/docs/en/guide/troubleshooting.md index d299058..09c801a 100644 --- a/docs/en/guide/troubleshooting.md +++ b/docs/en/guide/troubleshooting.md @@ -211,7 +211,7 @@ Check file permissions. The default user in the sandbox is `user`; you can speci ```bash # Ensure the correct package name -python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a4" +python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a6" # If dependency conflicts occur python -m pip check diff --git a/docs/zh/DESIGN.md b/docs/zh/DESIGN.md index 0356873..171220b 100644 --- a/docs/zh/DESIGN.md +++ b/docs/zh/DESIGN.md @@ -21,7 +21,7 @@ ### 快速上手 ```bash -python -m pip install --index-url https://pypi.org/simple agent-sandbox-client==0.4.0a4 +python -m pip install --index-url https://pypi.org/simple agent-sandbox-client==0.4.0a6 export ABX_SANDBOX_API_KEY=your-api-key ``` diff --git a/docs/zh/design/mcp-server.md b/docs/zh/design/mcp-server.md index 3aa3ebe..19186d2 100644 --- a/docs/zh/design/mcp-server.md +++ b/docs/zh/design/mcp-server.md @@ -292,7 +292,7 @@ graph LR - **会话**:进程内 `SessionStore`;空闲 TTL 默认 3600 秒、并发会话上限默认 100;容量满时返回 503 与 JSON-RPC 错误 `-32000` - **版本协商**:`initialize` 在请求版本受支持时原样回显;本传输仅支持 `2025-06-18`,与 `GET /health` 一致。请求缺失或不支持的版本时协商到 `2025-06-18` —— 按 MCP 规范,服务器回复自己支持的版本,无法接受的客户端可自行断开。STDIO 传输独立保持 `2024-11-05` - **适用场景**:远程服务、团队共享、多客户端;用 CLI 的 `abx mcp deploy` 生成的产物部署到阿里云 FC,或本地以 uvicorn 运行 -- **可选依赖**:Starlette + uvicorn(`pip install --index-url https://pypi.org/simple 'agent-sandbox-client[mcp]==0.4.0a4'`) +- **可选依赖**:Starlette + uvicorn(`pip install --index-url https://pypi.org/simple 'agent-sandbox-client[mcp]==0.4.0a6'`) ### 认证 diff --git a/docs/zh/guide/authoring-templates.md b/docs/zh/guide/authoring-templates.md index b479808..15b93ef 100644 --- a/docs/zh/guide/authoring-templates.md +++ b/docs/zh/guide/authoring-templates.md @@ -133,7 +133,7 @@ if __name__ == "__main__": 服务端不选择 Provider。9000 是应用 HTTP 默认监听端口;平台注入的 envd、解释器及保留端口属于各后端,不能据此推导应用服务不可用。声明的 `start_cmd` 只运行一次,没有该字段时使用镜像或平台模板入口;不要让原生入口与启动命令重复运行。非空 `ready_cmd` 必须实际检查。构建配置必须明确选择,其有效 Dockerfile 和构建参数进入输入身份。 `commands.py` 只导入 `agent_sandbox.server`,在主入口调用 `start(port)`;镜像显式安装 server SDK。 -已发布 0.4.0a4 alpha 中的 Provider 原生应用 API 使用 `from agent_sandbox import ProviderSandbox`, +已发布 0.4.0a6 alpha 中的 Provider 原生应用 API 使用 `from agent_sandbox import ProviderSandbox`, 再通过 `await ProviderSandbox.connect(ID)` 连接。这个实例支持 `async with await sandbox.application_client(9000, token=application_token)`;标准 `Sandbox`/`AsyncSandbox` 是另一套接口。应用端点解析保留代理前缀,并隔离网关和应用凭据。 diff --git a/docs/zh/guide/client-sdk.md b/docs/zh/guide/client-sdk.md index 0498669..6d1b4a3 100644 --- a/docs/zh/guide/client-sdk.md +++ b/docs/zh/guide/client-sdk.md @@ -5,7 +5,7 @@ Client SDK 跑在**你的机器**上。它创建沙箱、连上已经存在的沙箱,然后在沙箱里执行命令、读写文件、调用代码解释器。包名是 `agent-sandbox-client`,导入 `agent_sandbox`。 ```bash -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a6' python -m pip check ``` diff --git a/docs/zh/guide/cloud-examples.md b/docs/zh/guide/cloud-examples.md index d946031..5bc2c86 100644 --- a/docs/zh/guide/cloud-examples.md +++ b/docs/zh/guide/cloud-examples.md @@ -3,7 +3,7 @@ 安装客户端时自动安装同版本服务端: ```bash -python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client[all]==0.4.0a4" +python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client[all]==0.4.0a6" export ABX_SANDBOX_API_KEY="your-express-sandbox-api-key" # 非默认地域按需配置 ABX_SANDBOX_BASE_URL、ABX_SANDBOX_DOMAIN。 ``` diff --git a/docs/zh/guide/getting-started.md b/docs/zh/guide/getting-started.md index 7e79db3..d0dfa19 100644 --- a/docs/zh/guide/getting-started.md +++ b/docs/zh/guide/getting-started.md @@ -10,7 +10,7 @@ 使用 Python 3.10 及以上版本,先按[安装指南](install-python.md)创建并激活虚拟环境,再安装: ```bash -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a6' python -m pip check export ABX_SANDBOX_API_KEY='your-api-key' ``` diff --git a/docs/zh/guide/install-python.md b/docs/zh/guide/install-python.md index f60c692..8c10905 100644 --- a/docs/zh/guide/install-python.md +++ b/docs/zh/guide/install-python.md @@ -1,6 +1,6 @@ # 安装 Python 配套包 -> 规范 5 的模板启动需要本指南使用的配套 alpha 包:`agent-sandbox-client==0.4.0a4` 和 `agent-sandbox-server==0.4.0a4`。旧 0.3.x 包不实现此入口。验证源码修订时,请按下文从同一份检出同时安装两个发行包。 +> 规范 5 的模板启动需要本指南使用的配套 alpha 包:`agent-sandbox-client==0.4.0a6` 和 `agent-sandbox-server==0.4.0a6`。旧 0.3.x 包不实现此入口。验证源码修订时,请按下文从同一份检出同时安装两个发行包。 使用 Python 3.10 或更高版本及虚拟环境: @@ -9,7 +9,7 @@ python -m venv .venv # Linux 或 macOS: source .venv/bin/activate # Windows PowerShell:.venv\Scripts\Activate.ps1 -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client==0.4.0a6' python -m pip check ``` @@ -30,7 +30,7 @@ python -c "from importlib.metadata import version; print(version('agent-sandbox- ## 可选依赖 ```bash -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client[all]==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client[all]==0.4.0a6' ``` 可把 `[all]` 换成 `[mcp]`、`[session]` 或 `[fast]`。模板 YAML 和声明式装饰器属于基础客户端,无需 extra。浏览器自动化需要在沙箱镜像内安装 Playwright。 @@ -38,7 +38,7 @@ python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-client[ ## 镜像内只安装服务端 ```bash -python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-server==0.4.0a4' +python -m pip install --index-url https://pypi.org/simple 'agent-sandbox-server==0.4.0a6' ``` 服务端负责在镜像内运行应用,安装它不会创建沙箱。注册命令与启动服务见[服务端指南](server-sdk.md)。 diff --git a/docs/zh/guide/mcp-integration.md b/docs/zh/guide/mcp-integration.md index bd88c71..a397eda 100644 --- a/docs/zh/guide/mcp-integration.md +++ b/docs/zh/guide/mcp-integration.md @@ -13,7 +13,7 @@ MCP(Model Context Protocol)是一个开放协议,允许 AI 模型与外部 ### 环境要求 ```bash -pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a4" # SDK 自带的 MCP STDIO server:python -m agent_sandbox.agent.mcp +pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a6" # SDK 自带的 MCP STDIO server:python -m agent_sandbox.agent.mcp export ABX_SANDBOX_API_KEY=your-api-key ``` @@ -96,7 +96,7 @@ printf '%s\n' \ ### 本地以 uvicorn 运行 ```bash -pip install --index-url https://pypi.org/simple "agent-sandbox-client[mcp]==0.4.0a4" +pip install --index-url https://pypi.org/simple "agent-sandbox-client[mcp]==0.4.0a6" export ABX_MCP_AUTH_TOKEN=replace_me # Bearer token(省略则关闭认证) export ABX_SANDBOX_API_KEY=your-api-key diff --git a/docs/zh/guide/migrate-from-e2b.md b/docs/zh/guide/migrate-from-e2b.md index fc5f289..86d7826 100644 --- a/docs/zh/guide/migrate-from-e2b.md +++ b/docs/zh/guide/migrate-from-e2b.md @@ -4,7 +4,7 @@ ## 安装与导入 -使用已发布客户端:`python -m pip install --index-url https://pypi.org/simple agent-sandbox-client==0.4.0a4`。通过 `ABX_SANDBOX_API_KEY`、`ABX_SANDBOX_BASE_URL` 和 `ABX_SANDBOX_DOMAIN` 配置极速版账号;本项目标准 `Sandbox` / `AsyncSandbox`、`code_interpreter` 和 `ProviderSandbox` 均支持这些项目配置。也可使用 `abx config` 与项目/用户配置文件。标准客户端公开 `api_key=` 参数仍属于其固定契约。仍使用第三方 E2B SDK 的独立应用按该 SDK 的原生配置操作,不要混用不同提供商账号的凭据。 +使用已发布客户端:`python -m pip install --index-url https://pypi.org/simple agent-sandbox-client==0.4.0a6`。通过 `ABX_SANDBOX_API_KEY`、`ABX_SANDBOX_BASE_URL` 和 `ABX_SANDBOX_DOMAIN` 配置极速版账号;本项目标准 `Sandbox` / `AsyncSandbox`、`code_interpreter` 和 `ProviderSandbox` 均支持这些项目配置。也可使用 `abx config` 与项目/用户配置文件。标准客户端公开 `api_key=` 参数仍属于其固定契约。仍使用第三方 E2B SDK 的独立应用按该 SDK 的原生配置操作,不要混用不同提供商账号的凭据。 | 原导入 | 新导入 | diff --git a/docs/zh/guide/sdk-usage.md b/docs/zh/guide/sdk-usage.md index 21c97e1..7235ff2 100644 --- a/docs/zh/guide/sdk-usage.md +++ b/docs/zh/guide/sdk-usage.md @@ -7,7 +7,7 @@ ## 安装 -请按[安装指南](install-python.md)安装。公开客户端/服务端 alpha 版本为 0.4.0a4;安装客户端会安装匹配的服务端依赖。宿主机安装不会更新已有沙箱镜像。 +请按[安装指南](install-python.md)安装。公开客户端/服务端 alpha 版本为 0.4.0a6;安装客户端会安装匹配的服务端依赖。宿主机安装不会更新已有沙箱镜像。 不要执行 `pip install agent-sandbox`。PyPI 上的 `agent-sandbox` 是另一个无关项目。 diff --git a/docs/zh/guide/server-sdk.md b/docs/zh/guide/server-sdk.md index 4b07e26..7e5ea5c 100644 --- a/docs/zh/guide/server-sdk.md +++ b/docs/zh/guide/server-sdk.md @@ -4,12 +4,12 @@ Server SDK 跑在**沙箱里面**。它是镜像启动后一直听着的 HTTP 服务,默认端口 9000。包名是 `agent-sandbox-server`,导入 `agent_sandbox.server`。模板的 `commands.py` 用它注册命令、打开能力,然后 `start(9000)`。 -下面显式选择已发布的 alpha 测试版,配套 client 版本同为 0.4.0a4。 +下面显式选择已发布的 alpha 测试版,配套 client 版本同为 0.4.0a6。 指定官方索引使示例不依赖本机配置的镜像源,不表示镜像源普遍不可用。 开发源码安装请按上方安装指南操作。 ```bash -python -m pip install --index-url https://pypi.org/simple "agent-sandbox-server==0.4.0a4" +python -m pip install --index-url https://pypi.org/simple "agent-sandbox-server==0.4.0a6" ``` ```python diff --git a/docs/zh/guide/template-server-api.md b/docs/zh/guide/template-server-api.md index 19b3d69..5eae1c1 100644 --- a/docs/zh/guide/template-server-api.md +++ b/docs/zh/guide/template-server-api.md @@ -12,7 +12,7 @@ Dockerfile 里的 `FROM` 镜像随模板而变。本 HTTP API 不变。凡是启 服务器默认监听 `0.0.0.0:9000`。Provider 必须支持所需端口解析和访问路径,服务也必须实际监听;不能把所有入口都当作 `{port}-{sandbox_id}.{domain}` 主机名拼接。已有沙箱的应用调用独立于内部 envd/EPP 传输: -此示例使用已发布 `agent-sandbox-client==0.4.0a4` alpha 中的 Provider 原生 +此示例使用已发布 `agent-sandbox-client==0.4.0a6` alpha 中的 Provider 原生 `ProviderSandbox`,标准 `Sandbox`/`AsyncSandbox` 是另一套接口。精确安装版本与源码方案见 [安装指南](install-python.md)。将 `SANDBOX_ID` 设为应用服务已启动的现有沙箱;仅当服务 启动时配置了令牌,才设置对应的 `ABX_SERVER_TOKEN`。 diff --git a/docs/zh/guide/testing-e2e.md b/docs/zh/guide/testing-e2e.md index 6d93f61..1f3f4d6 100644 --- a/docs/zh/guide/testing-e2e.md +++ b/docs/zh/guide/testing-e2e.md @@ -65,6 +65,6 @@ make e2e-cleanup # 清理遗留资源的 dry-run janitor;ARGS=--yes 才 ## SDK 夹具镜像 SDK 仓库保留独立于模板目录的 python-hello 和 agents-cli 离线夹具。两个 -Dockerfile 均从官方 PyPI 安装公开 server 0.4.0a4,不需要本地 wheel。CI 构建 +Dockerfile 均从官方 PyPI 安装公开 server 0.4.0a6,不需要本地 wheel。CI 构建 两个镜像,检查实际客体包与 HTTP 应用,并确认自有容器清理。Agents 运行时 列表不代表已安装 Agent 或完成真实模型调用。 diff --git a/docs/zh/guide/troubleshooting.md b/docs/zh/guide/troubleshooting.md index 29eb71f..bb97a39 100644 --- a/docs/zh/guide/troubleshooting.md +++ b/docs/zh/guide/troubleshooting.md @@ -211,7 +211,7 @@ entries = await sandbox.files.list("/home/user") ```bash # 确保使用正确的包名 -python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a4" +python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a6" # 如果遇到依赖冲突 python -m pip check diff --git a/examples/README.md b/examples/README.md index 78f1ff2..796772e 100644 --- a/examples/README.md +++ b/examples/README.md @@ -14,10 +14,10 @@ Examples are split by which package they exercise. ```bash # Full install (recommended — includes the declarative decorator, MCP server, ...) -python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client[all]==0.4.0a4" +python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client[all]==0.4.0a6" # Or install selectively -python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a4" +python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a6" # From source (run from the python-sdk repository root) pip install -e ./server-sdk -e ./client-sdk diff --git a/examples/README.zh-CN.md b/examples/README.zh-CN.md index af0869e..9720345 100644 --- a/examples/README.zh-CN.md +++ b/examples/README.zh-CN.md @@ -14,10 +14,10 @@ ```bash # 完整安装(推荐,包含声明式装饰器、MCP 服务等) -python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client[all]==0.4.0a4" +python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client[all]==0.4.0a6" # 或按需安装 -python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a4" +python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client==0.4.0a6" # 从源码安装(在 python-sdk 仓库根目录执行) pip install -e ./server-sdk -e ./client-sdk diff --git a/examples/quickstart/05_decorator_usage.py b/examples/quickstart/05_decorator_usage.py index f8607a1..252e5a7 100644 --- a/examples/quickstart/05_decorator_usage.py +++ b/examples/quickstart/05_decorator_usage.py @@ -3,7 +3,7 @@ 演示使用 @sandbox 装饰器将普通函数声明式地在远程沙箱中执行。 Shows how to use the @sandbox decorator for declarative remote execution. -需要安装: pip install --index-url https://pypi.org/simple agent-sandbox-client==0.4.0a4 +需要安装: pip install --index-url https://pypi.org/simple agent-sandbox-client==0.4.0a6 工作流程: 1. 创建远程沙箱 diff --git a/examples/quickstart/README.md b/examples/quickstart/README.md index e94801b..6ada466 100644 --- a/examples/quickstart/README.md +++ b/examples/quickstart/README.md @@ -11,7 +11,7 @@ Quickstart demos showing core **Agent Sandbox** SDK capabilities — sandbox lif - Environment variables: ```bash -python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client[all]==0.4.0a4" +python -m pip install --index-url https://pypi.org/simple "agent-sandbox-client[all]==0.4.0a6" export ABX_SANDBOX_API_KEY="your-express-sandbox-api-key" # Set ABX_SANDBOX_BASE_URL and ABX_SANDBOX_DOMAIN for your region if needed. ``` diff --git a/examples/templates/agents-cli/Dockerfile b/examples/templates/agents-cli/Dockerfile index d958bab..20ef653 100644 --- a/examples/templates/agents-cli/Dockerfile +++ b/examples/templates/agents-cli/Dockerfile @@ -13,7 +13,7 @@ ENV ABX_SERVER_ENABLED_GROUPS=agents # && npm install -g @qwen-code/qwen-code && rm -rf /var/lib/apt/lists/* # Install the published runtime; no local wheel or source fallback is required. -RUN python3 -m pip install --index-url https://pypi.org/simple --no-cache-dir "agent-sandbox-server==0.4.0a4" +RUN python3 -m pip install --index-url https://pypi.org/simple --no-cache-dir "agent-sandbox-server==0.4.0a6" WORKDIR /app COPY commands.py . diff --git a/examples/templates/agents-cli/README.md b/examples/templates/agents-cli/README.md index 8c4e3ab..a75590e 100644 --- a/examples/templates/agents-cli/README.md +++ b/examples/templates/agents-cli/README.md @@ -88,9 +88,9 @@ This template turns on the sandbox Agents API for **Codex** and **Qwen Code**. T The server listens on port **9000**. Point `examples/agents/hosted_codex.py` or `hosted_qwen.py` at it. When `E2E_RUN_LLM=0`, `commands.py` puts the local programs in `e2e-bin/` on `PATH`. Those programs are named `codex` and `qwen`. -Both offline fixture Dockerfiles install `agent-sandbox-server==0.4.0a4` from the +Both offline fixture Dockerfiles install `agent-sandbox-server==0.4.0a6` from the official PyPI index. No local wheel is required. The image does not include real Codex/Qwen CLIs; model execution still requires the selected CLI and credentials. -两个离线夹具 Dockerfile 均从官方 PyPI 安装 `agent-sandbox-server==0.4.0a4`, +两个离线夹具 Dockerfile 均从官方 PyPI 安装 `agent-sandbox-server==0.4.0a6`, 不需要本地 wheel。镜像不预装真实 Codex/Qwen CLI;模型执行仍需相应工具和凭据。 diff --git a/examples/templates/python-hello/Dockerfile b/examples/templates/python-hello/Dockerfile index db227d9..c2787ff 100644 --- a/examples/templates/python-hello/Dockerfile +++ b/examples/templates/python-hello/Dockerfile @@ -3,7 +3,7 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y python3 python3-pip && rm -rf /var/lib/apt/lists/* # Install the published runtime; no local wheel or source fallback is required. -RUN python3 -m pip install --index-url https://pypi.org/simple --no-cache-dir "agent-sandbox-server==0.4.0a4" +RUN python3 -m pip install --index-url https://pypi.org/simple --no-cache-dir "agent-sandbox-server==0.4.0a6" WORKDIR /app COPY commands.py . From 76ec42f812f0844d1a40eba5a701d708663f08ec Mon Sep 17 00:00:00 2001 From: AnyEnv Sandbox Date: Sun, 25 Oct 2026 19:46:08 +0000 Subject: [PATCH 2/2] docs: clarify actual public a6 runner installation --- .agents/evidence/verify/2026-10-25-public-a6-examples.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.agents/evidence/verify/2026-10-25-public-a6-examples.md b/.agents/evidence/verify/2026-10-25-public-a6-examples.md index 4f6c4e2..41032d8 100644 --- a/.agents/evidence/verify/2026-10-25-public-a6-examples.md +++ b/.agents/evidence/verify/2026-10-25-public-a6-examples.md @@ -48,8 +48,11 @@ unchanged from the earlier checkpoint; these are new actual a6 runs. ## Commands run and reproduction Install public packages independently of the source checkout. No editable SDK -installation or PYTHONPATH is used. Cloud examples used the all extra; the local -runner used ordinary `agent-sandbox-client==0.4.0a6` without extras. +installation or PYTHONPATH is used. The cloud examples and local runner used +the same fresh official `agent-sandbox-client[all]==0.4.0a6` environment. The local +runner used a separate isolated HOME with provider/model credentials removed; +the non-all help/HTTP installation is a separate delivery check, not this runner +environment. ```bash python3 -m venv public-sdk