@polpo-ai/core 0.15.132 → 0.15.134

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +40 -7
  2. package/dist/__tests__/brain-local.test.js +149 -1
  3. package/dist/__tests__/brain-local.test.js.map +1 -1
  4. package/dist/__tests__/memory-store-policy.test.js +216 -0
  5. package/dist/__tests__/memory-store-policy.test.js.map +1 -1
  6. package/dist/__tests__/project-layout.test.js +5 -0
  7. package/dist/__tests__/project-layout.test.js.map +1 -1
  8. package/dist/brain/contracts.d.ts.map +1 -1
  9. package/dist/brain/contracts.js +36 -0
  10. package/dist/brain/contracts.js.map +1 -1
  11. package/dist/brain/in-memory-store.d.ts +2 -1
  12. package/dist/brain/in-memory-store.d.ts.map +1 -1
  13. package/dist/brain/in-memory-store.js +118 -60
  14. package/dist/brain/in-memory-store.js.map +1 -1
  15. package/dist/brain/index.d.ts +6 -3
  16. package/dist/brain/index.d.ts.map +1 -1
  17. package/dist/brain/index.js +2 -1
  18. package/dist/brain/index.js.map +1 -1
  19. package/dist/brain/ingestion-worker.d.ts +33 -0
  20. package/dist/brain/ingestion-worker.d.ts.map +1 -0
  21. package/dist/brain/ingestion-worker.js +222 -0
  22. package/dist/brain/ingestion-worker.js.map +1 -0
  23. package/dist/brain/ingestion-worker.test.d.ts +2 -0
  24. package/dist/brain/ingestion-worker.test.d.ts.map +1 -0
  25. package/dist/brain/ingestion-worker.test.js +355 -0
  26. package/dist/brain/ingestion-worker.test.js.map +1 -0
  27. package/dist/brain/ports.d.ts +4 -1
  28. package/dist/brain/ports.d.ts.map +1 -1
  29. package/dist/brain/retrieval.d.ts +5 -0
  30. package/dist/brain/retrieval.d.ts.map +1 -1
  31. package/dist/brain/retrieval.js +59 -1
  32. package/dist/brain/retrieval.js.map +1 -1
  33. package/dist/brain/stores.d.ts +3 -1
  34. package/dist/brain/stores.d.ts.map +1 -1
  35. package/dist/brain/types.d.ts +20 -0
  36. package/dist/brain/types.d.ts.map +1 -1
  37. package/dist/canonical-turn-dispatcher.d.ts +30 -0
  38. package/dist/canonical-turn-dispatcher.d.ts.map +1 -0
  39. package/dist/canonical-turn-dispatcher.js +50 -0
  40. package/dist/canonical-turn-dispatcher.js.map +1 -0
  41. package/dist/canonical-turn-dispatcher.test.d.ts +2 -0
  42. package/dist/canonical-turn-dispatcher.test.d.ts.map +1 -0
  43. package/dist/canonical-turn-dispatcher.test.js +118 -0
  44. package/dist/canonical-turn-dispatcher.test.js.map +1 -0
  45. package/dist/canonical-turn.d.ts +36 -0
  46. package/dist/canonical-turn.d.ts.map +1 -0
  47. package/dist/canonical-turn.js +132 -0
  48. package/dist/canonical-turn.js.map +1 -0
  49. package/dist/canonical-turn.test.d.ts +2 -0
  50. package/dist/canonical-turn.test.d.ts.map +1 -0
  51. package/dist/canonical-turn.test.js +64 -0
  52. package/dist/canonical-turn.test.js.map +1 -0
  53. package/dist/index.d.ts +4 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +3 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/memory/extraction.d.ts +10 -0
  58. package/dist/memory/extraction.d.ts.map +1 -1
  59. package/dist/memory/extraction.js +7 -1
  60. package/dist/memory/extraction.js.map +1 -1
  61. package/dist/memory/extraction.test.js +27 -0
  62. package/dist/memory/extraction.test.js.map +1 -1
  63. package/dist/memory/in-memory-extraction-store.d.ts +2 -0
  64. package/dist/memory/in-memory-extraction-store.d.ts.map +1 -1
  65. package/dist/memory/in-memory-extraction-store.js +37 -0
  66. package/dist/memory/in-memory-extraction-store.js.map +1 -1
  67. package/dist/memory/in-memory-store.d.ts +15 -2
  68. package/dist/memory/in-memory-store.d.ts.map +1 -1
  69. package/dist/memory/in-memory-store.js +209 -4
  70. package/dist/memory/in-memory-store.js.map +1 -1
  71. package/dist/memory/index.d.ts +6 -3
  72. package/dist/memory/index.d.ts.map +1 -1
  73. package/dist/memory/index.js +2 -1
  74. package/dist/memory/index.js.map +1 -1
  75. package/dist/memory/learning.d.ts +113 -0
  76. package/dist/memory/learning.d.ts.map +1 -0
  77. package/dist/memory/learning.js +310 -0
  78. package/dist/memory/learning.js.map +1 -0
  79. package/dist/memory/learning.test.d.ts +2 -0
  80. package/dist/memory/learning.test.d.ts.map +1 -0
  81. package/dist/memory/learning.test.js +274 -0
  82. package/dist/memory/learning.test.js.map +1 -0
  83. package/dist/memory/store-types.d.ts +21 -0
  84. package/dist/memory/store-types.d.ts.map +1 -1
  85. package/dist/memory/tool-settings.d.ts +16 -0
  86. package/dist/memory/tool-settings.d.ts.map +1 -1
  87. package/dist/memory/tool-settings.js +53 -1
  88. package/dist/memory/tool-settings.js.map +1 -1
  89. package/dist/memory/tool-settings.test.js +33 -0
  90. package/dist/memory/tool-settings.test.js.map +1 -1
  91. package/dist/model-runtime.d.ts +1 -1
  92. package/dist/model-runtime.d.ts.map +1 -1
  93. package/dist/model-runtime.js.map +1 -1
  94. package/dist/runtime-context/composite-provider.d.ts.map +1 -1
  95. package/dist/runtime-context/composite-provider.js +27 -2
  96. package/dist/runtime-context/composite-provider.js.map +1 -1
  97. package/dist/runtime-context/composite-provider.test.js +20 -1
  98. package/dist/runtime-context/composite-provider.test.js.map +1 -1
  99. package/dist/semantic-retrieval-quality.test.d.ts +2 -0
  100. package/dist/semantic-retrieval-quality.test.d.ts.map +1 -0
  101. package/dist/semantic-retrieval-quality.test.js +319 -0
  102. package/dist/semantic-retrieval-quality.test.js.map +1 -0
  103. package/dist/semantic-retrieval.d.ts +245 -0
  104. package/dist/semantic-retrieval.d.ts.map +1 -0
  105. package/dist/semantic-retrieval.js +662 -0
  106. package/dist/semantic-retrieval.js.map +1 -0
  107. package/dist/semantic-retrieval.test.d.ts +2 -0
  108. package/dist/semantic-retrieval.test.d.ts.map +1 -0
  109. package/dist/semantic-retrieval.test.js +138 -0
  110. package/dist/semantic-retrieval.test.js.map +1 -0
  111. package/dist/session-continuation.d.ts +2 -0
  112. package/dist/session-continuation.d.ts.map +1 -1
  113. package/dist/session-continuation.js.map +1 -1
  114. package/dist/session-store.d.ts +33 -0
  115. package/dist/session-store.d.ts.map +1 -1
  116. package/dist/session-store.js.map +1 -1
  117. package/package.json +13 -1
