acpkit 0.9.3__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 (324) hide show
  1. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/resources/intro.md +4 -0
  2. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/pydantic-acp/SKILL.md +24 -1
  3. {acpkit-0.9.3 → acpkit-0.9.4}/.gitignore +3 -3
  4. acpkit-0.9.4/COVERAGE +2 -0
  5. {acpkit-0.9.3 → acpkit-0.9.4}/PKG-INFO +1 -1
  6. acpkit-0.9.4/VERSION +1 -0
  7. {acpkit-0.9.3 → acpkit-0.9.4}/docs/api/pydantic_acp.md +4 -0
  8. {acpkit-0.9.3 → acpkit-0.9.4}/docs/bridges.md +17 -0
  9. {acpkit-0.9.3 → acpkit-0.9.4}/docs/llms-full.txt +95 -8
  10. {acpkit-0.9.3 → acpkit-0.9.4}/docs/pydantic-acp.md +11 -7
  11. acpkit-0.9.4/packages/adapters/langchain-acp/VERSION +1 -0
  12. {acpkit-0.9.3/packages/adapters/pydantic-acp/src/pydantic_acp → acpkit-0.9.4/packages/adapters/langchain-acp/src/langchain_acp}/_version.py +1 -1
  13. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/README.md +2 -2
  14. acpkit-0.9.4/packages/adapters/pydantic-acp/VERSION +1 -0
  15. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/pyproject.toml +1 -1
  16. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py +4 -0
  17. {acpkit-0.9.3/packages/helpers/codex-auth-helper/src/codex_auth_helper → acpkit-0.9.4/packages/adapters/pydantic-acp/src/pydantic_acp}/_version.py +1 -1
  18. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_source.py +2 -6
  19. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/awaitables.py +2 -2
  20. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/__init__.py +9 -1
  21. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/_hook_capability.py +248 -1
  22. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/capability_support.py +1 -2
  23. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/hooks.py +20 -0
  24. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/prepare_tools.py +144 -2
  25. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/hook_projection.py +18 -0
  26. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_adapter_mixins.py +2 -0
  27. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_execution.py +32 -1
  28. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_runtime.py +3 -0
  29. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/hook_introspection.py +5 -0
  30. acpkit-0.9.4/packages/helpers/codex-auth-helper/VERSION +1 -0
  31. {acpkit-0.9.3/packages/transports/acpremote/src/acpremote → acpkit-0.9.4/packages/helpers/codex-auth-helper/src/codex_auth_helper}/_version.py +1 -1
  32. acpkit-0.9.4/packages/transports/acpremote/VERSION +1 -0
  33. {acpkit-0.9.3/packages/adapters/langchain-acp/src/langchain_acp → acpkit-0.9.4/packages/transports/acpremote/src/acpremote}/_version.py +1 -1
  34. acpkit-0.9.4/src/acpkit/_version.py +5 -0
  35. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/support.py +4 -0
  36. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_adapter_helpers.py +3 -0
  37. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_bridge_builder.py +10 -0
  38. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_bridge_hooks.py +280 -0
  39. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_bridge_prepare_tools.py +143 -0
  40. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_hook_introspection.py +12 -0
  41. acpkit-0.9.3/COVERAGE +0 -2
  42. acpkit-0.9.3/VERSION +0 -1
  43. acpkit-0.9.3/examples/langchain/.deepagents-graph/.deepagents-graph/brief.md +0 -3
  44. acpkit-0.9.3/examples/langchain/.deepagents-graph/brief.md +0 -3
  45. acpkit-0.9.3/examples/langchain/.workspace-graph/README.md +0 -3
  46. acpkit-0.9.3/packages/adapters/langchain-acp/VERSION +0 -1
  47. acpkit-0.9.3/packages/adapters/pydantic-acp/VERSION +0 -1
  48. acpkit-0.9.3/packages/helpers/codex-auth-helper/VERSION +0 -1
  49. acpkit-0.9.3/packages/transports/acpremote/VERSION +0 -1
  50. acpkit-0.9.3/src/acpkit/_version.py +0 -5
  51. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/SKILL.md +0 -0
  52. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/agents/openai.yaml +0 -0
  53. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/examples/README.md +0 -0
  54. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/scripts/list_examples.py +0 -0
  55. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/acpkit-sdk/scripts/list_public_exports.py +0 -0
  56. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/acpremote/SKILL.md +0 -0
  57. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/acpremote/agents/openai.yaml +0 -0
  58. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/acpremote/examples/README.md +0 -0
  59. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/acpremote/examples/mirror_remote.py +0 -0
  60. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/acpremote/examples/serve_command.py +0 -0
  61. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/codex-auth-helper/SKILL.md +0 -0
  62. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/codex-auth-helper/agents/openai.yaml +0 -0
  63. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/codex-auth-helper/examples/README.md +0 -0
  64. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/codex-auth-helper/examples/codex_chat_openai_graph.py +0 -0
  65. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/codex-auth-helper/examples/codex_responses_agent.py +0 -0
  66. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/langchain-acp/SKILL.md +0 -0
  67. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/langchain-acp/agents/openai.yaml +0 -0
  68. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/langchain-acp/examples/README.md +0 -0
  69. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/pydantic-acp/agents/openai.yaml +0 -0
  70. {acpkit-0.9.3 → acpkit-0.9.4}/.agents/skills/pydantic-acp/examples/README.md +0 -0
  71. {acpkit-0.9.3 → acpkit-0.9.4}/.cursorrules +0 -0
  72. {acpkit-0.9.3 → acpkit-0.9.4}/.editorconfig +0 -0
  73. {acpkit-0.9.3 → acpkit-0.9.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  74. {acpkit-0.9.3 → acpkit-0.9.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  75. {acpkit-0.9.3 → acpkit-0.9.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  76. {acpkit-0.9.3 → acpkit-0.9.4}/.github/dependabot.yml +0 -0
  77. {acpkit-0.9.3 → acpkit-0.9.4}/.github/workflows/ci.yml +0 -0
  78. {acpkit-0.9.3 → acpkit-0.9.4}/.github/workflows/codecov.yml +0 -0
  79. {acpkit-0.9.3 → acpkit-0.9.4}/.github/workflows/docs.yml +0 -0
  80. {acpkit-0.9.3 → acpkit-0.9.4}/.github/workflows/publish.yml +0 -0
  81. {acpkit-0.9.3 → acpkit-0.9.4}/.github/workflows/test.yml +0 -0
  82. {acpkit-0.9.3 → acpkit-0.9.4}/.pre-commit-config.yaml +0 -0
  83. {acpkit-0.9.3 → acpkit-0.9.4}/.python-version +0 -0
  84. {acpkit-0.9.3 → acpkit-0.9.4}/CODE_OF_CONDUCT.md +0 -0
  85. {acpkit-0.9.3 → acpkit-0.9.4}/CONTRIBUTING.md +0 -0
  86. {acpkit-0.9.3 → acpkit-0.9.4}/LICENSE +0 -0
  87. {acpkit-0.9.3 → acpkit-0.9.4}/Makefile +0 -0
  88. {acpkit-0.9.3 → acpkit-0.9.4}/README.md +0 -0
  89. {acpkit-0.9.3 → acpkit-0.9.4}/SECURITY.md +0 -0
  90. {acpkit-0.9.3 → acpkit-0.9.4}/context7.json +0 -0
  91. {acpkit-0.9.3 → acpkit-0.9.4}/docs/.partials/index-header.html +0 -0
  92. {acpkit-0.9.3 → acpkit-0.9.4}/docs/about/index.md +0 -0
  93. {acpkit-0.9.3 → acpkit-0.9.4}/docs/acpremote.md +0 -0
  94. {acpkit-0.9.3 → acpkit-0.9.4}/docs/api/acpkit.md +0 -0
  95. {acpkit-0.9.3 → acpkit-0.9.4}/docs/api/acpremote.md +0 -0
  96. {acpkit-0.9.3 → acpkit-0.9.4}/docs/api/codex_auth_helper.md +0 -0
  97. {acpkit-0.9.3 → acpkit-0.9.4}/docs/api/langchain_acp.md +0 -0
  98. {acpkit-0.9.3 → acpkit-0.9.4}/docs/cli.md +0 -0
  99. {acpkit-0.9.3 → acpkit-0.9.4}/docs/compatibility-matrix-template.md +0 -0
  100. {acpkit-0.9.3 → acpkit-0.9.4}/docs/examples/deepagents.md +0 -0
  101. {acpkit-0.9.3 → acpkit-0.9.4}/docs/examples/dynamic-factory.md +0 -0
  102. {acpkit-0.9.3 → acpkit-0.9.4}/docs/examples/finance.md +0 -0
  103. {acpkit-0.9.3 → acpkit-0.9.4}/docs/examples/index.md +0 -0
  104. {acpkit-0.9.3 → acpkit-0.9.4}/docs/examples/langchain-codex.md +0 -0
  105. {acpkit-0.9.3 → acpkit-0.9.4}/docs/examples/langchain-workspace.md +0 -0
  106. {acpkit-0.9.3 → acpkit-0.9.4}/docs/examples/remote-hosting.md +0 -0
  107. {acpkit-0.9.3 → acpkit-0.9.4}/docs/examples/travel.md +0 -0
  108. {acpkit-0.9.3 → acpkit-0.9.4}/docs/getting-started/installation.md +0 -0
  109. {acpkit-0.9.3 → acpkit-0.9.4}/docs/getting-started/langchain-quickstart.md +0 -0
  110. {acpkit-0.9.3 → acpkit-0.9.4}/docs/getting-started/pydantic-quickstart.md +0 -0
  111. {acpkit-0.9.3 → acpkit-0.9.4}/docs/getting-started/quickstart.md +0 -0
  112. {acpkit-0.9.3 → acpkit-0.9.4}/docs/helpers.md +0 -0
  113. {acpkit-0.9.3 → acpkit-0.9.4}/docs/host-backends.md +0 -0
  114. {acpkit-0.9.3 → acpkit-0.9.4}/docs/index.md +0 -0
  115. {acpkit-0.9.3 → acpkit-0.9.4}/docs/integration-audit.md +0 -0
  116. {acpkit-0.9.3 → acpkit-0.9.4}/docs/integration-readiness.md +0 -0
  117. {acpkit-0.9.3 → acpkit-0.9.4}/docs/integration-testing.md +0 -0
  118. {acpkit-0.9.3 → acpkit-0.9.4}/docs/langchain-acp/adapter-config.md +0 -0
  119. {acpkit-0.9.3 → acpkit-0.9.4}/docs/langchain-acp/bridges.md +0 -0
  120. {acpkit-0.9.3 → acpkit-0.9.4}/docs/langchain-acp/plans-thinking-approvals.md +0 -0
  121. {acpkit-0.9.3 → acpkit-0.9.4}/docs/langchain-acp/projections.md +0 -0
  122. {acpkit-0.9.3 → acpkit-0.9.4}/docs/langchain-acp/prompt-resources.md +0 -0
  123. {acpkit-0.9.3 → acpkit-0.9.4}/docs/langchain-acp/providers.md +0 -0
  124. {acpkit-0.9.3 → acpkit-0.9.4}/docs/langchain-acp/runtime-controls.md +0 -0
  125. {acpkit-0.9.3 → acpkit-0.9.4}/docs/langchain-acp/session-state.md +0 -0
  126. {acpkit-0.9.3 → acpkit-0.9.4}/docs/langchain-acp.md +0 -0
  127. {acpkit-0.9.3 → acpkit-0.9.4}/docs/llms.txt +0 -0
  128. {acpkit-0.9.3 → acpkit-0.9.4}/docs/projection-cookbook.md +0 -0
  129. {acpkit-0.9.3 → acpkit-0.9.4}/docs/providers.md +0 -0
  130. {acpkit-0.9.3 → acpkit-0.9.4}/docs/pydantic-acp/adapter-config.md +0 -0
  131. {acpkit-0.9.3 → acpkit-0.9.4}/docs/pydantic-acp/plans-thinking-approvals.md +0 -0
  132. {acpkit-0.9.3 → acpkit-0.9.4}/docs/pydantic-acp/prompt-resources.md +0 -0
  133. {acpkit-0.9.3 → acpkit-0.9.4}/docs/pydantic-acp/runtime-controls.md +0 -0
  134. {acpkit-0.9.3 → acpkit-0.9.4}/docs/pydantic-acp/session-state.md +0 -0
  135. {acpkit-0.9.3 → acpkit-0.9.4}/docs/stylesheets/tweaks.css +0 -0
  136. {acpkit-0.9.3 → acpkit-0.9.4}/docs/testing.md +0 -0
  137. {acpkit-0.9.3 → acpkit-0.9.4}/examples/__init__.py +0 -0
  138. {acpkit-0.9.3 → acpkit-0.9.4}/examples/langchain/README.md +0 -0
  139. {acpkit-0.9.3 → acpkit-0.9.4}/examples/langchain/__init__.py +0 -0
  140. {acpkit-0.9.3 → acpkit-0.9.4}/examples/langchain/codex_graph.py +0 -0
  141. {acpkit-0.9.3 → acpkit-0.9.4}/examples/langchain/deepagents_graph.py +0 -0
  142. {acpkit-0.9.3 → acpkit-0.9.4}/examples/langchain/workspace_graph.py +0 -0
  143. {acpkit-0.9.3 → acpkit-0.9.4}/examples/pydantic/.gitignore +0 -0
  144. {acpkit-0.9.3 → acpkit-0.9.4}/examples/pydantic/.travel-agent/ideas.txt +0 -0
  145. {acpkit-0.9.3 → acpkit-0.9.4}/examples/pydantic/.travel-agent/itinerary.md +0 -0
  146. {acpkit-0.9.3 → acpkit-0.9.4}/examples/pydantic/README.md +0 -0
  147. {acpkit-0.9.3 → acpkit-0.9.4}/examples/pydantic/__init__.py +0 -0
  148. {acpkit-0.9.3 → acpkit-0.9.4}/examples/pydantic/finance_agent.py +0 -0
  149. {acpkit-0.9.3 → acpkit-0.9.4}/examples/pydantic/travel_agent.py +0 -0
  150. {acpkit-0.9.3 → acpkit-0.9.4}/mkdocs.yml +0 -0
  151. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/README.md +0 -0
  152. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/pyproject.toml +0 -0
  153. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/__init__.py +0 -0
  154. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/_slash_commands.py +0 -0
  155. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/approval_store.py +0 -0
  156. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/approvals.py +0 -0
  157. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/bridge_manager.py +0 -0
  158. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/bridges/__init__.py +0 -0
  159. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/bridges/base.py +0 -0
  160. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/bridges/builtin.py +0 -0
  161. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/bridges/external_hooks.py +0 -0
  162. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/builders/__init__.py +0 -0
  163. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/builders/graph.py +0 -0
  164. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/config.py +0 -0
  165. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/event_projection.py +0 -0
  166. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/graph_source.py +0 -0
  167. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/hook_projection.py +0 -0
  168. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/permission_presentation.py +0 -0
  169. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/plan.py +0 -0
  170. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/projection.py +0 -0
  171. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/prompt_capabilities.py +0 -0
  172. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/providers.py +0 -0
  173. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/py.typed +0 -0
  174. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/runtime/__init__.py +0 -0
  175. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/runtime/_native_plan_runtime.py +0 -0
  176. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/runtime/_prompt_conversion.py +0 -0
  177. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/runtime/adapter.py +0 -0
  178. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/runtime/server.py +0 -0
  179. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/runtime/slash_commands.py +0 -0
  180. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/serialization.py +0 -0
  181. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/session/__init__.py +0 -0
  182. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/session/state.py +0 -0
  183. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/session/store.py +0 -0
  184. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/slash.py +0 -0
  185. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/langchain-acp/src/langchain_acp/types.py +0 -0
  186. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/_projection_risk.py +0 -0
  187. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/_projection_text.py +0 -0
  188. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/_slash_commands.py +0 -0
  189. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_types.py +0 -0
  190. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/approval_store.py +0 -0
  191. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/approvals.py +0 -0
  192. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/base.py +0 -0
  193. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/external_hooks.py +0 -0
  194. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/history_processor.py +0 -0
  195. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/mcp.py +0 -0
  196. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/thinking.py +0 -0
  197. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/__init__.py +0 -0
  198. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/agent.py +0 -0
  199. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/config.py +0 -0
  200. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/__init__.py +0 -0
  201. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/_policy_commands.py +0 -0
  202. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/_policy_paths.py +0 -0
  203. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/context.py +0 -0
  204. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/filesystem.py +0 -0
  205. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/policy.py +0 -0
  206. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/host/terminal.py +0 -0
  207. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/models.py +0 -0
  208. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/permission_presentation.py +0 -0
  209. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/projection.py +0 -0
  210. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/projection_helpers.py +0 -0
  211. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/prompt_capabilities.py +0 -0
  212. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/providers.py +0 -0
  213. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/py.typed +0 -0
  214. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/__init__.py +0 -0
  215. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_adapter_prompt.py +0 -0
  216. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_agent_state.py +0 -0
  217. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_compat.py +0 -0
  218. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_native_plan_runtime.py +0 -0
  219. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_prompt_model_runtime.py +0 -0
  220. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_lifecycle.py +0 -0
  221. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_model_runtime.py +0 -0
  222. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_runtime.py +0 -0
  223. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/_session_surface_runtime.py +0 -0
  224. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py +0 -0
  225. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/bridge_manager.py +0 -0
  226. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/prompts.py +0 -0
  227. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/server.py +0 -0
  228. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/session_surface.py +0 -0
  229. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/slash_commands.py +0 -0
  230. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/serialization.py +0 -0
  231. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/session/__init__.py +0 -0
  232. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/session/state.py +0 -0
  233. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/session/store.py +0 -0
  234. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/slash.py +0 -0
  235. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/__init__.py +0 -0
  236. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/fakes.py +0 -0
  237. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/testing/harness.py +0 -0
  238. {acpkit-0.9.3 → acpkit-0.9.4}/packages/adapters/pydantic-acp/src/pydantic_acp/types.py +0 -0
  239. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/.gitignore +0 -0
  240. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/LICENSE +0 -0
  241. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/README.md +0 -0
  242. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/pyproject.toml +0 -0
  243. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/__init__.py +0 -0
  244. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/__init__.py +0 -0
  245. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/config.py +0 -0
  246. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/manager.py +0 -0
  247. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/state.py +0 -0
  248. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/store.py +0 -0
  249. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/client.py +0 -0
  250. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/factory.py +0 -0
  251. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/model.py +0 -0
  252. {acpkit-0.9.3 → acpkit-0.9.4}/packages/helpers/codex-auth-helper/src/codex_auth_helper/py.typed +0 -0
  253. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/README.md +0 -0
  254. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/pyproject.toml +0 -0
  255. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/__init__.py +0 -0
  256. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/auth.py +0 -0
  257. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/client.py +0 -0
  258. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/command.py +0 -0
  259. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/config.py +0 -0
  260. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/limits.py +0 -0
  261. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/metadata.py +0 -0
  262. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/proxy_agent.py +0 -0
  263. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/py.typed +0 -0
  264. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/server.py +0 -0
  265. {acpkit-0.9.3 → acpkit-0.9.4}/packages/transports/acpremote/src/acpremote/stream.py +0 -0
  266. {acpkit-0.9.3 → acpkit-0.9.4}/pyproject.toml +0 -0
  267. {acpkit-0.9.3 → acpkit-0.9.4}/pyrightconfig.json +0 -0
  268. {acpkit-0.9.3 → acpkit-0.9.4}/scripts/check_pypi_versions.py +0 -0
  269. {acpkit-0.9.3 → acpkit-0.9.4}/scripts/demo_mcp_server.py +0 -0
  270. {acpkit-0.9.3 → acpkit-0.9.4}/scripts/generate_llms_docs.py +0 -0
  271. {acpkit-0.9.3 → acpkit-0.9.4}/scripts/mock_hook_audit.py +0 -0
  272. {acpkit-0.9.3 → acpkit-0.9.4}/scripts/mock_hook_snapshot.py +0 -0
  273. {acpkit-0.9.3 → acpkit-0.9.4}/scripts/run_if_major_change.py +0 -0
  274. {acpkit-0.9.3 → acpkit-0.9.4}/scripts/save_coverage_summary.py +0 -0
  275. {acpkit-0.9.3 → acpkit-0.9.4}/src/acpkit/__init__.py +0 -0
  276. {acpkit-0.9.3 → acpkit-0.9.4}/src/acpkit/__main__.py +0 -0
  277. {acpkit-0.9.3 → acpkit-0.9.4}/src/acpkit/_compatibility_schema.py +0 -0
  278. {acpkit-0.9.3 → acpkit-0.9.4}/src/acpkit/adapters.py +0 -0
  279. {acpkit-0.9.3 → acpkit-0.9.4}/src/acpkit/cli.py +0 -0
  280. {acpkit-0.9.3 → acpkit-0.9.4}/src/acpkit/compatibility.py +0 -0
  281. {acpkit-0.9.3 → acpkit-0.9.4}/src/acpkit/py.typed +0 -0
  282. {acpkit-0.9.3 → acpkit-0.9.4}/src/acpkit/runtime.py +0 -0
  283. {acpkit-0.9.3 → acpkit-0.9.4}/tests/__init__.py +0 -0
  284. {acpkit-0.9.3 → acpkit-0.9.4}/tests/acpremote/test_command_server.py +0 -0
  285. {acpkit-0.9.3 → acpkit-0.9.4}/tests/acpremote/test_helpers.py +0 -0
  286. {acpkit-0.9.3 → acpkit-0.9.4}/tests/acpremote/test_phase1.py +0 -0
  287. {acpkit-0.9.3 → acpkit-0.9.4}/tests/acpremote/test_phase2.py +0 -0
  288. {acpkit-0.9.3 → acpkit-0.9.4}/tests/acpremote/test_phase3.py +0 -0
  289. {acpkit-0.9.3 → acpkit-0.9.4}/tests/codex_auth_helper/__init__.py +0 -0
  290. {acpkit-0.9.3 → acpkit-0.9.4}/tests/codex_auth_helper/support.py +0 -0
  291. {acpkit-0.9.3 → acpkit-0.9.4}/tests/codex_auth_helper/test_auth.py +0 -0
  292. {acpkit-0.9.3 → acpkit-0.9.4}/tests/codex_auth_helper/test_factory.py +0 -0
  293. {acpkit-0.9.3 → acpkit-0.9.4}/tests/conftest.py +0 -0
  294. {acpkit-0.9.3 → acpkit-0.9.4}/tests/langchain/__init__.py +0 -0
  295. {acpkit-0.9.3 → acpkit-0.9.4}/tests/langchain/support.py +0 -0
  296. {acpkit-0.9.3 → acpkit-0.9.4}/tests/langchain/test_examples.py +0 -0
  297. {acpkit-0.9.3 → acpkit-0.9.4}/tests/langchain/test_low_level_helpers.py +0 -0
  298. {acpkit-0.9.3 → acpkit-0.9.4}/tests/langchain/test_runtime.py +0 -0
  299. {acpkit-0.9.3 → acpkit-0.9.4}/tests/langchain/test_support.py +0 -0
  300. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/__init__.py +0 -0
  301. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_approvals.py +0 -0
  302. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_bridge_capability_support.py +0 -0
  303. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_bridge_mcp.py +0 -0
  304. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_bridge_thinking.py +0 -0
  305. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_bridge_web_capabilities.py +0 -0
  306. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_compat.py +0 -0
  307. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_examples.py +0 -0
  308. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_host.py +0 -0
  309. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_host_policy.py +0 -0
  310. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_low_level_helpers.py +0 -0
  311. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_models.py +0 -0
  312. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_projection.py +0 -0
  313. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_projection_helpers.py +0 -0
  314. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_runtime.py +0 -0
  315. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_session_runtime_helpers.py +0 -0
  316. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_slash_commands.py +0 -0
  317. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_sources.py +0 -0
  318. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_support.py +0 -0
  319. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_testing_fakes.py +0 -0
  320. {acpkit-0.9.3 → acpkit-0.9.4}/tests/pydantic/test_testing_harness.py +0 -0
  321. {acpkit-0.9.3 → acpkit-0.9.4}/tests/test_acpkit_cli.py +0 -0
  322. {acpkit-0.9.3 → acpkit-0.9.4}/tests/test_compatibility_manifest.py +0 -0
  323. {acpkit-0.9.3 → acpkit-0.9.4}/tests/test_native_langchain_agent.py +0 -0
  324. {acpkit-0.9.3 → 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.3
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
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
@@ -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
@@ -2,4 +2,4 @@ from __future__ import annotations as _annotations
2
2
 
3
3
  __all__ = ("__version__",)
4
4
 
5
- __version__ = "0.9.3"
5
+ __version__ = "0.9.4"
@@ -263,6 +263,6 @@ Focused docs recipes:
263
263
 
264
264
  ## Compatibility Policy
265
265
 
266
- `pydantic-acp` currently pins `pydantic-ai-slim==1.83.0`.
266
+ `pydantic-acp` currently pins `pydantic-ai-slim==1.92.0`.
267
267
 
268
- That pin is deliberate. The adapter is tested against a specific Pydantic AI surface and should still be upgraded deliberately, but the hook-compatibility seam is now isolated behind ACP Kit’s own compatibility layer instead of scattering private upstream imports through the runtime.
268
+ That pin is deliberate. The adapter is tested against a specific Pydantic AI surface and should still be upgraded deliberately, but the hook-compatibility seam is isolated behind ACP Kit’s own compatibility layer instead of scattering private upstream imports through the runtime. The 1.92 surface includes function-tool preparation, output-tool preparation, output validation/processing hooks, deferred-tool-call hooks, run metadata, and conversation IDs.
@@ -0,0 +1 @@
1
+ 0.9.4
@@ -10,7 +10,7 @@ dependencies = [
10
10
  "agent-client-protocol==0.9.0",
11
11
  "anyio>=4.0.0",
12
12
  # fixed for compliance with current API
13
- "pydantic-ai-slim==1.83.0",
13
+ "pydantic-ai-slim==1.92.0",
14
14
  "pydantic>=2.7",
15
15
  "typing-extensions>=4.12.0",
16
16
  ]
@@ -37,6 +37,8 @@ from .bridges import (
37
37
  OpenAICompactionBridge,
38
38
  PlanGenerationType,
39
39
  PrefixToolsBridge,
40
+ PrepareOutputToolsBridge,
41
+ PrepareOutputToolsMode,
40
42
  PrepareToolsBridge,
41
43
  PrepareToolsMode,
42
44
  SetToolMetadataBridge,
@@ -215,6 +217,8 @@ __all__ = (
215
217
  "format_code_block",
216
218
  "format_diff_preview",
217
219
  "format_terminal_status",
220
+ "PrepareOutputToolsBridge",
221
+ "PrepareOutputToolsMode",
218
222
  "PrepareToolsBridge",
219
223
  "PrepareToolsMode",
220
224
  "RegisteredHookInfo",
@@ -2,4 +2,4 @@ from __future__ import annotations as _annotations
2
2
 
3
3
  __all__ = ("__version__",)
4
4
 
5
- __version__ = "0.9.3"
5
+ __version__ = "0.9.4"
@@ -6,7 +6,7 @@ from typing import Generic, Protocol, TypeVar
6
6
 
7
7
  from pydantic_ai import Agent as PydanticAgent
8
8
 
9
- from .awaitables import is_awaitable, is_resolved
9
+ from .awaitables import resolve_value
10
10
  from .session.state import AcpSessionContext
11
11
 
12
12
  AgentFactoryDepsT = TypeVar("AgentFactoryDepsT", contravariant=True)
@@ -61,11 +61,7 @@ class FactoryAgentSource(Generic[AgentDepsT, OutputDataT]):
61
61
  factory: AgentFactory[AgentDepsT, OutputDataT]
62
62
 
63
63
  async def get_agent(self, session: AcpSessionContext) -> PydanticAgent[AgentDepsT, OutputDataT]:
64
- candidate = self.factory(session)
65
- if is_awaitable(candidate):
66
- return await candidate
67
- assert is_resolved(candidate)
68
- return candidate
64
+ return await resolve_value(self.factory(session))
69
65
 
70
66
  async def get_deps(
71
67
  self,
@@ -2,7 +2,7 @@ from __future__ import annotations as _annotations
2
2
 
3
3
  import inspect
4
4
  from collections.abc import Awaitable
5
- from typing import TypeVar
5
+ from typing import TypeVar, cast
6
6
 
7
7
  from typing_extensions import TypeIs
8
8
 
@@ -21,6 +21,6 @@ def is_resolved(value: ValueT | Awaitable[ValueT]) -> TypeIs[ValueT]:
21
21
 
22
22
  async def resolve_value(value: ValueT | Awaitable[ValueT]) -> ValueT:
23
23
  if is_awaitable(value):
24
- return await value
24
+ return await cast(Awaitable[ValueT], value)
25
25
  assert is_resolved(value)
26
26
  return value
@@ -25,7 +25,13 @@ from .history_processor import (
25
25
  )
26
26
  from .hooks import HookBridge
27
27
  from .mcp import McpBridge, McpServerDefinition, McpToolDefinition
28
- from .prepare_tools import PlanGenerationType, PrepareToolsBridge, PrepareToolsMode
28
+ from .prepare_tools import (
29
+ PlanGenerationType,
30
+ PrepareOutputToolsBridge,
31
+ PrepareOutputToolsMode,
32
+ PrepareToolsBridge,
33
+ PrepareToolsMode,
34
+ )
29
35
  from .thinking import ThinkingBridge
30
36
 
31
37
  __all__ = (
@@ -50,6 +56,8 @@ __all__ = (
50
56
  "OpenAICompactionBridge",
51
57
  "PlanGenerationType",
52
58
  "PrefixToolsBridge",
59
+ "PrepareOutputToolsBridge",
60
+ "PrepareOutputToolsMode",
53
61
  "PrepareToolsBridge",
54
62
  "PrepareToolsMode",
55
63
  "SetToolMetadataBridge",