feat(web): workbench room is the child tenant's mail thread; legacy chat client deleted (CL-8435) - #875
Merged
Conversation
…hat client deleted (CL-8435) A workbench is a child tenant, so /w/:tenantId renders that tenant's mailbox: participants are its principals plus its live deployments' run addresses, the timeline is Sent + INBOX threaded by In-Reply-To, and a message is one mailbox send addressed to every agent in the room. Agents join a room by being deployed into it: the stock member invite only accepts a real user's email, and a child tenant's deploy route rejects the parent's inherited asset, while its resolved offering does inherit. Creating a workbench creates the child tenant, deploys Myra into it, sends the opening message and lands on the room. The chat client for the deleted /chat/workbenches routes is gone, along with every module that only existed to serve it.
TheGreatAxios
force-pushed
the
cl-8435-room-threads
branch
from
September 18, 2026 05:04
960262b to
d3eb8ff
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
/w/:tenantIdis now a room over the child tenant's mailbox, and the client for the deleted/chat/workbenches/*routes is gone. Rebased onto currentmain(#870–#874).pages/workbench-room-page.tsx— header (tenant name), participants (people fromGET /api/tenants/:id/principals+ agents from the child's live deployment run addresses), timeline built from the room mailbox'sSent+INBOXthreaded byIn-Reply-To/References, sub-thread replies in a side panel, composer addressed to every agent in the room. TanStack Query throughout (roomKeysinchat-path.ts); the only effect is the mailbox SSE subscription, which invalidates.chat/threads-api.ts— room additions:listRoomParticipants,readRoom,sendToRoom.sendToRoomis the single send seam and now uses main's mailbox send route (POST /api/tenants/<childId>/mailbox/me/inbox/sendwithto,body, optionalinReplyTo), so the hub triggers the agents and keeps the Sent copy — no localStorage anywhere.workbench-create.ts+pages/new-workbench-picker.tsx— create child tenant (POST /api/tenants {name,slug,parentId}) → publish the tool-package registry into it → resolve its own offering (resolveExistingOffering(childId), which inherits) → deploy Myra into the child (deployMyraSource+ stockPOST /workflows/deployments) → send the opening message through the child's mailbox → navigate in the mutation'sonSuccess.Why deploy rather than invite: verified on a live hub that the stock member invite only accepts a real user's email, and a child tenant's deploy route rejects the parent's inherited asset (404 "Workflow asset not found") while its resolved models/offerings do inherit.
Deleted
chat/api.tsand everything that only served it: chat-workspace, timeline, composer, mentions, typing-indicator, use-workbench-feed, use-workbench-stream, workbench-presence, streaming-reply, direct-workbench, shared-workbenches, default-agent-workbench, mailbox-timeline, thread-feed, use-optimistic-sends, use-thread-navigation, workbench-timeline-view, workbench-settings/, pr-thread-view, artifact-chip, chat/sidebar, profile-relations, myra-workbench, instant-agent-create, agent-chat-launch, agent-dm-launch,pages/chat-page.tsx,pages/workbench-timeline.tsx, workbench-timeline-merge, shell/tenant-resolution — plus their tests. Outdated tests were deleted, not adapted.grep -rn 'chat/workbenches|chat/api"' apps/web/srcis empty.Touched files owned by other tickets (minimum to unbreak)
pages/insights-page.tsx— dropped the embeddedWorkbenchTimelineRoute(its page is deleted) and switched to@/chat/workbench-tenants.shell/bench-activity.tsrewritten over stock listings, soagents-page.tsx,mission-control-page.tsxandlibrary-page.tsxare untouched.command-palette-provider.tsx/command-palette-actions.ts— import path only; "talk to Myra" now lands on/chats/new.shell/context-menu/items.tsx— pin item removed (workbench settings surface deleted).shell/canvas-column.tsx— profile card keeps identity + mention; "Message" lands on/chats/new, shared-workbench channels empty (no stock read for another principal's rooms).agents-api.ts—listCapabilityInventorymoved here from the deletedchat/api.ts, alongside feat(web): Agents and Skills pages read stock deployments; create agent deploys a workflow asset (CL-8433) #874's deploy hooks.Gaps
agent-deploy.tsdeploys from a name + system prompt, which an existing bench definition does not expose). Adding more agents to a room is a follow-up on that pipeline./me/inbox/:uid/read) is not wired; presence/typing/streaming dropped as ruled.bun run checkpasses (typecheck, lint, fmt, 587 tests).