You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This issue tracks ten small, independent parity fixes. It is an umbrella checklist, not permission to combine unrelated work into one PR. Each coherent concern may land independently; follow the repository's one-concern-per-PR rule.
Keep response-level finishReason on message updates, but do not copy it to the trailing metadata-only update used for usage/additional properties/continuation data.
Test the direct update sequence for both chat and agent responses, not only the re-folded result.
Keep the local guard but replace the inaccurate Python-parity comment with the actual rationale: TypeScript turns a later service 400 into an earlier clear error. No runtime change.
Pin the intentional send-time filtering: a lone unanswered local function_call is omitted without throwing; later user input is retained while only the call is removed.
Cover JSON session round-trip without relying on raw representation. This item adds tests only and does not preserve orphan calls.
Completion criteria
Every behavior change has a reproduction-first failing test; comment-only and test-only items are exempt.
Wire-visible changes are listed in CHANGELOG.
Each PR identifies the checkbox it completes. A split successor issue is linked from this body or a comment.
pnpm check passes for every implementation PR.
This umbrella remains open until all ten items are complete or moved to linked successor issues that are themselves closed.
Summary
This issue tracks ten small, independent parity fixes. It is an umbrella checklist, not permission to combine unrelated work into one PR. Each coherent concern may land independently; follow the repository's one-concern-per-PR rule.
Work items
core / coalesce — code interpreter — Coalesce streamed code-interpreter fragments by call id #132 (
packages/core/src/types/coalesce.ts)callIdoradditionalProperties.item_id.item_idfallback, and keyless cases.core / explode — terminal metadata — Leave the finish reason off the trailing metadata-only update #133 (
packages/core/src/types/response.ts)finishReasonon message updates, but do not copy it to the trailing metadata-only update used for usage/additional properties/continuation data.core / missing user-input literal — Emit the UserInputRequiredException marker on user-input results #134, follow-up An argument failure is reported to the model as an execution failure #131 (
packages/core/src/client/function-execution.ts)UserInputRequiredException.anthropic /
toolChoicewithout tools — Send the Anthropic tool choice independently of tool declarations #135 (packages/anthropic/src/chat-client.ts)tool_choiceindependently of local tools/MCP server presence; omit it only when no choice was configured.anthropic / empty-message comment — Say why the empty-message guard is there #136
mcp /
isErrortext — Put each text block of an MCP error result on its own line #138, follow-up FoundryToolbox assembles MCP error text differently from the MCP client #137 (packages/mcp/src/client.ts)"\n"in MCP-side assembly only. Do not change sharedtextOfContentsbehavior.mcp / blank skill resource names — Refuse a blank skill resource name before it becomes a read #139 (
packages/mcp/src/skills.ts)resources/readis not called and retain existing traversal/decoding guards.core /
run_skill_scriptschema — Declare the run_skill_script args default and name its script runner #140, follow-up SkillScriptArguments excludes null but a script can receive one #143 (packages/core/src/skills/provider.ts)default: nullto theargsschema and the Python-equivalent “or configured runner.” description.agentserver / request-ID precedence — Resolve the agentserver request id from the trace before the incoming header #141 (
packages/agentserver/src/context.tsand trace-context plumbing)x-request-id, then a generated UUID.traceparent, competing request ID, and identical resolved values in the response header and error body.openai / unanswered function-call wire tests — Pin the send-time filtering of unanswered OpenAI function calls #142
function_callis omitted without throwing; later user input is retained while only the call is removed.Completion criteria
pnpm checkpasses for every implementation PR.