@acme-engine/core 0.1.0

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 (137) hide show
  1. package/dist/common.d.ts +40 -0
  2. package/dist/common.d.ts.map +1 -0
  3. package/dist/common.js +2 -0
  4. package/dist/common.js.map +1 -0
  5. package/dist/contracts.d.ts +65 -0
  6. package/dist/contracts.d.ts.map +1 -0
  7. package/dist/contracts.js +2 -0
  8. package/dist/contracts.js.map +1 -0
  9. package/dist/errors.d.ts +24 -0
  10. package/dist/errors.d.ts.map +1 -0
  11. package/dist/errors.js +20 -0
  12. package/dist/errors.js.map +1 -0
  13. package/dist/evaluation.d.ts +14 -0
  14. package/dist/evaluation.d.ts.map +1 -0
  15. package/dist/evaluation.js +2 -0
  16. package/dist/evaluation.js.map +1 -0
  17. package/dist/execution-engine.d.ts +30 -0
  18. package/dist/execution-engine.d.ts.map +1 -0
  19. package/dist/execution-engine.js +885 -0
  20. package/dist/execution-engine.js.map +1 -0
  21. package/dist/execution-identity.d.ts +35 -0
  22. package/dist/execution-identity.d.ts.map +1 -0
  23. package/dist/execution-identity.js +177 -0
  24. package/dist/execution-identity.js.map +1 -0
  25. package/dist/execution-status.d.ts +2 -0
  26. package/dist/execution-status.d.ts.map +1 -0
  27. package/dist/execution-status.js +2 -0
  28. package/dist/execution-status.js.map +1 -0
  29. package/dist/execution-types.d.ts +58 -0
  30. package/dist/execution-types.d.ts.map +1 -0
  31. package/dist/execution-types.js +2 -0
  32. package/dist/execution-types.js.map +1 -0
  33. package/dist/hashing.d.ts +6 -0
  34. package/dist/hashing.d.ts.map +1 -0
  35. package/dist/hashing.js +73 -0
  36. package/dist/hashing.js.map +1 -0
  37. package/dist/index.d.ts +34 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +33 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/memory-engine.d.ts +13 -0
  42. package/dist/memory-engine.d.ts.map +1 -0
  43. package/dist/memory-engine.js +591 -0
  44. package/dist/memory-engine.js.map +1 -0
  45. package/dist/memory.d.ts +151 -0
  46. package/dist/memory.d.ts.map +1 -0
  47. package/dist/memory.js +2 -0
  48. package/dist/memory.js.map +1 -0
  49. package/dist/model-call-usage.d.ts +40 -0
  50. package/dist/model-call-usage.d.ts.map +1 -0
  51. package/dist/model-call-usage.js +0 -0
  52. package/dist/model-call-usage.js.map +1 -0
  53. package/dist/model-execution-engine.d.ts +16 -0
  54. package/dist/model-execution-engine.d.ts.map +1 -0
  55. package/dist/model-execution-engine.js +598 -0
  56. package/dist/model-execution-engine.js.map +1 -0
  57. package/dist/model-execution-identity.d.ts +16 -0
  58. package/dist/model-execution-identity.d.ts.map +1 -0
  59. package/dist/model-execution-identity.js +84 -0
  60. package/dist/model-execution-identity.js.map +1 -0
  61. package/dist/model-execution-types.d.ts +66 -0
  62. package/dist/model-execution-types.d.ts.map +1 -0
  63. package/dist/model-execution-types.js +8 -0
  64. package/dist/model-execution-types.js.map +1 -0
  65. package/dist/model-gateway-router.d.ts +11 -0
  66. package/dist/model-gateway-router.d.ts.map +1 -0
  67. package/dist/model-gateway-router.js +69 -0
  68. package/dist/model-gateway-router.js.map +1 -0
  69. package/dist/model-request-hash.d.ts +5 -0
  70. package/dist/model-request-hash.d.ts.map +1 -0
  71. package/dist/model-request-hash.js +11 -0
  72. package/dist/model-request-hash.js.map +1 -0
  73. package/dist/model-response-hash.d.ts +5 -0
  74. package/dist/model-response-hash.d.ts.map +1 -0
  75. package/dist/model-response-hash.js +11 -0
  76. package/dist/model-response-hash.js.map +1 -0
  77. package/dist/model-validation.d.ts +11 -0
  78. package/dist/model-validation.d.ts.map +1 -0
  79. package/dist/model-validation.js +580 -0
  80. package/dist/model-validation.js.map +1 -0
  81. package/dist/model.d.ts +125 -0
  82. package/dist/model.d.ts.map +1 -0
  83. package/dist/model.js +4 -0
  84. package/dist/model.js.map +1 -0
  85. package/dist/modules.d.ts +83 -0
  86. package/dist/modules.d.ts.map +1 -0
  87. package/dist/modules.js +7 -0
  88. package/dist/modules.js.map +1 -0
  89. package/dist/outbox.d.ts +88 -0
  90. package/dist/outbox.d.ts.map +1 -0
  91. package/dist/outbox.js +180 -0
  92. package/dist/outbox.js.map +1 -0
  93. package/dist/payload-encryptor.d.ts +92 -0
  94. package/dist/payload-encryptor.d.ts.map +1 -0
  95. package/dist/payload-encryptor.js +173 -0
  96. package/dist/payload-encryptor.js.map +1 -0
  97. package/dist/registries.d.ts +5 -0
  98. package/dist/registries.d.ts.map +1 -0
  99. package/dist/registries.js +159 -0
  100. package/dist/registries.js.map +1 -0
  101. package/dist/repository-digest.d.ts +5 -0
  102. package/dist/repository-digest.d.ts.map +1 -0
  103. package/dist/repository-digest.js +25 -0
  104. package/dist/repository-digest.js.map +1 -0
  105. package/dist/repository-model-call.d.ts +43 -0
  106. package/dist/repository-model-call.d.ts.map +1 -0
  107. package/dist/repository-model-call.js +2 -0
  108. package/dist/repository-model-call.js.map +1 -0
  109. package/dist/repository-model-execution.d.ts +49 -0
  110. package/dist/repository-model-execution.d.ts.map +1 -0
  111. package/dist/repository-model-execution.js +2 -0
  112. package/dist/repository-model-execution.js.map +1 -0
  113. package/dist/repository.d.ts +260 -0
  114. package/dist/repository.d.ts.map +1 -0
  115. package/dist/repository.js +2 -0
  116. package/dist/repository.js.map +1 -0
  117. package/dist/response-pipeline.d.ts +3 -0
  118. package/dist/response-pipeline.d.ts.map +1 -0
  119. package/dist/response-pipeline.js +132 -0
  120. package/dist/response-pipeline.js.map +1 -0
  121. package/dist/state-engine.d.ts +19 -0
  122. package/dist/state-engine.d.ts.map +1 -0
  123. package/dist/state-engine.js +272 -0
  124. package/dist/state-engine.js.map +1 -0
  125. package/dist/state-projection.d.ts +5 -0
  126. package/dist/state-projection.d.ts.map +1 -0
  127. package/dist/state-projection.js +145 -0
  128. package/dist/state-projection.js.map +1 -0
  129. package/dist/state.d.ts +41 -0
  130. package/dist/state.d.ts.map +1 -0
  131. package/dist/state.js +2 -0
  132. package/dist/state.js.map +1 -0
  133. package/dist/stranded-execution.d.ts +59 -0
  134. package/dist/stranded-execution.d.ts.map +1 -0
  135. package/dist/stranded-execution.js +235 -0
  136. package/dist/stranded-execution.js.map +1 -0
  137. package/package.json +36 -0
