@x12i/memorix-scoper 2.2.2 → 3.0.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 (49) hide show
  1. package/README.md +1 -1
  2. package/dist/coordinator.d.ts +3 -1
  3. package/dist/coordinator.d.ts.map +1 -1
  4. package/dist/coordinator.js.map +1 -1
  5. package/dist/create-scoper.d.ts +46 -1
  6. package/dist/create-scoper.d.ts.map +1 -1
  7. package/dist/create-scoper.js +24 -0
  8. package/dist/create-scoper.js.map +1 -1
  9. package/dist/index.d.ts +3 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/intent-scope.d.ts +14 -0
  14. package/dist/intent-scope.d.ts.map +1 -0
  15. package/dist/intent-scope.js +121 -0
  16. package/dist/intent-scope.js.map +1 -0
  17. package/dist/mcp-server.d.ts +2 -2
  18. package/dist/mcp-server.d.ts.map +1 -1
  19. package/dist/mcp-server.js +39 -2
  20. package/dist/mcp-server.js.map +1 -1
  21. package/dist/reasoner/ai-dispatcher.d.ts +4 -1
  22. package/dist/reasoner/ai-dispatcher.d.ts.map +1 -1
  23. package/dist/reasoner/ai-dispatcher.js +20 -12
  24. package/dist/reasoner/ai-dispatcher.js.map +1 -1
  25. package/dist/selection/adapter.d.ts +18 -0
  26. package/dist/selection/adapter.d.ts.map +1 -0
  27. package/dist/selection/adapter.js +57 -0
  28. package/dist/selection/adapter.js.map +1 -0
  29. package/dist/selection/cache.d.ts +72 -0
  30. package/dist/selection/cache.d.ts.map +1 -0
  31. package/dist/selection/cache.js +59 -0
  32. package/dist/selection/cache.js.map +1 -0
  33. package/dist/selection/ids.d.ts +4 -0
  34. package/dist/selection/ids.d.ts.map +1 -0
  35. package/dist/selection/ids.js +29 -0
  36. package/dist/selection/ids.js.map +1 -0
  37. package/dist/selection/pick.d.ts +11 -0
  38. package/dist/selection/pick.d.ts.map +1 -0
  39. package/dist/selection/pick.js +77 -0
  40. package/dist/selection/pick.js.map +1 -0
  41. package/dist/selection/run.d.ts +12 -0
  42. package/dist/selection/run.d.ts.map +1 -0
  43. package/dist/selection/run.js +433 -0
  44. package/dist/selection/run.js.map +1 -0
  45. package/dist/selection/types.d.ts +27 -0
  46. package/dist/selection/types.d.ts.map +1 -0
  47. package/dist/selection/types.js +2 -0
  48. package/dist/selection/types.js.map +1 -0
  49. package/package.json +7 -5
