feat: ai-chat reference project + MCP agent-chat tooling (4/4)#3546
feat: ai-chat reference project + MCP agent-chat tooling (4/4)#3546ericallam wants to merge 1 commit into
Conversation
🦋 Changeset detectedLatest commit: e908afb The changes in this PR will be included in the next version bump. This PR includes changesets to release 30 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
| }, | ||
| }); | ||
| session.runId = result.id; | ||
| session.lastEventId = undefined; |
There was a problem hiding this comment.
🔴 Resetting lastEventId to undefined on upgrade causes SSE replay of entire session history
In collectAgentResponse, when a trigger:upgrade-required chunk is received, session.lastEventId is set to undefined (line 390) before recursively calling collectAgentResponse. The recursive call creates a new SSEStreamSubscription using session.lastEventId (now undefined) as the lastEventId option (agentChat.ts:338), which means the new subscription replays the entire session .out stream from the very beginning.
Since session .out is a durable stream containing all historical chunks across runs, the replayed events will include old turns' trigger:turn-complete chunks. The first historical trigger:turn-complete hit (line 366-368) immediately breaks the collection loop, causing the function to return with empty/partial text from a previous turn instead of the new run's response.
Expected fix
Keep session.lastEventId as-is (pointing to the trigger:upgrade-required chunk's SSE id) so the recursive subscription resumes right after the upgrade marker, where the new run's output will appear.
| session.lastEventId = undefined; | |
| reader.releaseLock(); |
Was this helpful? React with 👍 or 👎 to provide feedback.
| packageVersion: buildManifest.packageVersion, | ||
| cliPackageVersion: buildManifest.cliPackageVersion, | ||
| tasks: workerManifest.tasks, | ||
| prompts: workerManifest.prompts, |
There was a problem hiding this comment.
🚩 managed-index-controller adds prompts but not skills to worker registration payload
Both dev-index-worker.ts:187 and managed-index-worker.ts:183 now emit skills: resourceCatalog.listSkillManifests() in their worker manifests. The managed-index-controller.ts forwards tasks, prompts (newly added at line 107), and queues to the server — but does NOT forward skills. If skills need to be registered server-side (for dashboard display, deploy metadata, etc.), this omission would silently drop them in the managed (production) indexing path. Could be intentional if skills are only used at runtime and don't need server-side registration, but it's asymmetric with the prompts addition in the same PR.
Was this helpful? React with 👍 or 👎 to provide feedback.
ecfac76 to
7ee523e
Compare
882544c to
5baac29
Compare
7ee523e to
fdc61c6
Compare
5baac29 to
e16efbb
Compare
fdc61c6 to
96700b1
Compare
e16efbb to
f4a7923
Compare
96700b1 to
482d752
Compare
f4a7923 to
04b98af
Compare
482d752 to
920e876
Compare
04b98af to
417344a
Compare
920e876 to
d96e2f7
Compare
417344a to
43fde3f
Compare
d96e2f7 to
3256f42
Compare
43fde3f to
c27cef9
Compare
3256f42 to
220b33c
Compare
c27cef9 to
48f030a
Compare
220b33c to
067109f
Compare
48f030a to
3c71eeb
Compare
067109f to
c1f6db7
Compare
3c71eeb to
866b175
Compare
c1f6db7 to
f75bcd8
Compare
866b175 to
2d9bcdb
Compare
f75bcd8 to
40a3dff
Compare
2d9bcdb to
d9fa1be
Compare
40a3dff to
1748445
Compare
d9fa1be to
b7ed332
Compare
1748445 to
95f6dd2
Compare
b7ed332 to
3209677
Compare
95f6dd2 to
234ad0c
Compare
3209677 to
c4b058d
Compare
Top of the chat.agent stack: a full Next.js reference project that exercises chat.agent end-to-end, plus the CLI MCP tools that drive agent runs from Claude Code / Cursor / etc. references/ai-chat: - Full Next.js app with prisma persistence, multi-chat sidebar, per-chat model picker, debug panel, tool examples, smoke tests - Reference tools: getCurrentTime, searchHackerNews, createGithubIssue, PR review helpers, code sandbox - chat-client-test orchestrator for concurrent-send stress - references/hello-world chatAgent + triggerAndSubscribe examples CLI MCP tooling for chat.agent: - mcp/tools/agentChat.ts (start_agent_chat, send_agent_message, close_agent_chat) - mcp/tools/agents.ts + tasks.ts (list agents, agent run details) - dev-run-controller OOM kill + taskRunProcessPool tweaks - dev/managed entry-point hooks for skills bundling - buildWorker + bundleSkills (agent skills support) Includes ai-tool-helpers + mcp-agent-chat-sessions changesets, plus the streamdown@2 patch and pnpm-lock reconciliation. (Will be renamed to feature/ai-chat-reference-and-cli before push.)
234ad0c to
8d8a1a6
Compare
c4b058d to
e908afb
Compare
Summary
A complete Next.js reference project that exercises
chat.agentend-to-end, plus the CLI MCP tools that let Claude Code, Cursor, and similar IDE agents drive a deployedchat.agenttask from the editor. Builds on #3545.Design
references/ai-chatis a full Next.js app: prisma-backed persistence, multi-chat sidebar, per-chat model picker, debug panel, tool examples (getCurrentTime,searchHackerNews,createGithubIssue, PR review helpers, code sandbox), and smoke tests. It's intended both as a copy-paste starting point and as a place to regression-test SDK changes.The CLI gains MCP tools (
start_agent_chat,send_agent_message,close_agent_chat,list_agents) so an IDE agent can converse with a deployedchat.agenttask. The dev runtime adds one-shot OOM kill on the run controller and skills bundling in the build pipeline.Test plan
cd references/ai-chat && pnpm install && pnpm trigger:devstart_agent_chatagainst the running dev task, send a message, verify the response streams backStack
Part of a 4-PR stack. Merge bottom-up.
main— Sessions dashboard + chat-ready hardeningchat.agentruntime + browser transport