diff options
| author | Adam Malczewski <[email protected]> | 2026-06-27 01:12:40 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-27 01:12:40 +0900 |
| commit | 98b0638838a8e754927d8c030ce8bded18d63e7d (patch) | |
| tree | 0d4e21c3d4792fcd77e1040373b260e38efa34ce /packages/message-queue/src/service.ts | |
| parent | d92a4af6191d7d20acf861adf605ad0227b6b287 (diff) | |
| parent | 61e45e60d699ed1ca46f94a8f181c92a940317c6 (diff) | |
| download | dispatch-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.ts | 94 |
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; + }, + }; } |
