@polpo-ai/core 0.15.41 → 0.15.42

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 (108) hide show
  1. package/README.md +47 -0
  2. package/dist/__tests__/memory-store-policy.test.d.ts +2 -0
  3. package/dist/__tests__/memory-store-policy.test.d.ts.map +1 -0
  4. package/dist/__tests__/memory-store-policy.test.js +141 -0
  5. package/dist/__tests__/memory-store-policy.test.js.map +1 -0
  6. package/dist/__tests__/typed-memory.test.d.ts +2 -0
  7. package/dist/__tests__/typed-memory.test.d.ts.map +1 -0
  8. package/dist/__tests__/typed-memory.test.js +226 -0
  9. package/dist/__tests__/typed-memory.test.js.map +1 -0
  10. package/dist/adapter.d.ts +3 -0
  11. package/dist/adapter.d.ts.map +1 -1
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/memory/compatibility.d.ts +3 -0
  17. package/dist/memory/compatibility.d.ts.map +1 -0
  18. package/dist/memory/compatibility.js +27 -0
  19. package/dist/memory/compatibility.js.map +1 -0
  20. package/dist/memory/dedupe.d.ts +4 -0
  21. package/dist/memory/dedupe.d.ts.map +1 -0
  22. package/dist/memory/dedupe.js +21 -0
  23. package/dist/memory/dedupe.js.map +1 -0
  24. package/dist/memory/errors.d.ts +7 -0
  25. package/dist/memory/errors.d.ts.map +1 -0
  26. package/dist/memory/errors.js +11 -0
  27. package/dist/memory/errors.js.map +1 -0
  28. package/dist/memory/extraction.d.ts +124 -0
  29. package/dist/memory/extraction.d.ts.map +1 -0
  30. package/dist/memory/extraction.js +450 -0
  31. package/dist/memory/extraction.js.map +1 -0
  32. package/dist/memory/extraction.test.d.ts +2 -0
  33. package/dist/memory/extraction.test.d.ts.map +1 -0
  34. package/dist/memory/extraction.test.js +366 -0
  35. package/dist/memory/extraction.test.js.map +1 -0
  36. package/dist/memory/in-memory-extraction-store.d.ts +30 -0
  37. package/dist/memory/in-memory-extraction-store.d.ts.map +1 -0
  38. package/dist/memory/in-memory-extraction-store.js +363 -0
  39. package/dist/memory/in-memory-extraction-store.js.map +1 -0
  40. package/dist/memory/in-memory-store.d.ts +24 -0
  41. package/dist/memory/in-memory-store.d.ts.map +1 -0
  42. package/dist/memory/in-memory-store.js +380 -0
  43. package/dist/memory/in-memory-store.js.map +1 -0
  44. package/dist/memory/index.d.ts +20 -0
  45. package/dist/memory/index.d.ts.map +1 -0
  46. package/dist/memory/index.js +14 -0
  47. package/dist/memory/index.js.map +1 -0
  48. package/dist/memory/item.d.ts +6 -0
  49. package/dist/memory/item.d.ts.map +1 -0
  50. package/dist/memory/item.js +169 -0
  51. package/dist/memory/item.js.map +1 -0
  52. package/dist/memory/lifecycle.d.ts +5 -0
  53. package/dist/memory/lifecycle.d.ts.map +1 -0
  54. package/dist/memory/lifecycle.js +32 -0
  55. package/dist/memory/lifecycle.js.map +1 -0
  56. package/dist/memory/policy.d.ts +27 -0
  57. package/dist/memory/policy.d.ts.map +1 -0
  58. package/dist/memory/policy.js +114 -0
  59. package/dist/memory/policy.js.map +1 -0
  60. package/dist/memory/ranking.d.ts +9 -0
  61. package/dist/memory/ranking.d.ts.map +1 -0
  62. package/dist/memory/ranking.js +65 -0
  63. package/dist/memory/ranking.js.map +1 -0
  64. package/dist/memory/scope.d.ts +5 -0
  65. package/dist/memory/scope.d.ts.map +1 -0
  66. package/dist/memory/scope.js +68 -0
  67. package/dist/memory/scope.js.map +1 -0
  68. package/dist/memory/store-errors.d.ts +10 -0
  69. package/dist/memory/store-errors.d.ts.map +1 -0
  70. package/dist/memory/store-errors.js +19 -0
  71. package/dist/memory/store-errors.js.map +1 -0
  72. package/dist/memory/store-types.d.ts +81 -0
  73. package/dist/memory/store-types.d.ts.map +1 -0
  74. package/dist/memory/store-types.js +2 -0
  75. package/dist/memory/store-types.js.map +1 -0
  76. package/dist/memory/types.d.ts +70 -0
  77. package/dist/memory/types.d.ts.map +1 -0
  78. package/dist/memory/types.js +32 -0
  79. package/dist/memory/types.js.map +1 -0
  80. package/dist/orchestrator-context.d.ts +6 -0
  81. package/dist/orchestrator-context.d.ts.map +1 -1
  82. package/dist/runtime-context/index.d.ts +5 -0
  83. package/dist/runtime-context/index.d.ts.map +1 -0
  84. package/dist/runtime-context/index.js +4 -0
  85. package/dist/runtime-context/index.js.map +1 -0
  86. package/dist/runtime-context/memory-retriever.d.ts +14 -0
  87. package/dist/runtime-context/memory-retriever.d.ts.map +1 -0
  88. package/dist/runtime-context/memory-retriever.js +76 -0
  89. package/dist/runtime-context/memory-retriever.js.map +1 -0
  90. package/dist/runtime-context/runtime-context.d.ts +4 -0
  91. package/dist/runtime-context/runtime-context.d.ts.map +1 -0
  92. package/dist/runtime-context/runtime-context.js +311 -0
  93. package/dist/runtime-context/runtime-context.js.map +1 -0
  94. package/dist/runtime-context/runtime-context.test.d.ts +2 -0
  95. package/dist/runtime-context/runtime-context.test.d.ts.map +1 -0
  96. package/dist/runtime-context/runtime-context.test.js +282 -0
  97. package/dist/runtime-context/runtime-context.test.js.map +1 -0
  98. package/dist/runtime-context/types.d.ts +75 -0
  99. package/dist/runtime-context/types.d.ts.map +1 -0
  100. package/dist/runtime-context/types.js +8 -0
  101. package/dist/runtime-context/types.js.map +1 -0
  102. package/dist/task-runner.d.ts.map +1 -1
  103. package/dist/task-runner.js +16 -0
  104. package/dist/task-runner.js.map +1 -1
  105. package/dist/types/config.d.ts +6 -0
  106. package/dist/types/config.d.ts.map +1 -1
  107. package/dist/types/config.js.map +1 -1
  108. package/package.json +9 -1
