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.
Files changed (185) hide show
  1. acpkit-0.5.0/.agents/skills/acpkit-sdk/SKILL.md +57 -0
  2. acpkit-0.5.0/.agents/skills/acpkit-sdk/agents/openai.yaml +7 -0
  3. acpkit-0.5.0/.agents/skills/acpkit-sdk/resources/intro.md +79 -0
  4. acpkit-0.5.0/.agents/skills/acpkit-sdk/scripts/list_examples.py +32 -0
  5. acpkit-0.5.0/.agents/skills/acpkit-sdk/scripts/list_public_exports.py +52 -0
  6. {acpkit-0.4.2 → acpkit-0.5.0}/.github/workflows/docs.yml +2 -2
  7. {acpkit-0.4.2 → acpkit-0.5.0}/.gitignore +7 -4
  8. acpkit-0.5.0/.pre-commit-config.yaml +26 -0
  9. acpkit-0.5.0/COVERAGE +2 -0
  10. {acpkit-0.4.2 → acpkit-0.5.0}/Makefile +29 -3
  11. {acpkit-0.4.2 → acpkit-0.5.0}/PKG-INFO +58 -39
  12. {acpkit-0.4.2 → acpkit-0.5.0}/README.md +56 -37
  13. acpkit-0.5.0/SKILL.md +452 -0
  14. acpkit-0.5.0/VERSION +1 -0
  15. acpkit-0.5.0/docs/.partials/index-header.html +13 -0
  16. acpkit-0.5.0/docs/about/index.md +39 -0
  17. acpkit-0.5.0/docs/api/acpkit.md +25 -0
  18. acpkit-0.5.0/docs/api/codex_auth_helper.md +23 -0
  19. acpkit-0.5.0/docs/api/pydantic_acp.md +91 -0
  20. acpkit-0.5.0/docs/bridges.md +186 -0
  21. {acpkit-0.4.2 → acpkit-0.5.0}/docs/cli.md +34 -35
  22. acpkit-0.5.0/docs/examples/factory.md +47 -0
  23. acpkit-0.5.0/docs/examples/index.md +43 -0
  24. acpkit-0.5.0/docs/examples/minimal.md +42 -0
  25. acpkit-0.5.0/docs/examples/providers.md +33 -0
  26. acpkit-0.5.0/docs/examples/workspace-agent.md +277 -0
  27. acpkit-0.5.0/docs/getting-started/installation.md +105 -0
  28. acpkit-0.5.0/docs/getting-started/quickstart.md +203 -0
  29. acpkit-0.5.0/docs/helpers.md +72 -0
  30. acpkit-0.5.0/docs/host-backends.md +109 -0
  31. acpkit-0.5.0/docs/index.md +107 -0
  32. acpkit-0.5.0/docs/llms-full.txt +2854 -0
  33. acpkit-0.5.0/docs/llms.txt +95 -0
  34. acpkit-0.5.0/docs/providers.md +266 -0
  35. acpkit-0.5.0/docs/pydantic-acp/adapter-config.md +197 -0
  36. acpkit-0.5.0/docs/pydantic-acp/plans-thinking-approvals.md +156 -0
  37. acpkit-0.5.0/docs/pydantic-acp/runtime-controls.md +190 -0
  38. acpkit-0.5.0/docs/pydantic-acp/session-state.md +132 -0
  39. acpkit-0.5.0/docs/pydantic-acp.md +203 -0
  40. acpkit-0.5.0/docs/stylesheets/tweaks.css +137 -0
  41. acpkit-0.5.0/docs/testing.md +100 -0
  42. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/strong_agent.py +162 -79
  43. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/strong_agent_v2.py +145 -79
  44. acpkit-0.5.0/mkdocs.yml +105 -0
  45. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/README.md +2 -2
  46. acpkit-0.5.0/packages/adapters/pydantic-acp/VERSION +1 -0
  47. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/pyproject.toml +2 -2
  48. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py +4 -0
  49. acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/_slash_commands.py +54 -0
  50. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/__init__.py +2 -0
  51. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/base.py +13 -4
  52. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/hooks.py +68 -39
  53. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/mcp.py +2 -2
  54. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/prepare_tools.py +8 -0
  55. acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/thinking.py +118 -0
  56. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/agent.py +1 -1
  57. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/config.py +2 -0
  58. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/hook_projection.py +4 -2
  59. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/projection.py +25 -25
  60. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/providers.py +12 -1
  61. acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_agent_state.py +159 -0
  62. acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_runtime.py +803 -0
  63. acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_runtime.py +1015 -0
  64. acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py +873 -0
  65. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/bridge_manager.py +15 -2
  66. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/hook_introspection.py +2 -2
  67. acpkit-0.5.0/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/prompts.py +285 -0
  68. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/slash_commands.py +113 -34
  69. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/serialization.py +3 -3
  70. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/session/state.py +3 -3
  71. acpkit-0.5.0/packages/helpers/codex-auth-helper/LICENSE +201 -0
  72. acpkit-0.5.0/packages/helpers/codex-auth-helper/VERSION +1 -0
  73. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/pyproject.toml +2 -2
  74. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/manager.py +3 -3
  75. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/state.py +10 -8
  76. {acpkit-0.4.2 → acpkit-0.5.0}/pyproject.toml +8 -9
  77. {acpkit-0.4.2 → acpkit-0.5.0}/pyrightconfig.json +2 -0
  78. acpkit-0.5.0/scripts/generate_llms_docs.py +284 -0
  79. acpkit-0.5.0/scripts/run_if_major_change.py +122 -0
  80. acpkit-0.5.0/scripts/save_coverage_summary.py +136 -0
  81. {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/__init__.py +1 -1
  82. {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/adapters.py +7 -7
  83. {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/runtime.py +6 -6
  84. {acpkit-0.4.2 → acpkit-0.5.0}/tests/codex_auth_helper/support.py +7 -3
  85. {acpkit-0.4.2 → acpkit-0.5.0}/tests/codex_auth_helper/test_factory.py +7 -4
  86. {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/support.py +3 -1
  87. acpkit-0.5.0/tests/pydantic/test_adapter_helpers.py +1034 -0
  88. {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_approvals.py +110 -0
  89. acpkit-0.4.2/tests/pydantic/test_bridges.py → acpkit-0.5.0/tests/pydantic/test_bridge_builder.py +2 -160
  90. acpkit-0.5.0/tests/pydantic/test_bridge_hooks.py +589 -0
  91. acpkit-0.5.0/tests/pydantic/test_bridge_mcp.py +361 -0
  92. acpkit-0.5.0/tests/pydantic/test_bridge_prepare_tools.py +101 -0
  93. acpkit-0.5.0/tests/pydantic/test_bridge_thinking.py +127 -0
  94. acpkit-0.5.0/tests/pydantic/test_hook_introspection.py +416 -0
  95. acpkit-0.5.0/tests/pydantic/test_low_level_helpers.py +1057 -0
  96. {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_models.py +152 -12
  97. acpkit-0.5.0/tests/pydantic/test_slash_commands.py +792 -0
  98. {acpkit-0.4.2 → acpkit-0.5.0}/tests/test_acpkit_cli.py +5 -4
  99. acpkit-0.4.2/.pre-commit-config.yaml +0 -14
  100. acpkit-0.4.2/SKILL.md +0 -723
  101. acpkit-0.4.2/VERSION +0 -1
  102. acpkit-0.4.2/docs/about/index.md +0 -26
  103. acpkit-0.4.2/docs/bridges.md +0 -140
  104. acpkit-0.4.2/docs/helpers.md +0 -46
  105. acpkit-0.4.2/docs/host-backends.md +0 -53
  106. acpkit-0.4.2/docs/index.md +0 -77
  107. acpkit-0.4.2/docs/llms.txt +0 -37
  108. acpkit-0.4.2/docs/providers.md +0 -281
  109. acpkit-0.4.2/docs/testing.md +0 -48
  110. acpkit-0.4.2/mkdocs.yml +0 -18
  111. acpkit-0.4.2/packages/adapters/pydantic-acp/VERSION +0 -1
  112. acpkit-0.4.2/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py +0 -1617
  113. acpkit-0.4.2/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/prompts.py +0 -123
  114. acpkit-0.4.2/packages/helpers/codex-auth-helper/LICENSE +0 -21
  115. acpkit-0.4.2/packages/helpers/codex-auth-helper/VERSION +0 -1
  116. acpkit-0.4.2/tests/pydantic/test_hook_introspection.py +0 -217
  117. acpkit-0.4.2/tests/pydantic/test_slash_commands.py +0 -291
  118. {acpkit-0.4.2 → acpkit-0.5.0}/.cursorrules +0 -0
  119. {acpkit-0.4.2 → acpkit-0.5.0}/.editorconfig +0 -0
  120. {acpkit-0.4.2 → acpkit-0.5.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  121. {acpkit-0.4.2 → acpkit-0.5.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  122. {acpkit-0.4.2 → acpkit-0.5.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  123. {acpkit-0.4.2 → acpkit-0.5.0}/.github/dependabot.yml +0 -0
  124. {acpkit-0.4.2 → acpkit-0.5.0}/.github/workflows/monorepo-ci.yml +0 -0
  125. {acpkit-0.4.2 → acpkit-0.5.0}/.github/workflows/publish.yml +0 -0
  126. {acpkit-0.4.2 → acpkit-0.5.0}/.github/workflows/test.yml +0 -0
  127. {acpkit-0.4.2 → acpkit-0.5.0}/.python-version +0 -0
  128. {acpkit-0.4.2 → acpkit-0.5.0}/CODE_OF_CONDUCT.md +0 -0
  129. {acpkit-0.4.2 → acpkit-0.5.0}/CONTRIBUTING.md +0 -0
  130. {acpkit-0.4.2 → acpkit-0.5.0}/LICENSE +0 -0
  131. {acpkit-0.4.2 → acpkit-0.5.0}/SECURITY.md +0 -0
  132. {acpkit-0.4.2 → acpkit-0.5.0}/context7.json +0 -0
  133. {acpkit-0.4.2 → acpkit-0.5.0}/examples/__init__.py +0 -0
  134. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/.gitignore +0 -0
  135. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/README.md +0 -0
  136. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/__init__.py +0 -0
  137. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/approvals.py +0 -0
  138. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/bridges.py +0 -0
  139. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/factory_agent.py +0 -0
  140. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/hook_projection.py +0 -0
  141. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/host_context.py +0 -0
  142. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/providers.py +0 -0
  143. {acpkit-0.4.2 → acpkit-0.5.0}/examples/pydantic/static_agent.py +0 -0
  144. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_source.py +0 -0
  145. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_types.py +0 -0
  146. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/approvals.py +0 -0
  147. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/awaitables.py +0 -0
  148. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/history_processor.py +0 -0
  149. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/__init__.py +0 -0
  150. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/__init__.py +0 -0
  151. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/context.py +0 -0
  152. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/filesystem.py +0 -0
  153. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/host/terminal.py +0 -0
  154. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/models.py +0 -0
  155. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/py.typed +0 -0
  156. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/__init__.py +0 -0
  157. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/server.py +0 -0
  158. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/session_surface.py +0 -0
  159. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/session/__init__.py +0 -0
  160. {acpkit-0.4.2 → acpkit-0.5.0}/packages/adapters/pydantic-acp/src/pydantic_acp/session/store.py +0 -0
  161. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/.gitignore +0 -0
  162. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/README.md +0 -0
  163. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/__init__.py +0 -0
  164. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/__init__.py +0 -0
  165. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/config.py +0 -0
  166. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/store.py +0 -0
  167. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/client.py +0 -0
  168. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/factory.py +0 -0
  169. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/model.py +0 -0
  170. {acpkit-0.4.2 → acpkit-0.5.0}/packages/helpers/codex-auth-helper/src/codex_auth_helper/py.typed +0 -0
  171. {acpkit-0.4.2 → acpkit-0.5.0}/scripts/demo_mcp_server.py +0 -0
  172. {acpkit-0.4.2 → acpkit-0.5.0}/scripts/mock_hook_audit.py +0 -0
  173. {acpkit-0.4.2 → acpkit-0.5.0}/scripts/mock_hook_snapshot.py +0 -0
  174. {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/__main__.py +0 -0
  175. {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/cli.py +0 -0
  176. {acpkit-0.4.2 → acpkit-0.5.0}/src/acpkit/py.typed +0 -0
  177. {acpkit-0.4.2 → acpkit-0.5.0}/tests/__init__.py +0 -0
  178. {acpkit-0.4.2 → acpkit-0.5.0}/tests/codex_auth_helper/__init__.py +0 -0
  179. {acpkit-0.4.2 → acpkit-0.5.0}/tests/conftest.py +0 -0
  180. {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/__init__.py +0 -0
  181. {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_host.py +0 -0
  182. {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_projection.py +0 -0
  183. {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_runtime.py +0 -0
  184. {acpkit-0.4.2 → acpkit-0.5.0}/tests/pydantic/test_sources.py +0 -0
  185. {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
- AGENTS.md
72
- AGENTS.md
73
- AGENTS.md
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
@@ -0,0 +1,2 @@
1
+ Line coverage: 97.89% (3519 / 3566)
2
+ Branch coverage: 95.55% (1160 / 1214)
@@ -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.4.2
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: MIT
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 monorepo for ACP-facing agent runtime packages.
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
- ```bash
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
- To use `acpkit launch ...`, install the optional launch extra:
99
+ ## ACP Kit Skill
93
100
 
94
- ```bash
95
- uv pip install "acpkit[launch]"
96
- ```
101
+ This repo also ships an `acpkit-sdk` skill package for Codex.
97
102
 
98
- ```bash
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
- Development:
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
- ```bash
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
- pip install -e ".[dev,docs,pydantic]"
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(base_dir=Path(".acp-sessions")),
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
- [docs/providers.md](https://github.com/vcoderun/acpkit/blob/main/docs/providers.md) for full
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(base_dir=Path(".acp-sessions")),
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 [docs/bridges.md](https://github.com/vcoderun/acpkit/blob/main/docs/bridges.md) for the full bridge model.
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 [docs/providers.md](https://github.com/vcoderun/acpkit/blob/main/docs/providers.md) for full details.
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 [docs/host-backends.md](https://github.com/vcoderun/acpkit/blob/main/docs/host-backends.md) for the filesystem
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 [docs/helpers.md](https://github.com/vcoderun/acpkit/blob/main/docs/helpers.md) for helper package details.
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
- - [docs/index.md](https://github.com/vcoderun/acpkit/blob/main/docs/index.md): workspace overview and package map
590
- - [docs/cli.md](https://github.com/vcoderun/acpkit/blob/main/docs/cli.md): root `acpkit` CLI behavior
591
- - [docs/pydantic-acp.md](https://github.com/vcoderun/acpkit/blob/main/docs/pydantic-acp.md): adapter API, runtime controls, approvals, projection maps, providers, and host backends
592
- - [docs/bridges.md](https://github.com/vcoderun/acpkit/blob/main/docs/bridges.md): capability bridges and hook rendering
593
- - [docs/providers.md](https://github.com/vcoderun/acpkit/blob/main/docs/providers.md): provider seams and host-owned state
594
- - [docs/host-backends.md](https://github.com/vcoderun/acpkit/blob/main/docs/host-backends.md): client filesystem and terminal helpers
595
- - [docs/helpers.md](https://github.com/vcoderun/acpkit/blob/main/docs/helpers.md): helper packages including `codex-auth-helper`
596
- - [docs/testing.md](https://github.com/vcoderun/acpkit/blob/main/docs/testing.md): behavioral test surface and validation commands
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