acpkit 0.9.1__tar.gz → 0.9.2__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 (316) hide show
  1. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/acpkit-sdk/SKILL.md +5 -3
  2. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/acpkit-sdk/resources/intro.md +76 -14
  3. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/pydantic-acp/SKILL.md +38 -8
  4. {acpkit-0.9.1 → acpkit-0.9.2}/.github/workflows/docs.yml +1 -1
  5. acpkit-0.9.2/COVERAGE +2 -0
  6. {acpkit-0.9.1 → acpkit-0.9.2}/PKG-INFO +1 -1
  7. acpkit-0.9.2/VERSION +1 -0
  8. {acpkit-0.9.1 → acpkit-0.9.2}/docs/api/pydantic_acp.md +44 -0
  9. {acpkit-0.9.1 → acpkit-0.9.2}/docs/bridges.md +23 -0
  10. {acpkit-0.9.1 → acpkit-0.9.2}/docs/llms-full.txt +226 -1
  11. {acpkit-0.9.1 → acpkit-0.9.2}/docs/llms.txt +7 -7
  12. {acpkit-0.9.1 → acpkit-0.9.2}/docs/projection-cookbook.md +33 -0
  13. {acpkit-0.9.1 → acpkit-0.9.2}/docs/providers.md +17 -0
  14. {acpkit-0.9.1 → acpkit-0.9.2}/docs/pydantic-acp/adapter-config.md +26 -0
  15. {acpkit-0.9.1 → acpkit-0.9.2}/docs/pydantic-acp/plans-thinking-approvals.md +33 -0
  16. {acpkit-0.9.1 → acpkit-0.9.2}/docs/pydantic-acp/runtime-controls.md +23 -1
  17. {acpkit-0.9.1 → acpkit-0.9.2}/docs/pydantic-acp.md +2 -0
  18. acpkit-0.9.2/packages/adapters/langchain-acp/VERSION +1 -0
  19. {acpkit-0.9.1/packages/adapters/pydantic-acp/src/pydantic_acp → acpkit-0.9.2/packages/adapters/langchain-acp/src/langchain_acp}/_version.py +1 -1
  20. acpkit-0.9.2/packages/adapters/pydantic-acp/VERSION +1 -0
  21. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py +48 -1
  22. {acpkit-0.9.1/packages/helpers/codex-auth-helper/src/codex_auth_helper → acpkit-0.9.2/packages/adapters/pydantic-acp/src/pydantic_acp}/_version.py +1 -1
  23. acpkit-0.9.2/packages/adapters/pydantic-acp/src/pydantic_acp/approval_store.py +89 -0
  24. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/approvals.py +99 -47
  25. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/__init__.py +3 -0
  26. acpkit-0.9.2/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/external_hooks.py +70 -0
  27. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/config.py +6 -0
  28. acpkit-0.9.2/packages/adapters/pydantic-acp/src/pydantic_acp/permission_presentation.py +68 -0
  29. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/projection.py +240 -0
  30. acpkit-0.9.2/packages/adapters/pydantic-acp/src/pydantic_acp/prompt_capabilities.py +12 -0
  31. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_adapter_prompt.py +81 -0
  32. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_execution.py +10 -1
  33. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_surface_runtime.py +29 -2
  34. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py +3 -3
  35. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/session_surface.py +2 -0
  36. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/slash_commands.py +49 -0
  37. acpkit-0.9.2/packages/adapters/pydantic-acp/src/pydantic_acp/slash.py +84 -0
  38. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/fakes.py +6 -0
  39. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/harness.py +26 -1
  40. acpkit-0.9.2/packages/helpers/codex-auth-helper/VERSION +1 -0
  41. {acpkit-0.9.1/packages/transports/acpremote/src/acpremote → acpkit-0.9.2/packages/helpers/codex-auth-helper/src/codex_auth_helper}/_version.py +1 -1
  42. acpkit-0.9.2/packages/transports/acpremote/VERSION +1 -0
  43. {acpkit-0.9.1/packages/adapters/langchain-acp/src/langchain_acp → acpkit-0.9.2/packages/transports/acpremote/src/acpremote}/_version.py +1 -1
  44. {acpkit-0.9.1 → acpkit-0.9.2}/scripts/generate_llms_docs.py +7 -7
  45. acpkit-0.9.2/src/acpkit/_version.py +5 -0
  46. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/support.py +36 -0
  47. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_approvals.py +324 -0
  48. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_bridge_capability_support.py +82 -36
  49. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_bridge_hooks.py +134 -0
  50. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_projection.py +212 -1
  51. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_runtime.py +24 -0
  52. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_slash_commands.py +184 -1
  53. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_testing_harness.py +30 -0
  54. acpkit-0.9.1/COVERAGE +0 -2
  55. acpkit-0.9.1/VERSION +0 -1
  56. acpkit-0.9.1/packages/adapters/langchain-acp/VERSION +0 -1
  57. acpkit-0.9.1/packages/adapters/pydantic-acp/VERSION +0 -1
  58. acpkit-0.9.1/packages/helpers/codex-auth-helper/VERSION +0 -1
  59. acpkit-0.9.1/packages/transports/acpremote/VERSION +0 -1
  60. acpkit-0.9.1/src/acpkit/_version.py +0 -5
  61. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/acpkit-sdk/agents/openai.yaml +0 -0
  62. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/acpkit-sdk/examples/README.md +0 -0
  63. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/acpkit-sdk/scripts/list_examples.py +0 -0
  64. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/acpkit-sdk/scripts/list_public_exports.py +0 -0
  65. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/acpremote/SKILL.md +0 -0
  66. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/acpremote/agents/openai.yaml +0 -0
  67. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/acpremote/examples/README.md +0 -0
  68. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/acpremote/examples/mirror_remote.py +0 -0
  69. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/acpremote/examples/serve_command.py +0 -0
  70. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/codex-auth-helper/SKILL.md +0 -0
  71. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/codex-auth-helper/agents/openai.yaml +0 -0
  72. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/codex-auth-helper/examples/README.md +0 -0
  73. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/codex-auth-helper/examples/codex_chat_openai_graph.py +0 -0
  74. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/codex-auth-helper/examples/codex_responses_agent.py +0 -0
  75. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/langchain-acp/SKILL.md +0 -0
  76. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/langchain-acp/agents/openai.yaml +0 -0
  77. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/langchain-acp/examples/README.md +0 -0
  78. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/pydantic-acp/agents/openai.yaml +0 -0
  79. {acpkit-0.9.1 → acpkit-0.9.2}/.agents/skills/pydantic-acp/examples/README.md +0 -0
  80. {acpkit-0.9.1 → acpkit-0.9.2}/.cursorrules +0 -0
  81. {acpkit-0.9.1 → acpkit-0.9.2}/.editorconfig +0 -0
  82. {acpkit-0.9.1 → acpkit-0.9.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  83. {acpkit-0.9.1 → acpkit-0.9.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  84. {acpkit-0.9.1 → acpkit-0.9.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  85. {acpkit-0.9.1 → acpkit-0.9.2}/.github/dependabot.yml +0 -0
  86. {acpkit-0.9.1 → acpkit-0.9.2}/.github/workflows/ci.yml +0 -0
  87. {acpkit-0.9.1 → acpkit-0.9.2}/.github/workflows/codecov.yml +0 -0
  88. {acpkit-0.9.1 → acpkit-0.9.2}/.github/workflows/publish.yml +0 -0
  89. {acpkit-0.9.1 → acpkit-0.9.2}/.github/workflows/test.yml +0 -0
  90. {acpkit-0.9.1 → acpkit-0.9.2}/.gitignore +0 -0
  91. {acpkit-0.9.1 → acpkit-0.9.2}/.pre-commit-config.yaml +0 -0
  92. {acpkit-0.9.1 → acpkit-0.9.2}/.python-version +0 -0
  93. {acpkit-0.9.1 → acpkit-0.9.2}/CODE_OF_CONDUCT.md +0 -0
  94. {acpkit-0.9.1 → acpkit-0.9.2}/CONTRIBUTING.md +0 -0
  95. {acpkit-0.9.1 → acpkit-0.9.2}/LICENSE +0 -0
  96. {acpkit-0.9.1 → acpkit-0.9.2}/Makefile +0 -0
  97. {acpkit-0.9.1 → acpkit-0.9.2}/README.md +0 -0
  98. {acpkit-0.9.1 → acpkit-0.9.2}/SECURITY.md +0 -0
  99. {acpkit-0.9.1 → acpkit-0.9.2}/context7.json +0 -0
  100. {acpkit-0.9.1 → acpkit-0.9.2}/docs/.partials/index-header.html +0 -0
  101. {acpkit-0.9.1 → acpkit-0.9.2}/docs/about/index.md +0 -0
  102. {acpkit-0.9.1 → acpkit-0.9.2}/docs/acpremote.md +0 -0
  103. {acpkit-0.9.1 → acpkit-0.9.2}/docs/api/acpkit.md +0 -0
  104. {acpkit-0.9.1 → acpkit-0.9.2}/docs/api/acpremote.md +0 -0
  105. {acpkit-0.9.1 → acpkit-0.9.2}/docs/api/codex_auth_helper.md +0 -0
  106. {acpkit-0.9.1 → acpkit-0.9.2}/docs/api/langchain_acp.md +0 -0
  107. {acpkit-0.9.1 → acpkit-0.9.2}/docs/cli.md +0 -0
  108. {acpkit-0.9.1 → acpkit-0.9.2}/docs/compatibility-matrix-template.md +0 -0
  109. {acpkit-0.9.1 → acpkit-0.9.2}/docs/examples/deepagents.md +0 -0
  110. {acpkit-0.9.1 → acpkit-0.9.2}/docs/examples/dynamic-factory.md +0 -0
  111. {acpkit-0.9.1 → acpkit-0.9.2}/docs/examples/finance.md +0 -0
  112. {acpkit-0.9.1 → acpkit-0.9.2}/docs/examples/index.md +0 -0
  113. {acpkit-0.9.1 → acpkit-0.9.2}/docs/examples/langchain-codex.md +0 -0
  114. {acpkit-0.9.1 → acpkit-0.9.2}/docs/examples/langchain-workspace.md +0 -0
  115. {acpkit-0.9.1 → acpkit-0.9.2}/docs/examples/remote-hosting.md +0 -0
  116. {acpkit-0.9.1 → acpkit-0.9.2}/docs/examples/travel.md +0 -0
  117. {acpkit-0.9.1 → acpkit-0.9.2}/docs/getting-started/installation.md +0 -0
  118. {acpkit-0.9.1 → acpkit-0.9.2}/docs/getting-started/langchain-quickstart.md +0 -0
  119. {acpkit-0.9.1 → acpkit-0.9.2}/docs/getting-started/pydantic-quickstart.md +0 -0
  120. {acpkit-0.9.1 → acpkit-0.9.2}/docs/getting-started/quickstart.md +0 -0
  121. {acpkit-0.9.1 → acpkit-0.9.2}/docs/helpers.md +0 -0
  122. {acpkit-0.9.1 → acpkit-0.9.2}/docs/host-backends.md +0 -0
  123. {acpkit-0.9.1 → acpkit-0.9.2}/docs/index.md +0 -0
  124. {acpkit-0.9.1 → acpkit-0.9.2}/docs/integration-audit.md +0 -0
  125. {acpkit-0.9.1 → acpkit-0.9.2}/docs/integration-readiness.md +0 -0
  126. {acpkit-0.9.1 → acpkit-0.9.2}/docs/integration-testing.md +0 -0
  127. {acpkit-0.9.1 → acpkit-0.9.2}/docs/langchain-acp/adapter-config.md +0 -0
  128. {acpkit-0.9.1 → acpkit-0.9.2}/docs/langchain-acp/bridges.md +0 -0
  129. {acpkit-0.9.1 → acpkit-0.9.2}/docs/langchain-acp/plans-thinking-approvals.md +0 -0
  130. {acpkit-0.9.1 → acpkit-0.9.2}/docs/langchain-acp/projections.md +0 -0
  131. {acpkit-0.9.1 → acpkit-0.9.2}/docs/langchain-acp/prompt-resources.md +0 -0
  132. {acpkit-0.9.1 → acpkit-0.9.2}/docs/langchain-acp/providers.md +0 -0
  133. {acpkit-0.9.1 → acpkit-0.9.2}/docs/langchain-acp/runtime-controls.md +0 -0
  134. {acpkit-0.9.1 → acpkit-0.9.2}/docs/langchain-acp/session-state.md +0 -0
  135. {acpkit-0.9.1 → acpkit-0.9.2}/docs/langchain-acp.md +0 -0
  136. {acpkit-0.9.1 → acpkit-0.9.2}/docs/pydantic-acp/prompt-resources.md +0 -0
  137. {acpkit-0.9.1 → acpkit-0.9.2}/docs/pydantic-acp/session-state.md +0 -0
  138. {acpkit-0.9.1 → acpkit-0.9.2}/docs/stylesheets/tweaks.css +0 -0
  139. {acpkit-0.9.1 → acpkit-0.9.2}/docs/testing.md +0 -0
  140. {acpkit-0.9.1 → acpkit-0.9.2}/examples/__init__.py +0 -0
  141. {acpkit-0.9.1 → acpkit-0.9.2}/examples/langchain/.deepagents-graph/.deepagents-graph/brief.md +0 -0
  142. {acpkit-0.9.1 → acpkit-0.9.2}/examples/langchain/.deepagents-graph/brief.md +0 -0
  143. {acpkit-0.9.1 → acpkit-0.9.2}/examples/langchain/.workspace-graph/README.md +0 -0
  144. {acpkit-0.9.1 → acpkit-0.9.2}/examples/langchain/README.md +0 -0
  145. {acpkit-0.9.1 → acpkit-0.9.2}/examples/langchain/__init__.py +0 -0
  146. {acpkit-0.9.1 → acpkit-0.9.2}/examples/langchain/codex_graph.py +0 -0
  147. {acpkit-0.9.1 → acpkit-0.9.2}/examples/langchain/deepagents_graph.py +0 -0
  148. {acpkit-0.9.1 → acpkit-0.9.2}/examples/langchain/workspace_graph.py +0 -0
  149. {acpkit-0.9.1 → acpkit-0.9.2}/examples/pydantic/.gitignore +0 -0
  150. {acpkit-0.9.1 → acpkit-0.9.2}/examples/pydantic/.travel-agent/ideas.txt +0 -0
  151. {acpkit-0.9.1 → acpkit-0.9.2}/examples/pydantic/.travel-agent/itinerary.md +0 -0
  152. {acpkit-0.9.1 → acpkit-0.9.2}/examples/pydantic/README.md +0 -0
  153. {acpkit-0.9.1 → acpkit-0.9.2}/examples/pydantic/__init__.py +0 -0
  154. {acpkit-0.9.1 → acpkit-0.9.2}/examples/pydantic/finance_agent.py +0 -0
  155. {acpkit-0.9.1 → acpkit-0.9.2}/examples/pydantic/travel_agent.py +0 -0
  156. {acpkit-0.9.1 → acpkit-0.9.2}/mkdocs.yml +0 -0
  157. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/README.md +0 -0
  158. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/pyproject.toml +0 -0
  159. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/__init__.py +0 -0
  160. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/approvals.py +0 -0
  161. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/bridge_manager.py +0 -0
  162. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/bridges/__init__.py +0 -0
  163. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/bridges/base.py +0 -0
  164. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/bridges/builtin.py +0 -0
  165. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/builders/__init__.py +0 -0
  166. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/builders/graph.py +0 -0
  167. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/config.py +0 -0
  168. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/event_projection.py +0 -0
  169. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/graph_source.py +0 -0
  170. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/plan.py +0 -0
  171. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/projection.py +0 -0
  172. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/providers.py +0 -0
  173. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/py.typed +0 -0
  174. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/runtime/__init__.py +0 -0
  175. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/runtime/_native_plan_runtime.py +0 -0
  176. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/runtime/_prompt_conversion.py +0 -0
  177. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/runtime/adapter.py +0 -0
  178. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/runtime/server.py +0 -0
  179. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/serialization.py +0 -0
  180. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/session/__init__.py +0 -0
  181. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/session/state.py +0 -0
  182. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/session/store.py +0 -0
  183. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/langchain-acp/src/langchain_acp/types.py +0 -0
  184. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/README.md +0 -0
  185. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/pyproject.toml +0 -0
  186. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/_projection_risk.py +0 -0
  187. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/_projection_text.py +0 -0
  188. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/_slash_commands.py +0 -0
  189. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_source.py +0 -0
  190. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_types.py +0 -0
  191. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/awaitables.py +0 -0
  192. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/_hook_capability.py +0 -0
  193. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/base.py +0 -0
  194. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/capability_support.py +0 -0
  195. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/history_processor.py +0 -0
  196. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/hooks.py +0 -0
  197. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/mcp.py +0 -0
  198. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/prepare_tools.py +0 -0
  199. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/thinking.py +0 -0
  200. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/__init__.py +0 -0
  201. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/agent.py +0 -0
  202. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/hook_projection.py +0 -0
  203. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/host/__init__.py +0 -0
  204. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/host/_policy_commands.py +0 -0
  205. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/host/_policy_paths.py +0 -0
  206. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/host/context.py +0 -0
  207. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/host/filesystem.py +0 -0
  208. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/host/policy.py +0 -0
  209. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/host/terminal.py +0 -0
  210. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/models.py +0 -0
  211. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/projection_helpers.py +0 -0
  212. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/providers.py +0 -0
  213. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/py.typed +0 -0
  214. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/__init__.py +0 -0
  215. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_adapter_mixins.py +0 -0
  216. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_agent_state.py +0 -0
  217. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_compat.py +0 -0
  218. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_native_plan_runtime.py +0 -0
  219. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_model_runtime.py +0 -0
  220. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_runtime.py +0 -0
  221. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_lifecycle.py +0 -0
  222. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_model_runtime.py +0 -0
  223. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_runtime.py +0 -0
  224. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/bridge_manager.py +0 -0
  225. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/hook_introspection.py +0 -0
  226. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/prompts.py +0 -0
  227. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/server.py +0 -0
  228. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/serialization.py +0 -0
  229. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/session/__init__.py +0 -0
  230. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/session/state.py +0 -0
  231. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/session/store.py +0 -0
  232. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/__init__.py +0 -0
  233. {acpkit-0.9.1 → acpkit-0.9.2}/packages/adapters/pydantic-acp/src/pydantic_acp/types.py +0 -0
  234. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/.gitignore +0 -0
  235. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/LICENSE +0 -0
  236. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/README.md +0 -0
  237. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/pyproject.toml +0 -0
  238. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/__init__.py +0 -0
  239. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/__init__.py +0 -0
  240. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/config.py +0 -0
  241. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/manager.py +0 -0
  242. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/state.py +0 -0
  243. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/store.py +0 -0
  244. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/client.py +0 -0
  245. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/factory.py +0 -0
  246. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/model.py +0 -0
  247. {acpkit-0.9.1 → acpkit-0.9.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/py.typed +0 -0
  248. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/README.md +0 -0
  249. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/pyproject.toml +0 -0
  250. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/src/acpremote/__init__.py +0 -0
  251. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/src/acpremote/auth.py +0 -0
  252. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/src/acpremote/client.py +0 -0
  253. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/src/acpremote/command.py +0 -0
  254. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/src/acpremote/config.py +0 -0
  255. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/src/acpremote/limits.py +0 -0
  256. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/src/acpremote/metadata.py +0 -0
  257. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/src/acpremote/proxy_agent.py +0 -0
  258. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/src/acpremote/py.typed +0 -0
  259. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/src/acpremote/server.py +0 -0
  260. {acpkit-0.9.1 → acpkit-0.9.2}/packages/transports/acpremote/src/acpremote/stream.py +0 -0
  261. {acpkit-0.9.1 → acpkit-0.9.2}/pyproject.toml +0 -0
  262. {acpkit-0.9.1 → acpkit-0.9.2}/pyrightconfig.json +0 -0
  263. {acpkit-0.9.1 → acpkit-0.9.2}/scripts/check_pypi_versions.py +0 -0
  264. {acpkit-0.9.1 → acpkit-0.9.2}/scripts/demo_mcp_server.py +0 -0
  265. {acpkit-0.9.1 → acpkit-0.9.2}/scripts/mock_hook_audit.py +0 -0
  266. {acpkit-0.9.1 → acpkit-0.9.2}/scripts/mock_hook_snapshot.py +0 -0
  267. {acpkit-0.9.1 → acpkit-0.9.2}/scripts/run_if_major_change.py +0 -0
  268. {acpkit-0.9.1 → acpkit-0.9.2}/scripts/save_coverage_summary.py +0 -0
  269. {acpkit-0.9.1 → acpkit-0.9.2}/src/acpkit/__init__.py +0 -0
  270. {acpkit-0.9.1 → acpkit-0.9.2}/src/acpkit/__main__.py +0 -0
  271. {acpkit-0.9.1 → acpkit-0.9.2}/src/acpkit/_compatibility_schema.py +0 -0
  272. {acpkit-0.9.1 → acpkit-0.9.2}/src/acpkit/adapters.py +0 -0
  273. {acpkit-0.9.1 → acpkit-0.9.2}/src/acpkit/cli.py +0 -0
  274. {acpkit-0.9.1 → acpkit-0.9.2}/src/acpkit/compatibility.py +0 -0
  275. {acpkit-0.9.1 → acpkit-0.9.2}/src/acpkit/py.typed +0 -0
  276. {acpkit-0.9.1 → acpkit-0.9.2}/src/acpkit/runtime.py +0 -0
  277. {acpkit-0.9.1 → acpkit-0.9.2}/tests/__init__.py +0 -0
  278. {acpkit-0.9.1 → acpkit-0.9.2}/tests/acpremote/test_command_server.py +0 -0
  279. {acpkit-0.9.1 → acpkit-0.9.2}/tests/acpremote/test_helpers.py +0 -0
  280. {acpkit-0.9.1 → acpkit-0.9.2}/tests/acpremote/test_phase1.py +0 -0
  281. {acpkit-0.9.1 → acpkit-0.9.2}/tests/acpremote/test_phase2.py +0 -0
  282. {acpkit-0.9.1 → acpkit-0.9.2}/tests/acpremote/test_phase3.py +0 -0
  283. {acpkit-0.9.1 → acpkit-0.9.2}/tests/codex_auth_helper/__init__.py +0 -0
  284. {acpkit-0.9.1 → acpkit-0.9.2}/tests/codex_auth_helper/support.py +0 -0
  285. {acpkit-0.9.1 → acpkit-0.9.2}/tests/codex_auth_helper/test_auth.py +0 -0
  286. {acpkit-0.9.1 → acpkit-0.9.2}/tests/codex_auth_helper/test_factory.py +0 -0
  287. {acpkit-0.9.1 → acpkit-0.9.2}/tests/conftest.py +0 -0
  288. {acpkit-0.9.1 → acpkit-0.9.2}/tests/langchain/__init__.py +0 -0
  289. {acpkit-0.9.1 → acpkit-0.9.2}/tests/langchain/support.py +0 -0
  290. {acpkit-0.9.1 → acpkit-0.9.2}/tests/langchain/test_examples.py +0 -0
  291. {acpkit-0.9.1 → acpkit-0.9.2}/tests/langchain/test_low_level_helpers.py +0 -0
  292. {acpkit-0.9.1 → acpkit-0.9.2}/tests/langchain/test_runtime.py +0 -0
  293. {acpkit-0.9.1 → acpkit-0.9.2}/tests/langchain/test_support.py +0 -0
  294. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/__init__.py +0 -0
  295. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_adapter_helpers.py +0 -0
  296. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_bridge_builder.py +0 -0
  297. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_bridge_mcp.py +0 -0
  298. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_bridge_prepare_tools.py +0 -0
  299. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_bridge_thinking.py +0 -0
  300. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_bridge_web_capabilities.py +0 -0
  301. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_compat.py +0 -0
  302. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_examples.py +0 -0
  303. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_hook_introspection.py +0 -0
  304. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_host.py +0 -0
  305. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_host_policy.py +0 -0
  306. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_low_level_helpers.py +0 -0
  307. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_models.py +0 -0
  308. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_projection_helpers.py +0 -0
  309. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_session_runtime_helpers.py +0 -0
  310. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_sources.py +0 -0
  311. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_support.py +0 -0
  312. {acpkit-0.9.1 → acpkit-0.9.2}/tests/pydantic/test_testing_fakes.py +0 -0
  313. {acpkit-0.9.1 → acpkit-0.9.2}/tests/test_acpkit_cli.py +0 -0
  314. {acpkit-0.9.1 → acpkit-0.9.2}/tests/test_compatibility_manifest.py +0 -0
  315. {acpkit-0.9.1 → acpkit-0.9.2}/tests/test_native_langchain_agent.py +0 -0
  316. {acpkit-0.9.1 → acpkit-0.9.2}/tests/test_native_pydantic_agent.py +0 -0
@@ -67,6 +67,7 @@ What it owns:
67
67
  What it does not own:
68
68
 
69
69
  - Pydantic plan/approval/projection details
70
+ - Pydantic prompt capability, custom slash command, and external hook event details
70
71
  - LangChain graph/provider/projection details
71
72
  - WebSocket transport behavior
72
73
  - Codex auth parsing
@@ -258,7 +259,7 @@ Remote pairing examples:
258
259
  Switch to a narrower skill when:
259
260
 
260
261
  - the bug is clearly inside adapter runtime behavior
261
- - the task is about approvals, plans, projections, or host policy
262
+ - the task is about approvals, plans, prompt capabilities, custom slash commands, projections, external hook events, or host policy
262
263
  - the task is about transport or remote ownership rather than CLI or dispatch
263
264
  - the task is about Codex auth refresh or `auth.json`
264
265
 
@@ -275,5 +276,6 @@ Stay in this skill when:
275
276
  - Do not describe `acpremote` as an adapter.
276
277
  - Do not describe `codex-auth-helper` as part of target resolution.
277
278
  - 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.
279
+ - When the question is about adapter truthfulness, plans, approvals, prompt capabilities, custom
280
+ slash commands, projections, external hook events, host ownership, or provider behavior, move to
281
+ the narrower package skill.
@@ -2,9 +2,9 @@
2
2
 
3
3
  ACP Kit is the adapter toolkit and monorepo for turning an existing agent surface into a truthful ACP server boundary.
4
4
 
5
- Today the stable production focus is `pydantic-acp`: exposing `pydantic_ai.Agent` through 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
- Additional adapters such as `langchain-acp` and `dspy-acp` are planned after `pydantic-acp` reaches 1.0 stability.
5
+ Today the repo ships production-grade adapters for both `pydantic-acp` and `langchain-acp`.
6
+ `pydantic-acp` remains the richest reference implementation for ACP-native models, modes, plans,
7
+ approvals, MCP metadata, host tools, projection, and session state.
8
8
 
9
9
  This intro is intentionally short. The canonical deep references should come from the published docs set, not from a second parallel skill-specific spec.
10
10
 
@@ -21,7 +21,8 @@ The central contract is:
21
21
 
22
22
  > expose ACP state only when the underlying runtime can actually honor it.
23
23
 
24
- That rule drives model selection, mode switching, slash commands, native plan state, approval flow, MCP metadata, and host-backed tooling.
24
+ That rule drives model selection, mode switching, slash commands, prompt capabilities, native plan
25
+ state, approval flow, MCP metadata, external hook events, projection, and host-backed tooling.
25
26
 
26
27
  ## Start With The Real Docs
27
28
 
@@ -32,13 +33,14 @@ Use these published docs pages as the primary references:
32
33
  | Product overview and package map | [ACP Kit Overview](https://vcoderun.github.io/acpkit/) |
33
34
  | Construction seams and adapter overview | [Pydantic ACP Overview](https://vcoderun.github.io/acpkit/pydantic-acp/) |
34
35
  | Runtime config and session ownership | [AdapterConfig](https://vcoderun.github.io/acpkit/pydantic-acp/adapter-config/) |
35
- | Models, modes, slash commands, thinking | [Models, Modes, and Slash Commands](https://vcoderun.github.io/acpkit/pydantic-acp/runtime-controls/) |
36
- | Plans, approvals, and cancellation | [Plans, Thinking, and Approvals](https://vcoderun.github.io/acpkit/pydantic-acp/plans-thinking-approvals/) |
36
+ | Models, modes, custom slash commands, thinking | [Models, Modes, and Slash Commands](https://vcoderun.github.io/acpkit/pydantic-acp/runtime-controls/) |
37
+ | Plans, approvals, permission presentation, and cancellation | [Plans, Thinking, and Approvals](https://vcoderun.github.io/acpkit/pydantic-acp/plans-thinking-approvals/) |
37
38
  | Host-owned state patterns | [Providers](https://vcoderun.github.io/acpkit/providers/) |
38
- | ACP-visible extension seams | [Bridges](https://vcoderun.github.io/acpkit/bridges/) |
39
- | Host-backed tools and projections | [Host Backends and Projections](https://vcoderun.github.io/acpkit/host-backends/) |
39
+ | ACP-visible extension seams and external hook events | [Bridges](https://vcoderun.github.io/acpkit/bridges/) |
40
+ | Host-backed tools, search/list projection, and classification | [Host Backends and Projections](https://vcoderun.github.io/acpkit/host-backends/) |
40
41
  | Maintained example ladder | [Examples Overview](https://vcoderun.github.io/acpkit/examples/) |
41
- | Production showcase | [Workspace Agent](https://vcoderun.github.io/acpkit/examples/workspace-agent/) |
42
+ | Pydantic production showcase | [Finance Agent](https://vcoderun.github.io/acpkit/examples/finance/) |
43
+ | LangChain production showcase | [LangChain Workspace Graph](https://vcoderun.github.io/acpkit/examples/langchain-workspace/) |
42
44
  | API surface | [pydantic_acp API](https://vcoderun.github.io/acpkit/api/pydantic_acp/) |
43
45
 
44
46
  ## Construction Seams To Reach For
@@ -61,19 +63,76 @@ Use these seams intentionally:
61
63
  - `FileSessionStore` is the hardened local durable store: atomic replace writes, local locking, malformed-session tolerance, and stale temp cleanup; it is not a distributed multi-writer backend
62
64
  - slash mode commands are dynamic; `ask`, `plan`, and `agent` are examples, not built-in global names
63
65
  - mode ids must not collide with reserved slash command names like `model`, `thinking`, `tools`, `hooks`, or `mcp-servers`
66
+ - custom slash commands come from `SlashCommandProvider` or `StaticSlashCommandProvider`, and
67
+ must not collide with built-in commands or mode names
68
+ - `AdapterConfig.prompt_capabilities` controls what prompt input families are advertised; do not
69
+ advertise image, audio, or embedded context unless the runtime can honor them
64
70
  - only one `PrepareToolsMode(..., plan_mode=True)` is allowed
65
71
  - `plan_tools=True` is how a non-plan execution mode keeps plan progress tools visible
66
72
  - `/thinking` only exists when `ThinkingBridge()` is configured
67
73
  - native ACP plan state and `PlanProvider` are separate ownership paths
74
+ - permission card rendering is `NativeApprovalBridge.tool_call_builder`, not an `AdapterConfig`
75
+ field
76
+ - `ApprovalBridge` stays compatible with the legacy no-`projection_map` signature; use
77
+ `ProjectionAwareApprovalBridge` only when the bridge explicitly accepts projected context
78
+ - remembered approval policy is live runtime state owned by `ApprovalPolicyStore`, while
79
+ `ApprovalStateProvider` is metadata-only
68
80
  - `HookBridge(hide_all=True)` suppresses hook listing output, not the underlying hook capability itself
81
+ - `ExternalHookEventBridge` is for integrations that already own lifecycle events and want them
82
+ buffered into ACP updates
69
83
  - custom `run_event_stream` hooks and wrappers must return an async iterable, not a coroutine
70
84
  - `HostAccessPolicy` is the native typed guardrail surface for host-backed file and terminal access
85
+ - `FileSystemProjectionMap` search/list tree rendering is opt-in and based only on tool output;
86
+ it must not read the filesystem
87
+ - `ProjectionAwareToolClassifier` classifies only configured projection tool names and delegates
88
+ unknown tools to the base classifier
71
89
  - `BlackBoxHarness` is the reusable black-box ACP boundary test helper for downstream integrations
72
90
  - projection helper primitives handle diff previews, truncation, command summaries, and guardrail-aware caution text without each integration rebuilding that shaping logic
73
91
  - the compatibility manifest schema gives integrations one typed, reviewable declaration of which ACP surfaces are implemented, partial, intentionally not used, or planned
74
92
 
75
93
  ## New Native Surfaces
76
94
 
95
+ ### PromptCapabilities, SlashCommandProvider, And StaticSlashCommandProvider
96
+
97
+ Reach for `AdapterConfig.prompt_capabilities` when the runtime's prompt input support differs from
98
+ the defaults. Use `SlashCommandProvider` or `StaticSlashCommandProvider` when a product integration
99
+ needs commands beyond the built-in model, mode, config, thinking, tools, hooks, and MCP surfaces.
100
+
101
+ Custom command handlers can return transcript updates, text, or a handled/fallthrough decision. The
102
+ default result refreshes the session surface so visible commands and related state stay synchronized.
103
+
104
+ Read next:
105
+
106
+ - https://vcoderun.github.io/acpkit/pydantic-acp/runtime-controls/
107
+ - https://vcoderun.github.io/acpkit/pydantic-acp/adapter-config/
108
+
109
+ ### ApprovalPolicyStore And PermissionToolCallBuilder
110
+
111
+ Reach for `ApprovalPolicyStore` when remembered approval policy needs to live somewhere other than
112
+ session metadata. Reach for `PermissionToolCallBuilder` when native approvals should render custom
113
+ permission cards while keeping the ACP approval lifecycle unchanged.
114
+
115
+ Keep the builder on `NativeApprovalBridge.tool_call_builder`. If a custom approval bridge needs
116
+ projected file or command context, implement `ProjectionAwareApprovalBridge` rather than widening the
117
+ legacy `ApprovalBridge` protocol.
118
+
119
+ Read next:
120
+
121
+ - https://vcoderun.github.io/acpkit/pydantic-acp/plans-thinking-approvals/
122
+ - https://vcoderun.github.io/acpkit/providers/
123
+
124
+ ### ExternalHookEventBridge And ProjectionAwareToolClassifier
125
+
126
+ Reach for `ExternalHookEventBridge` when hook-like lifecycle events come from an external runtime and
127
+ should appear through the normal buffered bridge update path. Reach for
128
+ `ProjectionAwareToolClassifier` when configured projection maps should also drive ACP tool-kind
129
+ classification for reads, writes, bash, and search tools.
130
+
131
+ Read next:
132
+
133
+ - https://vcoderun.github.io/acpkit/bridges/
134
+ - https://vcoderun.github.io/acpkit/host-backends/
135
+
77
136
  ### HostAccessPolicy
78
137
 
79
138
  Reach for `HostAccessPolicy` when an integration needs one reusable, typed place to evaluate file and command risk.
@@ -162,10 +221,13 @@ Read next:
162
221
 
163
222
  ## Reference Files In This Skill
164
223
 
165
- These skill-local references are only routing aids back into the docs:
224
+ These skill-local references are only routing aids back into the docs and source tree:
166
225
 
167
- - `references/package-surface.md`
168
- - `references/runtime-capabilities.md`
169
- - `references/docs-examples-map.md`
226
+ - `SKILL.md`
227
+ - `resources/intro.md`
228
+ - `examples/README.md`
229
+ - `scripts/list_examples.py`
230
+ - `scripts/list_public_exports.py`
170
231
 
171
- Use them to find the right docs page quickly, not as independent source-of-truth specs.
232
+ Use them to find the right docs page or package surface quickly, not as independent source-of-truth
233
+ specs.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: "pydantic-acp"
3
- description: "Use for `pydantic-acp` tasks: exposing `pydantic_ai.Agent` through ACP, adapter config/runtime ownership, approvals, plans, hooks, projections, host-backed tools, and Pydantic-specific examples."
3
+ description: "Use for `pydantic-acp` tasks: exposing `pydantic_ai.Agent` through ACP, adapter config/runtime ownership, prompt capabilities, slash commands, approvals, plans, hooks, projections, host-backed tools, and Pydantic-specific examples."
4
4
  ---
5
5
 
6
6
  # pydantic-acp Skill
@@ -16,11 +16,14 @@ In this package that rule affects:
16
16
  - model selection
17
17
  - mode switching
18
18
  - config options
19
+ - prompt capability advertisement
19
20
  - ACP-native plans
20
21
  - approval flows
21
22
  - host-backed files and terminal access
22
23
  - tool projection
23
24
  - hook visibility
25
+ - external hook event projection
26
+ - custom slash commands
24
27
  - session replay
25
28
 
26
29
  ## Start Here
@@ -30,18 +33,20 @@ If you only need the shortest high-signal path:
30
33
  1. read `Quick Routing`
31
34
  2. open the [adapter config module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/config.py) and the [package entrypoint](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py) for public-surface questions
32
35
  3. open the [runtime adapter](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py) for lifecycle and dispatch questions
33
- 4. then branch into approvals, projections, host, or plans
36
+ 4. then branch into approvals, projections, host, plans, slash commands, or prompt capabilities
34
37
 
35
38
  ## Quick Routing
36
39
 
37
40
  | If the task is about... | Use this skill? | Open first |
38
41
  | --- | --- | --- |
39
42
  | `run_acp(agent=...)` or `create_acp_agent(...)` | Yes | [package entrypoint](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py), [adapter config module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/config.py), [runtime adapter](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py) |
40
- | approvals or remembered policy | Yes | [approvals module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/approvals.py), [prompt-execution runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_execution.py) |
43
+ | approvals, permission presentation, or remembered policy | Yes | [approvals module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/approvals.py), [approval store module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/approval_store.py), [permission presentation module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/permission_presentation.py), [prompt-execution runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_execution.py) |
41
44
  | plans or plan generation | Yes | [prepare-tools bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/prepare_tools.py), [native plan runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_native_plan_runtime.py), [models module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/models.py) |
42
45
  | filesystem / terminal ownership | Yes | [host context module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/host/context.py), [filesystem host backend](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/host/filesystem.py), [terminal host backend](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/host/terminal.py), [host policy module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/host/policy.py) |
43
- | hook visibility or hook projection | Yes | [hooks bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/hooks.py), [hook-introspection runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/hook_introspection.py), [hook projection module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/hook_projection.py) |
44
- | slash commands / model / mode surface | Yes | [slash-commands runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/slash_commands.py), [providers module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/providers.py), [models module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/models.py) |
46
+ | hook visibility or external hook projection | Yes | [hooks bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/hooks.py), [external hooks bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/external_hooks.py), [hook-introspection runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/hook_introspection.py), [hook projection module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/hook_projection.py) |
47
+ | slash commands / model / mode surface | Yes | [custom slash command module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/slash.py), [slash-commands runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/slash_commands.py), [adapter-prompt runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_adapter_prompt.py), [providers module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/providers.py) |
48
+ | prompt capabilities or multimodal input flags | Yes | [prompt capabilities module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/prompt_capabilities.py), [adapter config module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/config.py), [prompt/resources docs](https://github.com/vcoderun/acpkit/blob/main/docs/pydantic-acp/prompt-resources.md) |
49
+ | filesystem search/list projection or tool classification | Yes | [projection module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/projection.py), [host backends docs](https://github.com/vcoderun/acpkit/blob/main/docs/host-backends.md), [projection cookbook](https://github.com/vcoderun/acpkit/blob/main/docs/projection-cookbook.md) |
45
50
  | Codex auth refresh or `auth.json` | No, pair with `codex-auth-helper` | [Codex helper package](https://github.com/vcoderun/acpkit/tree/main/packages/helpers/codex-auth-helper) |
46
51
  | remote hosting or WebSocket transport | No, pair with `acpremote` | [remote transport package](https://github.com/vcoderun/acpkit/tree/main/packages/transports/acpremote) |
47
52
 
@@ -56,6 +61,8 @@ It owns:
56
61
  - ACP-native plan state and plan updates
57
62
  - approval lifecycle and remembered approval policies
58
63
  - hook introspection and hook projection
64
+ - external hook event buffering
65
+ - custom slash command discovery and handling
59
66
  - host-backed filesystem and terminal ownership
60
67
  - tool projection maps
61
68
  - session store semantics and transcript replay
@@ -83,7 +90,10 @@ Package references:
83
90
  - [Raw overview docs](https://raw.githubusercontent.com/vcoderun/acpkit/main/docs/pydantic-acp.md)
84
91
  - [Raw host backends docs](https://raw.githubusercontent.com/vcoderun/acpkit/main/docs/host-backends.md)
85
92
  - [Raw projection cookbook](https://raw.githubusercontent.com/vcoderun/acpkit/main/docs/projection-cookbook.md)
93
+ - [Raw runtime controls docs](https://raw.githubusercontent.com/vcoderun/acpkit/main/docs/pydantic-acp/runtime-controls.md)
94
+ - [Raw plans, thinking, and approvals docs](https://raw.githubusercontent.com/vcoderun/acpkit/main/docs/pydantic-acp/plans-thinking-approvals.md)
86
95
  - [Raw prompt/resources docs](https://raw.githubusercontent.com/vcoderun/acpkit/main/docs/pydantic-acp/prompt-resources.md)
96
+ - [Raw API docs](https://raw.githubusercontent.com/vcoderun/acpkit/main/docs/api/pydantic_acp.md)
87
97
  - [Rendered overview](https://vcoderun.github.io/acpkit/pydantic-acp/)
88
98
  - [Source tree](https://github.com/vcoderun/acpkit/tree/main/packages/adapters/pydantic-acp)
89
99
 
@@ -102,7 +112,14 @@ High-value public seams:
102
112
  - `AdapterConfig(...)`
103
113
  - `MemorySessionStore`
104
114
  - `FileSessionStore`
115
+ - `AdapterPromptCapabilities`
105
116
  - `NativeApprovalBridge`
117
+ - `PermissionToolCallBuilder`
118
+ - `ApprovalPolicyStore`
119
+ - `SlashCommandProvider`
120
+ - `StaticSlashCommandProvider`
121
+ - `ExternalHookEventBridge`
122
+ - `ProjectionAwareToolClassifier`
106
123
  - `ClientHostContext`
107
124
  - `CompatibilityManifest`
108
125
  - `BlackBoxHarness`
@@ -115,9 +132,9 @@ Package entrypoint:
115
132
 
116
133
  | Subsystem | Key files | Use them for |
117
134
  | --- | --- | --- |
118
- | public surface and construction | [package entrypoint](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py), [adapter config module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/config.py), [agent source module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/agent_source.py), [agent type definitions](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/agent_types.py), [models module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/models.py), [providers module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/providers.py) | public API shape, construction seams, provider contracts |
119
- | approvals | [approvals module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/approvals.py), [prompt-execution runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_execution.py), [prompt runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_runtime.py) | deferred approvals, remembered policy, permission flow |
120
- | bridges | [base bridge module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/base.py), [capability-support bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/capability_support.py), [history-processor bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/history_processor.py), [hooks bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/hooks.py), [MCP bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/mcp.py), [prepare-tools bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/prepare_tools.py), [thinking bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/thinking.py) | optional capability wiring and extension seams |
135
+ | public surface and construction | [package entrypoint](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py), [adapter config module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/config.py), [prompt capabilities module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/prompt_capabilities.py), [agent source module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/agent_source.py), [agent type definitions](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/agent_types.py), [models module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/models.py), [providers module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/providers.py) | public API shape, construction seams, prompt capability flags, provider contracts |
136
+ | approvals | [approvals module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/approvals.py), [approval store module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/approval_store.py), [permission presentation module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/permission_presentation.py), [prompt-execution runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_execution.py), [prompt runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_runtime.py) | deferred approvals, remembered policy, permission cards, projection-aware approval context |
137
+ | bridges | [base bridge module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/base.py), [capability-support bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/capability_support.py), [external hooks bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/external_hooks.py), [history-processor bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/history_processor.py), [hooks bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/hooks.py), [MCP bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/mcp.py), [prepare-tools bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/prepare_tools.py), [thinking bridge](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/thinking.py) | optional capability wiring, external event projection, and extension seams |
121
138
  | projection | [projection module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/projection.py), [projection helper module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/projection_helpers.py), [projection text helpers](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/_projection_text.py), [projection risk helpers](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/_projection_risk.py), [hook projection module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/hook_projection.py) | ACP-visible transcript cards and rendering |
122
139
  | host ownership | [host context module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/host/context.py), [filesystem host backend](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/host/filesystem.py), [terminal host backend](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/host/terminal.py), [host policy module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/host/policy.py), [path policy helpers](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/host/_policy_paths.py), [command policy helpers](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/host/_policy_commands.py) | path safety, command safety, client-backed host behavior |
123
140
  | runtime core | [runtime adapter](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py), [runtime server](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/server.py), [bridge manager](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/bridge_manager.py), [hook-introspection runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/hook_introspection.py), [session surface module](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/session_surface.py), [slash-commands runtime](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/slash_commands.py) | adapter lifecycle, runtime update emission, slash command behavior |
@@ -174,6 +191,7 @@ It supports:
174
191
  - config options
175
192
  - ACP-native plans
176
193
  - tool-based or structured plan generation
194
+ - custom slash command providers
177
195
  - session replay and fork/resume/load/close/list lifecycle
178
196
  - slash command discovery and rendering
179
197
 
@@ -196,6 +214,7 @@ High-value bridges include:
196
214
  - `McpCapabilityBridge`
197
215
  - `ToolsetBridge`
198
216
  - `PrefixToolsBridge`
217
+ - `ExternalHookEventBridge`
199
218
  - `OpenAICompactionBridge`
200
219
  - `AnthropicCompactionBridge`
201
220
 
@@ -206,11 +225,14 @@ High-value projection families include:
206
225
  - `BuiltinToolProjectionMap`
207
226
  - `HookProjectionMap`
208
227
  - `CompositeProjectionMap`
228
+ - `ProjectionAwareToolClassifier`
209
229
 
210
230
  Important rule:
211
231
 
212
232
  - bridges affect runtime behavior and metadata
213
233
  - projection maps affect ACP-visible transcript rendering
234
+ - `FileSystemProjectionMap` search/list tree rendering is opt-in and never reads the filesystem
235
+ - `ProjectionAwareToolClassifier` classifies only configured tool names and delegates unknown tools
214
236
 
215
237
  Split those concerns before editing.
216
238
 
@@ -238,6 +260,7 @@ Use this skill when the task is about:
238
260
  This package also owns the more subtle Pydantic-specific surfaces:
239
261
 
240
262
  - prompt-to-input conversion
263
+ - prompt capability advertisement through `AdapterPromptCapabilities`
241
264
  - prompt-model override providers
242
265
  - media-aware model routing
243
266
  - transcript-to-history rebuilding
@@ -330,4 +353,11 @@ Stay in this skill when the main issue is:
330
353
  - Do not route LangChain or DeepAgents questions through this skill.
331
354
  - Do not answer Codex auth refresh questions from here unless the adapter integration itself is
332
355
  the point.
356
+ - Do not add `permission_tool_call_builder` to `AdapterConfig`; permission rendering belongs on
357
+ `NativeApprovalBridge.tool_call_builder`.
358
+ - Keep `ApprovalBridge` compatible with the legacy no-`projection_map` signature. Use
359
+ `ProjectionAwareApprovalBridge` only for bridges that explicitly accept projected context.
360
+ - Do not make custom slash commands collide with built-in commands or mode names.
361
+ - Treat `ExternalHookEventBridge.metadata_key=None` as the way to suppress bridge metadata
362
+ publication.
333
363
  - If the task is really about remote transport, move to `acpremote`.
@@ -2,7 +2,7 @@ name: Docs
2
2
 
3
3
  on:
4
4
  push:
5
- branches: [ "main" ]
5
+ branches: ["main", "acpkit_v1"]
6
6
  workflow_dispatch:
7
7
 
8
8
  permissions:
acpkit-0.9.2/COVERAGE ADDED
@@ -0,0 +1,2 @@
1
+ Line coverage: 100.00% (8145 / 8145)
2
+ Branch coverage: 100.00% (2702 / 2702)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: acpkit
3
- Version: 0.9.1
3
+ Version: 0.9.2
4
4
  Summary: ACP Kit provides a common adapter for Agent Frameworks.
5
5
  Project-URL: Homepage, https://vcoderun.github.io/acpkit/
6
6
  Project-URL: Issues, https://github.com/vcoderun/acpkit/issues
acpkit-0.9.2/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.9.2
@@ -16,6 +16,8 @@ This page documents the public surface re-exported by `pydantic_acp`.
16
16
 
17
17
  ::: pydantic_acp.AdapterModel
18
18
 
19
+ ::: pydantic_acp.AdapterPromptCapabilities
20
+
19
21
  ::: pydantic_acp.AcpSessionContext
20
22
 
21
23
  ::: pydantic_acp.JsonValue
@@ -58,6 +60,14 @@ This page documents the public surface re-exported by `pydantic_acp`.
58
60
 
59
61
  ::: pydantic_acp.ApprovalStateProvider
60
62
 
63
+ ::: pydantic_acp.ApprovalPolicy
64
+
65
+ ::: pydantic_acp.ApprovalPolicyStore
66
+
67
+ ::: pydantic_acp.SessionMetadataApprovalPolicyStore
68
+
69
+ ::: pydantic_acp.PermissionOptionSet
70
+
61
71
  ## Bridge Classes
62
72
 
63
73
  ::: pydantic_acp.CapabilityBridge
@@ -72,6 +82,10 @@ This page documents the public surface re-exported by `pydantic_acp`.
72
82
 
73
83
  ::: pydantic_acp.HookBridge
74
84
 
85
+ ::: pydantic_acp.ExternalHookEventBridge
86
+
87
+ ::: pydantic_acp.EventEmissionMode
88
+
75
89
  ::: pydantic_acp.HistoryProcessorBridge
76
90
 
77
91
  ::: pydantic_acp.ThreadExecutorBridge
@@ -118,6 +132,36 @@ This page documents the public surface re-exported by `pydantic_acp`.
118
132
 
119
133
  ::: pydantic_acp.CompositeProjectionMap
120
134
 
135
+ ::: pydantic_acp.ProjectionAwareToolClassifier
136
+
137
+ ## Approval Presentation
138
+
139
+ ::: pydantic_acp.PermissionRequestContext
140
+
141
+ ::: pydantic_acp.PermissionToolCallBuilder
142
+
143
+ ::: pydantic_acp.DefaultPermissionToolCallBuilder
144
+
145
+ ::: pydantic_acp.NativeApprovalBridge
146
+
147
+ ::: pydantic_acp.ProjectionAwareApprovalBridge
148
+
149
+ ::: pydantic_acp.supports_projection_aware_approval_bridge
150
+
151
+ ## Slash Commands
152
+
153
+ ::: pydantic_acp.SlashCommandRequest
154
+
155
+ ::: pydantic_acp.SlashCommandResult
156
+
157
+ ::: pydantic_acp.SlashCommandProvider
158
+
159
+ ::: pydantic_acp.StaticSlashCommand
160
+
161
+ ::: pydantic_acp.StaticSlashCommandProvider
162
+
163
+ ::: pydantic_acp.SlashCommandHandler
164
+
121
165
  ## Projection Helpers
122
166
 
123
167
  ::: pydantic_acp.truncate_text
@@ -37,6 +37,29 @@ Use plain `CapabilityBridge` when you only need to:
37
37
 
38
38
  Use `BufferedCapabilityBridge` when the bridge also needs to emit ACP transcript updates over time.
39
39
 
40
+ ## External Hook Events
41
+
42
+ Use `ExternalHookEventBridge` when an integration already knows about lifecycle events and wants to project them into ACP without installing Pydantic AI hooks or writing directly to the ACP client.
43
+
44
+ ```python
45
+ from pydantic_acp import ExternalHookEventBridge, HookEvent
46
+
47
+ bridge = ExternalHookEventBridge()
48
+ bridge.record_event(
49
+ session,
50
+ HookEvent(
51
+ event_id="before_run",
52
+ hook_name="before_run",
53
+ tool_name=None,
54
+ tool_filters=(),
55
+ raw_output="completed",
56
+ status="completed",
57
+ ),
58
+ )
59
+ ```
60
+
61
+ The bridge buffers updates and the adapter drains them through the normal bridge manager. Its session metadata appears under `external_hooks` by default and includes emission mode, pending event count, hidden event ids, and projection title prefix.
62
+
40
63
  ### Override Matrix
41
64
 
42
65
  | Method | Override it when | Return value |