acpkit 0.4.2__tar.gz → 0.5.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.5.0/.agents/skills/acpkit-sdk/SKILL.md +57 -0
- acpkit-0.5.0/.agents/skills/acpkit-sdk/agents/openai.yaml +7 -0
- acpkit-0.5.0/.agents/skills/acpkit-sdk/resources/intro.md +79 -0
- acpkit-0.5.0/.agents/skills/acpkit-sdk/scripts/list_examples.py +32 -0
- acpkit-0.5.0/.agents/skills/acpkit-sdk/scripts/list_public_exports.py +52 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/.github/workflows/docs.yml +2 -2
- {acpkit-0.4.2 → acpkit-0.5.0}/.gitignore +7 -4
- acpkit-0.5.0/.pre-commit-config.yaml +26 -0
- acpkit-0.5.0/COVERAGE +2 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/Makefile +29 -3
- {acpkit-0.4.2 → acpkit-0.5.0}/PKG-INFO +58 -39
- {acpkit-0.4.2 → acpkit-0.5.0}/README.md +56 -37
- acpkit-0.5.0/SKILL.md +452 -0
- acpkit-0.5.0/VERSION +1 -0
- acpkit-0.5.0/docs/.partials/index-header.html +13 -0
- acpkit-0.5.0/docs/about/index.md +39 -0
- acpkit-0.5.0/docs/api/acpkit.md +25 -0
- acpkit-0.5.0/docs/api/codex_auth_helper.md +23 -0
- acpkit-0.5.0/docs/api/pydantic_acp.md +91 -0
- acpkit-0.5.0/docs/bridges.md +186 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/docs/cli.md +34 -35
- acpkit-0.5.0/docs/examples/factory.md +47 -0
- acpkit-0.5.0/docs/examples/index.md +43 -0
- acpkit-0.5.0/docs/examples/minimal.md +42 -0
- acpkit-0.5.0/docs/examples/providers.md +33 -0
- acpkit-0.5.0/docs/examples/workspace-agent.md +277 -0
- acpkit-0.5.0/docs/getting-started/installation.md +105 -0
- acpkit-0.5.0/docs/getting-started/quickstart.md +203 -0
- acpkit-0.5.0/docs/helpers.md +72 -0
- acpkit-0.5.0/docs/host-backends.md +109 -0
- acpkit-0.5.0/docs/index.md +107 -0
- acpkit-0.5.0/docs/llms-full.txt +2854 -0
- acpkit-0.5.0/docs/llms.txt +95 -0
- acpkit-0.5.0/docs/providers.md +266 -0
- acpkit-0.5.0/docs/pydantic-acp/adapter-config.md +197 -0
- acpkit-0.5.0/docs/pydantic-acp/plans-thinking-approvals.md +156 -0
- acpkit-0.5.0/docs/pydantic-acp/runtime-controls.md +190 -0
- acpkit-0.5.0/docs/pydantic-acp/session-state.md +132 -0
- acpkit-0.5.0/docs/pydantic-acp.md +203 -0
- acpkit-0.5.0/docs/stylesheets/tweaks.css +137 -0
- acpkit-0.5.0/docs/testing.md +100 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/strong_agent.py +162 -79
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/strong_agent_v2.py +145 -79
- acpkit-0.5.0/mkdocs.yml +105 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/README.md +2 -2
- acpkit-0.5.0/packages/adapters/pydantic-acp/VERSION +1 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/pyproject.toml +2 -2
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py +4 -0
- acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/_slash_commands.py +54 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/__init__.py +2 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/base.py +13 -4
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/hooks.py +68 -39
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/mcp.py +2 -2
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/prepare_tools.py +8 -0
- acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/thinking.py +118 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/agent.py +1 -1
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/config.py +2 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/hook_projection.py +4 -2
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/projection.py +25 -25
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/providers.py +12 -1
- acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_agent_state.py +159 -0
- acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_runtime.py +803 -0
- acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_runtime.py +1015 -0
- acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py +873 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/bridge_manager.py +15 -2
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/hook_introspection.py +2 -2
- acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/prompts.py +285 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/slash_commands.py +113 -34
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/serialization.py +3 -3
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/session/state.py +3 -3
- acpkit-0.5.0/packages/helpers/codex-auth-helper/LICENSE +201 -0
- acpkit-0.5.0/packages/helpers/codex-auth-helper/VERSION +1 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/pyproject.toml +2 -2
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/manager.py +3 -3
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/state.py +10 -8
- {acpkit-0.4.2 → acpkit-0.5.0}/pyproject.toml +8 -9
- {acpkit-0.4.2 → acpkit-0.5.0}/pyrightconfig.json +2 -0
- acpkit-0.5.0/scripts/generate_llms_docs.py +284 -0
- acpkit-0.5.0/scripts/run_if_major_change.py +122 -0
- acpkit-0.5.0/scripts/save_coverage_summary.py +136 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/__init__.py +1 -1
- {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/adapters.py +7 -7
- {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/runtime.py +6 -6
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/codex_auth_helper/support.py +7 -3
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/codex_auth_helper/test_factory.py +7 -4
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/support.py +3 -1
- acpkit-0.5.0/tests/pydantic/test_adapter_helpers.py +1034 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_approvals.py +110 -0
- acpkit-0.4.2/tests/pydantic/test_bridges.py → acpkit-0.5.0/tests/pydantic/test_bridge_builder.py +2 -160
- acpkit-0.5.0/tests/pydantic/test_bridge_hooks.py +589 -0
- acpkit-0.5.0/tests/pydantic/test_bridge_mcp.py +361 -0
- acpkit-0.5.0/tests/pydantic/test_bridge_prepare_tools.py +101 -0
- acpkit-0.5.0/tests/pydantic/test_bridge_thinking.py +127 -0
- acpkit-0.5.0/tests/pydantic/test_hook_introspection.py +416 -0
- acpkit-0.5.0/tests/pydantic/test_low_level_helpers.py +1057 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_models.py +152 -12
- acpkit-0.5.0/tests/pydantic/test_slash_commands.py +792 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/test_acpkit_cli.py +5 -4
- acpkit-0.4.2/.pre-commit-config.yaml +0 -14
- acpkit-0.4.2/SKILL.md +0 -723
- acpkit-0.4.2/VERSION +0 -1
- acpkit-0.4.2/docs/about/index.md +0 -26
- acpkit-0.4.2/docs/bridges.md +0 -140
- acpkit-0.4.2/docs/helpers.md +0 -46
- acpkit-0.4.2/docs/host-backends.md +0 -53
- acpkit-0.4.2/docs/index.md +0 -77
- acpkit-0.4.2/docs/llms.txt +0 -37
- acpkit-0.4.2/docs/providers.md +0 -281
- acpkit-0.4.2/docs/testing.md +0 -48
- acpkit-0.4.2/mkdocs.yml +0 -18
- acpkit-0.4.2/packages/adapters/pydantic-acp/VERSION +0 -1
- acpkit-0.4.2/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py +0 -1617
- acpkit-0.4.2/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/prompts.py +0 -123
- acpkit-0.4.2/packages/helpers/codex-auth-helper/LICENSE +0 -21
- acpkit-0.4.2/packages/helpers/codex-auth-helper/VERSION +0 -1
- acpkit-0.4.2/tests/pydantic/test_hook_introspection.py +0 -217
- acpkit-0.4.2/tests/pydantic/test_slash_commands.py +0 -291
- {acpkit-0.4.2 → acpkit-0.5.0}/.cursorrules +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/.editorconfig +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/.github/dependabot.yml +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/.github/workflows/monorepo-ci.yml +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/.github/workflows/publish.yml +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/.github/workflows/test.yml +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/.python-version +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/CODE_OF_CONDUCT.md +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/CONTRIBUTING.md +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/LICENSE +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/SECURITY.md +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/context7.json +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/__init__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/.gitignore +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/README.md +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/__init__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/approvals.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/bridges.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/factory_agent.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/hook_projection.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/host_context.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/providers.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/static_agent.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_source.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_types.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/approvals.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/awaitables.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/history_processor.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/__init__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/__init__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/context.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/filesystem.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/terminal.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/models.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/py.typed +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/__init__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/server.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/session_surface.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/session/__init__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/session/store.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/.gitignore +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/README.md +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/__init__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/__init__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/config.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/store.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/client.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/factory.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/model.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/py.typed +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/scripts/demo_mcp_server.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/scripts/mock_hook_audit.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/scripts/mock_hook_snapshot.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/__main__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/cli.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/py.typed +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/__init__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/codex_auth_helper/__init__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/conftest.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/__init__.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_host.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_projection.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_runtime.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_sources.py +0 -0
- {acpkit-0.4.2 → acpkit-0.5.0}/tests/test_native_pydantic_agent.py +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: acpkit-sdk
|
|
3
|
+
description: Use for ACP Kit SDK work that turns an existing agent surface into a truthful ACP server through acpkit, pydantic-acp, and the maintained docs/examples.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ACP Kit SDK
|
|
7
|
+
|
|
8
|
+
Use this skill when the task is about ACP Kit’s actual SDK surface rather than generic ACP theory.
|
|
9
|
+
|
|
10
|
+
ACP Kit’s primary job is to take an existing agent surface, usually a `pydantic_ai.Agent`, and expose it as an ACP server boundary without fabricating runtime state the source agent cannot really honor.
|
|
11
|
+
|
|
12
|
+
This file is the lightweight orchestration entrypoint. The repo-root `SKILL.md` is the longform one-file reference.
|
|
13
|
+
|
|
14
|
+
Typical triggers:
|
|
15
|
+
|
|
16
|
+
- `acpkit` CLI target resolution or launch behavior
|
|
17
|
+
- `pydantic-acp` runtime behavior, extension seams, or examples
|
|
18
|
+
- `codex-auth-helper`
|
|
19
|
+
- SDK documentation, examples, and guides that must match the current implementation
|
|
20
|
+
|
|
21
|
+
## Start Here
|
|
22
|
+
|
|
23
|
+
Read [resources/intro.md](resources/intro.md) first.
|
|
24
|
+
|
|
25
|
+
When you need the docs map or the full docs corpus in one place, read `https://vcoderun.github.io/acpkit/llms.txt` or `https://vcoderun.github.io/acpkit/llms-full.txt`.
|
|
26
|
+
|
|
27
|
+
That file explains:
|
|
28
|
+
|
|
29
|
+
- what ACP Kit currently ships
|
|
30
|
+
- which seam to use (`run_acp`, `create_acp_agent`, providers, bridges, `AgentSource`)
|
|
31
|
+
- what the adapter can actually do today
|
|
32
|
+
- the current guardrails that often matter in real tasks
|
|
33
|
+
|
|
34
|
+
## Load Only The References You Need
|
|
35
|
+
|
|
36
|
+
- Public imports, package map, and canonical names:
|
|
37
|
+
[references/package-surface.md](references/package-surface.md)
|
|
38
|
+
- Runtime semantics, session behavior, plans, approvals, slash commands, MCP, projections:
|
|
39
|
+
[references/runtime-capabilities.md](references/runtime-capabilities.md)
|
|
40
|
+
- Docs pages, maintained examples, and showcase mapping:
|
|
41
|
+
[references/docs-examples-map.md](references/docs-examples-map.md)
|
|
42
|
+
|
|
43
|
+
## Utility Scripts
|
|
44
|
+
|
|
45
|
+
Use the bundled scripts instead of guessing:
|
|
46
|
+
|
|
47
|
+
- `python3.11 .agents/skills/acpkit-sdk/scripts/list_public_exports.py`
|
|
48
|
+
- `python3.11 .agents/skills/acpkit-sdk/scripts/list_examples.py`
|
|
49
|
+
|
|
50
|
+
## Working Rules
|
|
51
|
+
|
|
52
|
+
- Prefer current code over stale memory.
|
|
53
|
+
- If docs and code disagree, trust code first and update docs.
|
|
54
|
+
- Do not invent ACP surface the runtime cannot actually honor.
|
|
55
|
+
- Keep examples runnable, explicit, and strongly typed.
|
|
56
|
+
- `FileSessionStore` uses `root=Path(...)`.
|
|
57
|
+
- Mode slash commands are dynamic, and mode ids must not collide with reserved names such as `model`, `thinking`, `tools`, `hooks`, or `mcp-servers`.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "ACP Kit SDK"
|
|
3
|
+
short_description: "Turn agent surfaces into ACP servers"
|
|
4
|
+
default_prompt: "Use $acpkit-sdk to update ACP Kit code, examples, or docs for turning an existing agent surface into a truthful ACP server."
|
|
5
|
+
|
|
6
|
+
policy:
|
|
7
|
+
allow_implicit_invocation: true
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# ACP Kit SDK Intro
|
|
2
|
+
|
|
3
|
+
ACP Kit is a Python SDK and CLI for turning an existing agent surface into a truthful ACP server boundary.
|
|
4
|
+
|
|
5
|
+
Today that mostly means exposing `pydantic_ai.Agent` through `pydantic-acp`, while keeping models, modes, plans, approvals, MCP metadata, host tools, and session state aligned with what the underlying runtime can actually support.
|
|
6
|
+
|
|
7
|
+
This intro is intentionally short. The canonical deep references should come from the docs set in `docs/`, not from a second parallel skill-specific spec.
|
|
8
|
+
|
|
9
|
+
## Core Positioning
|
|
10
|
+
|
|
11
|
+
ACP Kit is not a new agent framework.
|
|
12
|
+
|
|
13
|
+
It sits between:
|
|
14
|
+
|
|
15
|
+
- an existing agent runtime
|
|
16
|
+
- ACP clients such as editors and host applications
|
|
17
|
+
|
|
18
|
+
The central contract is:
|
|
19
|
+
|
|
20
|
+
> expose ACP state only when the underlying runtime can actually honor it.
|
|
21
|
+
|
|
22
|
+
That rule drives model selection, mode switching, slash commands, native plan state, approval flow, MCP metadata, and host-backed tooling.
|
|
23
|
+
|
|
24
|
+
## Start With The Real Docs
|
|
25
|
+
|
|
26
|
+
Published docs base URL:
|
|
27
|
+
|
|
28
|
+
- `https://vcoderun.github.io/acpkit/`
|
|
29
|
+
|
|
30
|
+
Use these docs pages as the primary references:
|
|
31
|
+
|
|
32
|
+
| Need | Local source | Published docs |
|
|
33
|
+
| --- | --- | --- |
|
|
34
|
+
| Product overview and package map | `docs/index.md` | `https://vcoderun.github.io/acpkit/` |
|
|
35
|
+
| Construction seams and adapter overview | `docs/pydantic-acp.md` | `https://vcoderun.github.io/acpkit/pydantic-acp/` |
|
|
36
|
+
| Runtime config and session ownership | `docs/pydantic-acp/adapter-config.md` | `https://vcoderun.github.io/acpkit/pydantic-acp/adapter-config/` |
|
|
37
|
+
| Models, modes, slash commands, thinking | `docs/pydantic-acp/runtime-controls.md` | `https://vcoderun.github.io/acpkit/pydantic-acp/runtime-controls/` |
|
|
38
|
+
| Plans, approvals, and cancellation | `docs/pydantic-acp/plans-thinking-approvals.md` | `https://vcoderun.github.io/acpkit/pydantic-acp/plans-thinking-approvals/` |
|
|
39
|
+
| Host-owned state patterns | `docs/providers.md` | `https://vcoderun.github.io/acpkit/providers/` |
|
|
40
|
+
| ACP-visible extension seams | `docs/bridges.md` | `https://vcoderun.github.io/acpkit/bridges/` |
|
|
41
|
+
| Host-backed tools and projections | `docs/host-backends.md` | `https://vcoderun.github.io/acpkit/host-backends/` |
|
|
42
|
+
| Maintained example ladder | `docs/examples/index.md` | `https://vcoderun.github.io/acpkit/examples/` |
|
|
43
|
+
| Production showcase | `docs/examples/workspace-agent.md` | `https://vcoderun.github.io/acpkit/examples/workspace-agent/` |
|
|
44
|
+
| API surface | `docs/api/pydantic_acp.md` | `https://vcoderun.github.io/acpkit/api/pydantic_acp/` |
|
|
45
|
+
|
|
46
|
+
## Construction Seams To Reach For
|
|
47
|
+
|
|
48
|
+
Use these seams intentionally:
|
|
49
|
+
|
|
50
|
+
| Seam | Use it when |
|
|
51
|
+
| --- | --- |
|
|
52
|
+
| `run_acp(agent=...)` | you want the smallest direct path from `pydantic_ai.Agent` to a running ACP server |
|
|
53
|
+
| `create_acp_agent(...)` | you need the ACP-compatible agent object before running it |
|
|
54
|
+
| `agent_factory=` | session context should influence agent construction, but a full custom source is unnecessary |
|
|
55
|
+
| `agent_source=` | you need full control over agent build path, host binding, and session-specific dependencies |
|
|
56
|
+
| built-in `AdapterConfig` fields | the adapter can own the relevant session state cleanly |
|
|
57
|
+
| providers | the host or product layer should remain the source of truth |
|
|
58
|
+
| bridges | the runtime needs ACP-visible capabilities without hard-coding them into the adapter core |
|
|
59
|
+
|
|
60
|
+
## High-Value Guardrails
|
|
61
|
+
|
|
62
|
+
- `FileSessionStore` takes `root=Path(...)`, not `base_dir=...`
|
|
63
|
+
- slash mode commands are dynamic; `ask`, `plan`, and `agent` are examples, not built-in global names
|
|
64
|
+
- mode ids must not collide with reserved slash command names like `model`, `thinking`, `tools`, `hooks`, or `mcp-servers`
|
|
65
|
+
- only one `PrepareToolsMode(..., plan_mode=True)` is allowed
|
|
66
|
+
- `plan_tools=True` is how a non-plan execution mode keeps plan progress tools visible
|
|
67
|
+
- `/thinking` only exists when `ThinkingBridge()` is configured
|
|
68
|
+
- native ACP plan state and `PlanProvider` are separate ownership paths
|
|
69
|
+
- `HookBridge(hide_all=True)` suppresses hook listing output, not the underlying hook capability itself
|
|
70
|
+
|
|
71
|
+
## Reference Files In This Skill
|
|
72
|
+
|
|
73
|
+
These skill-local references are only routing aids back into the docs:
|
|
74
|
+
|
|
75
|
+
- `references/package-surface.md`
|
|
76
|
+
- `references/runtime-capabilities.md`
|
|
77
|
+
- `references/docs-examples-map.md`
|
|
78
|
+
|
|
79
|
+
Use them to find the right docs page quickly, not as independent source-of-truth specs.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations as _annotations
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
_EXAMPLE_DESCRIPTIONS = {
|
|
6
|
+
"approvals.py": "native deferred approval flow",
|
|
7
|
+
"bridges.py": "bridge builder and ACP-visible capabilities",
|
|
8
|
+
"factory_agent.py": "session-aware factory plus session-local model selection",
|
|
9
|
+
"hook_projection.py": "hook event labels and visibility controls",
|
|
10
|
+
"host_context.py": "client-backed filesystem and terminal helpers",
|
|
11
|
+
"providers.py": "host-owned models, modes, config, plan state, and approval metadata",
|
|
12
|
+
"static_agent.py": "smallest possible run_acp(agent=...) integration",
|
|
13
|
+
"strong_agent.py": "full workspace coding-agent showcase",
|
|
14
|
+
"strong_agent_v2.py": "alternative workspace integration shape",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _repo_root() -> Path:
|
|
19
|
+
return Path(__file__).resolve().parents[4]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def main() -> None:
|
|
23
|
+
examples_dir = _repo_root() / "examples" / "pydantic"
|
|
24
|
+
for example_path in sorted(examples_dir.glob("*.py")):
|
|
25
|
+
if example_path.name == "__init__.py":
|
|
26
|
+
continue
|
|
27
|
+
description = _EXAMPLE_DESCRIPTIONS.get(example_path.name, "no mapped description")
|
|
28
|
+
print(f"{example_path.relative_to(_repo_root())}: {description}")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
if __name__ == "__main__":
|
|
32
|
+
main()
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from __future__ import annotations as _annotations
|
|
2
|
+
|
|
3
|
+
import ast
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def _repo_root() -> Path:
|
|
8
|
+
return Path(__file__).resolve().parents[4]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _extract_exports(module_path: Path) -> tuple[str, ...]:
|
|
12
|
+
module = ast.parse(module_path.read_text(encoding="utf-8"))
|
|
13
|
+
for node in module.body:
|
|
14
|
+
if isinstance(node, ast.Assign):
|
|
15
|
+
if len(node.targets) != 1:
|
|
16
|
+
continue
|
|
17
|
+
target = node.targets[0]
|
|
18
|
+
if isinstance(target, ast.Name) and target.id == "__all__":
|
|
19
|
+
value = ast.literal_eval(node.value)
|
|
20
|
+
if isinstance(value, tuple | list) and all(isinstance(item, str) for item in value):
|
|
21
|
+
return tuple(value)
|
|
22
|
+
raise ValueError(f"Could not locate __all__ in {module_path}")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def main() -> None:
|
|
26
|
+
root = _repo_root()
|
|
27
|
+
module_paths = {
|
|
28
|
+
"acpkit": root / "src" / "acpkit" / "__init__.py",
|
|
29
|
+
"pydantic_acp": root
|
|
30
|
+
/ "packages"
|
|
31
|
+
/ "adapters"
|
|
32
|
+
/ "pydantic-acp"
|
|
33
|
+
/ "src"
|
|
34
|
+
/ "pydantic_acp"
|
|
35
|
+
/ "__init__.py",
|
|
36
|
+
"codex_auth_helper": root
|
|
37
|
+
/ "packages"
|
|
38
|
+
/ "helpers"
|
|
39
|
+
/ "codex-auth-helper"
|
|
40
|
+
/ "src"
|
|
41
|
+
/ "codex_auth_helper"
|
|
42
|
+
/ "__init__.py",
|
|
43
|
+
}
|
|
44
|
+
for package_name, module_path in module_paths.items():
|
|
45
|
+
print(f"[{package_name}]")
|
|
46
|
+
for export_name in _extract_exports(module_path):
|
|
47
|
+
print(f"- {export_name}")
|
|
48
|
+
print()
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
if __name__ == "__main__":
|
|
52
|
+
main()
|
|
@@ -25,9 +25,9 @@ jobs:
|
|
|
25
25
|
- name: Install dependencies
|
|
26
26
|
run: |
|
|
27
27
|
uv venv
|
|
28
|
-
uv pip install -e ".[docs]"
|
|
28
|
+
uv pip install -e ".[docs,pydantic,codex]"
|
|
29
29
|
|
|
30
30
|
- name: Deploy MkDocs
|
|
31
31
|
run: |
|
|
32
32
|
source .venv/bin/activate
|
|
33
|
-
mkdocs gh-deploy --force
|
|
33
|
+
mkdocs gh-deploy --force --strict
|
|
@@ -54,6 +54,7 @@ htmlcov/
|
|
|
54
54
|
.Python
|
|
55
55
|
build/
|
|
56
56
|
dist/
|
|
57
|
+
site/
|
|
57
58
|
*.egg-info/
|
|
58
59
|
tmp/
|
|
59
60
|
|
|
@@ -65,15 +66,17 @@ uv.lock
|
|
|
65
66
|
|
|
66
67
|
# Specs
|
|
67
68
|
references
|
|
68
|
-
pydantic-acp.md
|
|
69
|
+
/pydantic-acp.md
|
|
69
70
|
AGENTS.md
|
|
70
71
|
SPEC.md
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
|
|
73
|
+
# Sessions
|
|
74
|
+
.acp-sessions/
|
|
75
|
+
.demo-sessions/
|
|
74
76
|
|
|
75
77
|
# Temporary
|
|
76
78
|
tmp
|
|
77
79
|
*.snapshot
|
|
78
80
|
bump.sh
|
|
79
81
|
local.sh
|
|
82
|
+
coverage.json
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
default_install_hook_types: [pre-commit]
|
|
2
|
+
|
|
3
|
+
repos:
|
|
4
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
5
|
+
rev: v4.5.0
|
|
6
|
+
hooks:
|
|
7
|
+
- id: check-yaml
|
|
8
|
+
args: [--unsafe]
|
|
9
|
+
stages: [pre-commit, pre-push]
|
|
10
|
+
- id: check-toml
|
|
11
|
+
stages: [pre-commit, pre-push]
|
|
12
|
+
|
|
13
|
+
- repo: local
|
|
14
|
+
hooks:
|
|
15
|
+
- id: check-coverage
|
|
16
|
+
name: check coverage thresholds for major changes
|
|
17
|
+
entry: python3.11 scripts/run_if_major_change.py --stage pre-commit -- make check-coverage
|
|
18
|
+
language: system
|
|
19
|
+
pass_filenames: false
|
|
20
|
+
stages: [pre-commit]
|
|
21
|
+
- id: make-prod
|
|
22
|
+
name: verify build for major changes
|
|
23
|
+
entry: python3.11 scripts/run_if_major_change.py --stage pre-commit -- make prod
|
|
24
|
+
language: system
|
|
25
|
+
pass_filenames: false
|
|
26
|
+
stages: [pre-commit]
|
acpkit-0.5.0/COVERAGE
ADDED
|
@@ -3,7 +3,7 @@ GREEN := \033[1;32m
|
|
|
3
3
|
RESET := \033[0m
|
|
4
4
|
PYTHON_VERSIONS := 3.11.13 3.12.10 3.13.9
|
|
5
5
|
|
|
6
|
-
.PHONY: tests format check-formatted check check-matrix all prod rename serve
|
|
6
|
+
.PHONY: tests coverage-branch check-coverage save-coverage format check-formatted check check-matrix all prod rename serve
|
|
7
7
|
|
|
8
8
|
# Hack to allow passing arguments to make commands (e.g. make rename my_project)
|
|
9
9
|
ifeq (rename,$(firstword $(MAKECMDGOALS)))
|
|
@@ -47,7 +47,7 @@ check-matrix:
|
|
|
47
47
|
printf "$(BLUE)==>$(RESET) Running validation matrix for Python $$version...\n"; \
|
|
48
48
|
uv run --extra dev --python $$version ruff check src/acpkit tests || exit $$?; \
|
|
49
49
|
uv run --extra dev --python $$version ty check --python-version $$short_version || exit $$?; \
|
|
50
|
-
uv run --extra dev --python $$version basedpyright --pythonversion $$short_version || exit $$?; \
|
|
50
|
+
uv run --extra dev --python $$version python -m basedpyright --pythonversion $$short_version src packages tests || exit $$?; \
|
|
51
51
|
done
|
|
52
52
|
@printf "$(GREEN)✔ Matrix checking complete.$(RESET)\n"
|
|
53
53
|
|
|
@@ -56,10 +56,36 @@ tests:
|
|
|
56
56
|
@uv run --extra dev pytest
|
|
57
57
|
@printf "$(GREEN)✔ Tests complete.$(RESET)\n"
|
|
58
58
|
|
|
59
|
+
coverage-branch:
|
|
60
|
+
@printf "$(BLUE)==>$(RESET) Running branch coverage for pydantic-acp...\n"
|
|
61
|
+
@uv run --extra dev pytest -p pytest_cov tests/pydantic tests/test_acpkit_cli.py tests/test_native_pydantic_agent.py --cov=packages/adapters/pydantic-acp/src/pydantic_acp --cov-branch --cov-report=json -q
|
|
62
|
+
@printf "$(GREEN)✔ Branch coverage complete. See coverage.json.$(RESET)\n"
|
|
63
|
+
|
|
64
|
+
check-coverage:
|
|
65
|
+
@printf "$(BLUE)==>$(RESET) Checking line and branch coverage thresholds for pydantic-acp...\n"
|
|
66
|
+
@set -e; \
|
|
67
|
+
tmp_file=$$(mktemp -t acpkit-coverage); \
|
|
68
|
+
trap 'rm -f "$$tmp_file"' EXIT; \
|
|
69
|
+
uv run --extra dev pytest -p pytest_cov tests/pydantic tests/test_acpkit_cli.py tests/test_native_pydantic_agent.py --cov=packages/adapters/pydantic-acp/src/pydantic_acp --cov-branch --cov-report=json:$$tmp_file -q; \
|
|
70
|
+
uv run --extra dev python scripts/save_coverage_summary.py --input "$$tmp_file" --check-only
|
|
71
|
+
@printf "$(GREEN)✔ Coverage thresholds satisfied.$(RESET)\n"
|
|
72
|
+
|
|
73
|
+
save-coverage:
|
|
74
|
+
@printf "$(BLUE)==>$(RESET) Running line and branch coverage for pydantic-acp...\n"
|
|
75
|
+
@uv run --extra dev pytest -p pytest_cov tests/pydantic tests/test_acpkit_cli.py tests/test_native_pydantic_agent.py --cov=packages/adapters/pydantic-acp/src/pydantic_acp --cov-branch --cov-report=json -q
|
|
76
|
+
@printf "$(BLUE)==>$(RESET) Saving coverage summary to COVERAGE...\n"
|
|
77
|
+
@uv run --extra dev python scripts/save_coverage_summary.py
|
|
78
|
+
@printf "$(GREEN)✔ Coverage summary written to COVERAGE.$(RESET)\n"
|
|
79
|
+
|
|
59
80
|
serve:
|
|
60
81
|
@printf "$(BLUE)==>$(RESET) Serving docs with mkdocs...\n"
|
|
61
|
-
@uv run --extra docs mkdocs serve --dev-addr 127.0.0.1:8080
|
|
82
|
+
@uv run --extra docs --extra pydantic --extra codex mkdocs serve --dev-addr 127.0.0.1:8080
|
|
62
83
|
|
|
63
84
|
all: format check
|
|
64
85
|
|
|
65
86
|
prod: tests format check-matrix
|
|
87
|
+
|
|
88
|
+
pre-commit:
|
|
89
|
+
@printf "$(BLUE)==>$(RESET) Running pre-commit checks...\n"
|
|
90
|
+
@uv run --extra dev pre-commit
|
|
91
|
+
@printf "$(GREEN)✔ Pre-commit checks complete.$(RESET)\n"
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: acpkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: ACP Kit provides a common adapter for Agent Frameworks.
|
|
5
5
|
Project-URL: Homepage, https://github.com/vcoderun/acpkit
|
|
6
6
|
Project-URL: Issues, https://github.com/vcoderun/acpkit/issues
|
|
7
7
|
Project-URL: Repository, https://github.com/vcoderun/acpkit
|
|
8
|
-
License:
|
|
8
|
+
License: Apache 2.0
|
|
9
9
|
License-File: LICENSE
|
|
10
10
|
Keywords: acp,agents,protocol,pydantic-ai
|
|
11
11
|
Classifier: Development Status :: 3 - Alpha
|
|
@@ -65,12 +65,18 @@ Description-Content-Type: text/markdown
|
|
|
65
65
|
|
|
66
66
|
# ACP Kit
|
|
67
67
|
|
|
68
|
-
ACP Kit is a
|
|
68
|
+
ACP Kit is a Python SDK and CLI for turning an existing agent surface into a truthful ACP server.
|
|
69
69
|
|
|
70
70
|
- `acpkit` is the root CLI and target resolver
|
|
71
71
|
- `pydantic-acp` adapts `pydantic_ai.Agent` instances to ACP
|
|
72
72
|
- `codex-auth-helper` turns a local Codex login into a `pydantic-ai` Responses model
|
|
73
73
|
|
|
74
|
+
ACP Kit is not a new agent framework. The core use case is:
|
|
75
|
+
|
|
76
|
+
1. keep your current agent surface
|
|
77
|
+
2. expose it through ACP without rewriting the agent
|
|
78
|
+
3. only publish models, modes, plans, approvals, MCP metadata, and host tools that the runtime can actually honor
|
|
79
|
+
|
|
74
80
|
The core workflow is simple:
|
|
75
81
|
|
|
76
82
|
1. build a normal `pydantic_ai.Agent`
|
|
@@ -79,36 +85,45 @@ The core workflow is simple:
|
|
|
79
85
|
|
|
80
86
|
## Installation
|
|
81
87
|
|
|
82
|
-
Production:
|
|
83
|
-
|
|
84
88
|
```bash
|
|
89
|
+
# production
|
|
85
90
|
uv pip install "acpkit[pydantic]"
|
|
86
|
-
```
|
|
87
91
|
|
|
88
|
-
|
|
89
|
-
pip install "acpkit[pydantic]"
|
|
92
|
+
# production with acpkit launch support
|
|
93
|
+
uv pip install "acpkit[pydantic,launch]"
|
|
94
|
+
|
|
95
|
+
# development
|
|
96
|
+
uv pip install -e ".[dev,docs,pydantic]"
|
|
90
97
|
```
|
|
91
98
|
|
|
92
|
-
|
|
99
|
+
## ACP Kit Skill
|
|
93
100
|
|
|
94
|
-
|
|
95
|
-
uv pip install "acpkit[launch]"
|
|
96
|
-
```
|
|
101
|
+
This repo also ships an `acpkit-sdk` skill package for Codex.
|
|
97
102
|
|
|
98
|
-
|
|
99
|
-
pip install "acpkit[launch]"
|
|
100
|
-
```
|
|
103
|
+
Use it when you want Codex to help integrate ACP into an existing agent surface, especially for:
|
|
101
104
|
|
|
102
|
-
|
|
105
|
+
- exposing an existing `pydantic_ai.Agent` through ACP
|
|
106
|
+
- choosing between `run_acp(...)`, `create_acp_agent(...)`, providers, bridges, and `AgentSource`
|
|
107
|
+
- wiring plans, approvals, session stores, thinking, MCP metadata, and host-backed tools
|
|
108
|
+
- keeping docs and examples aligned with the real SDK surface
|
|
103
109
|
|
|
104
|
-
|
|
105
|
-
uv sync --extra dev --extra docs --extra pydantic
|
|
106
|
-
```
|
|
110
|
+
From a checkout of this repo, install the skill with Unix commands:
|
|
107
111
|
|
|
108
112
|
```bash
|
|
109
|
-
|
|
113
|
+
mkdir -p "$HOME/.codex/skills/acpkit-sdk" \
|
|
114
|
+
&& cp -R .agents/skills/acpkit-sdk/. "$HOME/.codex/skills/acpkit-sdk/"
|
|
110
115
|
```
|
|
111
116
|
|
|
117
|
+
The repo keeps two forms of the skill:
|
|
118
|
+
|
|
119
|
+
- [`SKILL.md`](https://github.com/vcoderun/acpkit/blob/main/SKILL.md): longform, one-file SDK reference
|
|
120
|
+
- [`.agents/skills/acpkit-sdk/`](https://github.com/vcoderun/acpkit/tree/main/.agents/skills/acpkit-sdk): packaged orchestration skill for Codex
|
|
121
|
+
|
|
122
|
+
Example prompts:
|
|
123
|
+
|
|
124
|
+
- `Use $acpkit-sdk to expose my existing pydantic_ai.Agent through ACP.`
|
|
125
|
+
- `Use $acpkit-sdk to add ACP plans, approvals, and slash-command mode switching to this agent.`
|
|
126
|
+
|
|
112
127
|
## CLI
|
|
113
128
|
|
|
114
129
|
Run a supported agent target through ACP:
|
|
@@ -241,7 +256,7 @@ config = AdapterConfig(
|
|
|
241
256
|
override="openai:gpt-5",
|
|
242
257
|
),
|
|
243
258
|
],
|
|
244
|
-
session_store=FileSessionStore(
|
|
259
|
+
session_store=FileSessionStore(root=Path(".acp-sessions")),
|
|
245
260
|
approval_bridge=NativeApprovalBridge(enable_persistent_choices=True),
|
|
246
261
|
)
|
|
247
262
|
|
|
@@ -313,7 +328,7 @@ When the session is in `plan` mode, the adapter:
|
|
|
313
328
|
- `plan_md: str` — optional markdown representation
|
|
314
329
|
|
|
315
330
|
Native plan state and `plan_provider` are mutually exclusive. See
|
|
316
|
-
[
|
|
331
|
+
[Providers](https://vcoderun.github.io/acpkit/providers/) for full
|
|
317
332
|
details.
|
|
318
333
|
|
|
319
334
|
## Agent Factories
|
|
@@ -368,7 +383,7 @@ agent = Agent("openai:gpt-5", name="persistent-agent")
|
|
|
368
383
|
run_acp(
|
|
369
384
|
agent=agent,
|
|
370
385
|
config=AdapterConfig(
|
|
371
|
-
session_store=FileSessionStore(
|
|
386
|
+
session_store=FileSessionStore(root=Path(".acp-sessions")),
|
|
372
387
|
),
|
|
373
388
|
)
|
|
374
389
|
```
|
|
@@ -491,7 +506,7 @@ Built-in bridges cover:
|
|
|
491
506
|
- `McpBridge`
|
|
492
507
|
- `AgentBridgeBuilder`
|
|
493
508
|
|
|
494
|
-
See [
|
|
509
|
+
See [Bridges](https://vcoderun.github.io/acpkit/bridges/) for the full bridge model.
|
|
495
510
|
|
|
496
511
|
## Providers
|
|
497
512
|
|
|
@@ -503,7 +518,7 @@ Providers let the host own session state while the adapter exposes it through AC
|
|
|
503
518
|
- `PlanProvider`
|
|
504
519
|
- `ApprovalStateProvider`
|
|
505
520
|
|
|
506
|
-
See [
|
|
521
|
+
See [Providers](https://vcoderun.github.io/acpkit/providers/) for full details.
|
|
507
522
|
|
|
508
523
|
## Host Backends
|
|
509
524
|
|
|
@@ -528,8 +543,8 @@ def build_agent(client: AcpClient, session: AcpSessionContext) -> Agent[None, st
|
|
|
528
543
|
return agent
|
|
529
544
|
```
|
|
530
545
|
|
|
531
|
-
See [
|
|
532
|
-
and terminal API surface.
|
|
546
|
+
See [Host Backends And Projections](https://vcoderun.github.io/acpkit/host-backends/) for the
|
|
547
|
+
filesystem and terminal API surface.
|
|
533
548
|
|
|
534
549
|
## Codex Auth Helper
|
|
535
550
|
|
|
@@ -543,7 +558,7 @@ from codex_auth_helper import create_codex_responses_model
|
|
|
543
558
|
agent = Agent(create_codex_responses_model("gpt-5.4"))
|
|
544
559
|
```
|
|
545
560
|
|
|
546
|
-
See [
|
|
561
|
+
See [Helpers](https://vcoderun.github.io/acpkit/helpers/) for helper package details.
|
|
547
562
|
|
|
548
563
|
## Examples
|
|
549
564
|
|
|
@@ -571,11 +586,9 @@ Runnable and focused examples live under [examples/pydantic](https://github.com/
|
|
|
571
586
|
Canonical local checks:
|
|
572
587
|
|
|
573
588
|
```bash
|
|
574
|
-
uv run ruff check
|
|
575
|
-
uv run ty check
|
|
576
|
-
uv run basedpyright
|
|
577
589
|
make tests
|
|
578
590
|
make check
|
|
591
|
+
make save-coverage
|
|
579
592
|
```
|
|
580
593
|
|
|
581
594
|
Preview the docs locally:
|
|
@@ -586,14 +599,20 @@ make serve
|
|
|
586
599
|
|
|
587
600
|
## Documentation Map
|
|
588
601
|
|
|
589
|
-
- [
|
|
590
|
-
- [
|
|
591
|
-
- [
|
|
592
|
-
- [
|
|
593
|
-
- [
|
|
594
|
-
- [
|
|
595
|
-
- [
|
|
596
|
-
- [
|
|
602
|
+
- [ACP Kit](https://vcoderun.github.io/acpkit/): landing page and package overview
|
|
603
|
+
- [Installation](https://vcoderun.github.io/acpkit/getting-started/installation/): install paths and validation workflow
|
|
604
|
+
- [Quickstart](https://vcoderun.github.io/acpkit/getting-started/quickstart/): first ACP server in a few steps
|
|
605
|
+
- [CLI](https://vcoderun.github.io/acpkit/cli/): root `acpkit` CLI behavior
|
|
606
|
+
- [Pydantic ACP Overview](https://vcoderun.github.io/acpkit/pydantic-acp/): adapter architecture and entry points
|
|
607
|
+
- [AdapterConfig](https://vcoderun.github.io/acpkit/pydantic-acp/adapter-config/): full `AdapterConfig` guide
|
|
608
|
+
- [Models, Modes, and Slash Commands](https://vcoderun.github.io/acpkit/pydantic-acp/runtime-controls/): models, modes, slash commands, and thinking
|
|
609
|
+
- [Plans, Thinking, and Approvals](https://vcoderun.github.io/acpkit/pydantic-acp/plans-thinking-approvals/): ACP planning, reasoning effort, and approval flow
|
|
610
|
+
- [Providers](https://vcoderun.github.io/acpkit/providers/): provider seams and host-owned state
|
|
611
|
+
- [Bridges](https://vcoderun.github.io/acpkit/bridges/): capability bridges and bridge builder usage
|
|
612
|
+
- [Host Backends And Projections](https://vcoderun.github.io/acpkit/host-backends/): client filesystem, terminal helpers, and projections
|
|
613
|
+
- [Helpers](https://vcoderun.github.io/acpkit/helpers/): helper packages including `codex-auth-helper`
|
|
614
|
+
- [Workspace Agent](https://vcoderun.github.io/acpkit/examples/workspace-agent/): full coding-agent walkthrough
|
|
615
|
+
- [Testing](https://vcoderun.github.io/acpkit/testing/): behavioral test surface and validation commands
|
|
597
616
|
- [examples/pydantic/README.md](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/README.md): runnable demos and focused SDK examples
|
|
598
617
|
|
|
599
618
|
## License
|