summaryrefslogtreecommitdiffhomepage
path: root/packages/message-queue/src/service.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-27 01:12:40 +0900
committerAdam Malczewski <[email protected]>2026-06-27 01:12:40 +0900
commit98b0638838a8e754927d8c030ce8bded18d63e7d (patch)
tree0d4e21c3d4792fcd77e1040373b260e38efa34ce /packages/message-queue/src/service.ts
parentd92a4af6191d7d20acf861adf605ad0227b6b287 (diff)
parent61e45e60d699ed1ca46f94a8f181c92a940317c6 (diff)
downloaddispatch-98b0638838a8e754927d8c030ce8bded18d63e7d.tar.gz
dispatch-98b0638838a8e754927d8c030ce8bded18d63e7d.zip
Merge branch 'dev' into feature/heartbeat
# Conflicts: # packages/host-bin/package.json # packages/host-bin/src/main.ts # packages/session-orchestrator/src/orchestrator.ts # packages/system-prompt/src/service.test.ts # packages/system-prompt/src/service.ts # packages/system-prompt/src/types.ts # packages/transport-contract/package.json # packages/transport-http/package.json # packages/transport-http/src/app.test.ts # packages/transport-http/src/app.ts # packages/transport-http/src/extension.ts # packages/transport-http/tsconfig.json # tsconfig.json
Diffstat (limited to 'packages/message-queue/src/service.ts')
-rw-r--r--packages/message-queue/src/service.ts94
1 files changed, 47 insertions, 47 deletions
diff --git a/packages/message-queue/src/service.ts b/packages/message-queue/src/service.ts
index 91d0fc5..97e270d 100644
--- a/packages/message-queue/src/service.ts
+++ b/packages/message-queue/src/service.ts
@@ -18,17 +18,17 @@ import { drain as drainQueue, enqueue as enqueueMessage, getQueue as readQueue }
* `host.getService(messageQueueHandle)`.
*/
export interface MessageQueueService {
- /** Append a message; return the CURRENT queue snapshot (post-append). */
- enqueue(conversationId: string, text: string): QueuedMessage[];
- /** Current queue snapshot (empty array if none / unknown conversation). */
- getQueue(conversationId: string): QueuedMessage[];
- /**
- * Drain: return all queued messages, CLEAR the queue, and push a surface
- * update (empty). Returns the raw `QueuedMessage[]` (NOT a ChatMessage —
- * the caller combines + builds the ChatMessage). Empty array if the queue
- * was empty (and then NO surface update is pushed — no change).
- */
- drain(conversationId: string): QueuedMessage[];
+ /** Append a message; return the CURRENT queue snapshot (post-append). */
+ enqueue(conversationId: string, text: string): QueuedMessage[];
+ /** Current queue snapshot (empty array if none / unknown conversation). */
+ getQueue(conversationId: string): QueuedMessage[];
+ /**
+ * Drain: return all queued messages, CLEAR the queue, and push a surface
+ * update (empty). Returns the raw `QueuedMessage[]` (NOT a ChatMessage —
+ * the caller combines + builds the ChatMessage). Empty array if the queue
+ * was empty (and then NO surface update is pushed — no change).
+ */
+ drain(conversationId: string): QueuedMessage[];
}
/**
@@ -36,19 +36,19 @@ export interface MessageQueueService {
* session-orchestrator imports to reach the queue — no string-keyed lookup.
*/
export const messageQueueHandle: ServiceHandle<MessageQueueService> =
- defineService<MessageQueueService>("message-queue");
+ defineService<MessageQueueService>("message-queue");
/** Deps for the service shell — the pure core's deps plus the surface notifier. */
export interface MessageQueueDeps extends QueueDeps {
- /**
- * Notify the surface-registry that the queue changed, so the transport
- * re-fetches + pushes a full new SurfaceUpdate. Called ONLY on a real
- * change (enqueue → grew; drain-non-empty → emptied); a no-op drain of an
- * already-empty queue does NOT notify (no change → no surface push).
- */
- readonly notify: () => void;
- /** Injected host logger (optional in tests). Logs counts/lengths at debug, never bodies. */
- readonly logger?: Logger;
+ /**
+ * Notify the surface-registry that the queue changed, so the transport
+ * re-fetches + pushes a full new SurfaceUpdate. Called ONLY on a real
+ * change (enqueue → grew; drain-non-empty → emptied); a no-op drain of an
+ * already-empty queue does NOT notify (no change → no surface push).
+ */
+ readonly notify: () => void;
+ /** Injected host logger (optional in tests). Logs counts/lengths at debug, never bodies. */
+ readonly logger?: Logger;
}
/**
@@ -58,31 +58,31 @@ export interface MessageQueueDeps extends QueueDeps {
* in this closure, reachable only through the returned service.
*/
export function createMessageQueueService(deps: MessageQueueDeps): MessageQueueService {
- const state: MessageQueueState = new Map();
+ const state: MessageQueueState = new Map();
- return {
- enqueue(conversationId, text) {
- const snapshot = enqueueMessage(state, conversationId, text, deps);
- deps.logger?.debug("message-queue: enqueued", {
- conversationId,
- queueLen: snapshot.length,
- textLen: text.length,
- });
- deps.notify();
- return snapshot;
- },
- getQueue(conversationId) {
- return readQueue(state, conversationId);
- },
- drain(conversationId) {
- const drained = drainQueue(state, conversationId);
- if (drained.length === 0) return drained;
- deps.logger?.debug("message-queue: drained", {
- conversationId,
- count: drained.length,
- });
- deps.notify();
- return drained;
- },
- };
+ return {
+ enqueue(conversationId, text) {
+ const snapshot = enqueueMessage(state, conversationId, text, deps);
+ deps.logger?.debug("message-queue: enqueued", {
+ conversationId,
+ queueLen: snapshot.length,
+ textLen: text.length,
+ });
+ deps.notify();
+ return snapshot;
+ },
+ getQueue(conversationId) {
+ return readQueue(state, conversationId);
+ },
+ drain(conversationId) {
+ const drained = drainQueue(state, conversationId);
+ if (drained.length === 0) return drained;
+ deps.logger?.debug("message-queue: drained", {
+ conversationId,
+ count: drained.length,
+ });
+ deps.notify();
+ return drained;
+ },
+ };
}