@x12i/memorix-scoper 2.0.0 → 2.1.1

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.
@@ -0,0 +1,356 @@
1
+ /**
2
+ * Read toolbox shared by MCP and the synthesize locator.
3
+ * These calls read Memorix. They do not call scope(), so they cannot recurse.
4
+ */
5
+ import { ScoperError, isScoperError, markdownBody, projectRecord, } from "@x12i/memorix-scoper-contracts";
6
+ const FIELD_LIST_MAX = 64;
7
+ export const CATALOG_INPUT_SCHEMA = {
8
+ type: "object",
9
+ additionalProperties: false,
10
+ properties: {},
11
+ };
12
+ const FIELD_SCHEMA = {
13
+ type: "array",
14
+ maxItems: FIELD_LIST_MAX,
15
+ items: { type: "string", minLength: 1 },
16
+ };
17
+ const INCLUDE_SCHEMA = {
18
+ type: "object",
19
+ additionalProperties: false,
20
+ properties: { markdown: { type: "boolean" } },
21
+ };
22
+ export const SUBJECTS_LIST_INPUT_SCHEMA = {
23
+ type: "object",
24
+ required: ["objectType", "contentType"],
25
+ additionalProperties: false,
26
+ properties: {
27
+ objectType: { type: "string", minLength: 1 },
28
+ contentType: { type: "string", minLength: 1 },
29
+ limit: { type: "integer", minimum: 1, maximum: 200 },
30
+ cursor: { type: "string", minLength: 1 },
31
+ include: INCLUDE_SCHEMA,
32
+ properties: FIELD_SCHEMA,
33
+ exclude: FIELD_SCHEMA,
34
+ useMarkdown: { type: "boolean" },
35
+ },
36
+ };
37
+ export const SUBJECTS_QUERY_INPUT_SCHEMA = {
38
+ type: "object",
39
+ required: ["objectType", "contentType"],
40
+ additionalProperties: false,
41
+ properties: {
42
+ objectType: { type: "string", minLength: 1 },
43
+ contentType: { type: "string", minLength: 1 },
44
+ filter: {
45
+ type: "object",
46
+ description: "Equality map of top-level record fields, for example { \"id\": \"e1\" }.",
47
+ },
48
+ limit: { type: "integer", minimum: 1, maximum: 200 },
49
+ include: INCLUDE_SCHEMA,
50
+ properties: FIELD_SCHEMA,
51
+ exclude: FIELD_SCHEMA,
52
+ useMarkdown: { type: "boolean" },
53
+ },
54
+ };
55
+ const SUBJECTS_GET_INPUT_SCHEMA = {
56
+ type: "object",
57
+ required: ["objectType", "contentType", "recordId"],
58
+ additionalProperties: false,
59
+ properties: {
60
+ objectType: { type: "string", minLength: 1 },
61
+ contentType: { type: "string", minLength: 1 },
62
+ recordId: { type: "string", minLength: 1 },
63
+ include: INCLUDE_SCHEMA,
64
+ properties: FIELD_SCHEMA,
65
+ exclude: FIELD_SCHEMA,
66
+ useMarkdown: { type: "boolean" },
67
+ },
68
+ };
69
+ export async function readCatalog(sdk) {
70
+ const described = sdk.catalog.describe();
71
+ return {
72
+ version: described.version,
73
+ entries: described.entries.map((entry) => ({
74
+ id: entry.id,
75
+ capability: entry.capability,
76
+ description: entry.description,
77
+ })),
78
+ };
79
+ }
80
+ export async function readSubjectsList(sdk, context, args, into, options) {
81
+ const parsed = parseListArgs(args, options);
82
+ const page = await sdk.subjects.list({
83
+ objectType: parsed.objectType,
84
+ contentType: parsed.contentType,
85
+ limit: parsed.limit,
86
+ cursor: parsed.cursor,
87
+ include: parsed.include,
88
+ });
89
+ const rows = page.records.map((record, index) => {
90
+ const recordId = idOf(record, String(index));
91
+ into?.push(observedItem(`subjects_list:${recordId}`, refOr(page.refs[index], context, parsed.objectType, parsed.contentType, recordId), record, parsed.objectType, parsed.contentType, recordId));
92
+ return presentRecord(record, recordId, parsed);
93
+ });
94
+ return {
95
+ objectType: parsed.objectType,
96
+ contentType: parsed.contentType,
97
+ snapshotConsistent: false,
98
+ nextCursor: page.nextCursor,
99
+ count: rows.length,
100
+ records: rows,
101
+ };
102
+ }
103
+ export async function readSubjectsQuery(sdk, context, args, into, options) {
104
+ const parsed = parseQueryArgs(args, options);
105
+ const page = await sdk.subjects.query({
106
+ objectType: parsed.objectType,
107
+ contentType: parsed.contentType,
108
+ limit: parsed.limit,
109
+ filter: parsed.filter,
110
+ include: parsed.include,
111
+ });
112
+ const rows = page.records.map((record, index) => {
113
+ const recordId = idOf(record, String(index));
114
+ into?.push(observedItem(`subjects_query:${recordId}`, refOr(page.refs[index], context, parsed.objectType, parsed.contentType, recordId), record, parsed.objectType, parsed.contentType, recordId));
115
+ return presentRecord(record, recordId, parsed);
116
+ });
117
+ return {
118
+ objectType: parsed.objectType,
119
+ contentType: parsed.contentType,
120
+ snapshotConsistent: false,
121
+ count: rows.length,
122
+ records: rows,
123
+ };
124
+ }
125
+ export async function readSubjectsGet(sdk, context, args, into, options) {
126
+ const parsed = parseGetArgs(args, options);
127
+ const res = await sdk.subjects.get({
128
+ objectType: parsed.objectType,
129
+ contentType: parsed.contentType,
130
+ id: parsed.recordId,
131
+ include: parsed.include,
132
+ });
133
+ if (!res.record) {
134
+ return { found: false, recordId: parsed.recordId, objectType: parsed.objectType, contentType: parsed.contentType };
135
+ }
136
+ into?.push(observedItem(`subjects_get:${parsed.recordId}`, refOr(res.ref, context, parsed.objectType, parsed.contentType, parsed.recordId), res.record, parsed.objectType, parsed.contentType, parsed.recordId));
137
+ return {
138
+ found: true,
139
+ ...presentRecord(res.record, parsed.recordId, parsed),
140
+ };
141
+ }
142
+ /**
143
+ * Read tools for one synthesize pass. Names are catalog, subjects_list, subjects_query, subjects_get.
144
+ * scope is never included.
145
+ */
146
+ export function createFindTools(input) {
147
+ const options = {
148
+ forceMarkdown: input.request.options?.useMarkdown === true || input.request.options?.include?.markdown === true,
149
+ exclude: input.request.options?.exclude,
150
+ };
151
+ const tools = [];
152
+ if (input.allowed.has("catalog.describe")) {
153
+ tools.push({
154
+ name: "catalog",
155
+ description: "List enabled Scoper read capabilities. Does not fetch Memorix records.",
156
+ parameters: CATALOG_INPUT_SCHEMA,
157
+ execute: async () => readCatalog(input.sdk),
158
+ });
159
+ }
160
+ if (input.allowed.has("subjects.list")) {
161
+ tools.push({
162
+ name: "subjects_list",
163
+ description: "Find stored records for one objectType and contentType when record ids are unknown. Returns ids and shaped rows.",
164
+ parameters: SUBJECTS_LIST_INPUT_SCHEMA,
165
+ execute: (args) => readSubjectsList(input.sdk, input.context, args, input.items, options),
166
+ });
167
+ }
168
+ if (input.allowed.has("subjects.query")) {
169
+ tools.push({
170
+ name: "subjects_query",
171
+ description: "Find stored records for one objectType and contentType that match a top-level equality filter.",
172
+ parameters: SUBJECTS_QUERY_INPUT_SCHEMA,
173
+ execute: (args) => readSubjectsQuery(input.sdk, input.context, args, input.items, options),
174
+ });
175
+ }
176
+ if (input.allowed.has("subjects.get")) {
177
+ tools.push({
178
+ name: "subjects_get",
179
+ description: "Read one stored record by objectType, contentType, and recordId.",
180
+ parameters: SUBJECTS_GET_INPUT_SCHEMA,
181
+ execute: (args) => readSubjectsGet(input.sdk, input.context, args, input.items, options),
182
+ });
183
+ }
184
+ return tools;
185
+ }
186
+ export function asToolArgs(args) {
187
+ if (!args || typeof args !== "object" || Array.isArray(args)) {
188
+ throw new ScoperError("INVALID_REQUEST", "tool args must be an object");
189
+ }
190
+ return args;
191
+ }
192
+ /** Model-facing text. Full records stay on the evidence items. */
193
+ export function compactToolResult(body, maxChars = 8_000) {
194
+ const text = JSON.stringify(body);
195
+ if (text.length <= maxChars)
196
+ return text;
197
+ return JSON.stringify({ truncated: true, preview: text.slice(0, maxChars) });
198
+ }
199
+ export function toolFailure(err) {
200
+ if (isScoperError(err) && (err.code === "BUDGET_EXCEEDED" || err.code === "RECURSIVE_SCOPE_CALL")) {
201
+ throw err;
202
+ }
203
+ if (isScoperError(err))
204
+ return JSON.stringify(err.toJSON());
205
+ const message = err instanceof Error ? err.message : String(err);
206
+ return JSON.stringify({ code: "INTERNAL", message });
207
+ }
208
+ function parseListArgs(args, options) {
209
+ assertKeys(args, ["objectType", "contentType", "limit", "cursor", "include", "properties", "exclude", "useMarkdown"]);
210
+ return {
211
+ ...parseAddress(args, options),
212
+ limit: parseLimit(args.limit),
213
+ cursor: optionalString(args.cursor, "cursor"),
214
+ };
215
+ }
216
+ function parseQueryArgs(args, options) {
217
+ assertKeys(args, ["objectType", "contentType", "filter", "limit", "include", "properties", "exclude", "useMarkdown"]);
218
+ return {
219
+ ...parseAddress(args, options),
220
+ limit: parseLimit(args.limit),
221
+ filter: parseFilter(args.filter),
222
+ };
223
+ }
224
+ function parseGetArgs(args, options) {
225
+ assertKeys(args, ["objectType", "contentType", "recordId", "include", "properties", "exclude", "useMarkdown"]);
226
+ const recordId = requireString(args.recordId, "recordId");
227
+ return { ...parseAddress(args, options), recordId };
228
+ }
229
+ function parseAddress(args, options) {
230
+ const useMarkdown = parseBoolean(args.useMarkdown, "useMarkdown") === true || options?.forceMarkdown === true;
231
+ const include = parseInclude(args.include, useMarkdown);
232
+ return {
233
+ objectType: requireString(args.objectType, "objectType"),
234
+ contentType: requireString(args.contentType, "contentType"),
235
+ include,
236
+ select: {
237
+ properties: fieldList(args.properties, "properties"),
238
+ exclude: mergeFields(options?.exclude, fieldList(args.exclude, "exclude")),
239
+ },
240
+ useMarkdown,
241
+ };
242
+ }
243
+ function presentRecord(record, recordId, parsed) {
244
+ const shaped = projectRecord(record, parsed.select) ?? record;
245
+ const text = parsed.useMarkdown ? markdownBody(record) : null;
246
+ return {
247
+ recordId,
248
+ objectType: parsed.objectType,
249
+ contentType: parsed.contentType,
250
+ ...(text ? { markdown: text } : { record: shaped }),
251
+ };
252
+ }
253
+ function refOr(ref, context, objectType, contentType, recordId) {
254
+ if (ref)
255
+ return ref;
256
+ return { kind: "subject", orgId: context.orgId, objectType, contentType, recordId };
257
+ }
258
+ function observedItem(id, ref, record, objectType, contentType, recordId) {
259
+ return {
260
+ id,
261
+ ref,
262
+ summary: `Subject ${objectType}/${contentType}/${recordId}`,
263
+ epistemic: "OBSERVED",
264
+ payload: record,
265
+ };
266
+ }
267
+ function idOf(record, fallback) {
268
+ const id = String(record.recordId ?? record.id ?? fallback).trim();
269
+ return id || fallback;
270
+ }
271
+ function assertKeys(args, allowed) {
272
+ const ok = new Set(allowed);
273
+ for (const key of Object.keys(args)) {
274
+ if (!ok.has(key))
275
+ throw new ScoperError("INVALID_REQUEST", `unexpected field: ${key}`);
276
+ }
277
+ }
278
+ function requireString(value, name) {
279
+ if (typeof value !== "string" || !value.trim()) {
280
+ throw new ScoperError("INVALID_REQUEST", `${name} is required`);
281
+ }
282
+ return value.trim();
283
+ }
284
+ function optionalString(value, name) {
285
+ if (value === undefined)
286
+ return undefined;
287
+ if (typeof value !== "string" || !value.trim()) {
288
+ throw new ScoperError("INVALID_REQUEST", `${name} must be a string`);
289
+ }
290
+ return value.trim();
291
+ }
292
+ function parseBoolean(value, name) {
293
+ if (value === undefined)
294
+ return undefined;
295
+ if (typeof value !== "boolean")
296
+ throw new ScoperError("INVALID_REQUEST", `${name} must be a boolean`);
297
+ return value;
298
+ }
299
+ function parseLimit(value) {
300
+ if (value === undefined)
301
+ return 20;
302
+ if (typeof value !== "number" || !Number.isInteger(value)) {
303
+ throw new ScoperError("INVALID_REQUEST", "limit must be an integer");
304
+ }
305
+ return value;
306
+ }
307
+ function parseInclude(value, forceMarkdown) {
308
+ let markdown = forceMarkdown;
309
+ if (value !== undefined) {
310
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
311
+ throw new ScoperError("INVALID_REQUEST", "include must be an object");
312
+ }
313
+ const record = value;
314
+ assertKeys(record, ["markdown"]);
315
+ const flag = parseBoolean(record.markdown, "include.markdown");
316
+ if (flag === true)
317
+ markdown = true;
318
+ }
319
+ return markdown ? { markdown: true } : undefined;
320
+ }
321
+ function parseFilter(value) {
322
+ if (value === undefined)
323
+ return undefined;
324
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
325
+ throw new ScoperError("INVALID_REQUEST", "filter must be an object of top-level field equalities");
326
+ }
327
+ const out = {};
328
+ for (const [key, entry] of Object.entries(value)) {
329
+ if (key === "__proto__" || key === "constructor" || key === "prototype")
330
+ continue;
331
+ out[key] = entry;
332
+ }
333
+ return out;
334
+ }
335
+ function fieldList(value, name) {
336
+ if (value === undefined)
337
+ return undefined;
338
+ if (!Array.isArray(value) || value.length > FIELD_LIST_MAX) {
339
+ throw new ScoperError("INVALID_REQUEST", `${name} must be a list of at most ${FIELD_LIST_MAX} strings`);
340
+ }
341
+ return value.map((item) => {
342
+ if (typeof item !== "string" || !item.trim() || item.length > 200) {
343
+ throw new ScoperError("INVALID_REQUEST", `${name} entries must be non-empty strings`);
344
+ }
345
+ return item.trim();
346
+ });
347
+ }
348
+ function mergeFields(base, extra) {
349
+ const merged = [...(base ?? [])];
350
+ for (const field of extra ?? []) {
351
+ if (!merged.includes(field))
352
+ merged.push(field);
353
+ }
354
+ return merged.length ? merged : undefined;
355
+ }
356
+ //# sourceMappingURL=toolbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbox.js","sourceRoot":"","sources":["../src/toolbox.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x12i/memorix-scoper",
3
- "version": "2.0.0",
3
+ "version": "2.1.1",
4
4
  "description": "Memorix Scoper core — profiles, reasoner, coordinator",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -25,13 +25,16 @@
25
25
  "tag": "latest"
26
26
  },
27
27
  "dependencies": {
28
- "@x12i/ai-dispatcher": "^1.4.0",
29
28
  "zod": "^3.25.67",
30
29
  "@x12i/memorix-scoper-contracts": "2.0.0",
31
- "@x12i/memorix-scoper-sdk": "2.0.0",
32
- "@x12i/memorix-scoper-profiles": "1.0.0"
30
+ "@x12i/memorix-scoper-profiles": "1.0.0",
31
+ "@x12i/memorix-scoper-sdk": "2.0.0"
32
+ },
33
+ "peerDependencies": {
34
+ "@x12i/ai-dispatcher": "^2.3.3"
33
35
  },
34
36
  "devDependencies": {
37
+ "@x12i/ai-dispatcher": "^2.3.3",
35
38
  "typescript": "^5.8.3",
36
39
  "vitest": "^3.2.4",
37
40
  "@x12i/memorix-scoper-testing": "1.0.0"