Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
3f67761
test: specify ACP client provider bridge for pydantic AI v2
arthrod Jul 1, 2026
1796f56
feat: add ACP provider bridge for pydantic AI v2
arthrod Jul 2, 2026
13c8d57
build: require pydantic AI v2 for pydantic-acp
arthrod Jul 2, 2026
f979b11
feat: export ACP client provider bridge
arthrod Jul 2, 2026
4994131
build: align dev dependency with pydantic AI v2
arthrod Jul 2, 2026
663c673
test: tighten ACP client provider observable contract
arthrod Jul 4, 2026
a5d78a3
refactor: polish ACP provider v2 type surface
arthrod Jul 4, 2026
f3c2f78
docs: document ACP client provider bridge
arthrod Jul 4, 2026
6c4d0bc
Merge branch 'main' into arthur/acp-client-provider-v2-20260701
arthrod Jul 4, 2026
b0c55ee
🔧 CodeRabbit Recipe: Add custom finishing touch type-mania
coderabbitai[bot] Jul 4, 2026
536e728
🔧 CodeRabbit Recipe: Add custom TDD red-green finishing touch
coderabbitai[bot] Jul 4, 2026
c4549ac
Merge pull request #4 from arthrod/coderabbitai/recipe3/6c4d0bc
arthrod Jul 7, 2026
fbfe64c
Merge pull request #2 from arthrod/coderabbitai/recipe2/6c4d0bc
arthrod Jul 7, 2026
0bf499a
🔧 CodeRabbit Recipe: Add custom finishing touch tdd-red-green
coderabbitai[bot] Jul 7, 2026
8c73122
🔧 CodeRabbit Recipe: Deduplicate custom finishing touches
coderabbitai[bot] Jul 7, 2026
48e605a
lossless bug
opencode-agent[bot] Jul 7, 2026
32656ad
Merge branch 'arthur/acp-client-provider-v2-20260701' into coderabbit…
arthrod Jul 7, 2026
665da6b
Merge pull request #14 from arthrod/coderabbitai/recipe1/fbfe64c
arthrod Jul 7, 2026
39adf48
Merge branch 'arthur/acp-client-provider-v2-20260701' into coderabbit…
arthrod Jul 7, 2026
4161748
Merge pull request #11 from arthrod/coderabbitai/recipe3/fbfe64c
arthrod Jul 7, 2026
672c9ee
lossless bug
opencode-agent[bot] Jul 7, 2026
077e6fd
📝 CodeRabbit Chat: Add unit tests for PR changes
coderabbitai[bot] Jul 7, 2026
624e18f
📝 CodeRabbit Chat: Add unit tests for PR changes
coderabbitai[bot] Jul 7, 2026
de8db3f
📝 CodeRabbit Chat: Add unit tests for PR changes
coderabbitai[bot] Jul 7, 2026
9860b1f
📝 CodeRabbit Chat: Add unit tests for PR changes
coderabbitai[bot] Jul 7, 2026
5afc0d0
lossless bug
opencode-agent[bot] Jul 7, 2026
d143c19
Refactor AcpProvider and related classes from dataclasses to manual _…
opencode-agent[bot] Jul 7, 2026
65f1390
Remove blank lines after function definitions across multiple files
opencode-agent[bot] Jul 7, 2026
e338cd1
Add type annotations and cast for improved type safety in AcpProvider…
opencode-agent[bot] Jul 7, 2026
e188820
formatting
opencode-agent[bot] Jul 7, 2026
bfb34d2
Add empty message handling and refactor test assertions for clarity
opencode-agent[bot] Jul 7, 2026
ec26651
finalizing
opencode-agent[bot] Jul 7, 2026
6811e5b
Fix AcpProvider type safety and prompt rendering
opencode-agent[bot] Jul 7, 2026
d6fab16
Add type annotation for delegate.on_connect and make model_profile st…
opencode-agent[bot] Jul 7, 2026
4fb37cc
Remove unused Callable import and use setattr for dynamic attribute a…
opencode-agent[bot] Jul 7, 2026
429f684
Fix trailing commas and use string literals for forward-reference typ…
opencode-agent[bot] Jul 8, 2026
8d12d6a
Bump version to 1.1.0 and update CHANGELOG for Pydantic AI v2 provide…
opencode-agent[bot] Jul 8, 2026
c3c64ea
full test coverage
fswair Jul 8, 2026
a05be1c
Merge branch 'main' into arthur/acp-client-provider-v2-20260701
fswair Jul 8, 2026
8ba52f4
Fix ACP provider defaults and demo output paths
fswair Jul 8, 2026
b934444
Update changelog for ACP provider defaults
fswair Jul 8, 2026
e93ce58
Sync package VERSION files
fswair Jul 8, 2026
2eff588
ruff: format
fswair Jul 8, 2026
bd2b918
Document ACP provider bridge release surface
fswair Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