@@ -109,11 +109,18 @@ export interface BrainRetrievalScores {
109
109
  readonly semantic?: number;
110
110
  readonly rerank?: number;
111
111
  }
112
+ export interface BrainRetrievalRanks {
113
+ readonly keyword?: number;
114
+ readonly semantic?: number;
115
+ }
112
116
  export interface BrainRetrievalResult {
113
117
  readonly scope: BrainScope;
114
118
  readonly chunk: BrainChunk;
115
119
  readonly score: number;
116
120
  readonly scores: BrainRetrievalScores;
121
+ readonly ranks?: BrainRetrievalRanks;
122
+ readonly retrievalMode?: "lexical" | "semantic" | "hybrid";
123
+ readonly fallbackReason?: string;
117
124
  readonly trust: BrainTrustLevel;
118
125
  }
119
126
  export interface CreateBrainRetrievalResultInput {
@@ -121,6 +128,9 @@ export interface CreateBrainRetrievalResultInput {
121
128
  readonly chunk: BrainChunk;
122
129
  readonly score: number;
123
130
  readonly scores?: BrainRetrievalScores;
131
+ readonly ranks?: BrainRetrievalRanks;
132
+ readonly retrievalMode?: "lexical" | "semantic" | "hybrid";
133
+ readonly fallbackReason?: string;
124
134
  readonly trust: BrainTrustLevel;
125
135
  }
126
136
  export interface BrainIngestionJob {
@@ -227,6 +237,7 @@ export interface BrainCandidateSearchQuery {
227
237
  readonly sources: readonly BrainSourceRef[];
228
238
  readonly query: string;
229
239
  readonly limit: number;
240
+ readonly signal?: AbortSignal;
230
241
  }
231
242
  export interface BrainEnqueueResult {
232
243
  readonly job: BrainIngestionJob;
@@ -244,6 +255,9 @@ export interface BrainJobMutationInput {
244
255
  readonly claimToken: string;
245
256
  readonly now: string;
246
257
  }
258
+ export interface BrainJobLeaseInput extends BrainJobMutationInput {
259
+ readonly leaseMs: number;
260
+ }
247
261
  export interface BrainJobFailureInput extends BrainJobMutationInput {
248
262
  readonly failure: BrainFailure;
249
263
  readonly retryAt?: string;
@@ -273,16 +287,22 @@ export interface BrainParserResult {
273
287
  export interface BrainEmbeddingRequest {
274
288
  readonly texts: readonly string[];
275
289
  readonly model?: string;
290
+ readonly task?: "document" | "query";
291
+ readonly signal?: AbortSignal;
276
292
  }
277
293
  export interface BrainEmbeddingResult {
278
294
  readonly vectors: readonly (readonly number[])[];
279
295
  readonly model: string;
280
296
  readonly dimensions: number;
297
+ readonly provider?: string;
298
+ readonly revision?: string;
299
+ readonly usage?: unknown;
281
300
  }
282
301
  export interface BrainRerankRequest {
283
302
  readonly query: string;
284
303
  readonly results: readonly BrainRetrievalResult[];
285
304
  readonly limit: number;
305
+ readonly signal?: AbortSignal;
286
306
  }
287
307
  export interface BrainStoreSnapshot {
288
308
  readonly version: 1;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/brain/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/brain/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { CanonicalTurnCommitted } from "./canonical-turn.js";
2
+ import type { SessionStore } from "./session-store.js";
3
+ export declare const DEFAULT_CANONICAL_TURN_DISPATCH_LIMIT = 100;
4
+ export declare const MAX_CANONICAL_TURN_DISPATCH_LIMIT = 1000;
5
+ export interface CanonicalTurnDispatchHandler {
6
+ /**
7
+ * Deliver one committed turn to a durable host queue.
8
+ *
9
+ * Delivery is at-least-once. Consumers must use `turn.turnId` as their
10
+ * idempotency key because a process may stop after delivery and before ack.
11
+ */
12
+ dispatch(turn: CanonicalTurnCommitted): Promise<void>;
13
+ }
14
+ export interface CanonicalTurnDispatchResult {
15
+ readonly scanned: number;
16
+ readonly dispatched: number;
17
+ readonly failed: number;
18
+ readonly superseded: number;
19
+ }
20
+ export interface CanonicalTurnOutboxDispatcherOptions {
21
+ readonly sessionStore: SessionStore;
22
+ readonly handler: CanonicalTurnDispatchHandler;
23
+ }
24
+ /** Reconciles committed canonical turns into a host-owned durable queue. */
25
+ export declare class CanonicalTurnOutboxDispatcher {
26
+ private readonly options;
27
+ constructor(options: CanonicalTurnOutboxDispatcherOptions);
28
+ dispatchPending(limit?: number): Promise<CanonicalTurnDispatchResult>;
29
+ }
30
+ //# sourceMappingURL=canonical-turn-dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-turn-dispatcher.d.ts","sourceRoot":"","sources":["../src/canonical-turn-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,qCAAqC,MAAM,CAAC;AACzD,eAAO,MAAM,iCAAiC,OAAQ,CAAC;AAEvD,MAAM,WAAW,4BAA4B;IAC3C;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;CAChD;AAED,4EAA4E;AAC5E,qBAAa,6BAA6B;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,oCAAoC;IAEpE,eAAe,CACnB,KAAK,SAAwC,GAC5C,OAAO,CAAC,2BAA2B,CAAC;CA2CxC"}
@@ -0,0 +1,50 @@
1
+ export const DEFAULT_CANONICAL_TURN_DISPATCH_LIMIT = 100;
2
+ export const MAX_CANONICAL_TURN_DISPATCH_LIMIT = 1_000;
3
+ /** Reconciles committed canonical turns into a host-owned durable queue. */
4
+ export class CanonicalTurnOutboxDispatcher {
5
+ options;
6
+ constructor(options) {
7
+ this.options = options;
8
+ }
9
+ async dispatchPending(limit = DEFAULT_CANONICAL_TURN_DISPATCH_LIMIT) {
10
+ assertDispatchLimit(limit);
11
+ const { listPendingCanonicalTurns, markCanonicalTurnDispatched, recordCanonicalTurnDispatchFailure, } = this.options.sessionStore;
12
+ if (!listPendingCanonicalTurns
13
+ || !markCanonicalTurnDispatched
14
+ || !recordCanonicalTurnDispatchFailure) {
15
+ throw new Error("Canonical turn dispatch requires durable outbox support");
16
+ }
17
+ const pending = await listPendingCanonicalTurns.call(this.options.sessionStore, limit);
18
+ let dispatched = 0;
19
+ let failed = 0;
20
+ let superseded = 0;
21
+ for (const entry of pending) {
22
+ try {
23
+ await this.options.handler.dispatch(entry.turn);
24
+ const acknowledged = await markCanonicalTurnDispatched.call(this.options.sessionStore, entry.turn.turnId);
25
+ if (acknowledged)
26
+ dispatched += 1;
27
+ else
28
+ superseded += 1;
29
+ }
30
+ catch {
31
+ failed += 1;
32
+ await recordCanonicalTurnDispatchFailure.call(this.options.sessionStore, entry.turn.turnId);
33
+ }
34
+ }
35
+ return {
36
+ scanned: pending.length,
37
+ dispatched,
38
+ failed,
39
+ superseded,
40
+ };
41
+ }
42
+ }
43
+ function assertDispatchLimit(limit) {
44
+ if (!Number.isSafeInteger(limit)
45
+ || limit < 1
46
+ || limit > MAX_CANONICAL_TURN_DISPATCH_LIMIT) {
47
+ throw new TypeError(`limit must be an integer between 1 and ${MAX_CANONICAL_TURN_DISPATCH_LIMIT}`);
48
+ }
49
+ }
50
+ //# sourceMappingURL=canonical-turn-dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-turn-dispatcher.js","sourceRoot":"","sources":["../src/canonical-turn-dispatcher.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qCAAqC,GAAG,GAAG,CAAC;AACzD,MAAM,CAAC,MAAM,iCAAiC,GAAG,KAAK,CAAC;AAwBvD,4EAA4E;AAC5E,MAAM,OAAO,6BAA6B;IACX;IAA7B,YAA6B,OAA6C;QAA7C,YAAO,GAAP,OAAO,CAAsC;IAAG,CAAC;IAE9E,KAAK,CAAC,eAAe,CACnB,KAAK,GAAG,qCAAqC;QAE7C,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,EACJ,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,GACnC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAC9B,IACE,CAAC,yBAAyB;eACvB,CAAC,2BAA2B;eAC5B,CAAC,kCAAkC,EACtC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACvF,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChD,MAAM,YAAY,GAAG,MAAM,2BAA2B,CAAC,IAAI,CACzD,IAAI,CAAC,OAAO,CAAC,YAAY,EACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAClB,CAAC;gBACF,IAAI,YAAY;oBAAE,UAAU,IAAI,CAAC,CAAC;;oBAC7B,UAAU,IAAI,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,CAAC,CAAC;gBACZ,MAAM,kCAAkC,CAAC,IAAI,CAC3C,IAAI,CAAC,OAAO,CAAC,YAAY,EACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAClB,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,UAAU;YACV,MAAM;YACN,UAAU;SACX,CAAC;IACJ,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;WACzB,KAAK,GAAG,CAAC;WACT,KAAK,GAAG,iCAAiC,EAC5C,CAAC;QACD,MAAM,IAAI,SAAS,CACjB,0CAA0C,iCAAiC,EAAE,CAC9E,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=canonical-turn-dispatcher.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-turn-dispatcher.test.d.ts","sourceRoot":"","sources":["../src/canonical-turn-dispatcher.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,118 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { CanonicalTurnOutboxDispatcher, MAX_CANONICAL_TURN_DISPATCH_LIMIT, } from "./canonical-turn-dispatcher.js";
3
+ function turn(turnId) {
4
+ return {
5
+ turnId,
6
+ sessionId: "session-1",
7
+ agentName: "assistant",
8
+ surface: "chat",
9
+ terminalStatus: "succeeded",
10
+ userMessage: { id: `user-${turnId}`, role: "user" },
11
+ assistantMessage: { id: `assistant-${turnId}`, role: "assistant" },
12
+ trustedInvocation: { externalUserId: "user-1" },
13
+ occurredAt: "2026-08-30T10:00:00.000Z",
14
+ };
15
+ }
16
+ function entry(turnId, attempts = 0) {
17
+ return {
18
+ turn: turn(turnId),
19
+ status: "pending",
20
+ attempts,
21
+ createdAt: "2026-08-30T10:00:00.000Z",
22
+ updatedAt: "2026-08-30T10:00:00.000Z",
23
+ };
24
+ }
25
+ function store(overrides = {}) {
26
+ return {
27
+ listPendingCanonicalTurns: vi.fn(async () => []),
28
+ markCanonicalTurnDispatched: vi.fn(async () => true),
29
+ recordCanonicalTurnDispatchFailure: vi.fn(async () => true),
30
+ ...overrides,
31
+ };
32
+ }
33
+ describe("CanonicalTurnOutboxDispatcher", () => {
34
+ it("dispatches committed turns and acknowledges them only after delivery", async () => {
35
+ const calls = [];
36
+ const sessionStore = store({
37
+ listPendingCanonicalTurns: vi.fn(async () => [entry("turn-1"), entry("turn-2")]),
38
+ markCanonicalTurnDispatched: vi.fn(async (turnId) => {
39
+ calls.push(`ack:${turnId}`);
40
+ return true;
41
+ }),
42
+ });
43
+ const dispatcher = new CanonicalTurnOutboxDispatcher({
44
+ sessionStore,
45
+ handler: {
46
+ dispatch: vi.fn(async (value) => {
47
+ calls.push(`dispatch:${value.turnId}`);
48
+ }),
49
+ },
50
+ });
51
+ await expect(dispatcher.dispatchPending(2)).resolves.toEqual({
52
+ scanned: 2,
53
+ dispatched: 2,
54
+ failed: 0,
55
+ superseded: 0,
56
+ });
57
+ expect(calls).toEqual([
58
+ "dispatch:turn-1",
59
+ "ack:turn-1",
60
+ "dispatch:turn-2",
61
+ "ack:turn-2",
62
+ ]);
63
+ });
64
+ it("keeps a failed delivery pending and increments its durable attempt count", async () => {
65
+ const recordFailure = vi.fn(async () => true);
66
+ const acknowledge = vi.fn(async () => true);
67
+ const sessionStore = store({
68
+ listPendingCanonicalTurns: vi.fn(async () => [entry("turn-1")]),
69
+ markCanonicalTurnDispatched: acknowledge,
70
+ recordCanonicalTurnDispatchFailure: recordFailure,
71
+ });
72
+ const dispatcher = new CanonicalTurnOutboxDispatcher({
73
+ sessionStore,
74
+ handler: { dispatch: vi.fn(async () => { throw new Error("queue unavailable"); }) },
75
+ });
76
+ await expect(dispatcher.dispatchPending()).resolves.toEqual({
77
+ scanned: 1,
78
+ dispatched: 0,
79
+ failed: 1,
80
+ superseded: 0,
81
+ });
82
+ expect(recordFailure).toHaveBeenCalledWith("turn-1");
83
+ expect(acknowledge).not.toHaveBeenCalled();
84
+ });
85
+ it("treats an already acknowledged row as a concurrent supersession", async () => {
86
+ const sessionStore = store({
87
+ listPendingCanonicalTurns: vi.fn(async () => [entry("turn-1")]),
88
+ markCanonicalTurnDispatched: vi.fn(async () => false),
89
+ });
90
+ const dispatcher = new CanonicalTurnOutboxDispatcher({
91
+ sessionStore,
92
+ handler: { dispatch: vi.fn(async () => { }) },
93
+ });
94
+ await expect(dispatcher.dispatchPending()).resolves.toEqual({
95
+ scanned: 1,
96
+ dispatched: 0,
97
+ failed: 0,
98
+ superseded: 1,
99
+ });
100
+ });
101
+ it("fails closed when the store cannot provide a durable outbox", async () => {
102
+ const dispatcher = new CanonicalTurnOutboxDispatcher({
103
+ sessionStore: store({ listPendingCanonicalTurns: undefined }),
104
+ handler: { dispatch: vi.fn(async () => { }) },
105
+ });
106
+ await expect(dispatcher.dispatchPending()).rejects.toThrow("requires durable outbox support");
107
+ });
108
+ it.each([0, -1, 1.5, Number.NaN, MAX_CANONICAL_TURN_DISPATCH_LIMIT + 1])("rejects an invalid batch limit (%s)", async (limit) => {
109
+ const sessionStore = store();
110
+ const dispatcher = new CanonicalTurnOutboxDispatcher({
111
+ sessionStore,
112
+ handler: { dispatch: vi.fn(async () => { }) },
113
+ });
114
+ await expect(dispatcher.dispatchPending(limit)).rejects.toThrow("limit must be an integer");
115
+ expect(sessionStore.listPendingCanonicalTurns).not.toHaveBeenCalled();
116
+ });
117
+ });
118
+ //# sourceMappingURL=canonical-turn-dispatcher.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-turn-dispatcher.test.js","sourceRoot":"","sources":["../src/canonical-turn-dispatcher.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { SessionContinuationScope } from "./session-continuation.js";
2
+ export declare const CANONICAL_TURN_SURFACES: readonly ["chat", "channel"];
3
+ export type CanonicalTurnSurface = (typeof CANONICAL_TURN_SURFACES)[number];
4
+ export declare const CANONICAL_TURN_TERMINAL_STATUSES: readonly ["succeeded", "failed", "cancelled", "waiting"];
5
+ export type CanonicalTurnTerminalStatus = (typeof CANONICAL_TURN_TERMINAL_STATUSES)[number];
6
+ export interface CanonicalVisibleMessageRef {
7
+ readonly id: string;
8
+ readonly role: "user" | "assistant";
9
+ }
10
+ export interface CanonicalTurnInvocationIdentity {
11
+ readonly externalUserId?: string;
12
+ readonly channelId?: string;
13
+ readonly scope?: SessionContinuationScope;
14
+ }
15
+ export interface CanonicalTurnLearningPolicy {
16
+ readonly mode: "suggest" | "automatic";
17
+ readonly surfaces: readonly ("chat" | "channel")[];
18
+ readonly kinds: readonly ("fact" | "preference" | "open_thread" | "style" | "failure_pattern" | "successful_episode" | "procedure_hint")[];
19
+ }
20
+ export interface CanonicalTurnCommitted {
21
+ readonly turnId: string;
22
+ readonly requestId?: string;
23
+ readonly runId?: string;
24
+ readonly sessionId: string;
25
+ readonly agentName: string;
26
+ readonly surface: CanonicalTurnSurface;
27
+ readonly terminalStatus: CanonicalTurnTerminalStatus;
28
+ readonly userMessage: CanonicalVisibleMessageRef;
29
+ readonly assistantMessage?: CanonicalVisibleMessageRef;
30
+ readonly trustedInvocation: CanonicalTurnInvocationIdentity;
31
+ /** Immutable learning policy selected when the turn began. */
32
+ readonly learningPolicy?: CanonicalTurnLearningPolicy;
33
+ readonly occurredAt: string;
34
+ }
35
+ export declare function normalizeCanonicalTurnCommitted(value: CanonicalTurnCommitted): CanonicalTurnCommitted;
36
+ //# sourceMappingURL=canonical-turn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-turn.d.ts","sourceRoot":"","sources":["../src/canonical-turn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,eAAO,MAAM,uBAAuB,8BAA+B,CAAC;AACpE,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,eAAO,MAAM,gCAAgC,0DAKnC,CAAC;AACX,MAAM,MAAM,2BAA2B,GACrC,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CACrC;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,wBAAwB,CAAC;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,SAAS,CACrB,MAAM,GACN,YAAY,GACZ,aAAa,GACb,OAAO,GACP,iBAAiB,GACjB,oBAAoB,GACpB,gBAAgB,CACnB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE,2BAA2B,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;IACjD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,0BAA0B,CAAC;IACvD,QAAQ,CAAC,iBAAiB,EAAE,+BAA+B,CAAC;IAC5D,8DAA8D;IAC9D,QAAQ,CAAC,cAAc,CAAC,EAAE,2BAA2B,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAMD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,sBAAsB,GAC5B,sBAAsB,CAoCxB"}
@@ -0,0 +1,132 @@
1
+ export const CANONICAL_TURN_SURFACES = ["chat", "channel"];
2
+ export const CANONICAL_TURN_TERMINAL_STATUSES = [
3
+ "succeeded",
4
+ "failed",
5
+ "cancelled",
6
+ "waiting",
7
+ ];
8
+ const surfaces = new Set(CANONICAL_TURN_SURFACES);
9
+ const statuses = new Set(CANONICAL_TURN_TERMINAL_STATUSES);
10
+ const MAX_REFERENCE_LENGTH = 512;
11
+ export function normalizeCanonicalTurnCommitted(value) {
12
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
13
+ throw new TypeError("canonical turn must be an object");
14
+ }
15
+ const surface = requiredEnum(value.surface, surfaces, "surface");
16
+ const terminalStatus = requiredEnum(value.terminalStatus, statuses, "terminalStatus");
17
+ const occurredAt = timestamp(value.occurredAt, "occurredAt");
18
+ const userMessage = messageRef(value.userMessage, "user", "userMessage");
19
+ const assistantMessage = value.assistantMessage === undefined
20
+ ? undefined
21
+ : messageRef(value.assistantMessage, "assistant", "assistantMessage");
22
+ if (terminalStatus === "succeeded" && !assistantMessage) {
23
+ throw new TypeError("succeeded canonical turns require an assistant message");
24
+ }
25
+ const trustedInvocation = invocationIdentity(value.trustedInvocation);
26
+ const learningPolicy = value.learningPolicy === undefined
27
+ ? undefined
28
+ : normalizeLearningPolicy(value.learningPolicy);
29
+ return Object.freeze({
30
+ turnId: requiredText(value.turnId, "turnId"),
31
+ ...(value.requestId ? { requestId: requiredText(value.requestId, "requestId") } : {}),
32
+ ...(value.runId ? { runId: requiredText(value.runId, "runId") } : {}),
33
+ sessionId: requiredText(value.sessionId, "sessionId"),
34
+ agentName: requiredText(value.agentName, "agentName"),
35
+ surface: surface,
36
+ terminalStatus: terminalStatus,
37
+ userMessage,
38
+ ...(assistantMessage ? { assistantMessage } : {}),
39
+ trustedInvocation,
40
+ ...(learningPolicy ? { learningPolicy } : {}),
41
+ occurredAt,
42
+ });
43
+ }
44
+ function normalizeLearningPolicy(value) {
45
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
46
+ throw new TypeError("learningPolicy must be an object");
47
+ }
48
+ if (value.mode !== "suggest" && value.mode !== "automatic") {
49
+ throw new TypeError("learningPolicy.mode is invalid");
50
+ }
51
+ const allowedSurfaces = new Set(["chat", "channel"]);
52
+ const allowedKinds = new Set([
53
+ "fact",
54
+ "preference",
55
+ "open_thread",
56
+ "style",
57
+ "failure_pattern",
58
+ "successful_episode",
59
+ "procedure_hint",
60
+ ]);
61
+ const learningSurfaces = normalizedArray(value.surfaces, allowedSurfaces, "learningPolicy.surfaces");
62
+ const kinds = normalizedArray(value.kinds, allowedKinds, "learningPolicy.kinds");
63
+ return Object.freeze({
64
+ mode: value.mode,
65
+ surfaces: Object.freeze(learningSurfaces),
66
+ kinds: Object.freeze(kinds),
67
+ });
68
+ }
69
+ function normalizedArray(value, allowed, path) {
70
+ if (!Array.isArray(value) || value.length === 0)
71
+ throw new TypeError(`${path} is invalid`);
72
+ const normalized = [...new Set(value)];
73
+ if (normalized.some((entry) => typeof entry !== "string" || !allowed.has(entry))) {
74
+ throw new TypeError(`${path} is invalid`);
75
+ }
76
+ return normalized;
77
+ }
78
+ function messageRef(value, expectedRole, path) {
79
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
80
+ throw new TypeError(`${path} must be an object`);
81
+ }
82
+ if (value.role !== expectedRole) {
83
+ throw new TypeError(`${path}.role must be ${expectedRole}`);
84
+ }
85
+ return Object.freeze({ id: requiredText(value.id, `${path}.id`), role: expectedRole });
86
+ }
87
+ function invocationIdentity(value) {
88
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
89
+ throw new TypeError("trustedInvocation must be an object");
90
+ }
91
+ const scope = value.scope === undefined
92
+ ? undefined
93
+ : Object.freeze({
94
+ key: requiredText(value.scope.key, "trustedInvocation.scope.key"),
95
+ ...(value.scope.version
96
+ ? { version: requiredText(value.scope.version, "trustedInvocation.scope.version") }
97
+ : {}),
98
+ });
99
+ return Object.freeze({
100
+ ...(value.externalUserId
101
+ ? { externalUserId: requiredText(value.externalUserId, "trustedInvocation.externalUserId") }
102
+ : {}),
103
+ ...(value.channelId
104
+ ? { channelId: requiredText(value.channelId, "trustedInvocation.channelId") }
105
+ : {}),
106
+ ...(scope ? { scope } : {}),
107
+ });
108
+ }
109
+ function requiredText(value, path) {
110
+ if (typeof value !== "string")
111
+ throw new TypeError(`${path} must be a string`);
112
+ const normalized = value.trim();
113
+ if (normalized.length === 0 || normalized.length > MAX_REFERENCE_LENGTH) {
114
+ throw new TypeError(`${path} must contain between 1 and ${MAX_REFERENCE_LENGTH} characters`);
115
+ }
116
+ return normalized;
117
+ }
118
+ function requiredEnum(value, allowed, path) {
119
+ if (typeof value !== "string" || !allowed.has(value)) {
120
+ throw new TypeError(`${path} is invalid`);
121
+ }
122
+ return value;
123
+ }
124
+ function timestamp(value, path) {
125
+ if (typeof value !== "string")
126
+ throw new TypeError(`${path} must be a timestamp`);
127
+ const date = new Date(value);
128
+ if (!Number.isFinite(date.getTime()))
129
+ throw new TypeError(`${path} must be a timestamp`);
130
+ return date.toISOString();
131
+ }
132
+ //# sourceMappingURL=canonical-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-turn.js","sourceRoot":"","sources":["../src/canonical-turn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=canonical-turn.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-turn.test.d.ts","sourceRoot":"","sources":["../src/canonical-turn.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,64 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { normalizeCanonicalTurnCommitted, } from "./canonical-turn.js";
3
+ function turn(overrides = {}) {
4
+ return {
5
+ turnId: "turn-1",
6
+ requestId: "request-1",
7
+ runId: "run-1",
8
+ sessionId: "session-1",
9
+ agentName: "assistant",
10
+ surface: "chat",
11
+ terminalStatus: "succeeded",
12
+ userMessage: { id: "user-message", role: "user" },
13
+ assistantMessage: { id: "assistant-message", role: "assistant" },
14
+ trustedInvocation: {
15
+ externalUserId: "external-user",
16
+ scope: { key: "site-1", version: "2" },
17
+ },
18
+ learningPolicy: {
19
+ mode: "suggest",
20
+ surfaces: ["chat", "channel"],
21
+ kinds: ["fact", "preference"],
22
+ },
23
+ occurredAt: "2026-08-30T00:00:00.000Z",
24
+ ...overrides,
25
+ };
26
+ }
27
+ describe("canonical turn contract", () => {
28
+ it("normalizes and freezes identifier-only successful turn metadata", () => {
29
+ const normalized = normalizeCanonicalTurnCommitted(turn({
30
+ turnId: " turn-1 ",
31
+ occurredAt: "2026-08-30T02:00:00+02:00",
32
+ }));
33
+ expect(normalized.turnId).toBe("turn-1");
34
+ expect(normalized.occurredAt).toBe("2026-08-30T00:00:00.000Z");
35
+ expect(normalized).not.toHaveProperty("content");
36
+ expect(Object.isFrozen(normalized)).toBe(true);
37
+ expect(Object.isFrozen(normalized.trustedInvocation)).toBe(true);
38
+ expect(Object.isFrozen(normalized.learningPolicy?.kinds)).toBe(true);
39
+ });
40
+ it("allows waiting and failed turns without an assistant message", () => {
41
+ expect(normalizeCanonicalTurnCommitted(turn({
42
+ terminalStatus: "waiting",
43
+ assistantMessage: undefined,
44
+ })).assistantMessage).toBeUndefined();
45
+ expect(normalizeCanonicalTurnCommitted(turn({
46
+ terminalStatus: "failed",
47
+ assistantMessage: undefined,
48
+ })).assistantMessage).toBeUndefined();
49
+ });
50
+ it.each([
51
+ { surface: "task" },
52
+ { terminalStatus: "done" },
53
+ { terminalStatus: "succeeded", assistantMessage: undefined },
54
+ { userMessage: { id: "user-message", role: "assistant" } },
55
+ { trustedInvocation: { scope: { key: " " } } },
56
+ { occurredAt: "not-a-date" },
57
+ { learningPolicy: { mode: "off", surfaces: ["chat"], kinds: ["fact"] } },
58
+ { learningPolicy: { mode: "suggest", surfaces: [], kinds: ["fact"] } },
59
+ { learningPolicy: { mode: "suggest", surfaces: ["chat"], kinds: ["unknown"] } },
60
+ ])("rejects malformed or unsupported turn metadata %#", (override) => {
61
+ expect(() => normalizeCanonicalTurnCommitted(turn(override))).toThrow();
62
+ });
63
+ });
64
+ //# sourceMappingURL=canonical-turn.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-turn.test.js","sourceRoot":"","sources":["../src/canonical-turn.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,12 +14,15 @@ export { DEFAULT_MODEL_ROUTE_MAX_INPUT_CHARS, DEFAULT_MODEL_ROUTE_MIN_CONFIDENCE
14
14
  export type { AgentModelRoutingConfig, ModelRouteClassifier, ModelRouteClassifierInput, ModelRouteClassifierOptions, ModelRouteDecision, ModelRouteRuntimePlanFields, ModelRouterConfig, ModelRouterMode, ModelRouterRule, ModelRouterRuleConditions, ModelRouteStatus, ResolvedModelRoute, ResolveModelRouteInput, ResolveModelRouteOptions, } from "./model-router.js";
15
15
  export * from "./runtime-plan/index.js";
16
16
  export * from "./runtime-context/index.js";
17
+ export * from "./semantic-retrieval.js";
17
18
  export * from "./execution-router.js";
18
19
  export * from "./steering.js";
19
20
  export * from "./run-delivery.js";
20
21
  export * from "./run-delivery-follower.js";
21
22
  export * from "./run-delivery-owner.js";
22
23
  export * from "./chat-interactions.js";
24
+ export * from "./canonical-turn.js";
25
+ export * from "./canonical-turn-dispatcher.js";
23
26
  export * from "./guardrails/index.js";
24
27
  export * from "./runtime-inspection/index.js";
25
28
  export * from "./scheduling/index.js";
@@ -42,7 +45,7 @@ export type { SearchProvider, SearchResult, SearchOptions } from "./search-provi
42
45
  export { parseModelString, DEFAULT_IMAGE_MODEL, DEFAULT_VIDEO_MODEL, DEFAULT_VISION_MODEL, DEFAULT_TRANSCRIBE_MODEL, DEFAULT_TTS_MODEL, DEFAULT_SEARCH_PROVIDER, AUDIO_MODEL_CATALOG, listAudioModels, getAudioModel, } from "./agent-models.js";
43
46
  export type { ParsedModel, AudioModelCapability, AudioModelRouting, AudioModelDefinition, } from "./agent-models.js";
44
47
  export type { LogStore, LogEntry, SessionInfo } from "./log-store.js";
45
- export type { SessionStore, Session, Message, MessageRole, ToolCallInfo, ToolCallState, SessionContentPart, SessionMessageOptions } from "./session-store.js";
48
+ export type { SessionStore, Session, Message, MessageRole, ToolCallInfo, ToolCallState, SessionContentPart, SessionMessageOptions, CanonicalTurnOutboxEntry } from "./session-store.js";
46
49
  export { SessionContinuationError, projectResolvedClientToolCalls, resolvePendingClientToolCall, } from "./session-continuation.js";
47
50
  export type { PreparedSessionContinuation, PrepareSessionContinuationInput, SessionContinuationErrorCode, SessionContinuationScope, } from "./session-continuation.js";
48
51
  export type { ApprovalStore } from "./approval-store.js";