mirror of
https://github.com/CopilotKit/CopilotKit.git
synced 2026-09-14 16:26:20 +08:00
811afa9025
Address the four residual D6 failures on the ms-agent-dotnet integration (baseline was 177/5). route.ts toolCallId strip completeness - Extend stripReplaySafeToolCallIdsFromMessage to also clean the snake_case `tool_calls[].id` array and any nested OpenAI-style `function.tool_call_id`. AG-UI canonical uses `toolCalls`, but some runtime / message-converter paths emit the OpenAI shape and the replay-safe `__ck_run_<uuid>` suffix was leaking through to aimock on those paths. Apply the same coverage in applyToolResultDecisionSuffix so decision-suffix routing (`__approved` / `__rejected` / `__cancelled`) lands on every tool-call shape. - Add a universal strip middleware in createAgent itself so EVERY registered agent (not only the replay-safe ones) clears the suffix before the request reaches the backend / aimock. Decision suffixing remains scoped to createReplaySafeAgent because the suffix is non-idempotent and the inner middleware re-runs the same logic. - Drop the now-redundant strip calls inside createGenUiAgent, createReadonlyContextAgent, createSharedStateReadWriteAgent, and createReasoningAgent — the outer createAgent middleware already canonicalised inbound messages by the time these run. chat-slots fixture - Mirror LGP's turnIndex:1 'Give me a fun fact' entry so the chat-slots e2e's second-turn assistant slot has a deterministic reply (the bare 'Give me a fun fact' fixture in headless-simple.json is turnIndex:0-gated and was never matching chat-slots' turn 1). HITL reject + interrupt-headless cancel branches - Add a reject-branch fixture in render-a2ui.json keyed on toolCallId `call_d5_generate_steps_001__rejected` so the hitl.spec reject-flow's 'will not execute the Mars trip plan' assertion lands the right narration. Keep the legacy hasToolResult:true fixture as a fallback for paths that don't apply a decision suffix. Add an `__approved` variant for symmetry. - Add cancel-branch fixtures in interrupt-headless.json for both the sales-intro and 1:1-with-alice pills, keyed on `__cancelled` toolCallIds, returning the Denied/not-booked narration the interrupt-headless cancel spec expects. hitl-in-app + hitl-in-chat demo pages already mirror LGP (only an extra README.md per directory in this integration), so no page changes were needed.