v0.9.3_2026-05-02
Summary
0.9.3 brings the extension-seam surface from the Pydantic adapter into langchain-acp, but
mapped onto graph ownership and LangChain runtime truth instead of Pydantic agent internals.
This release keeps the LangChain adapter architecture intact:
AdapterConfigcontinues to own adapter-level runtime knobs.NativeApprovalBridgeowns approval persistence and ACP permission presentation.LangChainAcpAgentowns slash-command interception, prompt execution, and session-surface
refresh.- Projection maps continue to own ACP-visible rendering, not graph execution semantics.
Highlights
Prompt capability configuration
langchain-acp now exposes ACP prompt capability advertisement through adapter config:
AdapterPromptCapabilitiesAdapterConfig.prompt_capabilities
This allows hosts to truthfully narrow ACP-visible audio, image, and embedded-context support even
when the underlying graph remains more permissive internally.
Approval presentation and remembered policy
Approval handling now has first-class seams parallel to the Pydantic path:
ApprovalPolicyApprovalPolicyStoreSessionMetadataApprovalPolicyStorePermissionOptionSetPermissionRequestContextPermissionToolCallBuilderDefaultPermissionToolCallBuilderProjectionAwareApprovalBridgeNativeApprovalBridge.enable_persistent_choicesNativeApprovalBridge.policy_storeNativeApprovalBridge.option_setNativeApprovalBridge.tool_call_builder
ACP permission cards can now reuse projection-aware file, command, or search context, and
remembered allow/reject choices can be stored outside session metadata when the host needs custom
policy persistence.
ACP-owned slash commands
The adapter now owns a small ACP-native slash-command layer instead of leaving the entire surface to
the graph:
- mode commands from configured session modes
/model/tools/mcp-servers- custom host commands through
SlashCommandProvider
New public seams:
SlashCommandRequestSlashCommandResultSlashCommandProviderSlashCommandHandlerStaticSlashCommandStaticSlashCommandProviderAdapterConfig.slash_command_provider
Custom commands can emit transcript updates, plain text, and optional session-surface refreshes
without invoking the graph.
External hook and runtime event projection
External runtimes can now push hook-style lifecycle events into ACP without depending on graph-owned
callbacks:
HookEventHookProjectionMapEventEmissionModeExternalHookEventBridge
The bridge supports paired start/progress emission, start-only emission, hidden progress variants,
and bridge-owned metadata export.
Filesystem search projection and tool classification
Filesystem projection now supports search/list-specific rendering on the LangChain path:
FileSystemProjectionMap.search_tool_namesFileSystemProjectionMap.default_search_toolFileSystemProjectionMap.search_path_argFileSystemProjectionMap.search_pattern_argFileSystemProjectionMap.render_search_results_as_treeFileSystemProjectionMap.hide_dot_directories_in_treeFileSystemProjectionMap.tree_root_labelProjectionAwareToolClassifier
This lets search-style tool output render as deterministic ACP tree progress without touching the
filesystem, and gives approval rendering a better tool-kind classifier for projected tools.
Compatibility and behavior
- Existing approval bridges keep working through the legacy compatibility path.
- Projection-aware approval behavior is opt-in through
ProjectionAwareApprovalBridge. - Remembered approval lookup is live runtime behavior through
ApprovalPolicyStore.get_policy(...),
not metadata export. ProjectionAwareToolClassifierpreservesraw_inputwhen it falls back to the wrapped
classifier, so arg-sensitive custom classifiers continue to behave correctly.- Custom slash command ids must already be normalized lowercase slash ids before they are advertised
to ACP clients. - Built-in slash commands still run before host-defined commands.
- Search/list projection remains opt-in; existing projection maps keep default behavior unless the
new fields are configured.
Public API additions
New or newly-exported public seams in this release include:
AdapterPromptCapabilitiesApprovalPolicyApprovalPolicyStoreSessionMetadataApprovalPolicyStorePermissionOptionSetPermissionRequestContextPermissionToolCallBuilderDefaultPermissionToolCallBuilderProjectionAwareApprovalBridgesupports_projection_aware_approval_bridge(...)SlashCommandRequestSlashCommandResultSlashCommandProviderSlashCommandHandlerStaticSlashCommandStaticSlashCommandProviderHookEventHookProjectionMapEventEmissionModeExternalHookEventBridgeProjectionAwareToolClassifier
Documentation and examples
Documentation was expanded across the LangChain adapter docs:
docs/langchain-acp.mddocs/langchain-acp/adapter-config.mddocs/langchain-acp/runtime-controls.mddocs/langchain-acp/plans-thinking-approvals.mddocs/langchain-acp/bridges.mddocs/langchain-acp/projections.mddocs/langchain-acp/providers.mddocs/getting-started/langchain-quickstart.mdpackages/adapters/langchain-acp/README.md
The docs now cover:
- explicit
prompt_capabilities - ACP-owned slash commands and custom providers
- persistent approval choices on
NativeApprovalBridge - projection-aware permission rendering
- external hook-event projection
- search/list tree rendering
- Codex helper usage with required
instructions=...
Validation
Validation for this release:
uv run pytest --cov=.:469 passed- Line & Branch coverage:
100.00% make prod: passedgit diff --check: passed
Changed files
Primary implementation areas:
packages/adapters/langchain-acp/src/langchain_acp/config.pypackages/adapters/langchain-acp/src/langchain_acp/prompt_capabilities.pypackages/adapters/langchain-acp/src/langchain_acp/approval_store.pypackages/adapters/langchain-acp/src/langchain_acp/permission_presentation.pypackages/adapters/langchain-acp/src/langchain_acp/approvals.pypackages/adapters/langchain-acp/src/langchain_acp/slash.pypackages/adapters/langchain-acp/src/langchain_acp/_slash_commands.pypackages/adapters/langchain-acp/src/langchain_acp/runtime/slash_commands.pypackages/adapters/langchain-acp/src/langchain_acp/hook_projection.pypackages/adapters/langchain-acp/src/langchain_acp/bridges/external_hooks.pypackages/adapters/langchain-acp/src/langchain_acp/projection.pypackages/adapters/langchain-acp/src/langchain_acp/runtime/adapter.pypackages/adapters/langchain-acp/src/langchain_acp/runtime/server.pypackages/adapters/langchain-acp/src/langchain_acp/__init__.py
Full Changelog: v0.9.0_2026-04-21...v0.9.3_2026-05-01
Full Changelog: v0.9.0_2026-04-21...v0.9.3_2026-05-01