Skip to content

feat: bridge Codex dynamic tools through ACP#301

Open
gaofeng21cn wants to merge 3 commits into
agentclientprotocol:mainfrom
gaofeng21cn:codex/dynamic-tool-callback-20260715
Open

feat: bridge Codex dynamic tools through ACP#301
gaofeng21cn wants to merge 3 commits into
agentclientprotocol:mainfrom
gaofeng21cn:codex/dynamic-tool-callback-20260715

Conversation

@gaofeng21cn

@gaofeng21cn gaofeng21cn commented Jul 15, 2026

Copy link
Copy Markdown

Summary

  • accept a versioned codex/dynamic_tools registry in ACP session/new._meta
  • inject those specs into the experimental Codex thread/start.dynamicTools field without regenerating the full experimental schema
  • forward Codex App Server item/tool/call requests through the typed ACP extension _codex/dynamic_tool_call
  • multiplex callbacks once per shared MessageConnection, route by explicit session/thread ownership, and revoke all claimants on terminal thread/closed

Failure semantics

Malformed registration metadata fails with ACP invalid_params before thread/start. Unknown or duplicate owners, stale turns, closed sessions, disposed clients, missing dispatchers, and dispatcher failures return typed success: false. Ordinary thread notifications remain unique-owner only. Terminal thread/closed clears every claimant, so disposing one ambiguous claimant cannot resurrect a closed route.

Validation

Validated on 24589322f1f6a2e7a9fba6ebb42067e47e4dfffd:

  • focused dynamic/session tests: 95 passed
  • full npm test: 312 passed, 28 skipped
  • npm run typecheck
  • npm run build
  • git diff --check HEAD^ HEAD
  • fork HTTPS/SSH:443 readback exact

Cross-repo evidence

This PR is ready for upstream review. The fork branch remains a contribution head only. Product completion still requires both upstream canonical mains to merge and the Shell to consume released canonical refs; no product dependency points at the fork.

@gaofeng21cn

Copy link
Copy Markdown
Author

Cross-repo host half is now available as draft iOfficeAI/AionCore#619.

Immutable AionCore contribution head: e1e022c9e327870bebefa26e417dc5f482349e10 (parent 073f0ff2855f2fef2b3744df9bcac2e5b973a942).

The host dispatcher preserves conversation, WebSocket connection, registration generation, thread, turn, call, namespace, and tool identity; ambiguous ownership stays fail-closed after disconnect until explicit re-registration. Disconnect cleanup cancels pending calls. AionCore verification passed API types 2/2, registry 5/5, realtime 81/81, WebSocket E2E 21/21, AI-agent 617/617, affected strict clippy, workspace build, workspace cargo test, and repository-native just push (migration + workspace clippy/fmt + nextest). HTTPS and SSH:443 both read back the exact head.

Both PRs remain draft pending downstream Shell registration and a live round-trip against exact contribution refs.

@gaofeng21cn gaofeng21cn marked this pull request as ready for review July 15, 2026 02:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant