acpkit 0.4.1__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {acpkit-0.4.1 → acpkit-0.4.2}/.github/workflows/monorepo-ci.yml +3 -3
- {acpkit-0.4.1 → acpkit-0.4.2}/.github/workflows/publish.yml +3 -3
- {acpkit-0.4.1 → acpkit-0.4.2}/.gitignore +3 -1
- acpkit-0.4.2/.pre-commit-config.yaml +14 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/Makefile +6 -1
- {acpkit-0.4.1 → acpkit-0.4.2}/PKG-INFO +156 -30
- {acpkit-0.4.1 → acpkit-0.4.2}/README.md +150 -29
- {acpkit-0.4.1 → acpkit-0.4.2}/SKILL.md +4 -4
- acpkit-0.4.2/VERSION +1 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/docs/bridges.md +19 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/docs/cli.md +51 -3
- {acpkit-0.4.1 → acpkit-0.4.2}/docs/helpers.md +2 -2
- {acpkit-0.4.1 → acpkit-0.4.2}/docs/index.md +16 -3
- {acpkit-0.4.1 → acpkit-0.4.2}/docs/providers.md +103 -0
- acpkit-0.4.2/examples/pydantic/.gitignore +2 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/examples/pydantic/README.md +15 -6
- acpkit-0.4.2/examples/pydantic/strong_agent.py +560 -0
- acpkit-0.4.2/examples/pydantic/strong_agent_v2.py +498 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/README.md +6 -6
- acpkit-0.4.2/packages/adapters/pydantic-acp/VERSION +1 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/pyproject.toml +1 -1
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/__init__.py +1 -6
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/approvals.py +1 -6
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/history_processor.py +2 -6
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/hooks.py +41 -22
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/prepare_tools.py +10 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/host/context.py +7 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/projection.py +11 -13
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/providers.py +1 -6
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/adapter.py +186 -18
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/hook_introspection.py +5 -1
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/server.py +1 -6
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/slash_commands.py +7 -1
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/session/state.py +7 -1
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/session/store.py +30 -6
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/README.md +3 -3
- acpkit-0.4.2/packages/helpers/codex-auth-helper/VERSION +1 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/pyproject.toml +1 -1
- {acpkit-0.4.1 → acpkit-0.4.2}/pyproject.toml +4 -2
- {acpkit-0.4.1 → acpkit-0.4.2}/pyrightconfig.json +1 -1
- {acpkit-0.4.1 → acpkit-0.4.2}/src/acpkit/__init__.py +5 -1
- acpkit-0.4.2/src/acpkit/cli.py +87 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/src/acpkit/runtime.py +48 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/codex_auth_helper/test_factory.py +3 -1
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/pydantic/test_bridges.py +32 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/pydantic/test_models.py +175 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/pydantic/test_projection.py +3 -1
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/pydantic/test_slash_commands.py +16 -5
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/pydantic/test_sources.py +54 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/test_acpkit_cli.py +165 -1
- acpkit-0.4.1/.pre-commit-config.yaml +0 -16
- acpkit-0.4.1/VERSION +0 -1
- acpkit-0.4.1/examples/pydantic/my_agent.py +0 -1012
- acpkit-0.4.1/packages/adapters/pydantic-acp/VERSION +0 -1
- acpkit-0.4.1/packages/helpers/codex-auth-helper/VERSION +0 -1
- acpkit-0.4.1/src/acpkit/cli.py +0 -50
- {acpkit-0.4.1 → acpkit-0.4.2}/.cursorrules +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/.editorconfig +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/.github/dependabot.yml +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/.github/workflows/docs.yml +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/.github/workflows/test.yml +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/.python-version +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/CODE_OF_CONDUCT.md +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/CONTRIBUTING.md +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/LICENSE +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/SECURITY.md +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/context7.json +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/docs/about/index.md +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/docs/host-backends.md +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/docs/llms.txt +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/docs/testing.md +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/examples/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/examples/pydantic/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/examples/pydantic/approvals.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/examples/pydantic/bridges.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/examples/pydantic/factory_agent.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/examples/pydantic/hook_projection.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/examples/pydantic/host_context.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/examples/pydantic/providers.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/examples/pydantic/static_agent.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/mkdocs.yml +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_source.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/agent_types.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/awaitables.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/base.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/bridges/mcp.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/builders/agent.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/config.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/hook_projection.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/host/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/host/filesystem.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/host/terminal.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/models.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/py.typed +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/bridge_manager.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/prompts.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/runtime/session_surface.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/serialization.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/adapters/pydantic-acp/src/pydantic_acp/session/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/.gitignore +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/LICENSE +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/config.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/manager.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/state.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/auth/store.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/client.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/factory.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/model.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/packages/helpers/codex-auth-helper/src/codex_auth_helper/py.typed +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/scripts/demo_mcp_server.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/scripts/mock_hook_audit.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/scripts/mock_hook_snapshot.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/src/acpkit/__main__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/src/acpkit/adapters.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/src/acpkit/py.typed +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/codex_auth_helper/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/codex_auth_helper/support.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/conftest.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/pydantic/__init__.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/pydantic/support.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/pydantic/test_approvals.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/pydantic/test_hook_introspection.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/pydantic/test_host.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/pydantic/test_runtime.py +0 -0
- {acpkit-0.4.1 → acpkit-0.4.2}/tests/test_native_pydantic_agent.py +0 -0
|
@@ -20,15 +20,15 @@ jobs:
|
|
|
20
20
|
runs-on: ubuntu-latest
|
|
21
21
|
steps:
|
|
22
22
|
- name: Check Out Repository
|
|
23
|
-
uses: actions/checkout@
|
|
23
|
+
uses: actions/checkout@v6
|
|
24
24
|
|
|
25
25
|
- name: Set Up Python
|
|
26
|
-
uses: actions/setup-python@
|
|
26
|
+
uses: actions/setup-python@v6
|
|
27
27
|
with:
|
|
28
28
|
python-version: "3.11"
|
|
29
29
|
|
|
30
30
|
- name: Set Up uv
|
|
31
|
-
uses: astral-sh/setup-uv@
|
|
31
|
+
uses: astral-sh/setup-uv@v7
|
|
32
32
|
with:
|
|
33
33
|
enable-cache: true
|
|
34
34
|
|
|
@@ -21,15 +21,15 @@ jobs:
|
|
|
21
21
|
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
|
22
22
|
steps:
|
|
23
23
|
- name: Check Out Repository
|
|
24
|
-
uses: actions/checkout@
|
|
24
|
+
uses: actions/checkout@v6
|
|
25
25
|
|
|
26
26
|
- name: Set Up Python
|
|
27
|
-
uses: actions/setup-python@
|
|
27
|
+
uses: actions/setup-python@v6
|
|
28
28
|
with:
|
|
29
29
|
python-version: "3.11"
|
|
30
30
|
|
|
31
31
|
- name: Set Up uv
|
|
32
|
-
uses: astral-sh/setup-uv@
|
|
32
|
+
uses: astral-sh/setup-uv@v7
|
|
33
33
|
with:
|
|
34
34
|
enable-cache: true
|
|
35
35
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v4.5.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: check-yaml
|
|
6
|
+
- id: check-toml
|
|
7
|
+
|
|
8
|
+
- repo: local
|
|
9
|
+
hooks:
|
|
10
|
+
- id: make-prod
|
|
11
|
+
name: verify build
|
|
12
|
+
entry: make prod
|
|
13
|
+
language: system
|
|
14
|
+
pass_filenames: false
|
|
@@ -3,7 +3,7 @@ GREEN := \033[1;32m
|
|
|
3
3
|
RESET := \033[0m
|
|
4
4
|
PYTHON_VERSIONS := 3.11.13 3.12.10 3.13.9
|
|
5
5
|
|
|
6
|
-
.PHONY: tests format check check-matrix all prod rename serve
|
|
6
|
+
.PHONY: tests format check-formatted check check-matrix all prod rename serve
|
|
7
7
|
|
|
8
8
|
# Hack to allow passing arguments to make commands (e.g. make rename my_project)
|
|
9
9
|
ifeq (rename,$(firstword $(MAKECMDGOALS)))
|
|
@@ -27,6 +27,11 @@ format:
|
|
|
27
27
|
@uv run ruff format
|
|
28
28
|
@printf "$(GREEN)✔ Formatting complete.$(RESET)\n"
|
|
29
29
|
|
|
30
|
+
check-formatted:
|
|
31
|
+
@printf "$(BLUE)==>$(RESET) Checking formatting with ruff format --check...\n"
|
|
32
|
+
@uv run ruff format --check
|
|
33
|
+
@printf "$(GREEN)✔ Formatting check complete.$(RESET)\n"
|
|
34
|
+
|
|
30
35
|
check:
|
|
31
36
|
@printf "$(BLUE)==>$(RESET) Running ruff checks...\n"
|
|
32
37
|
@uv run --extra dev ruff check
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: acpkit
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: ACP Kit provides a common adapter for Agent Frameworks.
|
|
5
5
|
Project-URL: Homepage, https://github.com/vcoderun/acpkit
|
|
6
6
|
Project-URL: Issues, https://github.com/vcoderun/acpkit/issues
|
|
@@ -31,9 +31,11 @@ Requires-Dist: pydantic>=2.7; extra == 'all'
|
|
|
31
31
|
Requires-Dist: pytest; extra == 'all'
|
|
32
32
|
Requires-Dist: pytest-asyncio; extra == 'all'
|
|
33
33
|
Requires-Dist: pytest-cov; extra == 'all'
|
|
34
|
+
Requires-Dist: python-dotenv; extra == 'all'
|
|
34
35
|
Requires-Dist: ruff; extra == 'all'
|
|
35
36
|
Requires-Dist: ty; extra == 'all'
|
|
36
37
|
Requires-Dist: typing-extensions>=4.12.0; extra == 'all'
|
|
38
|
+
Requires-Dist: uv>=0.8.3; extra == 'all'
|
|
37
39
|
Provides-Extra: codex
|
|
38
40
|
Requires-Dist: codex-auth-helper; extra == 'codex'
|
|
39
41
|
Provides-Extra: dev
|
|
@@ -48,12 +50,15 @@ Requires-Dist: pydantic>=2.7; extra == 'dev'
|
|
|
48
50
|
Requires-Dist: pytest; extra == 'dev'
|
|
49
51
|
Requires-Dist: pytest-asyncio; extra == 'dev'
|
|
50
52
|
Requires-Dist: pytest-cov; extra == 'dev'
|
|
53
|
+
Requires-Dist: python-dotenv; extra == 'dev'
|
|
51
54
|
Requires-Dist: ruff; extra == 'dev'
|
|
52
55
|
Requires-Dist: ty; extra == 'dev'
|
|
53
56
|
Requires-Dist: typing-extensions>=4.12.0; extra == 'dev'
|
|
54
57
|
Provides-Extra: docs
|
|
55
58
|
Requires-Dist: mkdocs-material; extra == 'docs'
|
|
56
59
|
Requires-Dist: mkdocstrings[python]; extra == 'docs'
|
|
60
|
+
Provides-Extra: launch
|
|
61
|
+
Requires-Dist: uv>=0.8.3; extra == 'launch'
|
|
57
62
|
Provides-Extra: pydantic
|
|
58
63
|
Requires-Dist: pydantic-acp; extra == 'pydantic'
|
|
59
64
|
Description-Content-Type: text/markdown
|
|
@@ -84,6 +89,16 @@ uv pip install "acpkit[pydantic]"
|
|
|
84
89
|
pip install "acpkit[pydantic]"
|
|
85
90
|
```
|
|
86
91
|
|
|
92
|
+
To use `acpkit launch ...`, install the optional launch extra:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
uv pip install "acpkit[launch]"
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
pip install "acpkit[launch]"
|
|
100
|
+
```
|
|
101
|
+
|
|
87
102
|
Development:
|
|
88
103
|
|
|
89
104
|
```bash
|
|
@@ -99,9 +114,9 @@ pip install -e ".[dev,docs,pydantic]"
|
|
|
99
114
|
Run a supported agent target through ACP:
|
|
100
115
|
|
|
101
116
|
```bash
|
|
102
|
-
acpkit run
|
|
103
|
-
acpkit run
|
|
104
|
-
acpkit run
|
|
117
|
+
acpkit run strong_agent
|
|
118
|
+
acpkit run strong_agent:agent
|
|
119
|
+
acpkit run strong_agent:agent -p ./examples
|
|
105
120
|
```
|
|
106
121
|
|
|
107
122
|
`acpkit` resolves `module` or `module:attribute` targets, auto-detects `pydantic_ai.Agent`
|
|
@@ -111,6 +126,31 @@ selects the last defined `pydantic_ai.Agent` instance in that module.
|
|
|
111
126
|
If the matching adapter extra is not installed, `acpkit` fails with an install hint such as
|
|
112
127
|
`uv pip install "acpkit[pydantic]"`.
|
|
113
128
|
|
|
129
|
+
Launch a target through Toad ACP:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
acpkit launch strong_agent
|
|
133
|
+
acpkit launch strong_agent:agent -p ./examples
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
`acpkit launch TARGET` mirrors the resolved target to:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
toad acp "acpkit run TARGET [-p PATH]..."
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
The command is dispatched through `uvx --python 3.14 --from batrachian-toad`, so Toad runs in a
|
|
143
|
+
separate Python 3.14 tool environment and does not replace your project Python.
|
|
144
|
+
|
|
145
|
+
If the script already starts its own ACP server and should be launched directly, use `--command`:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
acpkit launch -c "python3.11 strong_agent.py"
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
`launch TARGET` and `launch --command ...` are mutually exclusive. `-p/--path` only applies to
|
|
152
|
+
`TARGET` mode.
|
|
153
|
+
|
|
114
154
|
## run_acp
|
|
115
155
|
|
|
116
156
|
Use `run_acp(...)` when you want to start an ACP server directly from a Pydantic AI agent:
|
|
@@ -162,7 +202,7 @@ asyncio.run(run_agent(acp_agent))
|
|
|
162
202
|
- persistence: `session_store`
|
|
163
203
|
- model selection: `allow_model_selection`, `available_models`, `models_provider`
|
|
164
204
|
- mode and config state: `modes_provider`, `config_options_provider`
|
|
165
|
-
- plans: `plan_provider`
|
|
205
|
+
- plans: `plan_provider`, or native plan state via `PrepareToolsMode(plan_mode=True)`
|
|
166
206
|
- approvals: `approval_bridge`, `approval_state_provider`
|
|
167
207
|
- bridges: `capability_bridges`
|
|
168
208
|
- projection and classification: `projection_maps`, `tool_classifier`, `enable_generic_tool_projection`
|
|
@@ -208,6 +248,74 @@ config = AdapterConfig(
|
|
|
208
248
|
run_acp(agent=agent, config=config)
|
|
209
249
|
```
|
|
210
250
|
|
|
251
|
+
## Native Plan State
|
|
252
|
+
|
|
253
|
+
When `plan_provider` is not configured, the adapter can manage ACP plan state natively. Enable it
|
|
254
|
+
by marking one `PrepareToolsMode` with `plan_mode=True` inside a `PrepareToolsBridge`:
|
|
255
|
+
|
|
256
|
+
```python
|
|
257
|
+
from pydantic_ai import Agent
|
|
258
|
+
from pydantic_ai.tools import RunContext, ToolDefinition
|
|
259
|
+
from pydantic_acp import AdapterConfig, PrepareToolsBridge, PrepareToolsMode, run_acp
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
def plan_tools(
|
|
263
|
+
ctx: RunContext[None], tool_defs: list[ToolDefinition]
|
|
264
|
+
) -> list[ToolDefinition]:
|
|
265
|
+
del ctx
|
|
266
|
+
return list(tool_defs)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def agent_tools(
|
|
270
|
+
ctx: RunContext[None], tool_defs: list[ToolDefinition]
|
|
271
|
+
) -> list[ToolDefinition]:
|
|
272
|
+
del ctx
|
|
273
|
+
return list(tool_defs)
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
agent = Agent("openai:gpt-5", name="plan-agent")
|
|
277
|
+
|
|
278
|
+
run_acp(
|
|
279
|
+
agent=agent,
|
|
280
|
+
config=AdapterConfig(
|
|
281
|
+
capability_bridges=[
|
|
282
|
+
PrepareToolsBridge(
|
|
283
|
+
default_mode_id="agent",
|
|
284
|
+
modes=[
|
|
285
|
+
PrepareToolsMode(
|
|
286
|
+
id="plan",
|
|
287
|
+
name="Plan",
|
|
288
|
+
description="Inspect and write plans.",
|
|
289
|
+
prepare_func=plan_tools,
|
|
290
|
+
plan_mode=True,
|
|
291
|
+
),
|
|
292
|
+
PrepareToolsMode(
|
|
293
|
+
id="agent",
|
|
294
|
+
name="Agent",
|
|
295
|
+
description="Full tool surface.",
|
|
296
|
+
prepare_func=agent_tools,
|
|
297
|
+
),
|
|
298
|
+
],
|
|
299
|
+
),
|
|
300
|
+
],
|
|
301
|
+
),
|
|
302
|
+
)
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
When the session is in `plan` mode, the adapter:
|
|
306
|
+
|
|
307
|
+
- injects `acp_get_plan` and `acp_set_plan` as hidden tools on the agent
|
|
308
|
+
- extends `output_type` with `NativePlanGeneration` so the agent can emit a structured plan in a
|
|
309
|
+
single response
|
|
310
|
+
|
|
311
|
+
`NativePlanGeneration` fields:
|
|
312
|
+
- `plan_entries: list[PlanEntry]` — structured plan entries
|
|
313
|
+
- `plan_md: str` — optional markdown representation
|
|
314
|
+
|
|
315
|
+
Native plan state and `plan_provider` are mutually exclusive. See
|
|
316
|
+
[docs/providers.md](https://github.com/vcoderun/acpkit/blob/main/docs/providers.md) for full
|
|
317
|
+
details.
|
|
318
|
+
|
|
211
319
|
## Agent Factories
|
|
212
320
|
|
|
213
321
|
Use a factory or custom `AgentSource` when agent construction depends on the current session:
|
|
@@ -226,6 +334,24 @@ def build_agent(session: AcpSessionContext) -> Agent[None, str]:
|
|
|
226
334
|
acp_agent = create_acp_agent(agent_factory=build_agent)
|
|
227
335
|
```
|
|
228
336
|
|
|
337
|
+
`StaticAgentSource` accepts an optional `deps` field to pass typed runtime dependencies alongside
|
|
338
|
+
a shared agent instance without a factory:
|
|
339
|
+
|
|
340
|
+
```python
|
|
341
|
+
from pydantic_acp import AdapterConfig, create_acp_agent
|
|
342
|
+
from pydantic_acp.agent_source import StaticAgentSource
|
|
343
|
+
from pydantic_ai import Agent
|
|
344
|
+
|
|
345
|
+
from myapp.deps import AppDependencies
|
|
346
|
+
|
|
347
|
+
deps = AppDependencies(db=my_db, cache=my_cache)
|
|
348
|
+
agent = Agent("openai:gpt-5", name="deps-agent", deps_type=AppDependencies)
|
|
349
|
+
|
|
350
|
+
acp_agent = create_acp_agent(
|
|
351
|
+
agent_source=StaticAgentSource(agent=agent, deps=deps),
|
|
352
|
+
)
|
|
353
|
+
```
|
|
354
|
+
|
|
229
355
|
## Session Stores
|
|
230
356
|
|
|
231
357
|
`MemorySessionStore` is the default. Use `FileSessionStore` when sessions should survive process
|
|
@@ -268,7 +394,7 @@ The adapter exposes a small ACP control plane alongside normal prompts:
|
|
|
268
394
|
Codex-backed model changes must be explicit:
|
|
269
395
|
|
|
270
396
|
```text
|
|
271
|
-
/model codex:gpt-5
|
|
397
|
+
/model codex:gpt-5.4
|
|
272
398
|
```
|
|
273
399
|
|
|
274
400
|
## Approval Flow
|
|
@@ -365,7 +491,7 @@ Built-in bridges cover:
|
|
|
365
491
|
- `McpBridge`
|
|
366
492
|
- `AgentBridgeBuilder`
|
|
367
493
|
|
|
368
|
-
See [docs/bridges.md](/
|
|
494
|
+
See [docs/bridges.md](https://github.com/vcoderun/acpkit/blob/main/docs/bridges.md) for the full bridge model.
|
|
369
495
|
|
|
370
496
|
## Providers
|
|
371
497
|
|
|
@@ -377,7 +503,7 @@ Providers let the host own session state while the adapter exposes it through AC
|
|
|
377
503
|
- `PlanProvider`
|
|
378
504
|
- `ApprovalStateProvider`
|
|
379
505
|
|
|
380
|
-
See [docs/providers.md](/
|
|
506
|
+
See [docs/providers.md](https://github.com/vcoderun/acpkit/blob/main/docs/providers.md) for full details.
|
|
381
507
|
|
|
382
508
|
## Host Backends
|
|
383
509
|
|
|
@@ -402,7 +528,7 @@ def build_agent(client: AcpClient, session: AcpSessionContext) -> Agent[None, st
|
|
|
402
528
|
return agent
|
|
403
529
|
```
|
|
404
530
|
|
|
405
|
-
See [docs/host-backends.md](/
|
|
531
|
+
See [docs/host-backends.md](https://github.com/vcoderun/acpkit/blob/main/docs/host-backends.md) for the filesystem
|
|
406
532
|
and terminal API surface.
|
|
407
533
|
|
|
408
534
|
## Codex Auth Helper
|
|
@@ -414,31 +540,31 @@ and terminal API surface.
|
|
|
414
540
|
from pydantic_ai import Agent
|
|
415
541
|
from codex_auth_helper import create_codex_responses_model
|
|
416
542
|
|
|
417
|
-
agent = Agent(create_codex_responses_model("gpt-5"))
|
|
543
|
+
agent = Agent(create_codex_responses_model("gpt-5.4"))
|
|
418
544
|
```
|
|
419
545
|
|
|
420
|
-
See [docs/helpers.md](/
|
|
546
|
+
See [docs/helpers.md](https://github.com/vcoderun/acpkit/blob/main/docs/helpers.md) for helper package details.
|
|
421
547
|
|
|
422
548
|
## Examples
|
|
423
549
|
|
|
424
|
-
Runnable and focused examples live under [examples/pydantic](/
|
|
550
|
+
Runnable and focused examples live under [examples/pydantic](https://github.com/vcoderun/acpkit/tree/main/examples/pydantic):
|
|
425
551
|
|
|
426
|
-
- [static_agent.py](/
|
|
552
|
+
- [static_agent.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/static_agent.py)
|
|
427
553
|
smallest direct `run_acp(agent=...)` setup
|
|
428
|
-
- [factory_agent.py](/
|
|
554
|
+
- [factory_agent.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/factory_agent.py)
|
|
429
555
|
session-aware factory plus session-local model selection
|
|
430
|
-
- [providers.py](/
|
|
556
|
+
- [providers.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/providers.py)
|
|
431
557
|
models, modes, config options, plan updates, and approval metadata
|
|
432
|
-
- [bridges.py](/
|
|
558
|
+
- [bridges.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/bridges.py)
|
|
433
559
|
bridge builder, prepare-tools, history processors, and MCP metadata
|
|
434
|
-
- [approvals.py](/
|
|
560
|
+
- [approvals.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/approvals.py)
|
|
435
561
|
native deferred approval flow
|
|
436
|
-
- [host_context.py](/
|
|
562
|
+
- [host_context.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/host_context.py)
|
|
437
563
|
`ClientHostContext` usage inside a factory-built agent
|
|
438
|
-
- [hook_projection.py](/
|
|
564
|
+
- [hook_projection.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/hook_projection.py)
|
|
439
565
|
existing `Hooks` capability introspection rendered through `HookProjectionMap`
|
|
440
|
-
- [
|
|
441
|
-
|
|
566
|
+
- [strong_agent.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/strong_agent.py)
|
|
567
|
+
full-featured workspace agent example combining factories, providers, approvals, bridges, projection maps, `ask/plan/agent` modes, and host helpers
|
|
442
568
|
|
|
443
569
|
## Development
|
|
444
570
|
|
|
@@ -460,15 +586,15 @@ make serve
|
|
|
460
586
|
|
|
461
587
|
## Documentation Map
|
|
462
588
|
|
|
463
|
-
- [docs/index.md](/
|
|
464
|
-
- [docs/cli.md](/
|
|
465
|
-
- [docs/pydantic-acp.md](/
|
|
466
|
-
- [docs/bridges.md](/
|
|
467
|
-
- [docs/providers.md](/
|
|
468
|
-
- [docs/host-backends.md](/
|
|
469
|
-
- [docs/helpers.md](/
|
|
470
|
-
- [docs/testing.md](/
|
|
471
|
-
- [examples/pydantic/README.md](/
|
|
589
|
+
- [docs/index.md](https://github.com/vcoderun/acpkit/blob/main/docs/index.md): workspace overview and package map
|
|
590
|
+
- [docs/cli.md](https://github.com/vcoderun/acpkit/blob/main/docs/cli.md): root `acpkit` CLI behavior
|
|
591
|
+
- [docs/pydantic-acp.md](https://github.com/vcoderun/acpkit/blob/main/docs/pydantic-acp.md): adapter API, runtime controls, approvals, projection maps, providers, and host backends
|
|
592
|
+
- [docs/bridges.md](https://github.com/vcoderun/acpkit/blob/main/docs/bridges.md): capability bridges and hook rendering
|
|
593
|
+
- [docs/providers.md](https://github.com/vcoderun/acpkit/blob/main/docs/providers.md): provider seams and host-owned state
|
|
594
|
+
- [docs/host-backends.md](https://github.com/vcoderun/acpkit/blob/main/docs/host-backends.md): client filesystem and terminal helpers
|
|
595
|
+
- [docs/helpers.md](https://github.com/vcoderun/acpkit/blob/main/docs/helpers.md): helper packages including `codex-auth-helper`
|
|
596
|
+
- [docs/testing.md](https://github.com/vcoderun/acpkit/blob/main/docs/testing.md): behavioral test surface and validation commands
|
|
597
|
+
- [examples/pydantic/README.md](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/README.md): runnable demos and focused SDK examples
|
|
472
598
|
|
|
473
599
|
## License
|
|
474
600
|
|
|
@@ -24,6 +24,16 @@ uv pip install "acpkit[pydantic]"
|
|
|
24
24
|
pip install "acpkit[pydantic]"
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
+
To use `acpkit launch ...`, install the optional launch extra:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
uv pip install "acpkit[launch]"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install "acpkit[launch]"
|
|
35
|
+
```
|
|
36
|
+
|
|
27
37
|
Development:
|
|
28
38
|
|
|
29
39
|
```bash
|
|
@@ -39,9 +49,9 @@ pip install -e ".[dev,docs,pydantic]"
|
|
|
39
49
|
Run a supported agent target through ACP:
|
|
40
50
|
|
|
41
51
|
```bash
|
|
42
|
-
acpkit run
|
|
43
|
-
acpkit run
|
|
44
|
-
acpkit run
|
|
52
|
+
acpkit run strong_agent
|
|
53
|
+
acpkit run strong_agent:agent
|
|
54
|
+
acpkit run strong_agent:agent -p ./examples
|
|
45
55
|
```
|
|
46
56
|
|
|
47
57
|
`acpkit` resolves `module` or `module:attribute` targets, auto-detects `pydantic_ai.Agent`
|
|
@@ -51,6 +61,31 @@ selects the last defined `pydantic_ai.Agent` instance in that module.
|
|
|
51
61
|
If the matching adapter extra is not installed, `acpkit` fails with an install hint such as
|
|
52
62
|
`uv pip install "acpkit[pydantic]"`.
|
|
53
63
|
|
|
64
|
+
Launch a target through Toad ACP:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
acpkit launch strong_agent
|
|
68
|
+
acpkit launch strong_agent:agent -p ./examples
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
`acpkit launch TARGET` mirrors the resolved target to:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
toad acp "acpkit run TARGET [-p PATH]..."
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The command is dispatched through `uvx --python 3.14 --from batrachian-toad`, so Toad runs in a
|
|
78
|
+
separate Python 3.14 tool environment and does not replace your project Python.
|
|
79
|
+
|
|
80
|
+
If the script already starts its own ACP server and should be launched directly, use `--command`:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
acpkit launch -c "python3.11 strong_agent.py"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
`launch TARGET` and `launch --command ...` are mutually exclusive. `-p/--path` only applies to
|
|
87
|
+
`TARGET` mode.
|
|
88
|
+
|
|
54
89
|
## run_acp
|
|
55
90
|
|
|
56
91
|
Use `run_acp(...)` when you want to start an ACP server directly from a Pydantic AI agent:
|
|
@@ -102,7 +137,7 @@ asyncio.run(run_agent(acp_agent))
|
|
|
102
137
|
- persistence: `session_store`
|
|
103
138
|
- model selection: `allow_model_selection`, `available_models`, `models_provider`
|
|
104
139
|
- mode and config state: `modes_provider`, `config_options_provider`
|
|
105
|
-
- plans: `plan_provider`
|
|
140
|
+
- plans: `plan_provider`, or native plan state via `PrepareToolsMode(plan_mode=True)`
|
|
106
141
|
- approvals: `approval_bridge`, `approval_state_provider`
|
|
107
142
|
- bridges: `capability_bridges`
|
|
108
143
|
- projection and classification: `projection_maps`, `tool_classifier`, `enable_generic_tool_projection`
|
|
@@ -148,6 +183,74 @@ config = AdapterConfig(
|
|
|
148
183
|
run_acp(agent=agent, config=config)
|
|
149
184
|
```
|
|
150
185
|
|
|
186
|
+
## Native Plan State
|
|
187
|
+
|
|
188
|
+
When `plan_provider` is not configured, the adapter can manage ACP plan state natively. Enable it
|
|
189
|
+
by marking one `PrepareToolsMode` with `plan_mode=True` inside a `PrepareToolsBridge`:
|
|
190
|
+
|
|
191
|
+
```python
|
|
192
|
+
from pydantic_ai import Agent
|
|
193
|
+
from pydantic_ai.tools import RunContext, ToolDefinition
|
|
194
|
+
from pydantic_acp import AdapterConfig, PrepareToolsBridge, PrepareToolsMode, run_acp
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def plan_tools(
|
|
198
|
+
ctx: RunContext[None], tool_defs: list[ToolDefinition]
|
|
199
|
+
) -> list[ToolDefinition]:
|
|
200
|
+
del ctx
|
|
201
|
+
return list(tool_defs)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def agent_tools(
|
|
205
|
+
ctx: RunContext[None], tool_defs: list[ToolDefinition]
|
|
206
|
+
) -> list[ToolDefinition]:
|
|
207
|
+
del ctx
|
|
208
|
+
return list(tool_defs)
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
agent = Agent("openai:gpt-5", name="plan-agent")
|
|
212
|
+
|
|
213
|
+
run_acp(
|
|
214
|
+
agent=agent,
|
|
215
|
+
config=AdapterConfig(
|
|
216
|
+
capability_bridges=[
|
|
217
|
+
PrepareToolsBridge(
|
|
218
|
+
default_mode_id="agent",
|
|
219
|
+
modes=[
|
|
220
|
+
PrepareToolsMode(
|
|
221
|
+
id="plan",
|
|
222
|
+
name="Plan",
|
|
223
|
+
description="Inspect and write plans.",
|
|
224
|
+
prepare_func=plan_tools,
|
|
225
|
+
plan_mode=True,
|
|
226
|
+
),
|
|
227
|
+
PrepareToolsMode(
|
|
228
|
+
id="agent",
|
|
229
|
+
name="Agent",
|
|
230
|
+
description="Full tool surface.",
|
|
231
|
+
prepare_func=agent_tools,
|
|
232
|
+
),
|
|
233
|
+
],
|
|
234
|
+
),
|
|
235
|
+
],
|
|
236
|
+
),
|
|
237
|
+
)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
When the session is in `plan` mode, the adapter:
|
|
241
|
+
|
|
242
|
+
- injects `acp_get_plan` and `acp_set_plan` as hidden tools on the agent
|
|
243
|
+
- extends `output_type` with `NativePlanGeneration` so the agent can emit a structured plan in a
|
|
244
|
+
single response
|
|
245
|
+
|
|
246
|
+
`NativePlanGeneration` fields:
|
|
247
|
+
- `plan_entries: list[PlanEntry]` — structured plan entries
|
|
248
|
+
- `plan_md: str` — optional markdown representation
|
|
249
|
+
|
|
250
|
+
Native plan state and `plan_provider` are mutually exclusive. See
|
|
251
|
+
[docs/providers.md](https://github.com/vcoderun/acpkit/blob/main/docs/providers.md) for full
|
|
252
|
+
details.
|
|
253
|
+
|
|
151
254
|
## Agent Factories
|
|
152
255
|
|
|
153
256
|
Use a factory or custom `AgentSource` when agent construction depends on the current session:
|
|
@@ -166,6 +269,24 @@ def build_agent(session: AcpSessionContext) -> Agent[None, str]:
|
|
|
166
269
|
acp_agent = create_acp_agent(agent_factory=build_agent)
|
|
167
270
|
```
|
|
168
271
|
|
|
272
|
+
`StaticAgentSource` accepts an optional `deps` field to pass typed runtime dependencies alongside
|
|
273
|
+
a shared agent instance without a factory:
|
|
274
|
+
|
|
275
|
+
```python
|
|
276
|
+
from pydantic_acp import AdapterConfig, create_acp_agent
|
|
277
|
+
from pydantic_acp.agent_source import StaticAgentSource
|
|
278
|
+
from pydantic_ai import Agent
|
|
279
|
+
|
|
280
|
+
from myapp.deps import AppDependencies
|
|
281
|
+
|
|
282
|
+
deps = AppDependencies(db=my_db, cache=my_cache)
|
|
283
|
+
agent = Agent("openai:gpt-5", name="deps-agent", deps_type=AppDependencies)
|
|
284
|
+
|
|
285
|
+
acp_agent = create_acp_agent(
|
|
286
|
+
agent_source=StaticAgentSource(agent=agent, deps=deps),
|
|
287
|
+
)
|
|
288
|
+
```
|
|
289
|
+
|
|
169
290
|
## Session Stores
|
|
170
291
|
|
|
171
292
|
`MemorySessionStore` is the default. Use `FileSessionStore` when sessions should survive process
|
|
@@ -208,7 +329,7 @@ The adapter exposes a small ACP control plane alongside normal prompts:
|
|
|
208
329
|
Codex-backed model changes must be explicit:
|
|
209
330
|
|
|
210
331
|
```text
|
|
211
|
-
/model codex:gpt-5
|
|
332
|
+
/model codex:gpt-5.4
|
|
212
333
|
```
|
|
213
334
|
|
|
214
335
|
## Approval Flow
|
|
@@ -305,7 +426,7 @@ Built-in bridges cover:
|
|
|
305
426
|
- `McpBridge`
|
|
306
427
|
- `AgentBridgeBuilder`
|
|
307
428
|
|
|
308
|
-
See [docs/bridges.md](/
|
|
429
|
+
See [docs/bridges.md](https://github.com/vcoderun/acpkit/blob/main/docs/bridges.md) for the full bridge model.
|
|
309
430
|
|
|
310
431
|
## Providers
|
|
311
432
|
|
|
@@ -317,7 +438,7 @@ Providers let the host own session state while the adapter exposes it through AC
|
|
|
317
438
|
- `PlanProvider`
|
|
318
439
|
- `ApprovalStateProvider`
|
|
319
440
|
|
|
320
|
-
See [docs/providers.md](/
|
|
441
|
+
See [docs/providers.md](https://github.com/vcoderun/acpkit/blob/main/docs/providers.md) for full details.
|
|
321
442
|
|
|
322
443
|
## Host Backends
|
|
323
444
|
|
|
@@ -342,7 +463,7 @@ def build_agent(client: AcpClient, session: AcpSessionContext) -> Agent[None, st
|
|
|
342
463
|
return agent
|
|
343
464
|
```
|
|
344
465
|
|
|
345
|
-
See [docs/host-backends.md](/
|
|
466
|
+
See [docs/host-backends.md](https://github.com/vcoderun/acpkit/blob/main/docs/host-backends.md) for the filesystem
|
|
346
467
|
and terminal API surface.
|
|
347
468
|
|
|
348
469
|
## Codex Auth Helper
|
|
@@ -354,31 +475,31 @@ and terminal API surface.
|
|
|
354
475
|
from pydantic_ai import Agent
|
|
355
476
|
from codex_auth_helper import create_codex_responses_model
|
|
356
477
|
|
|
357
|
-
agent = Agent(create_codex_responses_model("gpt-5"))
|
|
478
|
+
agent = Agent(create_codex_responses_model("gpt-5.4"))
|
|
358
479
|
```
|
|
359
480
|
|
|
360
|
-
See [docs/helpers.md](/
|
|
481
|
+
See [docs/helpers.md](https://github.com/vcoderun/acpkit/blob/main/docs/helpers.md) for helper package details.
|
|
361
482
|
|
|
362
483
|
## Examples
|
|
363
484
|
|
|
364
|
-
Runnable and focused examples live under [examples/pydantic](/
|
|
485
|
+
Runnable and focused examples live under [examples/pydantic](https://github.com/vcoderun/acpkit/tree/main/examples/pydantic):
|
|
365
486
|
|
|
366
|
-
- [static_agent.py](/
|
|
487
|
+
- [static_agent.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/static_agent.py)
|
|
367
488
|
smallest direct `run_acp(agent=...)` setup
|
|
368
|
-
- [factory_agent.py](/
|
|
489
|
+
- [factory_agent.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/factory_agent.py)
|
|
369
490
|
session-aware factory plus session-local model selection
|
|
370
|
-
- [providers.py](/
|
|
491
|
+
- [providers.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/providers.py)
|
|
371
492
|
models, modes, config options, plan updates, and approval metadata
|
|
372
|
-
- [bridges.py](/
|
|
493
|
+
- [bridges.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/bridges.py)
|
|
373
494
|
bridge builder, prepare-tools, history processors, and MCP metadata
|
|
374
|
-
- [approvals.py](/
|
|
495
|
+
- [approvals.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/approvals.py)
|
|
375
496
|
native deferred approval flow
|
|
376
|
-
- [host_context.py](/
|
|
497
|
+
- [host_context.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/host_context.py)
|
|
377
498
|
`ClientHostContext` usage inside a factory-built agent
|
|
378
|
-
- [hook_projection.py](/
|
|
499
|
+
- [hook_projection.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/hook_projection.py)
|
|
379
500
|
existing `Hooks` capability introspection rendered through `HookProjectionMap`
|
|
380
|
-
- [
|
|
381
|
-
|
|
501
|
+
- [strong_agent.py](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/strong_agent.py)
|
|
502
|
+
full-featured workspace agent example combining factories, providers, approvals, bridges, projection maps, `ask/plan/agent` modes, and host helpers
|
|
382
503
|
|
|
383
504
|
## Development
|
|
384
505
|
|
|
@@ -400,15 +521,15 @@ make serve
|
|
|
400
521
|
|
|
401
522
|
## Documentation Map
|
|
402
523
|
|
|
403
|
-
- [docs/index.md](/
|
|
404
|
-
- [docs/cli.md](/
|
|
405
|
-
- [docs/pydantic-acp.md](/
|
|
406
|
-
- [docs/bridges.md](/
|
|
407
|
-
- [docs/providers.md](/
|
|
408
|
-
- [docs/host-backends.md](/
|
|
409
|
-
- [docs/helpers.md](/
|
|
410
|
-
- [docs/testing.md](/
|
|
411
|
-
- [examples/pydantic/README.md](/
|
|
524
|
+
- [docs/index.md](https://github.com/vcoderun/acpkit/blob/main/docs/index.md): workspace overview and package map
|
|
525
|
+
- [docs/cli.md](https://github.com/vcoderun/acpkit/blob/main/docs/cli.md): root `acpkit` CLI behavior
|
|
526
|
+
- [docs/pydantic-acp.md](https://github.com/vcoderun/acpkit/blob/main/docs/pydantic-acp.md): adapter API, runtime controls, approvals, projection maps, providers, and host backends
|
|
527
|
+
- [docs/bridges.md](https://github.com/vcoderun/acpkit/blob/main/docs/bridges.md): capability bridges and hook rendering
|
|
528
|
+
- [docs/providers.md](https://github.com/vcoderun/acpkit/blob/main/docs/providers.md): provider seams and host-owned state
|
|
529
|
+
- [docs/host-backends.md](https://github.com/vcoderun/acpkit/blob/main/docs/host-backends.md): client filesystem and terminal helpers
|
|
530
|
+
- [docs/helpers.md](https://github.com/vcoderun/acpkit/blob/main/docs/helpers.md): helper packages including `codex-auth-helper`
|
|
531
|
+
- [docs/testing.md](https://github.com/vcoderun/acpkit/blob/main/docs/testing.md): behavioral test surface and validation commands
|
|
532
|
+
- [examples/pydantic/README.md](https://github.com/vcoderun/acpkit/blob/main/examples/pydantic/README.md): runnable demos and focused SDK examples
|
|
412
533
|
|
|
413
534
|
## License
|
|
414
535
|
|