acpkit 0.8.2__tar.gz → 0.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- acpkit-0.9.0/.agents/skills/acpkit-sdk/SKILL.md +279 -0
- acpkit-0.9.0/.agents/skills/acpkit-sdk/agents/openai.yaml +7 -0
- acpkit-0.9.0/.agents/skills/acpkit-sdk/examples/README.md +52 -0
- acpkit-0.9.0/.agents/skills/acpremote/SKILL.md +247 -0
- acpkit-0.9.0/.agents/skills/acpremote/agents/openai.yaml +7 -0
- acpkit-0.9.0/.agents/skills/acpremote/examples/README.md +32 -0
- acpkit-0.9.0/.agents/skills/acpremote/examples/mirror_remote.py +32 -0
- acpkit-0.9.0/.agents/skills/acpremote/examples/serve_command.py +39 -0
- acpkit-0.9.0/.agents/skills/codex-auth-helper/SKILL.md +211 -0
- acpkit-0.9.0/.agents/skills/codex-auth-helper/agents/openai.yaml +7 -0
- acpkit-0.9.0/.agents/skills/codex-auth-helper/examples/README.md +34 -0
- acpkit-0.9.0/.agents/skills/codex-auth-helper/examples/codex_chat_openai_graph.py +33 -0
- acpkit-0.9.0/.agents/skills/codex-auth-helper/examples/codex_responses_agent.py +25 -0
- acpkit-0.9.0/.agents/skills/langchain-acp/SKILL.md +282 -0
- acpkit-0.9.0/.agents/skills/langchain-acp/agents/openai.yaml +7 -0
- acpkit-0.9.0/.agents/skills/langchain-acp/examples/README.md +39 -0
- acpkit-0.9.0/.agents/skills/pydantic-acp/SKILL.md +333 -0
- acpkit-0.9.0/.agents/skills/pydantic-acp/agents/openai.yaml +7 -0
- acpkit-0.9.0/.agents/skills/pydantic-acp/examples/README.md +32 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.gitignore +6 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/CONTRIBUTING.md +2 -2
- acpkit-0.9.0/COVERAGE +2 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/Makefile +7 -7
- {acpkit-0.8.2 → acpkit-0.9.0}/PKG-INFO +192 -20
- {acpkit-0.8.2 → acpkit-0.9.0}/README.md +176 -18
- acpkit-0.9.0/VERSION +1 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/.partials/index-header.html +2 -2
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/about/index.md +20 -7
- acpkit-0.9.0/docs/acpremote.md +191 -0
- acpkit-0.9.0/docs/api/acpremote.md +47 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/api/codex_auth_helper.md +6 -0
- acpkit-0.9.0/docs/api/langchain_acp.md +117 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/bridges.md +4 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/cli.md +43 -7
- acpkit-0.9.0/docs/examples/deepagents.md +39 -0
- acpkit-0.9.0/docs/examples/dynamic-factory.md +160 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/examples/finance.md +7 -0
- acpkit-0.9.0/docs/examples/index.md +64 -0
- acpkit-0.9.0/docs/examples/langchain-codex.md +39 -0
- acpkit-0.9.0/docs/examples/langchain-workspace.md +35 -0
- acpkit-0.9.0/docs/examples/remote-hosting.md +81 -0
- acpkit-0.9.0/docs/getting-started/installation.md +169 -0
- acpkit-0.9.0/docs/getting-started/langchain-quickstart.md +238 -0
- acpkit-0.8.2/docs/getting-started/quickstart.md → acpkit-0.9.0/docs/getting-started/pydantic-quickstart.md +4 -4
- acpkit-0.9.0/docs/getting-started/quickstart.md +54 -0
- acpkit-0.9.0/docs/helpers.md +123 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/host-backends.md +4 -0
- acpkit-0.9.0/docs/index.md +137 -0
- acpkit-0.9.0/docs/langchain-acp/adapter-config.md +152 -0
- acpkit-0.9.0/docs/langchain-acp/bridges.md +124 -0
- acpkit-0.9.0/docs/langchain-acp/plans-thinking-approvals.md +114 -0
- acpkit-0.9.0/docs/langchain-acp/projections.md +142 -0
- acpkit-0.9.0/docs/langchain-acp/prompt-resources.md +94 -0
- acpkit-0.9.0/docs/langchain-acp/providers.md +162 -0
- acpkit-0.9.0/docs/langchain-acp/runtime-controls.md +136 -0
- acpkit-0.9.0/docs/langchain-acp/session-state.md +110 -0
- acpkit-0.9.0/docs/langchain-acp.md +365 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/llms-full.txt +2821 -171
- acpkit-0.9.0/docs/llms.txt +143 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/providers.md +4 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/pydantic-acp/prompt-resources.md +7 -7
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/pydantic-acp.md +39 -1
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/testing.md +12 -6
- acpkit-0.9.0/examples/langchain/.deepagents-graph/brief.md +3 -0
- acpkit-0.9.0/examples/langchain/.workspace-graph/README.md +3 -0
- acpkit-0.9.0/examples/langchain/README.md +34 -0
- acpkit-0.9.0/examples/langchain/codex_graph.py +54 -0
- acpkit-0.9.0/examples/langchain/deepagents_graph.py +135 -0
- acpkit-0.9.0/examples/langchain/workspace_graph.py +187 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/examples/pydantic/travel_agent.py +4 -1
- {acpkit-0.8.2 → acpkit-0.9.0}/mkdocs.yml +40 -12
- acpkit-0.9.0/packages/adapters/langchain-acp/README.md +131 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/VERSION +1 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/pyproject.toml +40 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/__init__.py +173 -0
- {acpkit-0.8.2/src/acpkit → acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp}/_version.py +1 -1
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/approvals.py +106 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/bridge_manager.py +164 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/bridges/__init__.py +20 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/bridges/base.py +194 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/bridges/builtin.py +194 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/builders/__init__.py +8 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/builders/graph.py +88 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/config.py +61 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/event_projection.py +207 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/graph_source.py +50 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/plan.py +152 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/projection.py +1478 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/providers.py +102 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/runtime/__init__.py +6 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/runtime/_native_plan_runtime.py +233 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/runtime/_prompt_conversion.py +121 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/runtime/adapter.py +954 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/runtime/server.py +148 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/serialization.py +46 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/session/__init__.py +21 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/session/state.py +137 -0
- acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp/session/store.py +248 -0
- acpkit-0.9.0/packages/adapters/pydantic-acp/README.md +232 -0
- acpkit-0.9.0/packages/adapters/pydantic-acp/VERSION +1 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/pyproject.toml +1 -1
- {acpkit-0.8.2/packages/helpers/codex-auth-helper/src/codex_auth_helper → acpkit-0.9.0/packages/adapters/pydantic-acp/src/pydantic_acp}/_version.py +1 -1
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/capability_support.py +6 -2
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/prepare_tools.py +4 -1
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/prompts.py +6 -5
- acpkit-0.9.0/packages/adapters/pydantic-acp/src/pydantic_acp/types.py +43 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/helpers/codex-auth-helper/README.md +55 -7
- acpkit-0.9.0/packages/helpers/codex-auth-helper/VERSION +1 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/helpers/codex-auth-helper/pyproject.toml +4 -1
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/__init__.py +5 -2
- {acpkit-0.8.2/packages/adapters/pydantic-acp/src/pydantic_acp → acpkit-0.9.0/packages/helpers/codex-auth-helper/src/codex_auth_helper}/_version.py +1 -1
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/manager.py +48 -0
- acpkit-0.9.0/packages/helpers/codex-auth-helper/src/codex_auth_helper/client.py +145 -0
- acpkit-0.9.0/packages/helpers/codex-auth-helper/src/codex_auth_helper/factory.py +82 -0
- acpkit-0.9.0/packages/helpers/codex-auth-helper/src/codex_auth_helper/py.typed +1 -0
- acpkit-0.9.0/packages/transports/acpremote/README.md +140 -0
- acpkit-0.9.0/packages/transports/acpremote/VERSION +1 -0
- acpkit-0.9.0/packages/transports/acpremote/pyproject.toml +30 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/__init__.py +49 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/_version.py +5 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/auth.py +35 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/client.py +173 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/command.py +172 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/config.py +78 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/limits.py +19 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/metadata.py +69 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/proxy_agent.py +518 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/py.typed +1 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/server.py +247 -0
- acpkit-0.9.0/packages/transports/acpremote/src/acpremote/stream.py +212 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/pyproject.toml +17 -3
- {acpkit-0.8.2 → acpkit-0.9.0}/scripts/generate_llms_docs.py +107 -5
- {acpkit-0.8.2 → acpkit-0.9.0}/scripts/save_coverage_summary.py +4 -1
- {acpkit-0.8.2 → acpkit-0.9.0}/src/acpkit/__init__.py +19 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/src/acpkit/_compatibility_schema.py +5 -3
- acpkit-0.9.0/src/acpkit/_version.py +5 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/src/acpkit/adapters.py +69 -1
- {acpkit-0.8.2 → acpkit-0.9.0}/src/acpkit/cli.py +77 -3
- {acpkit-0.8.2 → acpkit-0.9.0}/src/acpkit/runtime.py +87 -0
- acpkit-0.9.0/tests/acpremote/test_command_server.py +271 -0
- acpkit-0.9.0/tests/acpremote/test_helpers.py +933 -0
- acpkit-0.9.0/tests/acpremote/test_phase1.py +352 -0
- acpkit-0.9.0/tests/acpremote/test_phase2.py +269 -0
- acpkit-0.9.0/tests/acpremote/test_phase3.py +443 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/codex_auth_helper/test_auth.py +174 -9
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/codex_auth_helper/test_factory.py +133 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/conftest.py +1 -0
- acpkit-0.9.0/tests/langchain/__init__.py +1 -0
- acpkit-0.9.0/tests/langchain/support.py +287 -0
- acpkit-0.9.0/tests/langchain/test_examples.py +333 -0
- acpkit-0.9.0/tests/langchain/test_low_level_helpers.py +3437 -0
- acpkit-0.9.0/tests/langchain/test_runtime.py +1070 -0
- acpkit-0.9.0/tests/langchain/test_support.py +119 -0
- acpkit-0.9.0/tests/pydantic/__init__.py +3 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_adapter_helpers.py +307 -12
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_approvals.py +6 -6
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_bridge_builder.py +3 -3
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_bridge_capability_support.py +160 -30
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_bridge_mcp.py +7 -3
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_bridge_prepare_tools.py +25 -45
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_bridge_web_capabilities.py +3 -1
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_compat.py +2 -2
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_examples.py +64 -2
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_hook_introspection.py +16 -16
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_host_policy.py +1 -4
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_low_level_helpers.py +177 -13
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_models.py +36 -40
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_projection.py +40 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_runtime.py +8 -8
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_session_runtime_helpers.py +24 -4
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_slash_commands.py +13 -8
- acpkit-0.9.0/tests/pydantic/test_support.py +168 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_testing_harness.py +3 -1
- acpkit-0.9.0/tests/test_acpkit_cli.py +1267 -0
- acpkit-0.9.0/tests/test_native_langchain_agent.py +190 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/test_native_pydantic_agent.py +7 -2
- acpkit-0.8.2/.agents/skills/acpkit-sdk/SKILL.md +0 -902
- acpkit-0.8.2/.agents/skills/acpkit-sdk/agents/openai.yaml +0 -7
- acpkit-0.8.2/CHANGELOG +0 -74
- acpkit-0.8.2/COVERAGE +0 -2
- acpkit-0.8.2/VERSION +0 -1
- acpkit-0.8.2/docs/examples/index.md +0 -28
- acpkit-0.8.2/docs/getting-started/installation.md +0 -105
- acpkit-0.8.2/docs/helpers.md +0 -72
- acpkit-0.8.2/docs/index.md +0 -112
- acpkit-0.8.2/docs/llms.txt +0 -92
- acpkit-0.8.2/packages/adapters/pydantic-acp/README.md +0 -139
- acpkit-0.8.2/packages/adapters/pydantic-acp/VERSION +0 -1
- acpkit-0.8.2/packages/helpers/codex-auth-helper/VERSION +0 -1
- acpkit-0.8.2/packages/helpers/codex-auth-helper/src/codex_auth_helper/client.py +0 -67
- acpkit-0.8.2/packages/helpers/codex-auth-helper/src/codex_auth_helper/factory.py +0 -30
- acpkit-0.8.2/tests/test_acpkit_cli.py +0 -622
- {acpkit-0.8.2 → acpkit-0.9.0}/.agents/skills/acpkit-sdk/resources/intro.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.agents/skills/acpkit-sdk/scripts/list_examples.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.agents/skills/acpkit-sdk/scripts/list_public_exports.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.cursorrules +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.editorconfig +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.github/dependabot.yml +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.github/workflows/ci.yml +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.github/workflows/codecov.yml +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.github/workflows/docs.yml +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.github/workflows/publish.yml +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.github/workflows/test.yml +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.pre-commit-config.yaml +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/.python-version +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/CODE_OF_CONDUCT.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/LICENSE +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/SECURITY.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/context7.json +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/api/acpkit.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/api/pydantic_acp.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/compatibility-matrix-template.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/examples/travel.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/integration-audit.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/integration-readiness.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/integration-testing.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/projection-cookbook.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/pydantic-acp/adapter-config.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/pydantic-acp/plans-thinking-approvals.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/pydantic-acp/runtime-controls.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/pydantic-acp/session-state.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/docs/stylesheets/tweaks.css +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/examples/__init__.py +0 -0
- {acpkit-0.8.2/examples/pydantic → acpkit-0.9.0/examples/langchain}/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/examples/pydantic/.gitignore +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/examples/pydantic/.travel-agent/ideas.txt +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/examples/pydantic/.travel-agent/itinerary.md +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/examples/pydantic/README.md +0 -0
- {acpkit-0.8.2/tests → acpkit-0.9.0/examples/pydantic}/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/examples/pydantic/finance_agent.py +0 -0
- {acpkit-0.8.2/packages/adapters/pydantic-acp/src/pydantic_acp → acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp}/py.typed +0 -0
- {acpkit-0.8.2/packages/adapters/pydantic-acp/src/pydantic_acp → acpkit-0.9.0/packages/adapters/langchain-acp/src/langchain_acp}/types.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/_projection_risk.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/_projection_text.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/_slash_commands.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_source.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_types.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/approvals.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/awaitables.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/_hook_capability.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/base.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/history_processor.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/hooks.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/mcp.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/thinking.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/agent.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/config.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/hook_projection.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/_policy_commands.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/_policy_paths.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/context.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/filesystem.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/policy.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/terminal.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/models.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/projection.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/projection_helpers.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/providers.py +0 -0
- {acpkit-0.8.2/packages/helpers/codex-auth-helper/src/codex_auth_helper → acpkit-0.9.0/packages/adapters/pydantic-acp/src/pydantic_acp}/py.typed +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_adapter_mixins.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_adapter_prompt.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_agent_state.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_compat.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_native_plan_runtime.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_execution.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_model_runtime.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_runtime.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_lifecycle.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_model_runtime.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_runtime.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_surface_runtime.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/bridge_manager.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/hook_introspection.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/server.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/session_surface.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/slash_commands.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/serialization.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/session/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/session/state.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/session/store.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/fakes.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/harness.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/helpers/codex-auth-helper/.gitignore +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/helpers/codex-auth-helper/LICENSE +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/config.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/state.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/store.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/model.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/pyrightconfig.json +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/scripts/check_pypi_versions.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/scripts/demo_mcp_server.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/scripts/mock_hook_audit.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/scripts/mock_hook_snapshot.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/scripts/run_if_major_change.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/src/acpkit/__main__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/src/acpkit/compatibility.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/src/acpkit/py.typed +0 -0
- {acpkit-0.8.2/tests/pydantic → acpkit-0.9.0/tests}/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/codex_auth_helper/__init__.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/codex_auth_helper/support.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/support.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_bridge_hooks.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_bridge_thinking.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_host.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_projection_helpers.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_sources.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/pydantic/test_testing_fakes.py +0 -0
- {acpkit-0.8.2 → acpkit-0.9.0}/tests/test_compatibility_manifest.py +0 -0
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "acpkit-sdk"
|
|
3
|
+
description: "Use for ACP Kit root-package work: CLI target resolution, `acpkit run`, `acpkit serve`, `acpkit launch`, cross-package routing, and end-to-end flows that span adapters plus transport."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# acpkit Root Skill
|
|
7
|
+
|
|
8
|
+
Use this skill when the task is primarily about the root `acpkit` package.
|
|
9
|
+
|
|
10
|
+
This skill owns the repo-level orchestration layer:
|
|
11
|
+
|
|
12
|
+
- CLI entrypoints
|
|
13
|
+
- Python target loading
|
|
14
|
+
- adapter auto-dispatch
|
|
15
|
+
- native ACP passthrough
|
|
16
|
+
- `--addr` remote mirror entrypoints
|
|
17
|
+
- Toad launch integration
|
|
18
|
+
- end-to-end flows that combine the root package with adapters and transport
|
|
19
|
+
|
|
20
|
+
It does not own the detailed runtime semantics of the adapter packages.
|
|
21
|
+
|
|
22
|
+
## Start Here
|
|
23
|
+
|
|
24
|
+
If you only need the shortest high-signal path:
|
|
25
|
+
|
|
26
|
+
1. read `Quick Routing`
|
|
27
|
+
2. open the [CLI module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/cli.py) for command-shape questions
|
|
28
|
+
3. open the [runtime module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/runtime.py) for execution-path questions
|
|
29
|
+
4. open the [adapter-dispatch module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/adapters.py) for adapter-selection questions
|
|
30
|
+
|
|
31
|
+
## Quick Routing
|
|
32
|
+
|
|
33
|
+
| If the task is about... | Use this skill? | Open first |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| `acpkit run ...` or `acpkit serve ...` | Yes | [CLI module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/cli.py), [runtime module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/runtime.py) |
|
|
36
|
+
| `module` vs `module:attribute` target resolution | Yes | [CLI module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/cli.py), [runtime module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/runtime.py) |
|
|
37
|
+
| missing adapter install hints | Yes | [adapter-dispatch module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/adapters.py) |
|
|
38
|
+
| native ACP passthrough | Yes | [adapter-dispatch module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/adapters.py), [runtime module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/runtime.py) |
|
|
39
|
+
| `acpkit launch ...` or `launch --command ...` | Yes | [runtime module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/runtime.py), [CLI module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/cli.py) |
|
|
40
|
+
| `pydantic_ai.Agent` runtime behavior | No, pair with `pydantic-acp` | [Pydantic adapter package](https://github.com/vcoderun/acpkit/tree/main/packages/adapters/pydantic-acp) |
|
|
41
|
+
| LangGraph / DeepAgents runtime behavior | No, pair with `langchain-acp` | [LangChain adapter package](https://github.com/vcoderun/acpkit/tree/main/packages/adapters/langchain-acp) |
|
|
42
|
+
| WebSocket transport or remote mirroring | No, pair with `acpremote` | [Remote transport package](https://github.com/vcoderun/acpkit/tree/main/packages/transports/acpremote) |
|
|
43
|
+
|
|
44
|
+
## Package Boundary
|
|
45
|
+
|
|
46
|
+
`acpkit` is not an adapter and not a transport package.
|
|
47
|
+
|
|
48
|
+
It is the root runtime package that:
|
|
49
|
+
|
|
50
|
+
1. accepts CLI input
|
|
51
|
+
2. resolves a target from Python import space or remote address
|
|
52
|
+
3. selects the correct runtime lane
|
|
53
|
+
4. dispatches to the relevant package
|
|
54
|
+
|
|
55
|
+
That means it owns control flow, not framework semantics.
|
|
56
|
+
|
|
57
|
+
What it owns:
|
|
58
|
+
|
|
59
|
+
- CLI parsing
|
|
60
|
+
- target loading
|
|
61
|
+
- adapter detection
|
|
62
|
+
- dispatch to `pydantic-acp` or `langchain-acp`
|
|
63
|
+
- direct passthrough for already-materialized ACP agents
|
|
64
|
+
- remote mirror startup through `--addr`
|
|
65
|
+
- Toad launch wrapping
|
|
66
|
+
|
|
67
|
+
What it does not own:
|
|
68
|
+
|
|
69
|
+
- Pydantic plan/approval/projection details
|
|
70
|
+
- LangChain graph/provider/projection details
|
|
71
|
+
- WebSocket transport behavior
|
|
72
|
+
- Codex auth parsing
|
|
73
|
+
|
|
74
|
+
## Primary References
|
|
75
|
+
|
|
76
|
+
Root-package references:
|
|
77
|
+
|
|
78
|
+
- [Raw skill](https://raw.githubusercontent.com/vcoderun/acpkit/main/.agents/skills/acpkit-sdk/SKILL.md)
|
|
79
|
+
- [Raw CLI docs](https://raw.githubusercontent.com/vcoderun/acpkit/main/docs/cli.md)
|
|
80
|
+
- [Raw examples index](https://raw.githubusercontent.com/vcoderun/acpkit/main/docs/examples/index.md)
|
|
81
|
+
- [Rendered CLI docs](https://vcoderun.github.io/acpkit/cli/)
|
|
82
|
+
- [Source tree](https://github.com/vcoderun/acpkit/tree/main/src/acpkit)
|
|
83
|
+
|
|
84
|
+
Cross-package references often needed from this skill:
|
|
85
|
+
|
|
86
|
+
- [Pydantic adapter skill](https://raw.githubusercontent.com/vcoderun/acpkit/main/.agents/skills/pydantic-acp/SKILL.md)
|
|
87
|
+
- [LangChain adapter skill](https://raw.githubusercontent.com/vcoderun/acpkit/main/.agents/skills/langchain-acp/SKILL.md)
|
|
88
|
+
- [Remote transport skill](https://raw.githubusercontent.com/vcoderun/acpkit/main/.agents/skills/acpremote/SKILL.md)
|
|
89
|
+
- [Codex helper skill](https://raw.githubusercontent.com/vcoderun/acpkit/main/.agents/skills/codex-auth-helper/SKILL.md)
|
|
90
|
+
|
|
91
|
+
## Public Entry Points
|
|
92
|
+
|
|
93
|
+
User-facing commands:
|
|
94
|
+
|
|
95
|
+
- `acpkit run TARGET`
|
|
96
|
+
- `acpkit run --addr ws://...`
|
|
97
|
+
- `acpkit serve TARGET`
|
|
98
|
+
- `acpkit launch TARGET`
|
|
99
|
+
- `acpkit launch --command "..."`
|
|
100
|
+
|
|
101
|
+
Important runtime helpers:
|
|
102
|
+
|
|
103
|
+
- `run_target(...)`
|
|
104
|
+
- `serve_target(...)`
|
|
105
|
+
- `launch_target(...)`
|
|
106
|
+
- `run_remote_addr(...)`
|
|
107
|
+
|
|
108
|
+
Important distinction:
|
|
109
|
+
|
|
110
|
+
- `run TARGET`
|
|
111
|
+
starts a local stdio ACP server from a Python target
|
|
112
|
+
- `serve TARGET`
|
|
113
|
+
materializes a compatible ACP agent and exposes it through `acpremote`
|
|
114
|
+
- `run --addr ...`
|
|
115
|
+
skips Python target resolution entirely and mirrors a remote ACP endpoint locally
|
|
116
|
+
- `launch`
|
|
117
|
+
wraps the `run` path through Toad or shells out directly for command mode
|
|
118
|
+
|
|
119
|
+
## Target Resolution
|
|
120
|
+
|
|
121
|
+
High-level target resolution flow:
|
|
122
|
+
|
|
123
|
+
1. add the current working directory to `sys.path`
|
|
124
|
+
2. add any explicit `-p/--path` roots
|
|
125
|
+
3. import the module
|
|
126
|
+
4. if an attribute path exists, resolve it
|
|
127
|
+
5. if no attribute path exists, select the last defined supported target
|
|
128
|
+
|
|
129
|
+
Current supported target families:
|
|
130
|
+
|
|
131
|
+
- `pydantic_ai.Agent`
|
|
132
|
+
- LangGraph / LangChain compiled graphs
|
|
133
|
+
- native ACP agents
|
|
134
|
+
|
|
135
|
+
When debugging target resolution:
|
|
136
|
+
|
|
137
|
+
1. inspect import roots first
|
|
138
|
+
2. inspect the resolved object type second
|
|
139
|
+
3. inspect adapter installation/import errors third
|
|
140
|
+
|
|
141
|
+
Do not jump into adapter internals before confirming the root package selected the correct object.
|
|
142
|
+
|
|
143
|
+
## Adapter Dispatch
|
|
144
|
+
|
|
145
|
+
The root package decides the runtime lane, then hands off.
|
|
146
|
+
|
|
147
|
+
Conceptual dispatch:
|
|
148
|
+
|
|
149
|
+
1. if the target already satisfies the ACP agent boundary, pass it through
|
|
150
|
+
2. if the target is a `pydantic_ai.Agent`, materialize through `pydantic-acp`
|
|
151
|
+
3. if the target is a LangGraph/LangChain graph, materialize through `langchain-acp`
|
|
152
|
+
4. if the user passed `--addr`, bypass target loading and mirror the remote ACP endpoint
|
|
153
|
+
|
|
154
|
+
`acpkit` should stay explicit about:
|
|
155
|
+
|
|
156
|
+
- target typing
|
|
157
|
+
- adapter availability
|
|
158
|
+
- dispatch selection
|
|
159
|
+
|
|
160
|
+
It should stay intentionally ignorant about:
|
|
161
|
+
|
|
162
|
+
- Pydantic adapter internals
|
|
163
|
+
- LangChain adapter internals
|
|
164
|
+
- WebSocket wire semantics
|
|
165
|
+
|
|
166
|
+
## Do Not Confuse With
|
|
167
|
+
|
|
168
|
+
- `acpkit-sdk` vs `pydantic-acp`
|
|
169
|
+
`acpkit` decides the lane; `pydantic-acp` owns the Pydantic runtime semantics
|
|
170
|
+
- `acpkit-sdk` vs `langchain-acp`
|
|
171
|
+
`acpkit` resolves and dispatches; `langchain-acp` owns graph adaptation and projection
|
|
172
|
+
- `acpkit-sdk` vs `acpremote`
|
|
173
|
+
`acpkit` is the root CLI/runtime package; `acpremote` is transport
|
|
174
|
+
|
|
175
|
+
## Module Guide
|
|
176
|
+
|
|
177
|
+
| Module | Use it for | Notes |
|
|
178
|
+
| --- | --- | --- |
|
|
179
|
+
| [CLI module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/cli.py) | Click command definitions, argument validation, help/flag behavior | First stop for CLI UX bugs |
|
|
180
|
+
| [Runtime module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/runtime.py) | `run`, `serve`, `launch`, remote mirror runtime paths | First stop for dispatch behavior after parsing |
|
|
181
|
+
| [Adapter-dispatch module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/adapters.py) | target typing, adapter import/load, native ACP detection | First stop for wrong lane selection |
|
|
182
|
+
| [Compatibility helpers](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/compatibility.py) | compatibility manifest helpers | Not part of normal runtime dispatch |
|
|
183
|
+
| [Compatibility schema](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/_compatibility_schema.py) | manifest schema and validation | Use only for compatibility-surface work |
|
|
184
|
+
| [Console entrypoint](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/__main__.py) | console entrypoint | Usually not the source of behavior bugs |
|
|
185
|
+
|
|
186
|
+
## Common Workflows
|
|
187
|
+
|
|
188
|
+
### Run an adapter-backed local ACP server
|
|
189
|
+
|
|
190
|
+
Pydantic:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
acpkit run examples.pydantic.finance_agent:agent
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
LangChain:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
acpkit run examples.langchain.workspace_graph:graph
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Expose a remote ACP host
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
acpkit serve examples.langchain.workspace_graph:graph --host 0.0.0.0 --port 8080
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Mirror a remote ACP host back into a local ACP boundary
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
acpkit run --addr ws://127.0.0.1:8080/acp/ws
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Launch through Toad
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
acpkit launch examples.pydantic.finance_agent:agent
|
|
218
|
+
acpkit launch examples.langchain.workspace_graph:graph
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Launch a script that already starts ACP itself
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
acpkit launch --command "python3.11 some_script_that_starts_acp.py"
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Cross-Package Workflows
|
|
228
|
+
|
|
229
|
+
Typical combinations:
|
|
230
|
+
|
|
231
|
+
- `acpkit` + `pydantic-acp`
|
|
232
|
+
when the root package resolves and runs or serves a `pydantic_ai.Agent`
|
|
233
|
+
- `acpkit` + `langchain-acp`
|
|
234
|
+
when the root package resolves and runs or serves a LangChain/LangGraph target
|
|
235
|
+
- `acpkit` + `acpremote`
|
|
236
|
+
when the root package is part of a remote-host topology via `serve` or `--addr`
|
|
237
|
+
- `pydantic-acp` + `codex-auth-helper`
|
|
238
|
+
when a Codex-backed Pydantic model is exposed through ACP and then possibly launched through `acpkit`
|
|
239
|
+
|
|
240
|
+
## Skill-Bundled Recipes
|
|
241
|
+
|
|
242
|
+
Skill-local recipe index:
|
|
243
|
+
|
|
244
|
+
- [Skill-local recipe index](https://github.com/vcoderun/acpkit/blob/main/.agents/skills/acpkit-sdk/examples/README.md)
|
|
245
|
+
|
|
246
|
+
Public adapter examples commonly launched through the root package:
|
|
247
|
+
|
|
248
|
+
- [Pydantic public examples](https://raw.githubusercontent.com/vcoderun/acpkit/main/examples/pydantic/README.md)
|
|
249
|
+
- [LangChain public examples](https://raw.githubusercontent.com/vcoderun/acpkit/main/examples/langchain/README.md)
|
|
250
|
+
|
|
251
|
+
Remote pairing examples:
|
|
252
|
+
|
|
253
|
+
- [Remote command exposure recipe](https://github.com/vcoderun/acpkit/blob/main/.agents/skills/acpremote/examples/serve_command.py)
|
|
254
|
+
- [Remote mirror recipe](https://github.com/vcoderun/acpkit/blob/main/.agents/skills/acpremote/examples/mirror_remote.py)
|
|
255
|
+
|
|
256
|
+
## Handoff Rules
|
|
257
|
+
|
|
258
|
+
Switch to a narrower skill when:
|
|
259
|
+
|
|
260
|
+
- the bug is clearly inside adapter runtime behavior
|
|
261
|
+
- the task is about approvals, plans, projections, or host policy
|
|
262
|
+
- the task is about transport or remote ownership rather than CLI or dispatch
|
|
263
|
+
- the task is about Codex auth refresh or `auth.json`
|
|
264
|
+
|
|
265
|
+
Stay in this skill when:
|
|
266
|
+
|
|
267
|
+
- the main question is import resolution
|
|
268
|
+
- the main question is runtime lane selection
|
|
269
|
+
- the main question is CLI behavior
|
|
270
|
+
- the main question is how multiple packages fit together end-to-end
|
|
271
|
+
|
|
272
|
+
## Guardrails
|
|
273
|
+
|
|
274
|
+
- Do not claim the root package itself adapts framework runtimes. It routes them.
|
|
275
|
+
- Do not describe `acpremote` as an adapter.
|
|
276
|
+
- Do not describe `codex-auth-helper` as part of target resolution.
|
|
277
|
+
- Do not document a root CLI feature that is not present in the [CLI module](https://github.com/vcoderun/acpkit/blob/main/src/acpkit/cli.py).
|
|
278
|
+
- When the question is about adapter truthfulness, plans, approvals, projections, host ownership,
|
|
279
|
+
or provider behavior, move to the narrower package skill.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "ACP Kit"
|
|
3
|
+
short_description: "Root CLI, dispatch, and ACP app wiring"
|
|
4
|
+
default_prompt: "Use $acpkit-sdk to update ACP Kit CLI behavior, target resolution, adapter dispatch, or end-to-end root-package flows."
|
|
5
|
+
|
|
6
|
+
policy:
|
|
7
|
+
allow_implicit_invocation: true
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# acpkit-sdk Examples
|
|
2
|
+
|
|
3
|
+
These are skill-local operator recipes for the root `acpkit` package.
|
|
4
|
+
|
|
5
|
+
## Run Adapter-Backed Targets
|
|
6
|
+
|
|
7
|
+
Pydantic AI:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
acpkit run examples.pydantic.finance_agent:agent
|
|
11
|
+
acpkit run examples.pydantic.travel_agent:agent
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
LangChain / LangGraph:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
acpkit run examples.langchain.workspace_graph:graph
|
|
18
|
+
acpkit run examples.langchain.deepagents_graph:graph
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Serve A Remote ACP Host
|
|
22
|
+
|
|
23
|
+
Pydantic AI:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
acpkit serve examples.pydantic.finance_agent:agent --host 0.0.0.0 --port 8080
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
LangChain / LangGraph:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
acpkit serve examples.langchain.workspace_graph:graph --host 0.0.0.0 --port 8080
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Mirror the remote host back into a local ACP boundary:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
acpkit run --addr ws://127.0.0.1:8080/acp/ws
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Launch Through Toad
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
acpkit launch examples.pydantic.finance_agent:agent
|
|
45
|
+
acpkit launch examples.langchain.workspace_graph:graph
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
If a script already starts ACP by itself:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
acpkit launch --command "python3.11 some_script_that_starts_acp.py"
|
|
52
|
+
```
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "acpremote"
|
|
3
|
+
description: "Use for `acpremote` tasks: exposing ACP agents or stdio ACP commands over WebSocket, mirroring remote ACP endpoints locally, host ownership semantics, metadata/auth routes, and remote transport examples."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# acpremote Skill
|
|
7
|
+
|
|
8
|
+
Use this skill when the task is about the `acpremote` transport package.
|
|
9
|
+
|
|
10
|
+
This package is the repo's ACP transport/helper layer. It assumes the runtime already speaks ACP
|
|
11
|
+
and focuses on moving that ACP boundary across WebSocket transport or back into a local ACP proxy.
|
|
12
|
+
|
|
13
|
+
It is not an adapter.
|
|
14
|
+
|
|
15
|
+
That distinction matters:
|
|
16
|
+
|
|
17
|
+
- adapters turn framework runtimes into ACP
|
|
18
|
+
- `acpremote` transports or mirrors an ACP boundary that already exists
|
|
19
|
+
|
|
20
|
+
## Start Here
|
|
21
|
+
|
|
22
|
+
If you only need the shortest high-signal path:
|
|
23
|
+
|
|
24
|
+
1. read `Quick Routing`
|
|
25
|
+
2. open the [server transport module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/server.py) for exposure-path questions
|
|
26
|
+
3. open the [remote client module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/client.py) and the [proxy agent module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/proxy_agent.py) for mirror-path questions
|
|
27
|
+
4. open the [command transport module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/command.py) only when the upstream runtime is ACP-over-stdio
|
|
28
|
+
|
|
29
|
+
## Quick Routing
|
|
30
|
+
|
|
31
|
+
| If the task is about... | Use this skill? | Open first |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| expose an existing ACP agent over WebSocket | Yes | [server transport module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/server.py), [transport config module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/config.py) |
|
|
34
|
+
| expose a stdio ACP command over WebSocket | Yes | [command transport module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/command.py), [server transport module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/server.py) |
|
|
35
|
+
| mirror a remote ACP endpoint locally | Yes | [remote client module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/client.py), [proxy agent module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/proxy_agent.py) |
|
|
36
|
+
| bearer auth or metadata routes | Yes | [auth helpers](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/auth.py), [metadata module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/metadata.py), [server transport module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/server.py) |
|
|
37
|
+
| remote host ownership or `remote_cwd` | Yes | [proxy agent module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/proxy_agent.py), [remote client module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/client.py), [metadata module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/metadata.py) |
|
|
38
|
+
| line buffering / frame relay issues | Yes | [stream bridge module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/stream.py) |
|
|
39
|
+
| adapting a Pydantic or LangChain runtime to ACP | No, pair with adapter skill | adapter packages |
|
|
40
|
+
|
|
41
|
+
## Package Boundary
|
|
42
|
+
|
|
43
|
+
`acpremote` owns:
|
|
44
|
+
|
|
45
|
+
- WebSocket transport
|
|
46
|
+
- stdio-to-WebSocket ACP relaying
|
|
47
|
+
- remote mirror proxy behavior
|
|
48
|
+
- `/acp` metadata
|
|
49
|
+
- `/healthz`
|
|
50
|
+
- bearer-token protection
|
|
51
|
+
- transport latency metadata/projection
|
|
52
|
+
- host-ownership policy for mirrored clients
|
|
53
|
+
|
|
54
|
+
It does not own:
|
|
55
|
+
|
|
56
|
+
- adapting `pydantic_ai.Agent`
|
|
57
|
+
- adapting LangGraph/LangChain graphs
|
|
58
|
+
- root CLI target loading
|
|
59
|
+
- Codex auth parsing
|
|
60
|
+
|
|
61
|
+
## Do Not Confuse With
|
|
62
|
+
|
|
63
|
+
- `acpremote` vs `acpkit-sdk`
|
|
64
|
+
`acpremote` is transport; `acpkit` is the root CLI/runtime package
|
|
65
|
+
- `acpremote` vs `pydantic-acp`
|
|
66
|
+
`acpremote` exposes or mirrors ACP; `pydantic-acp` creates ACP from a Pydantic runtime
|
|
67
|
+
- `acpremote` vs `langchain-acp`
|
|
68
|
+
`acpremote` transports ACP; `langchain-acp` adapts graph runtimes into ACP
|
|
69
|
+
|
|
70
|
+
## Primary References
|
|
71
|
+
|
|
72
|
+
Package references:
|
|
73
|
+
|
|
74
|
+
- [Raw skill](https://raw.githubusercontent.com/vcoderun/acpkit/main/.agents/skills/acpremote/SKILL.md)
|
|
75
|
+
- [Raw transport docs](https://raw.githubusercontent.com/vcoderun/acpkit/main/docs/acpremote.md)
|
|
76
|
+
- [Raw remote-host docs](https://raw.githubusercontent.com/vcoderun/acpkit/main/docs/examples/remote-hosting.md)
|
|
77
|
+
- [Rendered docs](https://vcoderun.github.io/acpkit/acpremote/)
|
|
78
|
+
- [Source tree](https://github.com/vcoderun/acpkit/tree/main/packages/transports/acpremote)
|
|
79
|
+
|
|
80
|
+
Cross-skill references:
|
|
81
|
+
|
|
82
|
+
- [Root package skill](https://raw.githubusercontent.com/vcoderun/acpkit/main/.agents/skills/acpkit-sdk/SKILL.md)
|
|
83
|
+
- [Pydantic adapter skill](https://raw.githubusercontent.com/vcoderun/acpkit/main/.agents/skills/pydantic-acp/SKILL.md)
|
|
84
|
+
- [LangChain adapter skill](https://raw.githubusercontent.com/vcoderun/acpkit/main/.agents/skills/langchain-acp/SKILL.md)
|
|
85
|
+
|
|
86
|
+
## Public Surface
|
|
87
|
+
|
|
88
|
+
Server-side seams:
|
|
89
|
+
|
|
90
|
+
- `serve_acp(...)`
|
|
91
|
+
- `serve_command(...)`
|
|
92
|
+
- `serve_stdio_command(...)`
|
|
93
|
+
|
|
94
|
+
Client-side seam:
|
|
95
|
+
|
|
96
|
+
- `connect_acp(...)`
|
|
97
|
+
|
|
98
|
+
Support types:
|
|
99
|
+
|
|
100
|
+
- `TransportOptions`
|
|
101
|
+
- `CommandOptions`
|
|
102
|
+
- `ServerOptions`
|
|
103
|
+
|
|
104
|
+
Package entrypoint:
|
|
105
|
+
|
|
106
|
+
- [Package entrypoint](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/__init__.py)
|
|
107
|
+
|
|
108
|
+
## Module Guide
|
|
109
|
+
|
|
110
|
+
| Subsystem | Key files | Use them for |
|
|
111
|
+
| --- | --- | --- |
|
|
112
|
+
| server and routing | [server transport module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/server.py), [auth helpers](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/auth.py), [metadata module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/metadata.py), [transport config module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/config.py), [limit definitions](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/limits.py) | server startup, mount paths, metadata, health, auth, limits |
|
|
113
|
+
| remote client and proxy behavior | [remote client module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/client.py), [proxy agent module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/proxy_agent.py) | remote connection setup, metadata fetch, local mirroring, host ownership |
|
|
114
|
+
| command-backed transport | [command transport module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/command.py) | stdio ACP commands that need WebSocket exposure |
|
|
115
|
+
| stream plumbing | [stream bridge module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/stream.py) | line buffering, text/binary frame handling, sender/receiver lifecycle |
|
|
116
|
+
|
|
117
|
+
## Core Transport Shapes
|
|
118
|
+
|
|
119
|
+
### Shape 1: Existing ACP agent object
|
|
120
|
+
|
|
121
|
+
Use:
|
|
122
|
+
|
|
123
|
+
- `serve_acp(...)`
|
|
124
|
+
|
|
125
|
+
Meaning:
|
|
126
|
+
|
|
127
|
+
1. some runtime already produced an `acp.interfaces.Agent`
|
|
128
|
+
2. `acpremote` exposes that ACP boundary over WebSocket
|
|
129
|
+
|
|
130
|
+
### Shape 2: Existing stdio ACP command
|
|
131
|
+
|
|
132
|
+
Use:
|
|
133
|
+
|
|
134
|
+
- `serve_command(...)`
|
|
135
|
+
- `serve_stdio_command(...)`
|
|
136
|
+
|
|
137
|
+
Meaning:
|
|
138
|
+
|
|
139
|
+
1. the upstream runtime only exposes ACP on stdin/stdout
|
|
140
|
+
2. `acpremote` spawns that command
|
|
141
|
+
3. stdin/stdout ACP frames are bridged onto WebSocket
|
|
142
|
+
|
|
143
|
+
### Shape 3: Remote ACP mirrored locally
|
|
144
|
+
|
|
145
|
+
Use:
|
|
146
|
+
|
|
147
|
+
- `connect_acp(...)`
|
|
148
|
+
|
|
149
|
+
Meaning:
|
|
150
|
+
|
|
151
|
+
1. there is an existing remote ACP WebSocket endpoint
|
|
152
|
+
2. `acpremote` opens a remote connection
|
|
153
|
+
3. the local machine gets a proxy ACP agent that mirrors the remote endpoint
|
|
154
|
+
|
|
155
|
+
## Remote Host Ownership
|
|
156
|
+
|
|
157
|
+
This is one of the most important rules in the package.
|
|
158
|
+
|
|
159
|
+
The default should keep the remote host authoritative for:
|
|
160
|
+
|
|
161
|
+
- `cwd`
|
|
162
|
+
- host-backed filesystem ownership
|
|
163
|
+
- host-backed terminal ownership
|
|
164
|
+
|
|
165
|
+
That is why the proxy layer:
|
|
166
|
+
|
|
167
|
+
- prefers remote metadata like `remote_cwd`
|
|
168
|
+
- strips local host-backed capabilities before forwarding `initialize(...)`
|
|
169
|
+
|
|
170
|
+
Use client passthrough only when the product explicitly wants the local machine to become host
|
|
171
|
+
owner.
|
|
172
|
+
|
|
173
|
+
If a user reports:
|
|
174
|
+
|
|
175
|
+
- remote command executed in local cwd
|
|
176
|
+
- local filesystem used instead of remote filesystem
|
|
177
|
+
- remote agent owning the wrong host
|
|
178
|
+
|
|
179
|
+
inspect the [proxy agent module](https://github.com/vcoderun/acpkit/blob/main/packages/transports/acpremote/src/acpremote/proxy_agent.py) and metadata flow first.
|
|
180
|
+
|
|
181
|
+
## Metadata and Health Surface
|
|
182
|
+
|
|
183
|
+
The transport package also owns the lightweight HTTP surface around the WebSocket endpoint:
|
|
184
|
+
|
|
185
|
+
- `/acp`
|
|
186
|
+
- `/healthz`
|
|
187
|
+
|
|
188
|
+
Typical uses:
|
|
189
|
+
|
|
190
|
+
- health checks
|
|
191
|
+
- transport metadata inspection
|
|
192
|
+
- remote `cwd` discovery
|
|
193
|
+
- debugging auth and route configuration
|
|
194
|
+
|
|
195
|
+
This is transport-level behavior. Do not push it into adapter code.
|
|
196
|
+
|
|
197
|
+
## Latency and Transport Visibility
|
|
198
|
+
|
|
199
|
+
`acpremote` can emit transport-observed latency through:
|
|
200
|
+
|
|
201
|
+
- metadata fields
|
|
202
|
+
- optional visible latency projection
|
|
203
|
+
|
|
204
|
+
Keep the distinction explicit:
|
|
205
|
+
|
|
206
|
+
- this is proxy-observed timing
|
|
207
|
+
- it is not a claim of clock-synchronized one-way network truth
|
|
208
|
+
|
|
209
|
+
## Skill-Bundled Examples
|
|
210
|
+
|
|
211
|
+
Skill-local examples:
|
|
212
|
+
|
|
213
|
+
- [Remote command exposure recipe](https://github.com/vcoderun/acpkit/blob/main/.agents/skills/acpremote/examples/serve_command.py)
|
|
214
|
+
- [Remote mirror recipe](https://github.com/vcoderun/acpkit/blob/main/.agents/skills/acpremote/examples/mirror_remote.py)
|
|
215
|
+
- [Skill-local example notes](https://github.com/vcoderun/acpkit/blob/main/.agents/skills/acpremote/examples/README.md)
|
|
216
|
+
|
|
217
|
+
These demonstrate:
|
|
218
|
+
|
|
219
|
+
- exposing a stdio ACP command remotely
|
|
220
|
+
- mirroring a remote ACP endpoint locally
|
|
221
|
+
- using `TransportOptions` intentionally
|
|
222
|
+
|
|
223
|
+
## Handoff Rules
|
|
224
|
+
|
|
225
|
+
Pair or switch to:
|
|
226
|
+
|
|
227
|
+
- `acpkit-sdk`
|
|
228
|
+
when the remote host is reached through `acpkit serve ...` or the local mirror is
|
|
229
|
+
`acpkit run --addr ...`
|
|
230
|
+
- `pydantic-acp`
|
|
231
|
+
when a Pydantic agent is adapted first, then exposed remotely
|
|
232
|
+
- `langchain-acp`
|
|
233
|
+
when a LangGraph or DeepAgents graph is adapted first, then exposed remotely
|
|
234
|
+
|
|
235
|
+
Common end-to-end references:
|
|
236
|
+
|
|
237
|
+
- [Root recipe index](https://github.com/vcoderun/acpkit/blob/main/.agents/skills/acpkit-sdk/examples/README.md)
|
|
238
|
+
- [Public Pydantic example](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/finance_agent.py)
|
|
239
|
+
- [Public LangChain example](https://github.com/vcoderun/acpkit/blob/main/examples/langchain/workspace_graph.py)
|
|
240
|
+
|
|
241
|
+
## Guardrails
|
|
242
|
+
|
|
243
|
+
- Do not call `acpremote` an adapter.
|
|
244
|
+
- Do not claim it can adapt a framework runtime by itself.
|
|
245
|
+
- Do not blur ACP adaptation with ACP transport.
|
|
246
|
+
- If the task is really about `acpkit run ...` or `acpkit serve ...`, pair this skill with
|
|
247
|
+
`acpkit-sdk`.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "ACP Remote"
|
|
3
|
+
short_description: "Expose and mirror ACP over WebSocket transport"
|
|
4
|
+
default_prompt: "Use $acpremote to update ACP WebSocket transport, stdio command exposure, remote mirroring, or host-ownership behavior."
|
|
5
|
+
|
|
6
|
+
policy:
|
|
7
|
+
allow_implicit_invocation: true
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# acpremote Examples
|
|
2
|
+
|
|
3
|
+
`acpremote` examples focus on transport, not runtime adaptation.
|
|
4
|
+
|
|
5
|
+
## Expose A Stdio ACP Command Over WebSocket
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
uv run python .agents/skills/acpremote/examples/serve_command.py
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
By default this example exposes:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
acpkit run examples.langchain.workspace_graph:graph
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
over:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
ws://127.0.0.1:8080/acp/ws
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Override the command with `ACPREMOTE_COMMAND` when needed.
|
|
24
|
+
|
|
25
|
+
## Mirror A Remote ACP Endpoint Locally
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
ACPREMOTE_URL=ws://127.0.0.1:8080/acp/ws \
|
|
29
|
+
uv run python .agents/skills/acpremote/examples/mirror_remote.py
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
That starts a local stdio ACP boundary backed by the remote WebSocket server.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations as _annotations
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
from acp import run_agent
|
|
7
|
+
from acpremote import TransportOptions, connect_acp
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _remote_url() -> str:
|
|
11
|
+
return os.getenv("ACPREMOTE_URL", "ws://127.0.0.1:8080/acp/ws")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _bearer_token() -> str | None:
|
|
15
|
+
token = os.getenv("ACPREMOTE_BEARER_TOKEN", "").strip()
|
|
16
|
+
return token or None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
async def main() -> None:
|
|
20
|
+
agent = connect_acp(
|
|
21
|
+
_remote_url(),
|
|
22
|
+
bearer_token=_bearer_token(),
|
|
23
|
+
options=TransportOptions(
|
|
24
|
+
emit_latency_meta=True,
|
|
25
|
+
emit_latency_projection=True,
|
|
26
|
+
),
|
|
27
|
+
)
|
|
28
|
+
await run_agent(agent)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
if __name__ == "__main__":
|
|
32
|
+
asyncio.run(main())
|