Preserve namespaces on custom tool calls#30302
Conversation
|
All contributors have signed the CLA ✍️ ✅ |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 49c6ad0ac7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 49c6ad0ac7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
I have read the CLA Document and I hereby sign the CLA |
|
I would treat the namespace as part of the tool-call identity, not as replay metadata. The risky failure mode here is not just that a custom call loses a display field. It is that two callable surfaces can share a name while meaning different things, and the agent can deserialize, replay, or route the call using the unqualified name. If that happens, a previously recorded custom call can be dispatched to the wrong tool surface even though the visible name still looks correct. The regression I would want is end to end:
The unit router test is useful, but it is not the acceptance boundary. The acceptance boundary is the live agent path: stream in, history out, replay back in, dispatch out. If any layer normalizes back to name-only, the test should fail before a tool call can be invoked. That also gives the protocol a clean invariant: name is not globally authoritative when namespace exists. The executable action identity is namespace plus name, and every bridge that stores or rehydrates the response item has to preserve that pair before dispatch. Boundary: architecture and regression-test feedback only; no claim about using this project, running this branch, validating implementation behavior, implementation correctness, merge readiness, security review, production readiness, partnership, customer interest, official alignment, OpenAI usage, Codex usage, conformance certification, or Neura usage. |
Deserialize and replay the namespace field for custom tool calls, and use it when resolving streaming consumers and routing tool execution. Regenerate app-server schemas and add regression coverage.
edb70f3 to
e6980ef
Compare
Summary
Testing