@@ -0,0 +1,591 @@
1
+ import { z } from 'zod';
2
+ import { AcmeError } from './errors.js';
3
+ import { nodeHashing } from './hashing.js';
4
+ const jsonSchema = z.json();
5
+ const nonEmptyStringSchema = z.string().min(1);
6
+ const strengthSchema = z.number().finite().nonnegative();
7
+ const provenanceSchema = z
8
+ .object({
9
+ executionId: nonEmptyStringSchema,
10
+ contract: z
11
+ .object({
12
+ id: nonEmptyStringSchema,
13
+ version: nonEmptyStringSchema,
14
+ })
15
+ .strict(),
16
+ modelCallId: nonEmptyStringSchema.optional(),
17
+ documentKeys: z.array(nonEmptyStringSchema),
18
+ })
19
+ .strict();
20
+ const candidateSchema = z
21
+ .object({
22
+ key: nonEmptyStringSchema,
23
+ kind: nonEmptyStringSchema,
24
+ schemaVersion: nonEmptyStringSchema,
25
+ value: jsonSchema,
26
+ confidence: z.number().finite().min(0).max(1).optional(),
27
+ source: provenanceSchema,
28
+ })
29
+ .strict();
30
+ const recordSchema = z
31
+ .object({
32
+ memoryId: nonEmptyStringSchema,
33
+ namespace: nonEmptyStringSchema,
34
+ entityId: nonEmptyStringSchema,
35
+ identityKey: nonEmptyStringSchema,
36
+ kind: nonEmptyStringSchema,
37
+ schemaVersion: nonEmptyStringSchema,
38
+ value: jsonSchema,
39
+ strength: strengthSchema,
40
+ status: z.enum(['active', 'superseded', 'contested', 'forgotten']),
41
+ firstSeenAt: nonEmptyStringSchema,
42
+ lastSeenAt: nonEmptyStringSchema,
43
+ lastReinforcedAt: nonEmptyStringSchema,
44
+ provenance: z.array(provenanceSchema),
45
+ recordVersion: z.number().int().positive(),
46
+ })
47
+ .strict();
48
+ const resolutionSchema = z.union([
49
+ z
50
+ .object({
51
+ candidateKey: nonEmptyStringSchema,
52
+ action: z.literal('create'),
53
+ value: jsonSchema,
54
+ strength: strengthSchema,
55
+ })
56
+ .strict(),
57
+ z
58
+ .object({
59
+ candidateKey: nonEmptyStringSchema,
60
+ action: z.literal('reinforce'),
61
+ memoryId: nonEmptyStringSchema,
62
+ strength: strengthSchema,
63
+ })
64
+ .strict(),
65
+ z
66
+ .object({
67
+ candidateKey: nonEmptyStringSchema,
68
+ action: z.literal('merge'),
69
+ memoryId: nonEmptyStringSchema,
70
+ value: jsonSchema,
71
+ strength: strengthSchema,
72
+ })
73
+ .strict(),
74
+ z
75
+ .object({
76
+ candidateKey: nonEmptyStringSchema,
77
+ action: z.literal('contradict'),
78
+ memoryIds: z.array(nonEmptyStringSchema).min(1),
79
+ disposition: z.enum(['contest', 'reject-candidate']),
80
+ })
81
+ .strict(),
82
+ z
83
+ .object({
84
+ candidateKey: nonEmptyStringSchema,
85
+ action: z.literal('contradict'),
86
+ memoryIds: z.array(nonEmptyStringSchema).min(1),
87
+ disposition: z.literal('supersede-existing'),
88
+ replacement: z
89
+ .object({
90
+ value: jsonSchema,
91
+ strength: strengthSchema,
92
+ })
93
+ .strict(),
94
+ })
95
+ .strict(),
96
+ z
97
+ .object({
98
+ candidateKey: nonEmptyStringSchema,
99
+ action: z.literal('ignore'),
100
+ reason: nonEmptyStringSchema,
101
+ })
102
+ .strict(),
103
+ ]);
104
+ const lifecycleDecisionSchema = z.union([
105
+ z.object({ action: z.literal('retain') }).strict(),
106
+ z
107
+ .object({
108
+ action: z.literal('update-strength'),
109
+ strength: strengthSchema,
110
+ })
111
+ .strict(),
112
+ z
113
+ .object({
114
+ action: z.literal('forget'),
115
+ reason: nonEmptyStringSchema,
116
+ })
117
+ .strict(),
118
+ ]);
119
+ const prepareContextSchema = z
120
+ .object({
121
+ namespace: nonEmptyStringSchema,
122
+ entityId: nonEmptyStringSchema,
123
+ executionId: nonEmptyStringSchema,
124
+ now: nonEmptyStringSchema,
125
+ })
126
+ .strict();
127
+ const lifecycleContextSchema = z
128
+ .object({
129
+ namespace: nonEmptyStringSchema,
130
+ entityId: nonEmptyStringSchema,
131
+ now: nonEmptyStringSchema,
132
+ })
133
+ .strict();
134
+ const querySchema = z
135
+ .object({
136
+ namespace: nonEmptyStringSchema,
137
+ entityId: nonEmptyStringSchema,
138
+ task: nonEmptyStringSchema,
139
+ kinds: z.array(nonEmptyStringSchema).optional(),
140
+ text: z.string().optional(),
141
+ limit: z.number().int().positive(),
142
+ })
143
+ .strict();
144
+ const rankedMemorySchema = z
145
+ .object({
146
+ record: recordSchema,
147
+ score: z.number().finite(),
148
+ reasons: z.array(z.string()),
149
+ })
150
+ .strict();
151
+ const domainIssueSchema = z
152
+ .object({
153
+ code: nonEmptyStringSchema,
154
+ path: z.array(z.union([z.string(), z.number()])),
155
+ message: nonEmptyStringSchema,
156
+ })
157
+ .strict();
158
+ function invalid(code, message, details, cause) {
159
+ const data = details === undefined
160
+ ? {
161
+ code,
162
+ message,
163
+ stage: 'preparing-commit',
164
+ retryable: false,
165
+ }
166
+ : {
167
+ code,
168
+ message,
169
+ stage: 'preparing-commit',
170
+ retryable: false,
171
+ details,
172
+ };
173
+ return cause === undefined
174
+ ? new AcmeError(data)
175
+ : new AcmeError(data, { cause });
176
+ }
177
+ function deepFreeze(value) {
178
+ if (value !== null && typeof value === 'object') {
179
+ for (const child of Object.values(value)) {
180
+ deepFreeze(child);
181
+ }
182
+ Object.freeze(value);
183
+ }
184
+ return value;
185
+ }
186
+ function schemaIssues(issues) {
187
+ return issues.map(({ code, message, path }) => ({
188
+ code,
189
+ message,
190
+ path: path.map((part) => (typeof part === 'symbol' ? String(part) : part)),
191
+ }));
192
+ }
193
+ function validateJson(schema, input, hashing, errorCode, phase) {
194
+ let result;
195
+ try {
196
+ result = schema.safeParse(input);
197
+ }
198
+ catch (error) {
199
+ throw invalid(errorCode, `Schema execution failed for ${phase}.`, { phase }, error);
200
+ }
201
+ if (!result.success) {
202
+ throw invalid(errorCode, `Schema validation failed for ${phase}.`, {
203
+ phase,
204
+ issues: schemaIssues(result.error.issues),
205
+ });
206
+ }
207
+ let inputCanonical;
208
+ let outputCanonical;
209
+ try {
210
+ inputCanonical = hashing.canonicalJson(input);
211
+ outputCanonical = hashing.canonicalJson(result.data);
212
+ }
213
+ catch (error) {
214
+ throw invalid(errorCode, `${phase} must be a JSON value.`, { phase }, error);
215
+ }
216
+ if (inputCanonical !== outputCanonical) {
217
+ throw invalid(errorCode, `Schema must not coerce or transform ${phase}.`, {
218
+ phase,
219
+ });
220
+ }
221
+ let cloned;
222
+ try {
223
+ cloned = JSON.parse(outputCanonical);
224
+ }
225
+ catch (error) {
226
+ throw invalid(errorCode, `Could not clone ${phase} as JSON.`, { phase }, error);
227
+ }
228
+ return {
229
+ canonical: outputCanonical,
230
+ value: deepFreeze(cloned),
231
+ };
232
+ }
233
+ function compareText(left, right) {
234
+ return left < right ? -1 : left > right ? 1 : 0;
235
+ }
236
+ function compareRecords(left, right) {
237
+ return (compareText(left.identityKey, right.identityKey) ||
238
+ compareText(left.memoryId, right.memoryId));
239
+ }
240
+ function uniqueStrings(values, code, phase) {
241
+ const seen = new Set();
242
+ for (const value of values) {
243
+ if (seen.has(value)) {
244
+ throw invalid(code, `${phase} must not contain duplicates.`, {
245
+ phase,
246
+ duplicate: value,
247
+ });
248
+ }
249
+ seen.add(value);
250
+ }
251
+ }
252
+ function validateCandidates(candidates, context, hashing) {
253
+ if (!Array.isArray(candidates)) {
254
+ throw invalid('DOMAIN_INVALID_RESULT', 'Memory candidates must be an array.', { phase: 'memory candidates' });
255
+ }
256
+ const validated = candidates.map((candidate, index) => {
257
+ const value = validateJson(candidateSchema, candidate, hashing, 'DOMAIN_INVALID_RESULT', `memory candidate ${index}`).value;
258
+ if (value.source.executionId !== context.executionId) {
259
+ throw invalid('DOMAIN_INVALID_RESULT', 'Memory candidate provenance must match the execution.', {
260
+ candidateKey: value.key,
261
+ executionId: context.executionId,
262
+ sourceExecutionId: value.source.executionId,
263
+ });
264
+ }
265
+ uniqueStrings(value.source.documentKeys, 'DOMAIN_INVALID_RESULT', `memory candidate ${value.key} document keys`);
266
+ return value;
267
+ });
268
+ uniqueStrings(validated.map(({ key }) => key), 'DOMAIN_INVALID_RESULT', 'memory candidate keys');
269
+ return Object.freeze([...validated].sort((left, right) => compareText(left.key, right.key)));
270
+ }
271
+ function validateRecords(records, namespace, entityId, hashing) {
272
+ if (!Array.isArray(records)) {
273
+ throw invalid('PERSISTENCE_CORRUPTION', 'Loaded memory records must be an array.', { phase: 'loaded memory records' });
274
+ }
275
+ const validated = records.map((record, index) => {
276
+ const value = validateJson(recordSchema, record, hashing, 'PERSISTENCE_CORRUPTION', `loaded memory record ${index}`).value;
277
+ if (value.namespace !== namespace || value.entityId !== entityId) {
278
+ throw invalid('PERSISTENCE_CORRUPTION', 'Loaded memory record does not match the requested scope.', {
279
+ memoryId: value.memoryId,
280
+ recordNamespace: value.namespace,
281
+ recordEntityId: value.entityId,
282
+ namespace,
283
+ entityId,
284
+ });
285
+ }
286
+ for (const [provenanceIndex, provenance] of value.provenance.entries()) {
287
+ uniqueStrings(provenance.documentKeys, 'PERSISTENCE_CORRUPTION', `memory record ${value.memoryId} provenance ${provenanceIndex} document keys`);
288
+ }
289
+ return value;
290
+ });
291
+ uniqueStrings(validated.map(({ memoryId }) => memoryId), 'PERSISTENCE_CORRUPTION', 'loaded memory IDs');
292
+ uniqueStrings(validated.map(({ identityKey }) => identityKey), 'PERSISTENCE_CORRUPTION', 'loaded memory identity keys');
293
+ return Object.freeze([...validated].sort(compareRecords));
294
+ }
295
+ function validatePolicyIssues(rawIssues, hashing, candidateKey) {
296
+ const issues = validateJson(z.array(domainIssueSchema), rawIssues, hashing, 'DOMAIN_INVALID_RESULT', `memory candidate ${candidateKey} policy issues`).value;
297
+ if (issues.length > 0) {
298
+ throw invalid('DOMAIN_INVALID_RESULT', 'Domain memory policy rejected a candidate.', {
299
+ candidateKey,
300
+ issues: issues,
301
+ });
302
+ }
303
+ }
304
+ function policyIdentity(policy, candidate) {
305
+ let identityKey;
306
+ try {
307
+ identityKey = policy.identity(candidate);
308
+ }
309
+ catch (error) {
310
+ throw invalid('DOMAIN_INVALID_RESULT', 'Domain memory identity policy failed.', { candidateKey: candidate.key }, error);
311
+ }
312
+ if (typeof identityKey !== 'string' || identityKey.length === 0) {
313
+ throw invalid('DOMAIN_INVALID_RESULT', 'Domain memory identity must be a non-empty string.', { candidateKey: candidate.key });
314
+ }
315
+ return identityKey;
316
+ }
317
+ function appendProvenance(existing, source, hashing) {
318
+ const sourceCanonical = hashing.canonicalJson(source);
319
+ if (existing.some((item) => hashing.canonicalJson(item) === sourceCanonical)) {
320
+ return existing;
321
+ }
322
+ return Object.freeze([...existing, source]);
323
+ }
324
+ function prepareUpdate(current, changes) {
325
+ const record = Object.freeze({
326
+ ...current,
327
+ ...changes,
328
+ recordVersion: current.recordVersion + 1,
329
+ });
330
+ return {
331
+ record,
332
+ mutation: Object.freeze({
333
+ action: 'update',
334
+ expectedRecordVersion: current.recordVersion,
335
+ record,
336
+ }),
337
+ };
338
+ }
339
+ function workingRecords(records) {
340
+ return Object.freeze([...records.values()].sort(compareRecords));
341
+ }
342
+ function requireTarget(records, memoryId, candidateKey) {
343
+ const target = records.get(memoryId);
344
+ if (target === undefined) {
345
+ throw invalid('DOMAIN_INVALID_RESULT', 'Memory resolution references an unknown record.', { candidateKey, memoryId });
346
+ }
347
+ return target;
348
+ }
349
+ function allocateMemoryId(ids, records, candidateKey) {
350
+ let memoryId;
351
+ try {
352
+ memoryId = ids.next('memory');
353
+ }
354
+ catch (error) {
355
+ throw invalid('INTERNAL', 'Memory ID allocation failed.', { candidateKey }, error);
356
+ }
357
+ if (typeof memoryId !== 'string' ||
358
+ memoryId.length === 0 ||
359
+ records.has(memoryId)) {
360
+ throw invalid('INTERNAL', 'Memory ID allocation returned an invalid ID.', {
361
+ candidateKey,
362
+ memoryId,
363
+ });
364
+ }
365
+ return memoryId;
366
+ }
367
+ function newRecord(memoryId, identityKey, candidate, value, strength, context) {
368
+ return Object.freeze({
369
+ memoryId,
370
+ namespace: context.namespace,
371
+ entityId: context.entityId,
372
+ identityKey,
373
+ kind: candidate.kind,
374
+ schemaVersion: candidate.schemaVersion,
375
+ value,
376
+ strength,
377
+ status: 'active',
378
+ firstSeenAt: context.now,
379
+ lastSeenAt: context.now,
380
+ lastReinforcedAt: context.now,
381
+ provenance: Object.freeze([candidate.source]),
382
+ recordVersion: 1,
383
+ });
384
+ }
385
+ function createMutation(record) {
386
+ return Object.freeze({ action: 'create', record });
387
+ }
388
+ function decision(candidateKey, identityKey, resolution, affectedMemoryIds) {
389
+ return Object.freeze({
390
+ candidateKey,
391
+ identityKey,
392
+ resolution,
393
+ affectedMemoryIds: Object.freeze([...affectedMemoryIds]),
394
+ });
395
+ }
396
+ class PureMemoryEngine {
397
+ #ids;
398
+ #hashing;
399
+ constructor(options) {
400
+ this.#ids = options.ids;
401
+ this.#hashing = options.hashing ?? nodeHashing;
402
+ }
403
+ prepare(policy, candidates, existing, rawContext) {
404
+ const context = validateJson(prepareContextSchema, rawContext, this.#hashing, 'INVALID_REQUEST', 'memory prepare context').value;
405
+ const orderedCandidates = validateCandidates(candidates, context, this.#hashing);
406
+ const orderedRecords = validateRecords(existing, context.namespace, context.entityId, this.#hashing);
407
+ const records = new Map(orderedRecords.map((record) => [record.memoryId, record]));
408
+ const identities = new Map(orderedRecords.map((record) => [record.identityKey, record.memoryId]));
409
+ const decisions = [];
410
+ const mutations = [];
411
+ for (const candidate of orderedCandidates) {
412
+ let rawIssues;
413
+ try {
414
+ rawIssues = policy.validate(candidate);
415
+ }
416
+ catch (error) {
417
+ throw invalid('DOMAIN_INVALID_RESULT', 'Domain memory validation policy failed.', { candidateKey: candidate.key }, error);
418
+ }
419
+ validatePolicyIssues(rawIssues, this.#hashing, candidate.key);
420
+ const identityKey = policyIdentity(policy, candidate);
421
+ let rawResolution;
422
+ try {
423
+ rawResolution = policy.resolve(candidate, workingRecords(records), {
424
+ now: context.now,
425
+ });
426
+ }
427
+ catch (error) {
428
+ throw invalid('DOMAIN_INVALID_RESULT', 'Domain memory resolution policy failed.', { candidateKey: candidate.key }, error);
429
+ }
430
+ const resolution = validateJson(resolutionSchema, rawResolution, this.#hashing, 'DOMAIN_INVALID_RESULT', `memory candidate ${candidate.key} resolution`).value;
431
+ if (resolution.candidateKey !== candidate.key) {
432
+ throw invalid('DOMAIN_INVALID_RESULT', 'Memory resolution candidate key does not match its candidate.', {
433
+ candidateKey: candidate.key,
434
+ resolutionCandidateKey: resolution.candidateKey,
435
+ });
436
+ }
437
+ switch (resolution.action) {
438
+ case 'create': {
439
+ if (identities.has(identityKey)) {
440
+ throw invalid('DOMAIN_INVALID_RESULT', 'Memory create resolution conflicts with an existing identity.', { candidateKey: candidate.key, identityKey });
441
+ }
442
+ const memoryId = allocateMemoryId(this.#ids, records, candidate.key);
443
+ const record = newRecord(memoryId, identityKey, candidate, resolution.value, resolution.strength, context);
444
+ records.set(memoryId, record);
445
+ identities.set(identityKey, memoryId);
446
+ mutations.push(createMutation(record));
447
+ decisions.push(decision(candidate.key, identityKey, resolution, [memoryId]));
448
+ break;
449
+ }
450
+ case 'reinforce':
451
+ case 'merge': {
452
+ const current = requireTarget(records, resolution.memoryId, candidate.key);
453
+ const prepared = prepareUpdate(current, {
454
+ value: resolution.action === 'merge' ? resolution.value : current.value,
455
+ strength: resolution.strength,
456
+ lastSeenAt: context.now,
457
+ lastReinforcedAt: context.now,
458
+ provenance: appendProvenance(current.provenance, candidate.source, this.#hashing),
459
+ });
460
+ records.set(current.memoryId, prepared.record);
461
+ mutations.push(prepared.mutation);
462
+ decisions.push(decision(candidate.key, identityKey, resolution, [
463
+ current.memoryId,
464
+ ]));
465
+ break;
466
+ }
467
+ case 'contradict': {
468
+ uniqueStrings(resolution.memoryIds, 'DOMAIN_INVALID_RESULT', `memory candidate ${candidate.key} contradiction targets`);
469
+ const targetIds = [...resolution.memoryIds].sort(compareText);
470
+ const targets = targetIds.map((memoryId) => requireTarget(records, memoryId, candidate.key));
471
+ if (resolution.disposition === 'reject-candidate') {
472
+ decisions.push(decision(candidate.key, identityKey, resolution, []));
473
+ break;
474
+ }
475
+ let replacementId = null;
476
+ if (resolution.disposition === 'supersede-existing') {
477
+ if (identities.has(identityKey)) {
478
+ throw invalid('DOMAIN_INVALID_RESULT', 'Memory replacement conflicts with an existing identity.', { candidateKey: candidate.key, identityKey });
479
+ }
480
+ replacementId = allocateMemoryId(this.#ids, records, candidate.key);
481
+ }
482
+ for (const current of targets) {
483
+ const prepared = prepareUpdate(current, {
484
+ status: resolution.disposition === 'contest'
485
+ ? 'contested'
486
+ : 'superseded',
487
+ lastSeenAt: context.now,
488
+ provenance: appendProvenance(current.provenance, candidate.source, this.#hashing),
489
+ });
490
+ records.set(current.memoryId, prepared.record);
491
+ mutations.push(prepared.mutation);
492
+ }
493
+ if (resolution.disposition === 'supersede-existing' &&
494
+ replacementId !== null) {
495
+ const replacement = newRecord(replacementId, identityKey, candidate, resolution.replacement.value, resolution.replacement.strength, context);
496
+ records.set(replacementId, replacement);
497
+ identities.set(identityKey, replacementId);
498
+ mutations.push(createMutation(replacement));
499
+ }
500
+ decisions.push(decision(candidate.key, identityKey, resolution, replacementId === null
501
+ ? targetIds
502
+ : [...targetIds, replacementId]));
503
+ break;
504
+ }
505
+ case 'ignore':
506
+ decisions.push(decision(candidate.key, identityKey, resolution, []));
507
+ break;
508
+ }
509
+ }
510
+ return Object.freeze({
511
+ decisions: Object.freeze(decisions),
512
+ mutations: Object.freeze(mutations),
513
+ });
514
+ }
515
+ retrieve(policy, rawQuery, records) {
516
+ const query = validateJson(querySchema, rawQuery, this.#hashing, 'INVALID_REQUEST', 'memory query').value;
517
+ if (query.kinds !== undefined) {
518
+ uniqueStrings(query.kinds, 'INVALID_REQUEST', 'memory query kinds');
519
+ }
520
+ const orderedRecords = validateRecords(records, query.namespace, query.entityId, this.#hashing);
521
+ let rawRanked;
522
+ try {
523
+ rawRanked = policy.retrieve(query, orderedRecords);
524
+ }
525
+ catch (error) {
526
+ throw invalid('DOMAIN_INVALID_RESULT', 'Domain memory retrieval policy failed.', { task: query.task }, error);
527
+ }
528
+ const ranked = validateJson(z.array(rankedMemorySchema), rawRanked, this.#hashing, 'DOMAIN_INVALID_RESULT', 'ranked memories').value;
529
+ uniqueStrings(ranked.map(({ record }) => record.memoryId), 'DOMAIN_INVALID_RESULT', 'ranked memory IDs');
530
+ const byId = new Map(orderedRecords.map((record) => [record.memoryId, record]));
531
+ const normalized = ranked.map((item) => {
532
+ const record = byId.get(item.record.memoryId);
533
+ if (record === undefined ||
534
+ this.#hashing.canonicalJson(record) !==
535
+ this.#hashing.canonicalJson(item.record)) {
536
+ throw invalid('DOMAIN_INVALID_RESULT', 'Retrieval policy returned an unknown or modified memory record.', { memoryId: item.record.memoryId });
537
+ }
538
+ return Object.freeze({
539
+ record,
540
+ score: item.score,
541
+ reasons: Object.freeze([...item.reasons]),
542
+ });
543
+ });
544
+ normalized.sort((left, right) => right.score - left.score ||
545
+ compareText(left.record.identityKey, right.record.identityKey) ||
546
+ compareText(left.record.memoryId, right.record.memoryId));
547
+ return Object.freeze(normalized.slice(0, query.limit));
548
+ }
549
+ applyLifecycle(policy, records, hook, rawContext) {
550
+ const context = validateJson(lifecycleContextSchema, rawContext, this.#hashing, 'INVALID_REQUEST', 'memory lifecycle context').value;
551
+ if (hook !== 'execution-start' &&
552
+ hook !== 'execution-commit' &&
553
+ hook !== 'maintenance') {
554
+ throw invalid('INVALID_REQUEST', 'Memory lifecycle hook is invalid.', {
555
+ hook,
556
+ });
557
+ }
558
+ const orderedRecords = validateRecords(records, context.namespace, context.entityId, this.#hashing);
559
+ const decisions = [];
560
+ const mutations = [];
561
+ for (const current of orderedRecords) {
562
+ let rawDecision;
563
+ try {
564
+ rawDecision = policy.lifecycle(current, hook, { now: context.now });
565
+ }
566
+ catch (error) {
567
+ throw invalid('DOMAIN_INVALID_RESULT', 'Domain memory lifecycle policy failed.', { memoryId: current.memoryId, hook }, error);
568
+ }
569
+ const lifecycleDecision = validateJson(lifecycleDecisionSchema, rawDecision, this.#hashing, 'DOMAIN_INVALID_RESULT', `memory record ${current.memoryId} lifecycle decision`).value;
570
+ decisions.push(Object.freeze({
571
+ memoryId: current.memoryId,
572
+ decision: lifecycleDecision,
573
+ }));
574
+ if (lifecycleDecision.action === 'retain') {
575
+ continue;
576
+ }
577
+ const prepared = prepareUpdate(current, lifecycleDecision.action === 'update-strength'
578
+ ? { strength: lifecycleDecision.strength }
579
+ : { status: 'forgotten' });
580
+ mutations.push(prepared.mutation);
581
+ }
582
+ return Object.freeze({
583
+ decisions: Object.freeze(decisions),
584
+ mutations: Object.freeze(mutations),
585
+ });
586
+ }
587
+ }
588
+ export function createMemoryEngine(options) {
589
+ return new PureMemoryEngine(options);
590
+ }
591
+ //# sourceMappingURL=memory-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-engine.js","sourceRoot":"","sources":["../src/memory-engine.ts"],"names":[],"mappings":"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"}