@@ -0,0 +1,433 @@
1
+ import { IntentScopeResponseSchema, MEMORIX_PAGE_DEFAULT, ScoperError, isScoperError, readRecordField, } from "@x12i/memorix-scoper-contracts";
2
+ import { contentTypeCandidates, descriptorFingerprint, fieldCandidates, leadingContentType, } from "@x12i/memorix-scoper-sdk";
3
+ import { MAX_RELATION_IDS, relationRecordIds } from "./ids.js";
4
+ import { addressCacheKey, recordCacheKey, textCacheKey, } from "./cache.js";
5
+ import { keepPicked } from "./pick.js";
6
+ const VALUE_LIMIT = 240;
7
+ class Catalog {
8
+ sdk;
9
+ loaded;
10
+ constructor(sdk) {
11
+ this.sdk = sdk;
12
+ }
13
+ all() {
14
+ this.loaded ??= this.sdk.descriptors.objectTypes();
15
+ return this.loaded;
16
+ }
17
+ async find(id) {
18
+ const types = await this.all();
19
+ return types.find((item) => item.id === id);
20
+ }
21
+ async get(id) {
22
+ const found = await this.find(id);
23
+ if (!found) {
24
+ throw new ScoperError("INVALID_REQUEST", `Object type "${id}" is not in metadata.`);
25
+ }
26
+ return found;
27
+ }
28
+ }
29
+ function intentView(intent) {
30
+ return { id: intent.id, title: intent.title, objectType: intent.objectType };
31
+ }
32
+ function revisionOf(record) {
33
+ if (!record)
34
+ return null;
35
+ const revision = record.revision;
36
+ if (typeof revision === "number" || typeof revision === "string")
37
+ return revision;
38
+ return null;
39
+ }
40
+ function recordIdOf(record) {
41
+ const id = record.recordId ?? record.id;
42
+ return typeof id === "string" ? id.trim() : "";
43
+ }
44
+ function displayOf(record) {
45
+ const data = record.data && typeof record.data === "object" && !Array.isArray(record.data)
46
+ ? record.data
47
+ : record;
48
+ for (const key of ["displayName", "title", "name"]) {
49
+ const value = data[key];
50
+ if (typeof value === "string" && value)
51
+ return value.slice(0, VALUE_LIMIT);
52
+ }
53
+ return "";
54
+ }
55
+ function truncate(value, depth = 0) {
56
+ if (typeof value === "string")
57
+ return value.length > VALUE_LIMIT ? value.slice(0, VALUE_LIMIT) : value;
58
+ if (typeof value === "number" || typeof value === "boolean" || value === null)
59
+ return value;
60
+ if (Array.isArray(value)) {
61
+ return value.slice(0, MAX_RELATION_IDS).map((item) => truncate(item, depth + 1));
62
+ }
63
+ if (value && typeof value === "object" && depth < 2) {
64
+ const out = {};
65
+ for (const [key, item] of Object.entries(value).slice(0, MAX_RELATION_IDS)) {
66
+ out[key] = truncate(item, depth + 1);
67
+ }
68
+ return out;
69
+ }
70
+ return null;
71
+ }
72
+ function pieceFor(record, contentType) {
73
+ const contents = record.contents;
74
+ if (contents && typeof contents === "object" && !Array.isArray(contents)) {
75
+ const piece = contents[contentType];
76
+ if (!piece || typeof piece !== "object" || Array.isArray(piece))
77
+ return null;
78
+ return piece;
79
+ }
80
+ if (typeof record.contentType === "string" && record.contentType !== contentType)
81
+ return null;
82
+ return record;
83
+ }
84
+ function valuesFor(record, contentType, fields) {
85
+ const piece = pieceFor(record, contentType);
86
+ if (!piece)
87
+ return undefined;
88
+ const values = {};
89
+ for (const field of fields) {
90
+ const read = readRecordField(piece, field.path);
91
+ if (!read.found)
92
+ continue;
93
+ values[field.path] = truncate(read.value);
94
+ }
95
+ return values;
96
+ }
97
+ function recordRevisions(record, shown) {
98
+ const items = [{ contentType: "*", revision: revisionOf(record) }];
99
+ const contents = record.contents;
100
+ if (!contents || typeof contents !== "object" || Array.isArray(contents))
101
+ return items;
102
+ for (const contentType of shown) {
103
+ const piece = contents[contentType];
104
+ if (!piece || typeof piece !== "object" || Array.isArray(piece))
105
+ continue;
106
+ items.push({ contentType, revision: revisionOf(piece) });
107
+ }
108
+ return items;
109
+ }
110
+ function sameRevisions(stored, record) {
111
+ const contents = record.contents;
112
+ const mapped = contents && typeof contents === "object" && !Array.isArray(contents)
113
+ ? contents
114
+ : undefined;
115
+ return stored.every((item) => {
116
+ if (item.contentType === "*")
117
+ return revisionOf(record) === item.revision;
118
+ const piece = mapped?.[item.contentType];
119
+ if (!piece || typeof piece !== "object" || Array.isArray(piece))
120
+ return item.revision === null;
121
+ return revisionOf(piece) === item.revision;
122
+ });
123
+ }
124
+ function idsOnRecord(record, field, contentTypeIds) {
125
+ const contents = record.contents;
126
+ if (contents && typeof contents === "object" && !Array.isArray(contents)) {
127
+ for (const contentType of contentTypeIds) {
128
+ const piece = contents[contentType];
129
+ if (!piece || typeof piece !== "object" || Array.isArray(piece))
130
+ continue;
131
+ const read = readRecordField(piece, field);
132
+ if (read.found)
133
+ return relationRecordIds(read.value);
134
+ }
135
+ return [];
136
+ }
137
+ const read = readRecordField(record, field);
138
+ return read.found ? relationRecordIds(read.value) : [];
139
+ }
140
+ async function pickIds(decisions, input, allowed, warnings) {
141
+ const answer = await decisions.decide(input);
142
+ const decision = answer.decision && typeof answer.decision === "object" && !Array.isArray(answer.decision)
143
+ ? answer.decision
144
+ : {};
145
+ return keepPicked(decision, allowed, warnings, input.step);
146
+ }
147
+ function finish(selection) {
148
+ const parsed = IntentScopeResponseSchema.parse(selection);
149
+ if (parsed.warnings === undefined)
150
+ delete parsed.warnings;
151
+ return parsed;
152
+ }
153
+ function cloneSelection(selection) {
154
+ return structuredClone(selection);
155
+ }
156
+ async function descriptorsMatch(catalog, objectTypeIds, fingerprint) {
157
+ const types = [];
158
+ for (const id of objectTypeIds) {
159
+ const found = await catalog.find(id);
160
+ if (!found)
161
+ return false;
162
+ types.push(found);
163
+ }
164
+ return descriptorFingerprint(types) === fingerprint;
165
+ }
166
+ async function textRevisionsMatch(sdk, objectType, entry) {
167
+ if (!entry.contentType)
168
+ return entry.revisions.length === 0;
169
+ for (const item of entry.revisions) {
170
+ try {
171
+ const res = await sdk.subjects.get({
172
+ objectType,
173
+ contentType: entry.contentType,
174
+ id: item.recordId,
175
+ });
176
+ if (!res.record || revisionOf(res.record) !== item.revision)
177
+ return false;
178
+ }
179
+ catch (err) {
180
+ if (isScoperError(err) && err.code === "READ_NOT_FOUND")
181
+ return false;
182
+ throw err;
183
+ }
184
+ }
185
+ return true;
186
+ }
187
+ function classify(request) {
188
+ if ("text" in request)
189
+ return { mode: "text", text: request.text };
190
+ if ("record" in request) {
191
+ return { mode: "record", recordId: request.recordId, record: request.record };
192
+ }
193
+ return { mode: "address", recordId: request.recordId };
194
+ }
195
+ export async function runScopeSelection(request, context, deps) {
196
+ const intent = deps.intents?.[request.intent];
197
+ if (!intent) {
198
+ const ids = Object.keys(deps.intents ?? {}).sort();
199
+ throw new ScoperError("INVALID_REQUEST", `Unknown intent "${request.intent}". Loaded intents: ${ids.join(", ") || "(none)"}.`);
200
+ }
201
+ const call = classify(request);
202
+ const sdk = deps.sdk.forContext(context);
203
+ const catalog = new Catalog(sdk);
204
+ const purpose = intentView(intent);
205
+ if (!request.redo && call.mode === "record") {
206
+ const hit = deps.caches.record.get(recordCacheKey({
207
+ orgId: context.orgId,
208
+ agentIds: context.agentIds,
209
+ intent,
210
+ objectType: intent.objectType,
211
+ recordId: call.recordId,
212
+ }));
213
+ if (hit && sameRevisions(hit.revisions, call.record))
214
+ return cloneSelection(hit.selection);
215
+ }
216
+ if (!request.redo && call.mode === "address") {
217
+ const hit = deps.caches.address.get(addressCacheKey({
218
+ orgId: context.orgId,
219
+ agentIds: context.agentIds,
220
+ intent,
221
+ objectType: intent.objectType,
222
+ }));
223
+ if (hit && (await descriptorsMatch(catalog, hit.objectTypeIds, hit.fingerprint))) {
224
+ const stamped = cloneSelection(hit.selection);
225
+ stamped.anchor.recordIds = [call.recordId];
226
+ return stamped;
227
+ }
228
+ }
229
+ if (!request.redo && call.mode === "text") {
230
+ const hit = deps.caches.text.get(textCacheKey({
231
+ orgId: context.orgId,
232
+ agentIds: context.agentIds,
233
+ intent,
234
+ objectType: intent.objectType,
235
+ text: call.text,
236
+ }));
237
+ if (hit &&
238
+ (await descriptorsMatch(catalog, hit.objectTypeIds, hit.fingerprint)) &&
239
+ (await textRevisionsMatch(sdk, intent.objectType, hit))) {
240
+ return cloneSelection(hit.selection);
241
+ }
242
+ }
243
+ const warnings = [];
244
+ const considered = [];
245
+ const anchor = await catalog.get(intent.objectType);
246
+ considered.push(anchor);
247
+ let recordIds = [];
248
+ let textContentType;
249
+ let textRevisions = [];
250
+ if (call.mode === "text") {
251
+ const leading = leadingContentType(anchor);
252
+ textContentType = leading?.id;
253
+ if (leading) {
254
+ const page = await sdk.subjects.list({
255
+ objectType: anchor.id,
256
+ contentType: leading.id,
257
+ limit: MEMORIX_PAGE_DEFAULT,
258
+ });
259
+ const candidates = page.records
260
+ .map((record) => {
261
+ const recordId = recordIdOf(record);
262
+ const display = displayOf(record);
263
+ return display ? { recordId, display } : { recordId };
264
+ })
265
+ .filter((item) => item.recordId);
266
+ const allowed = candidates.map((item) => item.recordId);
267
+ recordIds = await pickIds(deps.decisions, {
268
+ step: "records",
269
+ intent: purpose,
270
+ objectType: anchor.id,
271
+ contentType: leading.id,
272
+ candidates,
273
+ }, allowed, warnings);
274
+ textRevisions = recordIds.map((recordId) => {
275
+ const row = page.records.find((record) => recordIdOf(record) === recordId);
276
+ return { recordId, revision: revisionOf(row) };
277
+ });
278
+ }
279
+ }
280
+ else {
281
+ recordIds = [call.recordId];
282
+ }
283
+ const typeCandidates = contentTypeCandidates(anchor);
284
+ const keptTypes = await pickIds(deps.decisions, {
285
+ step: "content-types",
286
+ intent: purpose,
287
+ objectType: anchor.id,
288
+ candidates: typeCandidates,
289
+ }, typeCandidates.map((item) => item.id), warnings);
290
+ const contentTypes = [];
291
+ const followed = [];
292
+ const shownContentTypes = [];
293
+ if (keptTypes.length) {
294
+ for (const contentType of keptTypes) {
295
+ const fields = fieldCandidates(anchor, contentType);
296
+ const values = call.mode === "record" ? valuesFor(call.record, contentType, fields) : undefined;
297
+ if (values)
298
+ shownContentTypes.push(contentType);
299
+ const keptPaths = await pickIds(deps.decisions, {
300
+ step: "properties",
301
+ intent: purpose,
302
+ objectType: anchor.id,
303
+ contentType,
304
+ candidates: fields,
305
+ ...(values ? { values } : {}),
306
+ }, fields.map((field) => field.path), warnings);
307
+ contentTypes.push({ id: contentType, properties: keptPaths });
308
+ for (const path of keptPaths) {
309
+ const field = fields.find((item) => item.path === path);
310
+ if (!field?.refersTo)
311
+ continue;
312
+ if (followed.some((item) => item.field === path))
313
+ continue;
314
+ followed.push({ field: path, objectType: field.refersTo.objectType });
315
+ }
316
+ }
317
+ }
318
+ const associations = [];
319
+ if (followed.length) {
320
+ const keptFields = await pickIds(deps.decisions, {
321
+ step: "associations",
322
+ intent: purpose,
323
+ objectType: anchor.id,
324
+ candidates: followed,
325
+ }, followed.map((item) => item.field), warnings);
326
+ const byType = new Map();
327
+ for (const field of keptFields) {
328
+ const match = followed.find((item) => item.field === field);
329
+ if (!match)
330
+ continue;
331
+ const list = byType.get(match.objectType) ?? [];
332
+ list.push(field);
333
+ byType.set(match.objectType, list);
334
+ }
335
+ for (const [objectType, fields] of byType) {
336
+ const related = await catalog.get(objectType);
337
+ if (!considered.some((item) => item.id === related.id))
338
+ considered.push(related);
339
+ const relatedCandidates = contentTypeCandidates(related);
340
+ const keptRelated = await pickIds(deps.decisions, {
341
+ step: "associated-content-types",
342
+ intent: purpose,
343
+ objectType,
344
+ candidates: relatedCandidates,
345
+ }, relatedCandidates.map((item) => item.id), warnings);
346
+ const relatedContent = [];
347
+ for (const contentType of keptRelated) {
348
+ const relatedFields = fieldCandidates(related, contentType);
349
+ const keptPaths = await pickIds(deps.decisions, {
350
+ step: "associated-properties",
351
+ intent: purpose,
352
+ objectType,
353
+ contentType,
354
+ candidates: relatedFields,
355
+ }, relatedFields.map((field) => field.path), warnings);
356
+ relatedContent.push({ id: contentType, properties: keptPaths });
357
+ }
358
+ for (const field of fields) {
359
+ let relatedIds;
360
+ if (call.mode === "record") {
361
+ const stored = idsOnRecord(call.record, field, keptTypes);
362
+ relatedIds = stored.length
363
+ ? await pickIds(deps.decisions, {
364
+ step: "relation-records",
365
+ intent: purpose,
366
+ objectType,
367
+ field,
368
+ candidates: stored,
369
+ }, stored, warnings)
370
+ : [];
371
+ }
372
+ associations.push({
373
+ field,
374
+ objectType,
375
+ ...(relatedIds ? { recordIds: relatedIds } : call.mode === "record" ? { recordIds: [] } : {}),
376
+ contentTypes: relatedContent,
377
+ });
378
+ }
379
+ }
380
+ }
381
+ const selection = finish({
382
+ intent: intent.id,
383
+ anchor: { objectType: anchor.id, recordIds, contentTypes },
384
+ associations,
385
+ ...(warnings.length ? { warnings } : {}),
386
+ });
387
+ const fingerprint = descriptorFingerprint(considered);
388
+ const objectTypeIds = considered.map((item) => item.id);
389
+ if (call.mode === "address") {
390
+ const entry = {
391
+ selection: cloneSelection(selection),
392
+ fingerprint,
393
+ objectTypeIds,
394
+ };
395
+ deps.caches.address.set(addressCacheKey({
396
+ orgId: context.orgId,
397
+ agentIds: context.agentIds,
398
+ intent,
399
+ objectType: intent.objectType,
400
+ }), entry);
401
+ }
402
+ else if (call.mode === "record") {
403
+ const entry = {
404
+ selection: cloneSelection(selection),
405
+ revisions: recordRevisions(call.record, shownContentTypes),
406
+ };
407
+ deps.caches.record.set(recordCacheKey({
408
+ orgId: context.orgId,
409
+ agentIds: context.agentIds,
410
+ intent,
411
+ objectType: intent.objectType,
412
+ recordId: call.recordId,
413
+ }), entry);
414
+ }
415
+ else {
416
+ const entry = {
417
+ selection: cloneSelection(selection),
418
+ fingerprint,
419
+ objectTypeIds,
420
+ ...(textContentType ? { contentType: textContentType } : {}),
421
+ revisions: textRevisions,
422
+ };
423
+ deps.caches.text.set(textCacheKey({
424
+ orgId: context.orgId,
425
+ agentIds: context.agentIds,
426
+ intent,
427
+ objectType: intent.objectType,
428
+ text: call.text,
429
+ }), entry);
430
+ }
431
+ return cloneSelection(selection);
432
+ }
433
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/selection/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /** One decide() step. The decider sees only this step's candidates. */
2
+ export type ScopeDecisionStep = "records" | "content-types" | "properties" | "associations" | "associated-content-types" | "associated-properties" | "relation-records";
3
+ export interface ScopeDecisionIntent {
4
+ id: string;
5
+ title: string;
6
+ objectType: string;
7
+ }
8
+ export interface ScopeDecisionInput {
9
+ step: ScopeDecisionStep;
10
+ intent: ScopeDecisionIntent;
11
+ objectType: string;
12
+ contentType?: string;
13
+ field?: string;
14
+ candidates: unknown;
15
+ /** Record mode, property step only: truncated stored values for the candidate paths. */
16
+ values?: Record<string, unknown>;
17
+ }
18
+ export interface ScopeDecisionAnswer {
19
+ decision: Record<string, unknown>;
20
+ /** Scalar primary. Not the selection list. */
21
+ value?: string | number | boolean | null;
22
+ }
23
+ /** One stepped decision. Tests pass a fake. The ai-dispatcher reasoner builds the real one. */
24
+ export interface ScopeDecider {
25
+ decide(input: ScopeDecisionInput): Promise<ScopeDecisionAnswer>;
26
+ }
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/selection/types.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,eAAe,GACf,YAAY,GACZ,cAAc,GACd,0BAA0B,GAC1B,uBAAuB,GACvB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CAC1C;AAED,+FAA+F;AAC/F,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACjE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/selection/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x12i/memorix-scoper",
3
- "version": "2.2.2",
3
+ "version": "3.0.0",
4
4
  "description": "Memorix Scoper core — profiles, reasoner, coordinator",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -26,15 +26,17 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "zod": "^3.25.76",
29
- "@x12i/memorix-scoper-sdk": "2.1.2",
30
- "@x12i/memorix-scoper-contracts": "2.0.0",
29
+ "@x12i/memorix-scoper-contracts": "3.0.0",
30
+ "@x12i/memorix-scoper-sdk": "2.2.0",
31
31
  "@x12i/memorix-scoper-profiles": "1.0.0"
32
32
  },
33
33
  "peerDependencies": {
34
- "@x12i/ai-dispatcher": "^2.4.1"
34
+ "@x12i/ai-dispatcher": "^3.2.0",
35
+ "@x12i/decision-dispatcher": "^1.0.0"
35
36
  },
36
37
  "devDependencies": {
37
- "@x12i/ai-dispatcher": "^2.4.1",
38
+ "@x12i/ai-dispatcher": "3.2.0",
39
+ "@x12i/decision-dispatcher": "1.0.0",
38
40
  "typescript": "^5.9.3",
39
41
  "vitest": "^3.2.7",
40
42
  "@x12i/memorix-scoper-testing": "1.0.0"