summaryrefslogtreecommitdiffhomepage
path: root/packages/message-queue/src/index.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-21 02:08:44 +0900
committerAdam Malczewski <[email protected]>2026-06-21 02:08:44 +0900
commitba47df37f0c89bff4f0c3dd7d0bc2ef6c8062b92 (patch)
tree21d87eb847cd526a506cf274467fd1359f349705 /packages/message-queue/src/index.ts
parent75032313a96856a932c109efbbe6b6a7eb782222 (diff)
downloaddispatch-ba47df37f0c89bff4f0c3dd7d0bc2ef6c8062b92.tar.gz
dispatch-ba47df37f0c89bff4f0c3dd7d0bc2ef6c8062b92.zip
feat(message-queue): per-conversation queue + steering injection
A per-conversation message queue (new message-queue extension) holds user messages enqueued while a turn generates; delivered mid-turn as steering at the tool-result boundary (or carried to a new turn if no tool call fires). - kernel: RunTurnInput.drainSteering callback (generic; kernel stays pure) - wire 0.7.0->0.8.0: QueuedMessage, QueuePayload, TurnSteeringEvent (additive) - transport-contract 0.11.0->0.12.0: POST /conversations/:id/queue + chat.queue WS op - message-queue ext: queue state + per-conversation custom surface (rendererId message-queue) - session-orchestrator: enqueue facade + drainSteering wiring + post-seal carry - transport-http/ws: queue endpoint + chat.queue op (fixes WsClientMessage exhaustive switch) - host-bin: register message-queue 1043 vitest + 199 transport bun pass; tsc/biome clean; boot smoke clean. FE courier: frontend-message-queue-handoff.md.
Diffstat (limited to 'packages/message-queue/src/index.ts')
-rw-r--r--packages/message-queue/src/index.ts27
1 files changed, 27 insertions, 0 deletions
diff --git a/packages/message-queue/src/index.ts b/packages/message-queue/src/index.ts
new file mode 100644
index 0000000..79bbb25
--- /dev/null
+++ b/packages/message-queue/src/index.ts
@@ -0,0 +1,27 @@
+/**
+ * @dispatch/message-queue — the per-conversation message queue for mid-turn
+ * steering. Owns the queue state + a per-conversation `custom` surface; the
+ * session-orchestrator drains it via `messageQueueHandle`. The queue is
+ * transient (in-memory, per-conversation, only meaningful during generation);
+ * the surface is the ONLY way the frontend reads queue state.
+ */
+
+export type { QueuedMessage, QueuePayload } from "@dispatch/wire";
+export { extension, manifest } from "./extension.js";
+export {
+ buildQueueSpec,
+ combine,
+ drain,
+ enqueue,
+ getQueue,
+ MESSAGE_QUEUE_RENDERER_ID,
+ MESSAGE_QUEUE_SURFACE_ID,
+ type MessageQueueState,
+ type QueueDeps,
+} from "./pure.js";
+export {
+ createMessageQueueService,
+ type MessageQueueDeps,
+ type MessageQueueService,
+ messageQueueHandle,
+} from "./service.js";