def describe_codex_surface() -> str:
"""Describe the LangChain-facing Codex helper seam."""

return (
"This graph uses codex-auth-helper to build a LangChain ChatOpenAI model "
"backed by the local Codex login."
Expand Down
11 changes: 4 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,6 @@ references
AGENTS.md
SPEC.md

# Sessions
.acp-sessions/
.demo-sessions/

# Temporary
tmp
*.snapshot
Expand All @@ -89,12 +85,13 @@ coverage.json
direction.md
scripts/openrouter*.py
scripts/check_releases.py
/.finance-agent
# Example runtime output
/agent_demos/

# Scripts
connect*.py
expose*.py
probe*.py
pydantic_test*.py
CHANGELOG
.acprouter-state
.deepagents-graph
.workspace-graph
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,39 @@
ACP Kit uses synchronized versions for `acpkit`, `pydantic-acp`, `langchain-acp`,
`codex-auth-helper`, and `acpremote`.

## [1.1.0] - 2026-07-07

### Added

- Pydantic AI v2 ACP client provider bridge (`AcpProvider`, `AcpModel`,
`AcpHostBridge`) in `pydantic-acp`, enabling ACP agents to be consumed as
Pydantic AI providers with model profiles, streaming, tool calls, approvals,
sessions, and projections.
- Public export of the provider bridge surface from `pydantic_acp`.

### Changed

- `pydantic-acp` now requires Pydantic AI v2.
- Dev dependency aligned with Pydantic AI v2.
- `AcpProvider` construction now uses the explicit `acp_agent=` keyword for
ACP agent instances.
- `provider.model()` now leaves ACP model selection to the wrapped agent's
session default; pass a concrete model name only when the ACP agent accepts
that `session/set_model` id.
- Maintained examples now write generated workspaces and local session state
under `agent_demos/`, with `.gitignore` ignoring that single runtime output
directory.
- Workspace packages synchronized to `1.1.0`.

### Fixed

- Type-safety and forward-reference handling in the ACP provider bridge.
- Default ACP provider models no longer send `session/set_model("agent")` to
wrapped ACP agents that reject `"agent"` as an explicit remote model id.
- `AcpProvider.model(history_mode=...)` no longer mutates the provider-wide
default history mode for other model instances created from the same
provider.

## [1.0.0] - 2026-07-03

This is the first stable release of the synchronized ACP Kit workspace.
Expand Down Expand Up @@ -46,4 +79,5 @@ This is the first stable release of the synchronized ACP Kit workspace.
failure paths close every owned resource deterministically.
- CLI target import failures retain actionable root-cause details.

[1.1.0]: https://github.com/vcoderun/acpkit/releases/tag/v1.1.0
[1.0.0]: https://github.com/vcoderun/acpkit/releases/tag/v1.0.0
4 changes: 2 additions & 2 deletions COVERAGE
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
Line coverage: 100.00% (9309 / 9309)
Branch coverage: 100.00% (3078 / 3078)
Line coverage: 100.00% (9711 / 9711)
Branch coverage: 100.00% (3216 / 3216)
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ check-matrix:
check-pydantic-ai-matrix:
@for version in $(PYDANTIC_AI_VERSIONS); do \
printf "$(BLUE)==>$(RESET) Checking Pydantic AI $$version compatibility...\n"; \
uv run --extra dev --with "pydantic-ai-slim==$$version" pytest tests/pydantic tests/test_acpkit_cli.py tests/test_native_pydantic_agent.py -q || exit $$?; \
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 uv run --extra dev --with "pydantic-ai-slim==$$version" pytest -p pytest_asyncio.plugin tests/pydantic tests/test_acpkit_cli.py tests/test_native_pydantic_agent.py -q || exit $$?; \
uv run --extra dev --with "pydantic-ai-slim==$$version" ty check packages/adapters/pydantic-acp/src tests/pydantic examples/pydantic tests/test_acpkit_cli.py tests/test_native_pydantic_agent.py || exit $$?; \
done
@printf "$(GREEN)✔ Pydantic AI compatibility matrix complete.$(RESET)\n"
Expand Down
27 changes: 27 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,33 @@ Host-facing utilities include:
- `BlackBoxHarness` for ACP boundary integration tests
- `CompatibilityManifest` for documenting the ACP surface an integration truly supports

## ACP Client Provider Bridge

`pydantic-acp` also includes the inverse bridge: an ACP agent can be consumed as a Pydantic AI v2 provider/model pair via `AcpProvider` and `AcpModel`.

```python
from pydantic_ai import Agent
from pydantic_acp import AcpProvider

# `remote_acp_agent` can be any object implementing the ACP Agent interface.
provider = AcpProvider(acp_agent=remote_acp_agent, cwd="/workspace")
model = provider.model()
agent = Agent(model)

result = await agent.run("Summarize the current workspace state.")
print(result.output)
```

This keeps ownership boundaries explicit:

- Pydantic AI owns the outer agent run, output validation, and normal model/provider lifecycle.
- ACP owns the delegated agent session, ACP-visible updates, and any editor or host capabilities requested by that agent.
- `provider.model()` leaves ACP model selection to the wrapped agent's session default; pass `provider.model("zed-agent")` only when the ACP agent accepts that concrete `session/set_model` ID.
- `AcpHostBridge` records ACP `session_update` messages and can delegate filesystem, terminal, approval, and extension callbacks to a real ACP host client when one is supplied.
- Pydantic AI function tools are intentionally not executed directly by `AcpModel`; register tools on the ACP agent or expose host capabilities through ACP.

Use this bridge when the thing you have is already an ACP agent and you want it to participate in code that expects a Pydantic AI provider/model. It is not another ACP server adapter and it does not replace `create_acp_agent(...)`.

## What `langchain-acp` Supports

`langchain-acp` keeps ACP Kit's adapter seams intact while staying graph-centric on the upstream side.
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.0.0
1.1.0
8 changes: 8 additions & 0 deletions docs/api/pydantic_acp.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@ This page documents the public surface re-exported by `pydantic_acp`.

::: pydantic_acp.RuntimeAgent

## ACP Client Provider Bridge

::: pydantic_acp.AcpProvider

::: pydantic_acp.AcpModel

::: pydantic_acp.AcpHostBridge

## Agent Source Classes And Protocols

::: pydantic_acp.AgentFactory
Expand Down
3 changes: 2 additions & 1 deletion docs/examples/finance.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ acpkit run --addr ws://127.0.0.1:8080/acp/ws

- the module exports `agent`, `config`, `acp_agent`, and `main`; use
`acp_agent` when CLI or remote hosting must preserve the custom configuration
- `FinancePlanPersistenceProvider` writes ACP plans into `.acpkit/plans/`
- `FinancePlanPersistenceProvider` writes ACP plans into
`agent_demos/finance-agent/plans/`
- `PrepareToolsBridge` keeps `ask`, `plan`, and `trade` behaviors explicit instead of scattering them across separate examples
- `FileSystemProjectionMap` turns note reads and writes into rich ACP diffs
- `NativeApprovalBridge` keeps mutating writes truthfully approval-gated
Loading