acpkit 0.9.2__tar.gz → 0.9.4__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 (325) hide show
  1. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/resources/intro.md +4 -0
  2. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/pydantic-acp/SKILL.md +24 -1
  3. {acpkit-0.9.2 → acpkit-0.9.4}/.gitignore +3 -3
  4. acpkit-0.9.4/COVERAGE +2 -0
  5. {acpkit-0.9.2 → acpkit-0.9.4}/PKG-INFO +24 -19
  6. acpkit-0.9.4/VERSION +1 -0
  7. {acpkit-0.9.2 → acpkit-0.9.4}/docs/api/pydantic_acp.md +4 -0
  8. {acpkit-0.9.2 → acpkit-0.9.4}/docs/bridges.md +17 -0
  9. {acpkit-0.9.2 → acpkit-0.9.4}/docs/langchain-acp.md +63 -1
  10. {acpkit-0.9.2 → acpkit-0.9.4}/docs/llms-full.txt +95 -8
  11. {acpkit-0.9.2 → acpkit-0.9.4}/docs/pydantic-acp.md +11 -7
  12. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/README.md +62 -0
  13. acpkit-0.9.4/packages/adapters/langchain-acp/VERSION +1 -0
  14. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/pyproject.toml +1 -0
  15. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/__init__.py +52 -1
  16. acpkit-0.9.4/packages/adapters/langchain-acp/src/langchain_acp/_slash_commands.py +46 -0
  17. {acpkit-0.9.2/packages/adapters/pydantic-acp/src/pydantic_acp → acpkit-0.9.4/packages/adapters/langchain-acp/src/langchain_acp}/_version.py +1 -1
  18. acpkit-0.9.4/packages/adapters/langchain-acp/src/langchain_acp/approvals.py +208 -0
  19. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/bridges/__init__.py +3 -0
  20. acpkit-0.9.4/packages/adapters/langchain-acp/src/langchain_acp/bridges/external_hooks.py +58 -0
  21. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/config.py +6 -0
  22. acpkit-0.9.4/packages/adapters/langchain-acp/src/langchain_acp/hook_projection.py +78 -0
  23. acpkit-0.9.4/packages/adapters/langchain-acp/src/langchain_acp/permission_presentation.py +68 -0
  24. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/projection.py +169 -8
  25. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/runtime/adapter.py +236 -11
  26. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/runtime/server.py +4 -49
  27. acpkit-0.9.4/packages/adapters/langchain-acp/src/langchain_acp/runtime/slash_commands.py +327 -0
  28. acpkit-0.9.4/packages/adapters/langchain-acp/src/langchain_acp/slash.py +83 -0
  29. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/README.md +2 -2
  30. acpkit-0.9.4/packages/adapters/pydantic-acp/VERSION +1 -0
  31. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/pyproject.toml +2 -1
  32. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py +4 -0
  33. {acpkit-0.9.2/packages/helpers/codex-auth-helper/src/codex_auth_helper → acpkit-0.9.4/packages/adapters/pydantic-acp/src/pydantic_acp}/_version.py +1 -1
  34. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_source.py +2 -6
  35. acpkit-0.9.4/packages/adapters/pydantic-acp/src/pydantic_acp/approval_store.py +89 -0
  36. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/awaitables.py +2 -2
  37. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/__init__.py +9 -1
  38. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/_hook_capability.py +248 -1
  39. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/capability_support.py +1 -2
  40. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/hooks.py +20 -0
  41. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/prepare_tools.py +144 -2
  42. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/hook_projection.py +18 -0
  43. acpkit-0.9.4/packages/adapters/pydantic-acp/src/pydantic_acp/prompt_capabilities.py +12 -0
  44. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_adapter_mixins.py +2 -0
  45. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_execution.py +32 -1
  46. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_runtime.py +3 -0
  47. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/hook_introspection.py +5 -0
  48. acpkit-0.9.4/packages/helpers/codex-auth-helper/VERSION +1 -0
  49. {acpkit-0.9.2/packages/transports/acpremote/src/acpremote → acpkit-0.9.4/packages/helpers/codex-auth-helper/src/codex_auth_helper}/_version.py +1 -1
  50. acpkit-0.9.4/packages/transports/acpremote/VERSION +1 -0
  51. {acpkit-0.9.2/packages/adapters/langchain-acp/src/langchain_acp → acpkit-0.9.4/packages/transports/acpremote/src/acpremote}/_version.py +1 -1
  52. {acpkit-0.9.2 → acpkit-0.9.4}/pyproject.toml +2 -7
  53. {acpkit-0.9.2 → acpkit-0.9.4}/pyrightconfig.json +1 -0
  54. acpkit-0.9.4/src/acpkit/_version.py +5 -0
  55. {acpkit-0.9.2 → acpkit-0.9.4}/tests/langchain/test_low_level_helpers.py +735 -2
  56. {acpkit-0.9.2 → acpkit-0.9.4}/tests/langchain/test_runtime.py +114 -2
  57. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/support.py +4 -0
  58. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_adapter_helpers.py +3 -0
  59. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_bridge_builder.py +10 -0
  60. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_bridge_capability_support.py +20 -23
  61. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_bridge_hooks.py +280 -0
  62. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_bridge_prepare_tools.py +143 -0
  63. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_hook_introspection.py +12 -0
  64. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_slash_commands.py +87 -14
  65. acpkit-0.9.2/COVERAGE +0 -2
  66. acpkit-0.9.2/VERSION +0 -1
  67. acpkit-0.9.2/examples/langchain/.deepagents-graph/.deepagents-graph/brief.md +0 -3
  68. acpkit-0.9.2/examples/langchain/.deepagents-graph/brief.md +0 -3
  69. acpkit-0.9.2/examples/langchain/.workspace-graph/README.md +0 -3
  70. acpkit-0.9.2/packages/adapters/langchain-acp/VERSION +0 -1
  71. acpkit-0.9.2/packages/adapters/langchain-acp/src/langchain_acp/approvals.py +0 -106
  72. acpkit-0.9.2/packages/adapters/pydantic-acp/VERSION +0 -1
  73. acpkit-0.9.2/packages/helpers/codex-auth-helper/VERSION +0 -1
  74. acpkit-0.9.2/packages/transports/acpremote/VERSION +0 -1
  75. acpkit-0.9.2/src/acpkit/_version.py +0 -5
  76. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/SKILL.md +0 -0
  77. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/agents/openai.yaml +0 -0
  78. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/examples/README.md +0 -0
  79. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/scripts/list_examples.py +0 -0
  80. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/scripts/list_public_exports.py +0 -0
  81. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/acpremote/SKILL.md +0 -0
  82. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/acpremote/agents/openai.yaml +0 -0
  83. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/acpremote/examples/README.md +0 -0
  84. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/acpremote/examples/mirror_remote.py +0 -0
  85. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/acpremote/examples/serve_command.py +0 -0
  86. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/codex-auth-helper/SKILL.md +0 -0
  87. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/codex-auth-helper/agents/openai.yaml +0 -0
  88. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/codex-auth-helper/examples/README.md +0 -0
  89. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/codex-auth-helper/examples/codex_chat_openai_graph.py +0 -0
  90. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/codex-auth-helper/examples/codex_responses_agent.py +0 -0
  91. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/langchain-acp/SKILL.md +0 -0
  92. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/langchain-acp/agents/openai.yaml +0 -0
  93. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/langchain-acp/examples/README.md +0 -0
  94. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/pydantic-acp/agents/openai.yaml +0 -0
  95. {acpkit-0.9.2 → acpkit-0.9.4}/.agents/skills/pydantic-acp/examples/README.md +0 -0
  96. {acpkit-0.9.2 → acpkit-0.9.4}/.cursorrules +0 -0
  97. {acpkit-0.9.2 → acpkit-0.9.4}/.editorconfig +0 -0
  98. {acpkit-0.9.2 → acpkit-0.9.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  99. {acpkit-0.9.2 → acpkit-0.9.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  100. {acpkit-0.9.2 → acpkit-0.9.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  101. {acpkit-0.9.2 → acpkit-0.9.4}/.github/dependabot.yml +0 -0
  102. {acpkit-0.9.2 → acpkit-0.9.4}/.github/workflows/ci.yml +0 -0
  103. {acpkit-0.9.2 → acpkit-0.9.4}/.github/workflows/codecov.yml +0 -0
  104. {acpkit-0.9.2 → acpkit-0.9.4}/.github/workflows/docs.yml +0 -0
  105. {acpkit-0.9.2 → acpkit-0.9.4}/.github/workflows/publish.yml +0 -0
  106. {acpkit-0.9.2 → acpkit-0.9.4}/.github/workflows/test.yml +0 -0
  107. {acpkit-0.9.2 → acpkit-0.9.4}/.pre-commit-config.yaml +0 -0
  108. {acpkit-0.9.2 → acpkit-0.9.4}/.python-version +0 -0
  109. {acpkit-0.9.2 → acpkit-0.9.4}/CODE_OF_CONDUCT.md +0 -0
  110. {acpkit-0.9.2 → acpkit-0.9.4}/CONTRIBUTING.md +0 -0
  111. {acpkit-0.9.2 → acpkit-0.9.4}/LICENSE +0 -0
  112. {acpkit-0.9.2 → acpkit-0.9.4}/Makefile +0 -0
  113. {acpkit-0.9.2 → acpkit-0.9.4}/README.md +0 -0
  114. {acpkit-0.9.2 → acpkit-0.9.4}/SECURITY.md +0 -0
  115. {acpkit-0.9.2 → acpkit-0.9.4}/context7.json +0 -0
  116. {acpkit-0.9.2 → acpkit-0.9.4}/docs/.partials/index-header.html +0 -0
  117. {acpkit-0.9.2 → acpkit-0.9.4}/docs/about/index.md +0 -0
  118. {acpkit-0.9.2 → acpkit-0.9.4}/docs/acpremote.md +0 -0
  119. {acpkit-0.9.2 → acpkit-0.9.4}/docs/api/acpkit.md +0 -0
  120. {acpkit-0.9.2 → acpkit-0.9.4}/docs/api/acpremote.md +0 -0
  121. {acpkit-0.9.2 → acpkit-0.9.4}/docs/api/codex_auth_helper.md +0 -0
  122. {acpkit-0.9.2 → acpkit-0.9.4}/docs/api/langchain_acp.md +0 -0
  123. {acpkit-0.9.2 → acpkit-0.9.4}/docs/cli.md +0 -0
  124. {acpkit-0.9.2 → acpkit-0.9.4}/docs/compatibility-matrix-template.md +0 -0
  125. {acpkit-0.9.2 → acpkit-0.9.4}/docs/examples/deepagents.md +0 -0
  126. {acpkit-0.9.2 → acpkit-0.9.4}/docs/examples/dynamic-factory.md +0 -0
  127. {acpkit-0.9.2 → acpkit-0.9.4}/docs/examples/finance.md +0 -0
  128. {acpkit-0.9.2 → acpkit-0.9.4}/docs/examples/index.md +0 -0
  129. {acpkit-0.9.2 → acpkit-0.9.4}/docs/examples/langchain-codex.md +0 -0
  130. {acpkit-0.9.2 → acpkit-0.9.4}/docs/examples/langchain-workspace.md +0 -0
  131. {acpkit-0.9.2 → acpkit-0.9.4}/docs/examples/remote-hosting.md +0 -0
  132. {acpkit-0.9.2 → acpkit-0.9.4}/docs/examples/travel.md +0 -0
  133. {acpkit-0.9.2 → acpkit-0.9.4}/docs/getting-started/installation.md +0 -0
  134. {acpkit-0.9.2 → acpkit-0.9.4}/docs/getting-started/langchain-quickstart.md +0 -0
  135. {acpkit-0.9.2 → acpkit-0.9.4}/docs/getting-started/pydantic-quickstart.md +0 -0
  136. {acpkit-0.9.2 → acpkit-0.9.4}/docs/getting-started/quickstart.md +0 -0
  137. {acpkit-0.9.2 → acpkit-0.9.4}/docs/helpers.md +0 -0
  138. {acpkit-0.9.2 → acpkit-0.9.4}/docs/host-backends.md +0 -0
  139. {acpkit-0.9.2 → acpkit-0.9.4}/docs/index.md +0 -0
  140. {acpkit-0.9.2 → acpkit-0.9.4}/docs/integration-audit.md +0 -0
  141. {acpkit-0.9.2 → acpkit-0.9.4}/docs/integration-readiness.md +0 -0
  142. {acpkit-0.9.2 → acpkit-0.9.4}/docs/integration-testing.md +0 -0
  143. {acpkit-0.9.2 → acpkit-0.9.4}/docs/langchain-acp/adapter-config.md +0 -0
  144. {acpkit-0.9.2 → acpkit-0.9.4}/docs/langchain-acp/bridges.md +0 -0
  145. {acpkit-0.9.2 → acpkit-0.9.4}/docs/langchain-acp/plans-thinking-approvals.md +0 -0
  146. {acpkit-0.9.2 → acpkit-0.9.4}/docs/langchain-acp/projections.md +0 -0
  147. {acpkit-0.9.2 → acpkit-0.9.4}/docs/langchain-acp/prompt-resources.md +0 -0
  148. {acpkit-0.9.2 → acpkit-0.9.4}/docs/langchain-acp/providers.md +0 -0
  149. {acpkit-0.9.2 → acpkit-0.9.4}/docs/langchain-acp/runtime-controls.md +0 -0
  150. {acpkit-0.9.2 → acpkit-0.9.4}/docs/langchain-acp/session-state.md +0 -0
  151. {acpkit-0.9.2 → acpkit-0.9.4}/docs/llms.txt +0 -0
  152. {acpkit-0.9.2 → acpkit-0.9.4}/docs/projection-cookbook.md +0 -0
  153. {acpkit-0.9.2 → acpkit-0.9.4}/docs/providers.md +0 -0
  154. {acpkit-0.9.2 → acpkit-0.9.4}/docs/pydantic-acp/adapter-config.md +0 -0
  155. {acpkit-0.9.2 → acpkit-0.9.4}/docs/pydantic-acp/plans-thinking-approvals.md +0 -0
  156. {acpkit-0.9.2 → acpkit-0.9.4}/docs/pydantic-acp/prompt-resources.md +0 -0
  157. {acpkit-0.9.2 → acpkit-0.9.4}/docs/pydantic-acp/runtime-controls.md +0 -0
  158. {acpkit-0.9.2 → acpkit-0.9.4}/docs/pydantic-acp/session-state.md +0 -0
  159. {acpkit-0.9.2 → acpkit-0.9.4}/docs/stylesheets/tweaks.css +0 -0
  160. {acpkit-0.9.2 → acpkit-0.9.4}/docs/testing.md +0 -0
  161. {acpkit-0.9.2 → acpkit-0.9.4}/examples/__init__.py +0 -0
  162. {acpkit-0.9.2 → acpkit-0.9.4}/examples/langchain/README.md +0 -0
  163. {acpkit-0.9.2 → acpkit-0.9.4}/examples/langchain/__init__.py +0 -0
  164. {acpkit-0.9.2 → acpkit-0.9.4}/examples/langchain/codex_graph.py +0 -0
  165. {acpkit-0.9.2 → acpkit-0.9.4}/examples/langchain/deepagents_graph.py +0 -0
  166. {acpkit-0.9.2 → acpkit-0.9.4}/examples/langchain/workspace_graph.py +0 -0
  167. {acpkit-0.9.2 → acpkit-0.9.4}/examples/pydantic/.gitignore +0 -0
  168. {acpkit-0.9.2 → acpkit-0.9.4}/examples/pydantic/.travel-agent/ideas.txt +0 -0
  169. {acpkit-0.9.2 → acpkit-0.9.4}/examples/pydantic/.travel-agent/itinerary.md +0 -0
  170. {acpkit-0.9.2 → acpkit-0.9.4}/examples/pydantic/README.md +0 -0
  171. {acpkit-0.9.2 → acpkit-0.9.4}/examples/pydantic/__init__.py +0 -0
  172. {acpkit-0.9.2 → acpkit-0.9.4}/examples/pydantic/finance_agent.py +0 -0
  173. {acpkit-0.9.2 → acpkit-0.9.4}/examples/pydantic/travel_agent.py +0 -0
  174. {acpkit-0.9.2 → acpkit-0.9.4}/mkdocs.yml +0 -0
  175. {acpkit-0.9.2/packages/adapters/pydantic-acp/src/pydantic_acp → acpkit-0.9.4/packages/adapters/langchain-acp/src/langchain_acp}/approval_store.py +0 -0
  176. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/bridge_manager.py +0 -0
  177. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/bridges/base.py +0 -0
  178. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/bridges/builtin.py +0 -0
  179. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/builders/__init__.py +0 -0
  180. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/builders/graph.py +0 -0
  181. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/event_projection.py +0 -0
  182. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/graph_source.py +0 -0
  183. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/plan.py +0 -0
  184. {acpkit-0.9.2/packages/adapters/pydantic-acp/src/pydantic_acp → acpkit-0.9.4/packages/adapters/langchain-acp/src/langchain_acp}/prompt_capabilities.py +0 -0
  185. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/providers.py +0 -0
  186. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/py.typed +0 -0
  187. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/runtime/__init__.py +0 -0
  188. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/runtime/_native_plan_runtime.py +0 -0
  189. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/runtime/_prompt_conversion.py +0 -0
  190. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/serialization.py +0 -0
  191. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/session/__init__.py +0 -0
  192. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/session/state.py +0 -0
  193. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/session/store.py +0 -0
  194. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/types.py +0 -0
  195. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/_projection_risk.py +0 -0
  196. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/_projection_text.py +0 -0
  197. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/_slash_commands.py +0 -0
  198. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_types.py +0 -0
  199. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/approvals.py +0 -0
  200. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/base.py +0 -0
  201. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/external_hooks.py +0 -0
  202. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/history_processor.py +0 -0
  203. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/mcp.py +0 -0
  204. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/thinking.py +0 -0
  205. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/__init__.py +0 -0
  206. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/agent.py +0 -0
  207. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/config.py +0 -0
  208. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/__init__.py +0 -0
  209. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/_policy_commands.py +0 -0
  210. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/_policy_paths.py +0 -0
  211. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/context.py +0 -0
  212. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/filesystem.py +0 -0
  213. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/policy.py +0 -0
  214. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/terminal.py +0 -0
  215. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/models.py +0 -0
  216. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/permission_presentation.py +0 -0
  217. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/projection.py +0 -0
  218. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/projection_helpers.py +0 -0
  219. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/providers.py +0 -0
  220. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/py.typed +0 -0
  221. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/__init__.py +0 -0
  222. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_adapter_prompt.py +0 -0
  223. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_agent_state.py +0 -0
  224. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_compat.py +0 -0
  225. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_native_plan_runtime.py +0 -0
  226. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_model_runtime.py +0 -0
  227. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_lifecycle.py +0 -0
  228. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_model_runtime.py +0 -0
  229. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_runtime.py +0 -0
  230. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_surface_runtime.py +0 -0
  231. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py +0 -0
  232. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/bridge_manager.py +0 -0
  233. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/prompts.py +0 -0
  234. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/server.py +0 -0
  235. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/session_surface.py +0 -0
  236. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/slash_commands.py +0 -0
  237. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/serialization.py +0 -0
  238. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/session/__init__.py +0 -0
  239. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/session/state.py +0 -0
  240. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/session/store.py +0 -0
  241. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/slash.py +0 -0
  242. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/__init__.py +0 -0
  243. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/fakes.py +0 -0
  244. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/harness.py +0 -0
  245. {acpkit-0.9.2 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/types.py +0 -0
  246. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/.gitignore +0 -0
  247. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/LICENSE +0 -0
  248. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/README.md +0 -0
  249. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/pyproject.toml +0 -0
  250. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/__init__.py +0 -0
  251. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/__init__.py +0 -0
  252. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/config.py +0 -0
  253. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/manager.py +0 -0
  254. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/state.py +0 -0
  255. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/store.py +0 -0
  256. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/client.py +0 -0
  257. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/factory.py +0 -0
  258. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/model.py +0 -0
  259. {acpkit-0.9.2 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/py.typed +0 -0
  260. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/README.md +0 -0
  261. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/pyproject.toml +0 -0
  262. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/__init__.py +0 -0
  263. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/auth.py +0 -0
  264. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/client.py +0 -0
  265. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/command.py +0 -0
  266. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/config.py +0 -0
  267. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/limits.py +0 -0
  268. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/metadata.py +0 -0
  269. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/proxy_agent.py +0 -0
  270. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/py.typed +0 -0
  271. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/server.py +0 -0
  272. {acpkit-0.9.2 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/stream.py +0 -0
  273. {acpkit-0.9.2 → acpkit-0.9.4}/scripts/check_pypi_versions.py +0 -0
  274. {acpkit-0.9.2 → acpkit-0.9.4}/scripts/demo_mcp_server.py +0 -0
  275. {acpkit-0.9.2 → acpkit-0.9.4}/scripts/generate_llms_docs.py +0 -0
  276. {acpkit-0.9.2 → acpkit-0.9.4}/scripts/mock_hook_audit.py +0 -0
  277. {acpkit-0.9.2 → acpkit-0.9.4}/scripts/mock_hook_snapshot.py +0 -0
  278. {acpkit-0.9.2 → acpkit-0.9.4}/scripts/run_if_major_change.py +0 -0
  279. {acpkit-0.9.2 → acpkit-0.9.4}/scripts/save_coverage_summary.py +0 -0
  280. {acpkit-0.9.2 → acpkit-0.9.4}/src/acpkit/__init__.py +0 -0
  281. {acpkit-0.9.2 → acpkit-0.9.4}/src/acpkit/__main__.py +0 -0
  282. {acpkit-0.9.2 → acpkit-0.9.4}/src/acpkit/_compatibility_schema.py +0 -0
  283. {acpkit-0.9.2 → acpkit-0.9.4}/src/acpkit/adapters.py +0 -0
  284. {acpkit-0.9.2 → acpkit-0.9.4}/src/acpkit/cli.py +0 -0
  285. {acpkit-0.9.2 → acpkit-0.9.4}/src/acpkit/compatibility.py +0 -0
  286. {acpkit-0.9.2 → acpkit-0.9.4}/src/acpkit/py.typed +0 -0
  287. {acpkit-0.9.2 → acpkit-0.9.4}/src/acpkit/runtime.py +0 -0
  288. {acpkit-0.9.2 → acpkit-0.9.4}/tests/__init__.py +0 -0
  289. {acpkit-0.9.2 → acpkit-0.9.4}/tests/acpremote/test_command_server.py +0 -0
  290. {acpkit-0.9.2 → acpkit-0.9.4}/tests/acpremote/test_helpers.py +0 -0
  291. {acpkit-0.9.2 → acpkit-0.9.4}/tests/acpremote/test_phase1.py +0 -0
  292. {acpkit-0.9.2 → acpkit-0.9.4}/tests/acpremote/test_phase2.py +0 -0
  293. {acpkit-0.9.2 → acpkit-0.9.4}/tests/acpremote/test_phase3.py +0 -0
  294. {acpkit-0.9.2 → acpkit-0.9.4}/tests/codex_auth_helper/__init__.py +0 -0
  295. {acpkit-0.9.2 → acpkit-0.9.4}/tests/codex_auth_helper/support.py +0 -0
  296. {acpkit-0.9.2 → acpkit-0.9.4}/tests/codex_auth_helper/test_auth.py +0 -0
  297. {acpkit-0.9.2 → acpkit-0.9.4}/tests/codex_auth_helper/test_factory.py +0 -0
  298. {acpkit-0.9.2 → acpkit-0.9.4}/tests/conftest.py +0 -0
  299. {acpkit-0.9.2 → acpkit-0.9.4}/tests/langchain/__init__.py +0 -0
  300. {acpkit-0.9.2 → acpkit-0.9.4}/tests/langchain/support.py +0 -0
  301. {acpkit-0.9.2 → acpkit-0.9.4}/tests/langchain/test_examples.py +0 -0
  302. {acpkit-0.9.2 → acpkit-0.9.4}/tests/langchain/test_support.py +0 -0
  303. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/__init__.py +0 -0
  304. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_approvals.py +0 -0
  305. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_bridge_mcp.py +0 -0
  306. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_bridge_thinking.py +0 -0
  307. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_bridge_web_capabilities.py +0 -0
  308. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_compat.py +0 -0
  309. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_examples.py +0 -0
  310. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_host.py +0 -0
  311. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_host_policy.py +0 -0
  312. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_low_level_helpers.py +0 -0
  313. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_models.py +0 -0
  314. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_projection.py +0 -0
  315. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_projection_helpers.py +0 -0
  316. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_runtime.py +0 -0
  317. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_session_runtime_helpers.py +0 -0
  318. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_sources.py +0 -0
  319. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_support.py +0 -0
  320. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_testing_fakes.py +0 -0
  321. {acpkit-0.9.2 → acpkit-0.9.4}/tests/pydantic/test_testing_harness.py +0 -0
  322. {acpkit-0.9.2 → acpkit-0.9.4}/tests/test_acpkit_cli.py +0 -0
  323. {acpkit-0.9.2 → acpkit-0.9.4}/tests/test_compatibility_manifest.py +0 -0
  324. {acpkit-0.9.2 → acpkit-0.9.4}/tests/test_native_langchain_agent.py +0 -0
  325. {acpkit-0.9.2 → acpkit-0.9.4}/tests/test_native_pydantic_agent.py +0 -0
@@ -69,6 +69,10 @@ Use these seams intentionally:
69
69
  advertise image, audio, or embedded context unless the runtime can honor them
70
70
  - only one `PrepareToolsMode(..., plan_mode=True)` is allowed
71
71
  - `plan_tools=True` is how a non-plan execution mode keeps plan progress tools visible
72
+ - `PrepareOutputToolsBridge` is the separate seam for structured-output tool preparation in
73
+ current Pydantic AI
74
+ - `HookBridge` covers output-tool preparation, output validation, output processing, and
75
+ deferred tool-call observation
72
76
  - `/thinking` only exists when `ThinkingBridge()` is configured
73
77
  - native ACP plan state and `PlanProvider` are separate ownership paths
74
78
  - permission card rendering is `NativeApprovalBridge.tool_call_builder`, not an `AdapterConfig`
@@ -116,6 +116,12 @@ High-value public seams:
116
116
  - `NativeApprovalBridge`
117
117
  - `PermissionToolCallBuilder`
118
118
  - `ApprovalPolicyStore`
119
+ - `PrepareToolsBridge`
120
+ - `PrepareToolsMode`
121
+ - `PrepareOutputToolsBridge`
122
+ - `PrepareOutputToolsMode`
123
+ - `ThinkingBridge`
124
+ - `HookBridge`
119
125
  - `SlashCommandProvider`
120
126
  - `StaticSlashCommandProvider`
121
127
  - `ExternalHookEventBridge`
@@ -128,6 +134,19 @@ Package entrypoint:
128
134
 
129
135
  - [Package entrypoint](https://github.com/vcoderun/acpkit/blob/main/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py)
130
136
 
137
+ ## Current Pydantic AI Compatibility
138
+
139
+ `pydantic-acp` currently targets `pydantic-ai-slim==1.92.0`.
140
+
141
+ When working on this surface, remember:
142
+
143
+ - `PrepareToolsBridge` owns function-tool preparation and mode-specific plan tool visibility
144
+ - `PrepareOutputToolsBridge` owns structured-output tool preparation and session metadata for output-tool modes
145
+ - `HookBridge` covers output-tool preparation, output validation, output processing, and deferred tool-call observation
146
+ - prompt runtime passes ACP session identity through Pydantic AI `conversation_id` and run `metadata`
147
+ - `run_stream_events()` returns an async context manager in current Pydantic AI; keep direct async-iterable fallback only for tests and compatibility fakes
148
+ - `OpenAICompactionBridge` must not pass deprecated `instructions=` into upstream `OpenAICompaction`
149
+
131
150
  ## Module Guide
132
151
 
133
152
  | Subsystem | Key files | Use them for |
@@ -190,7 +209,7 @@ It supports:
190
209
  - mode switching
191
210
  - config options
192
211
  - ACP-native plans
193
- - tool-based or structured plan generation
212
+ - `Tool Plans` or `Structured Plans` plan generation
194
213
  - custom slash command providers
195
214
  - session replay and fork/resume/load/close/list lifecycle
196
215
  - slash command discovery and rendering
@@ -205,6 +224,10 @@ This package should be the reference answer whenever the question is:
205
224
 
206
225
  High-value bridges include:
207
226
 
227
+ - `PrepareToolsBridge`
228
+ - `PrepareOutputToolsBridge`
229
+ - `ThinkingBridge`
230
+ - `HookBridge`
208
231
  - `ThreadExecutorBridge`
209
232
  - `SetToolMetadataBridge`
210
233
  - `IncludeToolReturnSchemasBridge`
@@ -96,6 +96,6 @@ scripts/check_releases.py
96
96
  connect*.py
97
97
  expose*.py
98
98
  CHANGELOG
99
- /.acprouter-state
100
- /.deepagents-graph
101
- /.workspace-graph
99
+ .acprouter-state
100
+ .deepagents-graph
101
+ .workspace-graph
acpkit-0.9.4/COVERAGE ADDED
@@ -0,0 +1,2 @@
1
+ Line coverage: 100.00% (8953 / 8953)
2
+ Branch coverage: 100.00% (2996 / 2996)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: acpkit
3
- Version: 0.9.2
3
+ Version: 0.9.4
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
@@ -16,31 +16,13 @@ Classifier: Programming Language :: Python :: 3.12
16
16
  Classifier: Programming Language :: Python :: 3.13
17
17
  Requires-Python: >=3.11
18
18
  Requires-Dist: click>=8.1.8
19
- Requires-Dist: fast-agent-mcp>=0.2.25
20
- Requires-Dist: mcp>=1.27.0
21
19
  Requires-Dist: typing-extensions>=4.12.0
22
20
  Provides-Extra: all
23
21
  Requires-Dist: acpremote; extra == 'all'
24
- Requires-Dist: agent-client-protocol>=0.9.0; extra == 'all'
25
- Requires-Dist: basedpyright; extra == 'all'
26
22
  Requires-Dist: codex-auth-helper; extra == 'all'
27
23
  Requires-Dist: langchain-acp; extra == 'all'
28
24
  Requires-Dist: langchain-acp[deepagents]; extra == 'all'
29
- Requires-Dist: langchain-openai>=0.3.26; extra == 'all'
30
- Requires-Dist: mkdocs-material; extra == 'all'
31
- Requires-Dist: mkdocstrings[python]; extra == 'all'
32
- Requires-Dist: pre-commit; extra == 'all'
33
25
  Requires-Dist: pydantic-acp; extra == 'all'
34
- Requires-Dist: pydantic-ai-slim; extra == 'all'
35
- Requires-Dist: pydantic-graph; extra == 'all'
36
- Requires-Dist: pydantic>=2.7; extra == 'all'
37
- Requires-Dist: pytest; extra == 'all'
38
- Requires-Dist: pytest-asyncio; extra == 'all'
39
- Requires-Dist: pytest-cov; extra == 'all'
40
- Requires-Dist: python-dotenv; extra == 'all'
41
- Requires-Dist: ruff; extra == 'all'
42
- Requires-Dist: ty; extra == 'all'
43
- Requires-Dist: typing-extensions>=4.12.0; extra == 'all'
44
26
  Requires-Dist: uv>=0.8.3; extra == 'all'
45
27
  Provides-Extra: codex
46
28
  Requires-Dist: codex-auth-helper; extra == 'codex'
@@ -65,6 +47,29 @@ Requires-Dist: python-dotenv; extra == 'dev'
65
47
  Requires-Dist: ruff; extra == 'dev'
66
48
  Requires-Dist: ty; extra == 'dev'
67
49
  Requires-Dist: typing-extensions>=4.12.0; extra == 'dev'
50
+ Provides-Extra: dev-all
51
+ Requires-Dist: acpremote; extra == 'dev-all'
52
+ Requires-Dist: agent-client-protocol>=0.9.0; extra == 'dev-all'
53
+ Requires-Dist: basedpyright; extra == 'dev-all'
54
+ Requires-Dist: codex-auth-helper; extra == 'dev-all'
55
+ Requires-Dist: langchain-acp; extra == 'dev-all'
56
+ Requires-Dist: langchain-acp[deepagents]; extra == 'dev-all'
57
+ Requires-Dist: langchain-openai>=0.3.26; extra == 'dev-all'
58
+ Requires-Dist: mkdocs-material; extra == 'dev-all'
59
+ Requires-Dist: mkdocstrings[python]; extra == 'dev-all'
60
+ Requires-Dist: pre-commit; extra == 'dev-all'
61
+ Requires-Dist: pydantic-acp; extra == 'dev-all'
62
+ Requires-Dist: pydantic-ai-slim; extra == 'dev-all'
63
+ Requires-Dist: pydantic-graph; extra == 'dev-all'
64
+ Requires-Dist: pydantic>=2.7; extra == 'dev-all'
65
+ Requires-Dist: pytest; extra == 'dev-all'
66
+ Requires-Dist: pytest-asyncio; extra == 'dev-all'
67
+ Requires-Dist: pytest-cov; extra == 'dev-all'
68
+ Requires-Dist: python-dotenv; extra == 'dev-all'
69
+ Requires-Dist: ruff; extra == 'dev-all'
70
+ Requires-Dist: ty; extra == 'dev-all'
71
+ Requires-Dist: typing-extensions>=4.12.0; extra == 'dev-all'
72
+ Requires-Dist: uv>=0.8.3; extra == 'dev-all'
68
73
  Provides-Extra: docs
69
74
  Requires-Dist: mkdocs-material; extra == 'docs'
70
75
  Requires-Dist: mkdocstrings[python]; extra == 'docs'
acpkit-0.9.4/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.9.4
@@ -78,6 +78,10 @@ This page documents the public surface re-exported by `pydantic_acp`.
78
78
 
79
79
  ::: pydantic_acp.PrepareToolsMode
80
80
 
81
+ ::: pydantic_acp.PrepareOutputToolsBridge
82
+
83
+ ::: pydantic_acp.PrepareOutputToolsMode
84
+
81
85
  ::: pydantic_acp.ThinkingBridge
82
86
 
83
87
  ::: pydantic_acp.HookBridge
@@ -260,6 +260,19 @@ Use it for:
260
260
 
261
261
  It is the bridge most real coding-agent setups start with.
262
262
 
263
+ ### `PrepareOutputToolsBridge`
264
+
265
+ Shapes output-tool availability per mode.
266
+
267
+ Use it when:
268
+
269
+ - structured-output tools should be filtered separately from normal function tools
270
+ - ACP session metadata should expose the active output-tool mode
271
+ - output-tool preparation should emit ACP-visible progress and failure updates
272
+
273
+ This mirrors `PrepareToolsBridge`, but targets Pydantic AI's
274
+ `PrepareOutputTools` capability.
275
+
263
276
  ### `ThinkingBridge`
264
277
 
265
278
  Exposes Pydantic AI’s `Thinking` capability through ACP session config.
@@ -275,6 +288,10 @@ Adds a `Hooks` capability into the active agent.
275
288
 
276
289
  Useful when you want ACP-visible hook updates that come from bridge-owned hooks rather than only from hooks already attached to the source agent.
277
290
 
291
+ The bridge covers the current Pydantic AI hook surface, including tool
292
+ preparation, output-tool preparation, output validation, output processing, and
293
+ deferred tool-call observation.
294
+
278
295
  You can also suppress noisy default hook rendering with:
279
296
 
280
297
  ```python
@@ -82,10 +82,13 @@ called inside `graph_factory=...`.
82
82
  - `AdapterConfig`
83
83
  - explicit session stores and transcript replay
84
84
  - provider-owned models, modes, and config options
85
+ - prompt capability advertisement
85
86
  - native ACP plan state with `TaskPlan`
86
- - approval bridging
87
+ - approval bridging with projection-aware permission cards
87
88
  - capability bridges
89
+ - built-in and host-defined slash commands
88
90
  - projection maps and event projection maps
91
+ - external hook event projection
89
92
  - ACP-facing type exports in `langchain_acp.types`
90
93
 
91
94
  The important difference is upstream shape, not ACP Kit architecture. On the LangChain side the adapter deals in graphs and middleware instead of model profiles and tool preparers.
@@ -133,6 +136,51 @@ The point is not to make the adapter magical. The point is to keep the host,
133
136
  the graph, and the ACP surface aligned without inventing runtime state the graph
134
137
  cannot really honor.
135
138
 
139
+ ## Prompt Capabilities And Slash Commands
140
+
141
+ Prompt capability advertisement is configurable instead of hardcoded:
142
+
143
+ ```python
144
+ from langchain_acp import AdapterConfig, AdapterPromptCapabilities
145
+
146
+ config = AdapterConfig(
147
+ prompt_capabilities=AdapterPromptCapabilities(
148
+ audio=False,
149
+ image=False,
150
+ embedded_context=True,
151
+ )
152
+ )
153
+ ```
154
+
155
+ The adapter also owns an ACP-native slash-command layer:
156
+
157
+ - mode commands such as `/ask`
158
+ - `/model`
159
+ - `/tools`
160
+ - `/mcp-servers`
161
+ - custom host commands through `slash_command_provider`
162
+
163
+ ```python
164
+ from acp.schema import AvailableCommand
165
+ from langchain_acp import (
166
+ AdapterConfig,
167
+ SlashCommandResult,
168
+ StaticSlashCommand,
169
+ StaticSlashCommandProvider,
170
+ )
171
+
172
+ config = AdapterConfig(
173
+ slash_command_provider=StaticSlashCommandProvider(
174
+ commands=[
175
+ StaticSlashCommand(
176
+ command=AvailableCommand(name="ping", description="Return pong."),
177
+ handler=lambda _request: SlashCommandResult(text="pong"),
178
+ )
179
+ ]
180
+ )
181
+ )
182
+ ```
183
+
136
184
  ## Session Lifecycle And Replay
137
185
 
138
186
  Session lifecycle is first-class:
@@ -209,10 +257,23 @@ The adapter surface is:
209
257
 
210
258
  - `ApprovalBridge`
211
259
  - `NativeApprovalBridge`
260
+ - `ProjectionAwareApprovalBridge`
261
+ - `PermissionToolCallBuilder`
262
+ - `ApprovalPolicyStore`
212
263
  - ACP permission requests and resume flow
213
264
 
214
265
  When the runtime really pauses for approval, the ACP session pauses for approval too.
215
266
 
267
+ Remembered approval choices and permission card rendering live on `NativeApprovalBridge`:
268
+
269
+ ```python
270
+ from langchain_acp import NativeApprovalBridge
271
+
272
+ config = AdapterConfig(
273
+ approval_bridge=NativeApprovalBridge(enable_persistent_choices=True),
274
+ )
275
+ ```
276
+
216
277
  ## Capability Bridges And Graph Build Contributions
217
278
 
218
279
  ACP Kit's bridge architecture remains intact in the LangChain adapter.
@@ -224,6 +285,7 @@ Built-in bridges:
224
285
  - `ConfigOptionsBridge`
225
286
  - `ToolSurfaceBridge`
226
287
  - `DeepAgentsCompatibilityBridge`
288
+ - `ExternalHookEventBridge`
227
289
 
228
290
  Graph-build contributions are aggregated through:
229
291
 
@@ -1362,21 +1362,25 @@ If you are integrating `pydantic-acp` in a real product:
1362
1362
 
1363
1363
  ## Version Compatibility And Private Upstream APIs
1364
1364
 
1365
- `pydantic-acp` currently pins `pydantic-ai-slim==1.83.0`.
1365
+ `pydantic-acp` currently pins `pydantic-ai-slim==1.92.0`.
1366
1366
 
1367
1367
  That is not accidental. The adapter relies on a specific, tested Pydantic AI
1368
1368
  surface and should still be upgraded deliberately.
1369
1369
 
1370
- However, ACP Kit no longer imports Pydantic AI private history-processor
1371
- modules directly. History processor support is expressed through ACP Kit's own
1372
- callable aliases and passed into the public
1373
- `Agent(..., history_processors=...)` interface.
1370
+ The current compatibility surface includes function-tool preparation,
1371
+ output-tool preparation, output validation/processing hooks,
1372
+ deferred-tool-call hooks, run metadata, and conversation IDs.
1373
+
1374
+ ACP Kit also no longer imports Pydantic AI private history-processor modules
1375
+ directly. History processor support is expressed through ACP Kit's own callable
1376
+ aliases and passed into the public `Agent(..., history_processors=...)`
1377
+ interface.
1374
1378
 
1375
1379
  What this means in practice:
1376
1380
 
1377
1381
  - the adapter is less exposed to private upstream type-module churn
1378
- - upgrades are still compatibility work, but the history-processor integration
1379
- is no longer a direct private-import dependency
1382
+ - upgrades are still compatibility work, but Pydantic AI integration points stay
1383
+ isolated behind ACP Kit bridge and runtime seams
1380
1384
 
1381
1385
  ### LangChain ACP Overview
1382
1386
  URL: https://vcoderun.github.io/acpkit/langchain-acp/
@@ -1464,10 +1468,13 @@ called inside `graph_factory=...`.
1464
1468
  - `AdapterConfig`
1465
1469
  - explicit session stores and transcript replay
1466
1470
  - provider-owned models, modes, and config options
1471
+ - prompt capability advertisement
1467
1472
  - native ACP plan state with `TaskPlan`
1468
- - approval bridging
1473
+ - approval bridging with projection-aware permission cards
1469
1474
  - capability bridges
1475
+ - built-in and host-defined slash commands
1470
1476
  - projection maps and event projection maps
1477
+ - external hook event projection
1471
1478
  - ACP-facing type exports in `langchain_acp.types`
1472
1479
 
1473
1480
  The important difference is upstream shape, not ACP Kit architecture. On the LangChain side the adapter deals in graphs and middleware instead of model profiles and tool preparers.
@@ -1513,6 +1520,51 @@ The point is not to make the adapter magical. The point is to keep the host,
1513
1520
  the graph, and the ACP surface aligned without inventing runtime state the graph
1514
1521
  cannot really honor.
1515
1522
 
1523
+ ## Prompt Capabilities And Slash Commands
1524
+
1525
+ Prompt capability advertisement is configurable instead of hardcoded:
1526
+
1527
+ ```python
1528
+ from langchain_acp import AdapterConfig, AdapterPromptCapabilities
1529
+
1530
+ config = AdapterConfig(
1531
+ prompt_capabilities=AdapterPromptCapabilities(
1532
+ audio=False,
1533
+ image=False,
1534
+ embedded_context=True,
1535
+ )
1536
+ )
1537
+ ```
1538
+
1539
+ The adapter also owns an ACP-native slash-command layer:
1540
+
1541
+ - mode commands such as `/ask`
1542
+ - `/model`
1543
+ - `/tools`
1544
+ - `/mcp-servers`
1545
+ - custom host commands through `slash_command_provider`
1546
+
1547
+ ```python
1548
+ from acp.schema import AvailableCommand
1549
+ from langchain_acp import (
1550
+ AdapterConfig,
1551
+ SlashCommandResult,
1552
+ StaticSlashCommand,
1553
+ StaticSlashCommandProvider,
1554
+ )
1555
+
1556
+ config = AdapterConfig(
1557
+ slash_command_provider=StaticSlashCommandProvider(
1558
+ commands=[
1559
+ StaticSlashCommand(
1560
+ command=AvailableCommand(name="ping", description="Return pong."),
1561
+ handler=lambda _request: SlashCommandResult(text="pong"),
1562
+ )
1563
+ ]
1564
+ )
1565
+ )
1566
+ ```
1567
+
1516
1568
  ## Session Lifecycle And Replay
1517
1569
 
1518
1570
  Session lifecycle is first-class:
@@ -1589,10 +1641,23 @@ The adapter surface is:
1589
1641
 
1590
1642
  - `ApprovalBridge`
1591
1643
  - `NativeApprovalBridge`
1644
+ - `ProjectionAwareApprovalBridge`
1645
+ - `PermissionToolCallBuilder`
1646
+ - `ApprovalPolicyStore`
1592
1647
  - ACP permission requests and resume flow
1593
1648
 
1594
1649
  When the runtime really pauses for approval, the ACP session pauses for approval too.
1595
1650
 
1651
+ Remembered approval choices and permission card rendering live on `NativeApprovalBridge`:
1652
+
1653
+ ```python
1654
+ from langchain_acp import NativeApprovalBridge
1655
+
1656
+ config = AdapterConfig(
1657
+ approval_bridge=NativeApprovalBridge(enable_persistent_choices=True),
1658
+ )
1659
+ ```
1660
+
1596
1661
  ## Capability Bridges And Graph Build Contributions
1597
1662
 
1598
1663
  ACP Kit's bridge architecture remains intact in the LangChain adapter.
@@ -1604,6 +1669,7 @@ Built-in bridges:
1604
1669
  - `ConfigOptionsBridge`
1605
1670
  - `ToolSurfaceBridge`
1606
1671
  - `DeepAgentsCompatibilityBridge`
1672
+ - `ExternalHookEventBridge`
1607
1673
 
1608
1674
  Graph-build contributions are aggregated through:
1609
1675
 
@@ -3432,6 +3498,19 @@ Use it for:
3432
3498
 
3433
3499
  It is the bridge most real coding-agent setups start with.
3434
3500
 
3501
+ ### `PrepareOutputToolsBridge`
3502
+
3503
+ Shapes output-tool availability per mode.
3504
+
3505
+ Use it when:
3506
+
3507
+ - structured-output tools should be filtered separately from normal function tools
3508
+ - ACP session metadata should expose the active output-tool mode
3509
+ - output-tool preparation should emit ACP-visible progress and failure updates
3510
+
3511
+ This mirrors `PrepareToolsBridge`, but targets Pydantic AI's
3512
+ `PrepareOutputTools` capability.
3513
+
3435
3514
  ### `ThinkingBridge`
3436
3515
 
3437
3516
  Exposes Pydantic AI’s `Thinking` capability through ACP session config.
@@ -3447,6 +3526,10 @@ Adds a `Hooks` capability into the active agent.
3447
3526
 
3448
3527
  Useful when you want ACP-visible hook updates that come from bridge-owned hooks rather than only from hooks already attached to the source agent.
3449
3528
 
3529
+ The bridge covers the current Pydantic AI hook surface, including tool
3530
+ preparation, output-tool preparation, output validation, output processing, and
3531
+ deferred tool-call observation.
3532
+
3450
3533
  You can also suppress noisy default hook rendering with:
3451
3534
 
3452
3535
  ```python
@@ -6169,6 +6252,10 @@ This page documents the public surface re-exported by `pydantic_acp`.
6169
6252
 
6170
6253
  ::: pydantic_acp.PrepareToolsMode
6171
6254
 
6255
+ ::: pydantic_acp.PrepareOutputToolsBridge
6256
+
6257
+ ::: pydantic_acp.PrepareOutputToolsMode
6258
+
6172
6259
  ::: pydantic_acp.ThinkingBridge
6173
6260
 
6174
6261
  ::: pydantic_acp.HookBridge
@@ -270,18 +270,22 @@ If you are integrating `pydantic-acp` in a real product:
270
270
 
271
271
  ## Version Compatibility And Private Upstream APIs
272
272
 
273
- `pydantic-acp` currently pins `pydantic-ai-slim==1.83.0`.
273
+ `pydantic-acp` currently pins `pydantic-ai-slim==1.92.0`.
274
274
 
275
275
  That is not accidental. The adapter relies on a specific, tested Pydantic AI
276
276
  surface and should still be upgraded deliberately.
277
277
 
278
- However, ACP Kit no longer imports Pydantic AI private history-processor
279
- modules directly. History processor support is expressed through ACP Kit's own
280
- callable aliases and passed into the public
281
- `Agent(..., history_processors=...)` interface.
278
+ The current compatibility surface includes function-tool preparation,
279
+ output-tool preparation, output validation/processing hooks,
280
+ deferred-tool-call hooks, run metadata, and conversation IDs.
281
+
282
+ ACP Kit also no longer imports Pydantic AI private history-processor modules
283
+ directly. History processor support is expressed through ACP Kit's own callable
284
+ aliases and passed into the public `Agent(..., history_processors=...)`
285
+ interface.
282
286
 
283
287
  What this means in practice:
284
288
 
285
289
  - the adapter is less exposed to private upstream type-module churn
286
- - upgrades are still compatibility work, but the history-processor integration
287
- is no longer a direct private-import dependency
290
+ - upgrades are still compatibility work, but Pydantic AI integration points stay
291
+ isolated behind ACP Kit bridge and runtime seams
@@ -105,10 +105,14 @@ acp_agent = create_acp_agent(graph_factory=graph_from_session)
105
105
 
106
106
  - session stores and transcript replay
107
107
  - model, mode, and config-option providers
108
+ - prompt capability advertisement through `prompt_capabilities`
108
109
  - native plan state through `TaskPlan`
109
110
  - approval bridging from `HumanInTheLoopMiddleware`
111
+ - remembered approval policies and permission card rendering on `NativeApprovalBridge`
110
112
  - capability bridges and graph-build contributions
113
+ - built-in and host-defined slash commands
111
114
  - tool projection maps and event projection maps
115
+ - external hook/event projection through `ExternalHookEventBridge`
112
116
  - `graph`, `graph_factory`, and `graph_source`
113
117
  - DeepAgents compatibility helpers where they add truthful ACP behavior
114
118
 
@@ -120,6 +124,64 @@ That means the adapter can expose:
120
124
 
121
125
  without collapsing everything into a bespoke ACP runtime.
122
126
 
127
+ ## Runtime Controls
128
+
129
+ The adapter now owns a small ACP-native slash-command layer instead of leaving that surface entirely to the graph:
130
+
131
+ - mode commands such as `/ask` or `/review` when the session publishes modes
132
+ - `/model` for ACP-owned model selection
133
+ - `/tools` for the active graph tool node
134
+ - `/mcp-servers` for attached session MCP servers
135
+ - custom host commands through `slash_command_provider`
136
+
137
+ Example:
138
+
139
+ ```python
140
+ from acp.schema import AvailableCommand
141
+ from langchain_acp import (
142
+ AdapterConfig,
143
+ SlashCommandResult,
144
+ StaticSlashCommand,
145
+ StaticSlashCommandProvider,
146
+ )
147
+
148
+ config = AdapterConfig(
149
+ slash_command_provider=StaticSlashCommandProvider(
150
+ commands=[
151
+ StaticSlashCommand(
152
+ command=AvailableCommand(name="ping", description="Return pong."),
153
+ handler=lambda _request: SlashCommandResult(text="pong"),
154
+ )
155
+ ]
156
+ )
157
+ )
158
+ ```
159
+
160
+ Prompt capability advertisement is also explicit now:
161
+
162
+ ```python
163
+ from langchain_acp import AdapterConfig, AdapterPromptCapabilities
164
+
165
+ config = AdapterConfig(
166
+ prompt_capabilities=AdapterPromptCapabilities(
167
+ audio=False,
168
+ image=False,
169
+ embedded_context=True,
170
+ )
171
+ )
172
+ ```
173
+
174
+ If the graph uses approval middleware, remembered choices and ACP permission presentation stay on
175
+ `NativeApprovalBridge`, not on `AdapterConfig`:
176
+
177
+ ```python
178
+ from langchain_acp import NativeApprovalBridge
179
+
180
+ config = AdapterConfig(
181
+ approval_bridge=NativeApprovalBridge(enable_persistent_choices=True),
182
+ )
183
+ ```
184
+
123
185
  ## Session-owned Graph Rebuilds
124
186
 
125
187
  If ACP session state should decide which graph gets built, `graph_factory=` is the intended seam:
@@ -18,6 +18,7 @@ dependencies = [
18
18
  "agent-client-protocol>=0.9.0",
19
19
  "langchain>=1.0.0",
20
20
  "langgraph>=1.0.0",
21
+ "pydantic>=2.7",
21
22
  "typing-extensions>=4.12.0",
22
23
  ]
23
24