@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,450 @@
1
+ import { nanoid } from "nanoid";
2
+ import { MemoryContractError } from "./errors.js";
3
+ import { MAX_MEMORY_CONTENT_CHARACTERS, MAX_MEMORY_SUMMARY_CHARACTERS, } from "./item.js";
4
+ import { normalizeMemoryDedupeContent } from "./dedupe.js";
5
+ import { normalizeMemoryScope } from "./scope.js";
6
+ import { MEMORY_KINDS, } from "./types.js";
7
+ import { detectSensitiveMemoryContent } from "./policy.js";
8
+ export const MEMORY_EXTRACTION_STATUSES = [
9
+ "pending",
10
+ "approved",
11
+ "rejected",
12
+ "applied",
13
+ ];
14
+ export const MEMORY_EXTRACTION_PROPOSAL_ACTIONS = [
15
+ "create",
16
+ "duplicate",
17
+ "supersede",
18
+ ];
19
+ export const MEMORY_EXTRACTION_AUDIT_TYPES = [
20
+ "proposed",
21
+ "approved",
22
+ "rejected",
23
+ "applied",
24
+ ];
25
+ const memoryKinds = new Set(MEMORY_KINDS);
26
+ const extractionStatuses = new Set(MEMORY_EXTRACTION_STATUSES);
27
+ const proposalActions = new Set(MEMORY_EXTRACTION_PROPOSAL_ACTIONS);
28
+ const auditTypes = new Set(MEMORY_EXTRACTION_AUDIT_TYPES);
29
+ const MAX_REFERENCE_CHARACTERS = 512;
30
+ const MAX_IDEMPOTENCY_KEY_CHARACTERS = 2_048;
31
+ const MAX_REASON_CHARACTERS = 2_000;
32
+ const MAX_MESSAGE_IDS = 100;
33
+ const MAX_METADATA_DEPTH = 8;
34
+ const MAX_METADATA_NODES = 5_000;
35
+ const MAX_METADATA_CHARACTERS = 32_000;
36
+ function requiredText(value, path, max) {
37
+ if (typeof value !== "string") {
38
+ throw new MemoryContractError(`${path} must be a string`, "invalid_item", path);
39
+ }
40
+ const normalized = value.trim();
41
+ if (normalized.length === 0 || normalized.length > max) {
42
+ throw new MemoryContractError(`${path} must contain between 1 and ${max} characters`, "invalid_item", path);
43
+ }
44
+ return normalized;
45
+ }
46
+ function optionalText(value, path, max) {
47
+ if (value === undefined)
48
+ return undefined;
49
+ return requiredText(value, path, max);
50
+ }
51
+ function timestamp(value, path) {
52
+ if (!(typeof value === "string" || value instanceof Date)) {
53
+ throw new MemoryContractError(`${path} must be a valid timestamp`, "invalid_item", path);
54
+ }
55
+ const date = value instanceof Date ? value : new Date(value);
56
+ if (!Number.isFinite(date.getTime())) {
57
+ throw new MemoryContractError(`${path} must be a valid timestamp`, "invalid_item", path);
58
+ }
59
+ return date.toISOString();
60
+ }
61
+ function positiveInteger(value, path) {
62
+ if (!Number.isSafeInteger(value) || Number(value) < 1) {
63
+ throw new MemoryContractError(`${path} must be a positive safe integer`, "invalid_item", path);
64
+ }
65
+ return Number(value);
66
+ }
67
+ function confidence(value) {
68
+ if (value === undefined)
69
+ return undefined;
70
+ if (typeof value !== "number"
71
+ || !Number.isFinite(value)
72
+ || value < 0
73
+ || value > 1) {
74
+ throw new MemoryContractError("confidence must be a finite number between 0 and 1", "invalid_item", "confidence");
75
+ }
76
+ return value;
77
+ }
78
+ function kind(value) {
79
+ if (typeof value !== "string" || !memoryKinds.has(value)) {
80
+ throw new MemoryContractError(`Unknown Memory kind: ${String(value)}`, "invalid_item", "kind");
81
+ }
82
+ return value;
83
+ }
84
+ function normalizeSource(value) {
85
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
86
+ throw new MemoryContractError("source must be an object", "invalid_provenance", "source");
87
+ }
88
+ const source = value;
89
+ const sourceId = optionalText(source.sourceId, "source.sourceId", MAX_REFERENCE_CHARACTERS);
90
+ const runId = optionalText(source.runId, "source.runId", MAX_REFERENCE_CHARACTERS);
91
+ const sessionId = optionalText(source.sessionId, "source.sessionId", MAX_REFERENCE_CHARACTERS);
92
+ let messageIds;
93
+ if (source.messageIds !== undefined) {
94
+ if (!Array.isArray(source.messageIds)
95
+ || source.messageIds.length > MAX_MESSAGE_IDS) {
96
+ throw new MemoryContractError(`source.messageIds must contain at most ${MAX_MESSAGE_IDS} ids`, "invalid_provenance", "source.messageIds");
97
+ }
98
+ messageIds = Object.freeze([...new Set(source.messageIds.map((id, index) => requiredText(id, `source.messageIds[${index}]`, MAX_REFERENCE_CHARACTERS)))].sort());
99
+ if (messageIds.length === 0)
100
+ messageIds = undefined;
101
+ }
102
+ if (!sourceId && !runId && !sessionId && !messageIds?.length) {
103
+ throw new MemoryContractError("source requires sourceId, runId, sessionId, or messageIds", "invalid_provenance", "source");
104
+ }
105
+ return Object.freeze({
106
+ ...(sourceId ? { sourceId } : {}),
107
+ ...(runId ? { runId } : {}),
108
+ ...(sessionId ? { sessionId } : {}),
109
+ ...(messageIds ? { messageIds } : {}),
110
+ });
111
+ }
112
+ function provenance(source) {
113
+ return Object.freeze({
114
+ source: "extraction",
115
+ actor: "system",
116
+ ...(source.sourceId ? { sourceId: source.sourceId } : {}),
117
+ ...(source.runId ? { runId: source.runId } : {}),
118
+ ...(source.sessionId ? { sessionId: source.sessionId } : {}),
119
+ ...(source.messageIds?.[0]
120
+ ? { messageId: source.messageIds[0] }
121
+ : {}),
122
+ });
123
+ }
124
+ function normalizeProposal(value) {
125
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
126
+ throw new MemoryContractError("proposal must be an object", "invalid_item", "proposal");
127
+ }
128
+ const candidate = value;
129
+ if (typeof candidate.action !== "string"
130
+ || !proposalActions.has(candidate.action)) {
131
+ throw new MemoryContractError(`Unknown extraction proposal: ${String(candidate.action)}`, "invalid_item", "proposal.action");
132
+ }
133
+ const action = candidate.action;
134
+ const existingMemoryId = optionalText(candidate.existingMemoryId, "proposal.existingMemoryId", MAX_REFERENCE_CHARACTERS);
135
+ if (action === "create" && existingMemoryId) {
136
+ throw new MemoryContractError("create proposals cannot reference an existing Memory item", "invalid_item", "proposal.existingMemoryId");
137
+ }
138
+ if (action !== "create" && !existingMemoryId) {
139
+ throw new MemoryContractError(`${action} proposals require existingMemoryId`, "invalid_item", "proposal.existingMemoryId");
140
+ }
141
+ return Object.freeze({
142
+ action,
143
+ ...(existingMemoryId ? { existingMemoryId } : {}),
144
+ });
145
+ }
146
+ function normalizeFinding(value, index) {
147
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
148
+ throw new MemoryContractError(`sensitiveFindings[${index}] must be an object`, "invalid_item", `sensitiveFindings[${index}]`);
149
+ }
150
+ const finding = value;
151
+ const code = typeof finding.code === "string"
152
+ && /^[a-z0-9][a-z0-9_-]{0,63}$/u.test(finding.code)
153
+ ? finding.code
154
+ : "custom_sensitive_content";
155
+ const start = Number.isSafeInteger(finding.start) && Number(finding.start) >= 0
156
+ ? Number(finding.start)
157
+ : 0;
158
+ const length = Number.isSafeInteger(finding.length) && Number(finding.length) >= 0
159
+ ? Number(finding.length)
160
+ : 0;
161
+ return Object.freeze({ code, start, length });
162
+ }
163
+ function normalizeFindings(value) {
164
+ if (value === undefined)
165
+ return Object.freeze([]);
166
+ if (!Array.isArray(value) || value.length > 1_000) {
167
+ throw new MemoryContractError("sensitiveFindings must be an array with at most 1000 entries", "invalid_item", "sensitiveFindings");
168
+ }
169
+ const findings = value.map(normalizeFinding).sort((left, right) => left.start - right.start
170
+ || left.code.localeCompare(right.code)
171
+ || left.length - right.length);
172
+ return Object.freeze(findings.filter((finding, index) => {
173
+ const previous = findings[index - 1];
174
+ return !previous
175
+ || previous.code !== finding.code
176
+ || previous.start !== finding.start
177
+ || previous.length !== finding.length;
178
+ }));
179
+ }
180
+ function normalizeMetadata(value) {
181
+ if (value === undefined)
182
+ return Object.freeze({});
183
+ let nodes = 0;
184
+ const visit = (entry, path, depth) => {
185
+ nodes += 1;
186
+ if (nodes > MAX_METADATA_NODES || depth > MAX_METADATA_DEPTH) {
187
+ throw new MemoryContractError("metadata is too complex", "invalid_item", path);
188
+ }
189
+ if (entry === null
190
+ || typeof entry === "boolean"
191
+ || typeof entry === "string") {
192
+ return entry;
193
+ }
194
+ if (typeof entry === "number") {
195
+ if (!Number.isFinite(entry)) {
196
+ throw new MemoryContractError(`${path} must contain finite numbers`, "invalid_item", path);
197
+ }
198
+ return entry;
199
+ }
200
+ if (Array.isArray(entry)) {
201
+ return Object.freeze(entry.map((item, index) => visit(item, `${path}[${index}]`, depth + 1)));
202
+ }
203
+ if (!entry
204
+ || typeof entry !== "object"
205
+ || (Object.getPrototypeOf(entry) !== Object.prototype
206
+ && Object.getPrototypeOf(entry) !== null)) {
207
+ throw new MemoryContractError(`${path} must contain JSON-compatible values`, "invalid_item", path);
208
+ }
209
+ const result = Object.create(null);
210
+ for (const [key, item] of Object.entries(entry).sort(([left], [right]) => left.localeCompare(right))) {
211
+ const normalizedKey = requiredText(key, `${path} key`, 256);
212
+ if (Object.hasOwn(result, normalizedKey)) {
213
+ throw new MemoryContractError(`${path} contains duplicate normalized key "${normalizedKey}"`, "invalid_item", path);
214
+ }
215
+ result[normalizedKey] = visit(item, `${path}.${normalizedKey}`, depth + 1);
216
+ }
217
+ return Object.freeze(result);
218
+ };
219
+ const normalized = visit(value, "metadata", 0);
220
+ if (!normalized
221
+ || Array.isArray(normalized)
222
+ || typeof normalized !== "object") {
223
+ throw new MemoryContractError("metadata must be an object", "invalid_item", "metadata");
224
+ }
225
+ if (JSON.stringify(normalized).length > MAX_METADATA_CHARACTERS) {
226
+ throw new MemoryContractError(`metadata must contain at most ${MAX_METADATA_CHARACTERS} characters`, "invalid_item", "metadata");
227
+ }
228
+ return normalized;
229
+ }
230
+ function normalizeReviewer(value) {
231
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
232
+ throw new MemoryContractError("decidedBy must be an object", "invalid_item", "decision.decidedBy");
233
+ }
234
+ const reviewer = value;
235
+ if (reviewer.actor !== "user" && reviewer.actor !== "system") {
236
+ throw new MemoryContractError("decision actor must be user or system", "invalid_item", "decision.decidedBy.actor");
237
+ }
238
+ return Object.freeze({
239
+ actor: reviewer.actor,
240
+ actorId: requiredText(reviewer.actorId, "decision.decidedBy.actorId", MAX_REFERENCE_CHARACTERS),
241
+ });
242
+ }
243
+ function normalizeDecision(value) {
244
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
245
+ throw new MemoryContractError("decision must be an object", "invalid_item", "decision");
246
+ }
247
+ const decision = value;
248
+ if (decision.decision !== "approve" && decision.decision !== "reject") {
249
+ throw new MemoryContractError("decision must be approve or reject", "invalid_item", "decision.decision");
250
+ }
251
+ const reason = optionalText(decision.reason, "decision.reason", MAX_REASON_CHARACTERS);
252
+ if (decision.decision === "reject" && !reason) {
253
+ throw new MemoryContractError("rejection decisions require a reason", "invalid_item", "decision.reason");
254
+ }
255
+ return Object.freeze({
256
+ decision: decision.decision,
257
+ decidedBy: normalizeReviewer(decision.decidedBy),
258
+ decidedAt: timestamp(decision.decidedAt, "decision.decidedAt"),
259
+ ...(reason ? { reason } : {}),
260
+ });
261
+ }
262
+ function freezeCandidate(input) {
263
+ const status = input.status;
264
+ if (typeof status !== "string" || !extractionStatuses.has(status)) {
265
+ throw new MemoryContractError(`Unknown extraction status: ${String(status)}`, "invalid_item", "status");
266
+ }
267
+ const revision = positiveInteger(input.revision, "revision");
268
+ const expectedRevision = status === "pending"
269
+ ? 1
270
+ : status === "applied"
271
+ ? 3
272
+ : 2;
273
+ if (revision !== expectedRevision) {
274
+ throw new MemoryContractError(`${status} candidates require revision ${expectedRevision}`, "invalid_transition", "revision");
275
+ }
276
+ const createdAt = timestamp(input.createdAt, "createdAt");
277
+ const updatedAt = timestamp(input.updatedAt, "updatedAt");
278
+ if (Date.parse(updatedAt) < Date.parse(createdAt)) {
279
+ throw new MemoryContractError("updatedAt cannot precede createdAt", "invalid_item", "updatedAt");
280
+ }
281
+ const source = normalizeSource(input.source);
282
+ const decision = input.decision === undefined
283
+ ? undefined
284
+ : normalizeDecision(input.decision);
285
+ const appliedMemoryId = optionalText(input.appliedMemoryId, "appliedMemoryId", MAX_REFERENCE_CHARACTERS);
286
+ const appliedAt = input.appliedAt === undefined
287
+ ? undefined
288
+ : timestamp(input.appliedAt, "appliedAt");
289
+ if (status === "pending" && (decision || appliedMemoryId || appliedAt)) {
290
+ throw new MemoryContractError("pending candidates cannot contain a decision or applied Memory", "invalid_transition", "status");
291
+ }
292
+ if (status === "approved"
293
+ && (decision?.decision !== "approve"
294
+ || appliedMemoryId
295
+ || appliedAt)) {
296
+ throw new MemoryContractError("approved candidates require an approval decision only", "invalid_transition", "status");
297
+ }
298
+ if (status === "rejected"
299
+ && (decision?.decision !== "reject"
300
+ || appliedMemoryId
301
+ || appliedAt)) {
302
+ throw new MemoryContractError("rejected candidates require a rejection decision only", "invalid_transition", "status");
303
+ }
304
+ if (status === "applied"
305
+ && (decision?.decision !== "approve"
306
+ || !appliedMemoryId
307
+ || !appliedAt)) {
308
+ throw new MemoryContractError("applied candidates require approval and an applied Memory reference", "invalid_transition", "status");
309
+ }
310
+ if (decision && Date.parse(decision.decidedAt) < Date.parse(createdAt)) {
311
+ throw new MemoryContractError("decision cannot precede candidate creation", "invalid_item", "decision.decidedAt");
312
+ }
313
+ if (decision && Date.parse(decision.decidedAt) > Date.parse(updatedAt)) {
314
+ throw new MemoryContractError("decision cannot follow candidate update time", "invalid_item", "decision.decidedAt");
315
+ }
316
+ if (appliedAt && decision && Date.parse(appliedAt) < Date.parse(decision.decidedAt)) {
317
+ throw new MemoryContractError("appliedAt cannot precede approval", "invalid_item", "appliedAt");
318
+ }
319
+ if (appliedAt && Date.parse(appliedAt) > Date.parse(updatedAt)) {
320
+ throw new MemoryContractError("appliedAt cannot follow candidate update time", "invalid_item", "appliedAt");
321
+ }
322
+ const content = requiredText(input.content, "content", MAX_MEMORY_CONTENT_CHARACTERS);
323
+ const summary = optionalText(input.summary, "summary", MAX_MEMORY_SUMMARY_CHARACTERS);
324
+ const reportedFindings = normalizeFindings(input.sensitiveFindings);
325
+ const detectedFindings = normalizeFindings([
326
+ ...detectSensitiveMemoryContent(content),
327
+ ...(summary ? detectSensitiveMemoryContent(summary) : []),
328
+ ...reportedFindings,
329
+ ]);
330
+ const normalizedConfidence = confidence(input.confidence);
331
+ const candidate = {
332
+ id: requiredText(input.id, "id", 256),
333
+ idempotencyKey: requiredText(input.idempotencyKey, "idempotencyKey", MAX_IDEMPOTENCY_KEY_CHARACTERS),
334
+ scope: normalizeMemoryScope(input.scope),
335
+ kind: kind(input.kind),
336
+ content,
337
+ ...(summary ? { summary } : {}),
338
+ ...(normalizedConfidence === undefined
339
+ ? {}
340
+ : { confidence: normalizedConfidence }),
341
+ source,
342
+ provenance: provenance(source),
343
+ proposal: normalizeProposal(input.proposal),
344
+ sensitiveFindings: detectedFindings,
345
+ metadata: normalizeMetadata(input.metadata),
346
+ status: status,
347
+ revision,
348
+ ...(decision ? { decision } : {}),
349
+ ...(appliedMemoryId ? { appliedMemoryId } : {}),
350
+ ...(appliedAt ? { appliedAt } : {}),
351
+ createdAt,
352
+ updatedAt,
353
+ };
354
+ return Object.freeze(candidate);
355
+ }
356
+ export function createMemoryExtractionCandidate(input, factory = {}) {
357
+ if (!input || typeof input !== "object") {
358
+ throw new MemoryContractError("extraction candidate input must be an object");
359
+ }
360
+ const now = timestamp(factory.now?.() ?? new Date(), "now");
361
+ return freezeCandidate({
362
+ id: factory.createId?.() ?? `memory-candidate-${nanoid(16)}`,
363
+ idempotencyKey: input.idempotencyKey,
364
+ scope: input.scope,
365
+ kind: input.kind,
366
+ content: input.content,
367
+ summary: input.summary,
368
+ confidence: input.confidence,
369
+ source: input.source,
370
+ proposal: input.proposal ?? { action: "create" },
371
+ sensitiveFindings: input.sensitiveFindings ?? [],
372
+ metadata: input.metadata ?? {},
373
+ status: "pending",
374
+ revision: 1,
375
+ createdAt: now,
376
+ updatedAt: now,
377
+ });
378
+ }
379
+ export function normalizeMemoryExtractionCandidate(value) {
380
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
381
+ throw new MemoryContractError("extraction candidate must be an object");
382
+ }
383
+ return freezeCandidate(value);
384
+ }
385
+ export function memoryExtractionCandidateIdentity(candidate) {
386
+ const value = normalizeMemoryExtractionCandidate(candidate);
387
+ return JSON.stringify({
388
+ scope: value.scope,
389
+ kind: value.kind,
390
+ content: normalizeMemoryDedupeContent(value.content),
391
+ summary: value.summary,
392
+ confidence: value.confidence,
393
+ source: value.source,
394
+ proposal: value.proposal,
395
+ sensitiveFindings: value.sensitiveFindings,
396
+ metadata: value.metadata,
397
+ });
398
+ }
399
+ export function createMemoryExtractionDecision(input, now = new Date()) {
400
+ return normalizeDecision({
401
+ decision: input.decision,
402
+ decidedBy: input.decidedBy,
403
+ decidedAt: now,
404
+ reason: input.reason,
405
+ });
406
+ }
407
+ export function normalizeMemoryExtractionAuditEvent(value) {
408
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
409
+ throw new MemoryContractError("extraction audit event must be an object");
410
+ }
411
+ const event = value;
412
+ if (typeof event.type !== "string" || !auditTypes.has(event.type)) {
413
+ throw new MemoryContractError(`Unknown extraction audit type: ${String(event.type)}`, "invalid_item", "audit.type");
414
+ }
415
+ const reviewer = event.reviewer === undefined
416
+ ? undefined
417
+ : normalizeReviewer(event.reviewer);
418
+ const reason = optionalText(event.reason, "audit.reason", MAX_REASON_CHARACTERS);
419
+ const memoryId = optionalText(event.memoryId, "audit.memoryId", MAX_REFERENCE_CHARACTERS);
420
+ if (event.type === "proposed" && (reviewer || reason || memoryId)) {
421
+ throw new MemoryContractError("proposed audit events cannot contain decision fields", "invalid_item", "audit");
422
+ }
423
+ if ((event.type === "approved" || event.type === "rejected")
424
+ && !reviewer) {
425
+ throw new MemoryContractError(`${event.type} audit events require a reviewer`, "invalid_item", "audit.reviewer");
426
+ }
427
+ if ((event.type === "approved" || event.type === "rejected")
428
+ && memoryId) {
429
+ throw new MemoryContractError(`${event.type} audit events cannot contain memoryId`, "invalid_item", "audit.memoryId");
430
+ }
431
+ if (event.type === "rejected" && !reason) {
432
+ throw new MemoryContractError("rejected audit events require a reason", "invalid_item", "audit.reason");
433
+ }
434
+ if (event.type === "applied" && !memoryId) {
435
+ throw new MemoryContractError("applied audit events require memoryId", "invalid_item", "audit.memoryId");
436
+ }
437
+ if (event.type === "applied" && (reviewer || reason)) {
438
+ throw new MemoryContractError("applied audit events cannot contain decision fields", "invalid_item", "audit");
439
+ }
440
+ return Object.freeze({
441
+ id: requiredText(event.id, "audit.id", 256),
442
+ candidateId: requiredText(event.candidateId, "audit.candidateId", 256),
443
+ type: event.type,
444
+ at: timestamp(event.at, "audit.at"),
445
+ ...(reviewer ? { reviewer } : {}),
446
+ ...(reason ? { reason } : {}),
447
+ ...(memoryId ? { memoryId } : {}),
448
+ });
449
+ }
450
+ //# sourceMappingURL=extraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction.js","sourceRoot":"","sources":["../../src/memory/extraction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extraction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction.test.d.ts","sourceRoot":"","sources":["../../src/memory/extraction.test.ts"],"names":[],"mappings":""}