diff options
| author | Adam Malczewski <[email protected]> | 2026-06-21 21:47:24 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-21 21:47:24 +0900 |
| commit | fd81987fcec0178ae2c466800b428e1b1dfc4ab0 (patch) | |
| tree | 646e39ed43c64f763721553ba7a7821d62730df8 /src/core | |
| parent | 90ab92626555bb6a764a3c15fc03ac3e36966226 (diff) | |
| download | dispatch-web-fd81987fcec0178ae2c466800b428e1b1dfc4ab0.tar.gz dispatch-web-fd81987fcec0178ae2c466800b428e1b1dfc4ab0.zip | |
feat(ws): handle conversation.open broadcast — open/focus tab from CLI --open
Consume the conversation.open handoff ([email protected], [email protected]).
Re-pinned file: deps + re-mirrored .dispatch/*.reference.md.
- WS adapter (logic.ts + index.ts): parse + route the new top-level
"conversation.open" WsServerMessage to an onConversationOpen handler
- app store: openConversation(id) opens (or focuses) a tab — creates a chat
store, loads history, subscribes to live turns, creates+selects the tab
- conformance guard + WS adapter tests cover the new type
- backend also shipped conversation metadata endpoints (GET /conversations,
GET /conversations/:id/last, GET/PUT /conversations/:id/title) — mirrored
but not yet consumed by the FE
682 tests green.
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/wire/conformance.test.ts | 11 | ||||
| -rw-r--r-- | src/core/wire/conformance.ts | 2 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/core/wire/conformance.test.ts b/src/core/wire/conformance.test.ts index 2fdd3cb..f5d6608 100644 --- a/src/core/wire/conformance.test.ts +++ b/src/core/wire/conformance.test.ts @@ -139,9 +139,18 @@ describe("classifies every WsServerMessage type", () => { event: { type: "done" as const, conversationId: "c", turnId: "t", reason: "r" }, }, { type: "chat.error" as const, message: "e" }, + { type: "conversation.open" as const, conversationId: "c1" }, ]; const labels = msgs.map(assertWsServerMessageExhaustive); - expect(labels).toEqual(["catalog", "surface", "update", "error", "chat.delta", "chat.error"]); + expect(labels).toEqual([ + "catalog", + "surface", + "update", + "error", + "chat.delta", + "chat.error", + "conversation.open", + ]); }); }); diff --git a/src/core/wire/conformance.ts b/src/core/wire/conformance.ts index 6e87e5c..05a15aa 100644 --- a/src/core/wire/conformance.ts +++ b/src/core/wire/conformance.ts @@ -81,6 +81,8 @@ export function assertWsServerMessageExhaustive(msg: WsServerMessage): string { return "chat.delta"; case "chat.error": return "chat.error"; + case "conversation.open": + return "conversation.open"; default: return msg satisfies never; } |