@@ -0,0 +1,366 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { InMemoryMemoryExtractionStore, MemoryAuthorizationError, MemoryConflictError, MemoryContractError, createMemoryExtractionCandidate, normalizeMemoryExtractionAuditEvent, normalizeMemoryExtractionCandidate, } from "./index.js";
3
+ const now = "2026-07-28T12:00:00.000Z";
4
+ const later = "2026-07-28T12:01:00.000Z";
5
+ function context(namespace = "project-a", externalUserId = "user-a") {
6
+ return {
7
+ namespace,
8
+ access: {
9
+ projectId: namespace,
10
+ agentName: "assistant",
11
+ externalUserId,
12
+ sessionId: "session-a",
13
+ },
14
+ };
15
+ }
16
+ function input(overrides = {}) {
17
+ return {
18
+ idempotencyKey: "run-a:message-a:0",
19
+ scope: {
20
+ kind: "user",
21
+ subjectId: "user-a",
22
+ agentName: "assistant",
23
+ },
24
+ kind: "preference",
25
+ content: "Prefers concise weekly summaries.",
26
+ confidence: 0.92,
27
+ source: {
28
+ runId: "run-a",
29
+ sessionId: "session-a",
30
+ messageIds: ["message-a"],
31
+ },
32
+ ...overrides,
33
+ };
34
+ }
35
+ function candidate(overrides = {}) {
36
+ return createMemoryExtractionCandidate(input(overrides), {
37
+ createId: () => "candidate-a",
38
+ now: () => now,
39
+ });
40
+ }
41
+ describe("Memory extraction candidate contract", () => {
42
+ it("creates only pending proposals with extraction provenance", () => {
43
+ const value = candidate();
44
+ expect(value).toMatchObject({
45
+ id: "candidate-a",
46
+ idempotencyKey: "run-a:message-a:0",
47
+ status: "pending",
48
+ revision: 1,
49
+ proposal: { action: "create" },
50
+ provenance: {
51
+ source: "extraction",
52
+ runId: "run-a",
53
+ sessionId: "session-a",
54
+ messageId: "message-a",
55
+ },
56
+ createdAt: now,
57
+ updatedAt: now,
58
+ });
59
+ expect(Object.isFrozen(value)).toBe(true);
60
+ expect(Object.isFrozen(value.source.messageIds)).toBe(true);
61
+ });
62
+ it("normalizes whitespace, message ids, findings, and immutable metadata", () => {
63
+ const value = createMemoryExtractionCandidate(input({
64
+ idempotencyKey: " delivery-a ",
65
+ content: " Prefers concise summaries. ",
66
+ summary: " Summary ",
67
+ source: {
68
+ runId: " run-a ",
69
+ messageIds: [" message-b ", "message-a", "message-b"],
70
+ },
71
+ sensitiveFindings: [
72
+ { code: "custom_secret", start: 8, length: 4 },
73
+ { code: "bad code", start: -1, length: -1 },
74
+ ],
75
+ metadata: { extractor: "small-model" },
76
+ }), {
77
+ createId: () => "candidate-a",
78
+ now: () => now,
79
+ });
80
+ expect(value.idempotencyKey).toBe("delivery-a");
81
+ expect(value.content).toBe("Prefers concise summaries.");
82
+ expect(value.summary).toBe("Summary");
83
+ expect(value.source.messageIds).toEqual(["message-a", "message-b"]);
84
+ expect(value.sensitiveFindings).toEqual([
85
+ { code: "custom_sensitive_content", start: 0, length: 0 },
86
+ { code: "custom_secret", start: 8, length: 4 },
87
+ ]);
88
+ expect(value.metadata).toEqual({ extractor: "small-model" });
89
+ expect(Object.isFrozen(value.metadata)).toBe(true);
90
+ });
91
+ it.each([
92
+ ["missing source references", { source: {} }],
93
+ ["missing idempotency key", { idempotencyKey: " " }],
94
+ ["invalid confidence", { confidence: Number.NaN }],
95
+ ["unknown kind", { kind: "instruction" }],
96
+ ["empty content", { content: " " }],
97
+ ["unknown metadata value", { metadata: { nested: new Date() } }],
98
+ ])("rejects %s", (_label, override) => {
99
+ expect(() => candidate(override)).toThrow(MemoryContractError);
100
+ });
101
+ it("requires a target for duplicate and supersede proposals", () => {
102
+ expect(() => candidate({
103
+ proposal: { action: "duplicate" },
104
+ })).toThrow(MemoryContractError);
105
+ expect(() => candidate({
106
+ proposal: {
107
+ action: "create",
108
+ existingMemoryId: "memory-a",
109
+ },
110
+ })).toThrow(MemoryContractError);
111
+ });
112
+ it("adds deterministic sensitive-content findings even when omitted", () => {
113
+ const value = candidate({
114
+ content: "Use api_key=abcdefghijklmnop1234 for the next call.",
115
+ });
116
+ expect(value.sensitiveFindings.map((finding) => finding.code)).toContain("credential_assignment");
117
+ });
118
+ it("rejects malformed restored candidates instead of activating them", () => {
119
+ const value = candidate();
120
+ expect(() => normalizeMemoryExtractionCandidate({
121
+ ...value,
122
+ status: "applied",
123
+ })).toThrow(MemoryContractError);
124
+ expect(() => normalizeMemoryExtractionCandidate({
125
+ ...value,
126
+ updatedAt: "not-a-date",
127
+ })).toThrow(MemoryContractError);
128
+ });
129
+ it.each([
130
+ ["pending", 2],
131
+ ["approved", 1],
132
+ ["rejected", 3],
133
+ ["applied", 2],
134
+ ])("rejects a %s candidate with revision %s", (status, revision) => {
135
+ const value = candidate();
136
+ const decision = status === "pending"
137
+ ? undefined
138
+ : {
139
+ decision: status === "rejected" ? "reject" : "approve",
140
+ decidedBy: { actor: "user", actorId: "reviewer-a" },
141
+ decidedAt: now,
142
+ ...(status === "rejected" ? { reason: "Rejected." } : {}),
143
+ };
144
+ expect(() => normalizeMemoryExtractionCandidate({
145
+ ...value,
146
+ status,
147
+ revision,
148
+ ...(decision ? { decision } : {}),
149
+ ...(status === "applied"
150
+ ? { appliedMemoryId: "memory-a", appliedAt: now }
151
+ : {}),
152
+ })).toThrow(MemoryContractError);
153
+ });
154
+ it("rejects audit fields that do not belong to the event type", () => {
155
+ expect(() => normalizeMemoryExtractionAuditEvent({
156
+ id: "audit-a",
157
+ candidateId: "candidate-a",
158
+ type: "approved",
159
+ at: now,
160
+ reviewer: { actor: "user", actorId: "reviewer-a" },
161
+ memoryId: "memory-a",
162
+ })).toThrow(MemoryContractError);
163
+ expect(() => normalizeMemoryExtractionAuditEvent({
164
+ id: "audit-b",
165
+ candidateId: "candidate-a",
166
+ type: "applied",
167
+ at: now,
168
+ reviewer: { actor: "system", actorId: "worker-a" },
169
+ memoryId: "memory-a",
170
+ })).toThrow(MemoryContractError);
171
+ });
172
+ it("keeps metadata keys inert and rejects normalized duplicates", () => {
173
+ const polluted = JSON.parse('{"__proto__":{"polluted":true}}');
174
+ const value = candidate({ metadata: polluted });
175
+ expect(Object.prototype).not.toHaveProperty("polluted");
176
+ expect(Object.hasOwn(value.metadata, "__proto__")).toBe(true);
177
+ expect(value.metadata.__proto__).toEqual({ polluted: true });
178
+ expect(() => candidate({
179
+ metadata: { " key ": "first", key: "second" },
180
+ })).toThrow(MemoryContractError);
181
+ });
182
+ });
183
+ describe("InMemoryMemoryExtractionStore", () => {
184
+ it("makes duplicate delivery idempotent without duplicate audit events", async () => {
185
+ let auditId = 0;
186
+ const store = new InMemoryMemoryExtractionStore({
187
+ createAuditId: () => `audit-${++auditId}`,
188
+ now: () => now,
189
+ });
190
+ const first = await store.propose(candidate(), context());
191
+ const replay = await store.propose(candidate(), context());
192
+ expect(first.created).toBe(true);
193
+ expect(replay.created).toBe(false);
194
+ expect(replay.candidate.id).toBe(first.candidate.id);
195
+ expect(await store.list({}, context())).toHaveLength(1);
196
+ expect(await store.listAudit(first.candidate.id, context())).toHaveLength(1);
197
+ });
198
+ it("rejects reuse of an idempotency key for a different proposal", async () => {
199
+ const store = new InMemoryMemoryExtractionStore();
200
+ await store.propose(candidate(), context());
201
+ await expect(store.propose(candidate({
202
+ content: "A conflicting proposal.",
203
+ }), context())).rejects.toThrow(MemoryConflictError);
204
+ });
205
+ it("isolates identical ids and idempotency keys by namespace", async () => {
206
+ const store = new InMemoryMemoryExtractionStore();
207
+ await store.propose(candidate(), context("project-a"));
208
+ await store.propose(candidate(), context("project-b", "user-a"));
209
+ expect(await store.list({}, context("project-a"))).toHaveLength(1);
210
+ expect(await store.list({}, context("project-b", "user-a"))).toHaveLength(1);
211
+ });
212
+ it("isolates idempotency keys across authorized scopes in one namespace", async () => {
213
+ const store = new InMemoryMemoryExtractionStore();
214
+ await store.propose(candidate(), context());
215
+ await store.propose(createMemoryExtractionCandidate(input({
216
+ scope: {
217
+ kind: "session",
218
+ subjectId: "session-a",
219
+ agentName: "assistant",
220
+ },
221
+ }), {
222
+ createId: () => "candidate-session",
223
+ now: () => now,
224
+ }), context());
225
+ expect(await store.list({}, context())).toHaveLength(2);
226
+ });
227
+ it("checks scope authorization before revealing ids or idempotency matches", async () => {
228
+ const store = new InMemoryMemoryExtractionStore();
229
+ await store.propose(candidate(), context());
230
+ const denied = context("project-a", "user-b");
231
+ await expect(store.get("candidate-a", denied)).rejects.toThrow(MemoryAuthorizationError);
232
+ await expect(store.propose(candidate(), denied)).rejects.toThrow(MemoryAuthorizationError);
233
+ });
234
+ it("applies the pending → approved → applied lifecycle with audit", async () => {
235
+ let clock = now;
236
+ let auditId = 0;
237
+ const store = new InMemoryMemoryExtractionStore({
238
+ now: () => clock,
239
+ createAuditId: () => `audit-${++auditId}`,
240
+ });
241
+ const proposed = await store.propose(candidate(), context());
242
+ clock = later;
243
+ const approved = await store.decide("candidate-a", {
244
+ decision: "approve",
245
+ decidedBy: { actor: "user", actorId: "reviewer-a" },
246
+ reason: "Confirmed by the user.",
247
+ expectedRevision: proposed.candidate.revision,
248
+ }, context());
249
+ expect(approved.status).toBe("approved");
250
+ expect(approved.decision?.decidedAt).toBe(later);
251
+ const applied = await store.markApplied("candidate-a", {
252
+ memoryId: "memory-a",
253
+ expectedRevision: approved.revision,
254
+ }, context());
255
+ expect(applied.status).toBe("applied");
256
+ expect(applied.appliedMemoryId).toBe("memory-a");
257
+ expect((await store.listAudit("candidate-a", context())).map((event) => event.type)).toEqual(["proposed", "approved", "applied"]);
258
+ expect(() => new InMemoryMemoryExtractionStore({
259
+ snapshot: store.snapshot(),
260
+ })).not.toThrow();
261
+ });
262
+ it("keeps rejection terminal and records a reason", async () => {
263
+ const store = new InMemoryMemoryExtractionStore({ now: () => now });
264
+ await store.propose(candidate(), context());
265
+ const rejected = await store.decide("candidate-a", {
266
+ decision: "reject",
267
+ decidedBy: { actor: "user", actorId: "reviewer-a" },
268
+ reason: "This is not durable.",
269
+ }, context());
270
+ expect(rejected.status).toBe("rejected");
271
+ expect(rejected.decision?.reason).toBe("This is not durable.");
272
+ await expect(store.markApplied("candidate-a", {
273
+ memoryId: "memory-a",
274
+ }, context())).rejects.toThrow(MemoryConflictError);
275
+ });
276
+ it("requires a rejection reason for an auditable decision", async () => {
277
+ const store = new InMemoryMemoryExtractionStore({ now: () => now });
278
+ await store.propose(candidate(), context());
279
+ await expect(store.decide("candidate-a", {
280
+ decision: "reject",
281
+ decidedBy: { actor: "user", actorId: "reviewer-a" },
282
+ }, context())).rejects.toThrow(MemoryContractError);
283
+ expect((await store.get("candidate-a", context()))?.status).toBe("pending");
284
+ });
285
+ it("uses optimistic concurrency so two reviewers cannot both decide", async () => {
286
+ let clock = now;
287
+ const store = new InMemoryMemoryExtractionStore({ now: () => clock });
288
+ const proposed = await store.propose(candidate(), context());
289
+ clock = later;
290
+ await store.decide("candidate-a", {
291
+ decision: "approve",
292
+ decidedBy: { actor: "user", actorId: "reviewer-a" },
293
+ expectedRevision: proposed.candidate.revision,
294
+ }, context());
295
+ await expect(store.decide("candidate-a", {
296
+ decision: "reject",
297
+ decidedBy: { actor: "user", actorId: "reviewer-b" },
298
+ expectedRevision: proposed.candidate.revision,
299
+ }, context())).rejects.toThrow(MemoryConflictError);
300
+ });
301
+ it("round-trips a validated snapshot without cross-namespace references", async () => {
302
+ const store = new InMemoryMemoryExtractionStore({ now: () => now });
303
+ await store.propose(candidate(), context());
304
+ const restored = new InMemoryMemoryExtractionStore({
305
+ snapshot: store.snapshot(),
306
+ now: () => later,
307
+ });
308
+ expect(await restored.get("candidate-a", context())).toEqual(await store.get("candidate-a", context()));
309
+ expect(() => new InMemoryMemoryExtractionStore({
310
+ snapshot: {
311
+ version: 1,
312
+ namespaces: [{
313
+ namespace: "project-a",
314
+ candidates: [candidate()],
315
+ audit: [{
316
+ id: "audit-orphan",
317
+ candidateId: "missing",
318
+ type: "proposed",
319
+ at: now,
320
+ }],
321
+ }],
322
+ },
323
+ })).toThrow(MemoryContractError);
324
+ expect(() => new InMemoryMemoryExtractionStore({
325
+ snapshot: {
326
+ version: 1,
327
+ namespaces: [{
328
+ namespace: "project-a",
329
+ candidates: [{
330
+ ...candidate(),
331
+ status: "approved",
332
+ revision: 2,
333
+ decision: {
334
+ decision: "approve",
335
+ decidedBy: { actor: "user", actorId: "reviewer-a" },
336
+ decidedAt: now,
337
+ },
338
+ }],
339
+ audit: [{
340
+ id: "audit-proposed",
341
+ candidateId: "candidate-a",
342
+ type: "proposed",
343
+ at: now,
344
+ }],
345
+ }],
346
+ },
347
+ })).toThrow(MemoryContractError);
348
+ });
349
+ it("does not partially persist when an audit id collides", async () => {
350
+ const store = new InMemoryMemoryExtractionStore({
351
+ createAuditId: () => "audit-fixed",
352
+ now: () => now,
353
+ });
354
+ await store.propose(candidate(), context());
355
+ await expect(store.propose(createMemoryExtractionCandidate(input({
356
+ idempotencyKey: "run-a:message-b:0",
357
+ content: "A second candidate.",
358
+ source: { runId: "run-a", messageIds: ["message-b"] },
359
+ }), {
360
+ createId: () => "candidate-b",
361
+ now: () => now,
362
+ }), context())).rejects.toThrow(MemoryConflictError);
363
+ expect(await store.list({}, context())).toHaveLength(1);
364
+ });
365
+ });
366
+ //# sourceMappingURL=extraction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction.test.js","sourceRoot":"","sources":["../../src/memory/extraction.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type MemoryExtractionApplyInput, type MemoryExtractionAuditEvent, type MemoryExtractionCandidate, type MemoryExtractionCandidateStore, type MemoryExtractionDecisionInput, type MemoryExtractionListQuery, type MemoryExtractionProposeResult, type MemoryExtractionStoreContext, type MemoryExtractionStoreSnapshot } from "./extraction.js";
2
+ export interface InMemoryMemoryExtractionStoreOptions {
3
+ readonly snapshot?: MemoryExtractionStoreSnapshot;
4
+ readonly createAuditId?: () => string;
5
+ readonly now?: () => Date | string;
6
+ }
7
+ export declare class InMemoryMemoryExtractionStore implements MemoryExtractionCandidateStore {
8
+ private readonly namespaces;
9
+ private readonly auditIds;
10
+ private readonly createAuditId;
11
+ private readonly now;
12
+ constructor(options?: InMemoryMemoryExtractionStoreOptions);
13
+ private state;
14
+ private existingState;
15
+ private authorize;
16
+ private requiredCandidate;
17
+ private assertRevision;
18
+ private auditEvent;
19
+ private appendAudit;
20
+ private idempotencyIndexKey;
21
+ propose(input: MemoryExtractionCandidate, context: MemoryExtractionStoreContext): Promise<MemoryExtractionProposeResult>;
22
+ get(id: string, context: MemoryExtractionStoreContext): Promise<MemoryExtractionCandidate | undefined>;
23
+ list(query: MemoryExtractionListQuery, context: MemoryExtractionStoreContext): Promise<MemoryExtractionCandidate[]>;
24
+ decide(id: string, input: MemoryExtractionDecisionInput, context: MemoryExtractionStoreContext): Promise<MemoryExtractionCandidate>;
25
+ markApplied(id: string, input: MemoryExtractionApplyInput, context: MemoryExtractionStoreContext): Promise<MemoryExtractionCandidate>;
26
+ listAudit(candidateId: string, context: MemoryExtractionStoreContext): Promise<MemoryExtractionAuditEvent[]>;
27
+ snapshot(): MemoryExtractionStoreSnapshot;
28
+ private restore;
29
+ }
30
+ //# sourceMappingURL=in-memory-extraction-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-extraction-store.d.ts","sourceRoot":"","sources":["../../src/memory/in-memory-extraction-store.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAGlC,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EACnC,MAAM,iBAAiB,CAAC;AAkBzB,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,6BAA6B,CAAC;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;CACpC;AA6GD,qBAAa,6BACb,YAAW,8BAA8B;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAsB;gBAE9B,OAAO,GAAE,oCAAyC;IAO9D,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,mBAAmB;IASrB,OAAO,CACX,KAAK,EAAE,yBAAyB,EAChC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,6BAA6B,CAAC;IAmDnC,GAAG,CACP,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAe3C,IAAI,CACR,KAAK,EAAE,yBAAyB,EAChC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,yBAAyB,EAAE,CAAC;IA8CjC,MAAM,CACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,6BAA6B,EACpC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,yBAAyB,CAAC;IAiC/B,WAAW,CACf,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,0BAA0B,EACjC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,yBAAyB,CAAC;IAyC/B,SAAS,CACb,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,0BAA0B,EAAE,CAAC;IAQxC,QAAQ,IAAI,6BAA6B;IAqBzC,OAAO,CAAC,OAAO;CAwEhB"}