@x12i/memorix-client-api 0.18.0 → 0.19.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 (108) hide show
  1. package/HANDOVER.md +13 -2
  2. package/dist/agent-directory.d.ts +25 -0
  3. package/dist/agent-directory.d.ts.map +1 -0
  4. package/dist/agent-directory.js +75 -0
  5. package/dist/agent-directory.js.map +1 -0
  6. package/dist/app.d.ts +31 -6
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +220 -33
  9. package/dist/app.js.map +1 -1
  10. package/dist/authix.d.ts +28 -2
  11. package/dist/authix.d.ts.map +1 -1
  12. package/dist/authix.js +55 -4
  13. package/dist/authix.js.map +1 -1
  14. package/dist/catalog.d.ts +33 -1
  15. package/dist/catalog.d.ts.map +1 -1
  16. package/dist/catalog.js +83 -4
  17. package/dist/catalog.js.map +1 -1
  18. package/dist/cli.js +11 -1
  19. package/dist/cli.js.map +1 -1
  20. package/dist/config.d.ts +9 -0
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +31 -0
  23. package/dist/config.js.map +1 -1
  24. package/dist/errors.d.ts +16 -2
  25. package/dist/errors.d.ts.map +1 -1
  26. package/dist/errors.js +16 -2
  27. package/dist/errors.js.map +1 -1
  28. package/dist/fetch.d.ts.map +1 -1
  29. package/dist/fetch.js +27 -3
  30. package/dist/fetch.js.map +1 -1
  31. package/dist/peers.d.ts +2 -2
  32. package/dist/peers.d.ts.map +1 -1
  33. package/dist/peers.js +4 -4
  34. package/dist/peers.js.map +1 -1
  35. package/dist/refs.d.ts +7 -1
  36. package/dist/refs.d.ts.map +1 -1
  37. package/dist/refs.js +36 -26
  38. package/dist/refs.js.map +1 -1
  39. package/dist/scope.d.ts +25 -2
  40. package/dist/scope.d.ts.map +1 -1
  41. package/dist/scope.js +71 -4
  42. package/dist/scope.js.map +1 -1
  43. package/dist/scoper-embedded.d.ts +29 -0
  44. package/dist/scoper-embedded.d.ts.map +1 -0
  45. package/dist/scoper-embedded.js +239 -0
  46. package/dist/scoper-embedded.js.map +1 -0
  47. package/dist/scoper.d.ts +19 -27
  48. package/dist/scoper.d.ts.map +1 -1
  49. package/dist/scoper.js +51 -254
  50. package/dist/scoper.js.map +1 -1
  51. package/dist/upstream.d.ts +6 -1
  52. package/dist/upstream.d.ts.map +1 -1
  53. package/dist/upstream.js +22 -4
  54. package/dist/upstream.js.map +1 -1
  55. package/dist/v1/census.d.ts +59 -0
  56. package/dist/v1/census.d.ts.map +1 -0
  57. package/dist/v1/census.js +146 -0
  58. package/dist/v1/census.js.map +1 -0
  59. package/dist/v1/content.d.ts +48 -0
  60. package/dist/v1/content.d.ts.map +1 -0
  61. package/dist/v1/content.js +292 -0
  62. package/dist/v1/content.js.map +1 -0
  63. package/dist/v1/context.d.ts +50 -0
  64. package/dist/v1/context.d.ts.map +1 -0
  65. package/dist/v1/context.js +4 -0
  66. package/dist/v1/context.js.map +1 -0
  67. package/dist/v1/discovery.d.ts +24 -0
  68. package/dist/v1/discovery.d.ts.map +1 -0
  69. package/dist/v1/discovery.js +163 -0
  70. package/dist/v1/discovery.js.map +1 -0
  71. package/dist/v1/gaps.d.ts +18 -0
  72. package/dist/v1/gaps.d.ts.map +1 -0
  73. package/dist/v1/gaps.js +2 -0
  74. package/dist/v1/gaps.js.map +1 -0
  75. package/dist/v1/http.d.ts +18 -0
  76. package/dist/v1/http.d.ts.map +1 -0
  77. package/dist/v1/http.js +105 -0
  78. package/dist/v1/http.js.map +1 -0
  79. package/dist/v1/mapping.d.ts +155 -0
  80. package/dist/v1/mapping.d.ts.map +1 -0
  81. package/dist/v1/mapping.js +380 -0
  82. package/dist/v1/mapping.js.map +1 -0
  83. package/dist/v1/planning-store.d.ts +74 -0
  84. package/dist/v1/planning-store.d.ts.map +1 -0
  85. package/dist/v1/planning-store.js +192 -0
  86. package/dist/v1/planning-store.js.map +1 -0
  87. package/dist/v1/planning.d.ts +5 -0
  88. package/dist/v1/planning.d.ts.map +1 -0
  89. package/dist/v1/planning.js +297 -0
  90. package/dist/v1/planning.js.map +1 -0
  91. package/dist/v1/records.d.ts +18 -0
  92. package/dist/v1/records.d.ts.map +1 -0
  93. package/dist/v1/records.js +42 -0
  94. package/dist/v1/records.js.map +1 -0
  95. package/dist/v1/relationships.d.ts +72 -0
  96. package/dist/v1/relationships.d.ts.map +1 -0
  97. package/dist/v1/relationships.js +436 -0
  98. package/dist/v1/relationships.js.map +1 -0
  99. package/dist/v1/routes.d.ts +5 -0
  100. package/dist/v1/routes.d.ts.map +1 -0
  101. package/dist/v1/routes.js +16 -0
  102. package/dist/v1/routes.js.map +1 -0
  103. package/dist/v1/sources.d.ts +62 -0
  104. package/dist/v1/sources.d.ts.map +1 -0
  105. package/dist/v1/sources.js +218 -0
  106. package/dist/v1/sources.js.map +1 -0
  107. package/openapi/openapi.json +3587 -480
  108. package/package.json +74 -74
@@ -0,0 +1,380 @@
1
+ import { fieldOf } from "../catalog.js";
2
+ import { ApiError } from "../errors.js";
3
+ import { scopeBody } from "../scope.js";
4
+ import { asRecord } from "../upstream.js";
5
+ import { unavailable } from "./census.js";
6
+ import { boolQuery, csv, fingerprintId, queryOf, sendWithEtag } from "./http.js";
7
+ import { loadDefinitions, loadLinkCounts, withLinkCounts } from "./relationships.js";
8
+ import { loadSources } from "./sources.js";
9
+ const SECTIONS = ["counts", "relationships", "functions", "sources"];
10
+ function isRecord(value) {
11
+ return value !== null && typeof value === "object" && !Array.isArray(value);
12
+ }
13
+ function agentIdsOf(provenance) {
14
+ const ids = Array.isArray(provenance?.definedByAgentIds)
15
+ ? provenance.definedByAgentIds.filter((id) => typeof id === "string" && id.length > 0)
16
+ : [];
17
+ if (ids.length === 0 && typeof provenance?.definedByAgentId === "string")
18
+ ids.push(provenance.definedByAgentId);
19
+ return ids;
20
+ }
21
+ /** Resolution for one listing entry. Bodies are included only when `withBodies`. */
22
+ export function resolutionOf(item, rule, withBodies) {
23
+ const provenance = asRecord(item?.provenance);
24
+ const conflict = item?.resolution === "conflict";
25
+ const overridden = asRecord(provenance?.overridden);
26
+ const alternates = conflict
27
+ ? (Array.isArray(item?.alternates) ? item.alternates : [])
28
+ .map((alt) => asRecord(alt))
29
+ .filter((alt) => alt !== null && typeof alt.definedByAgentId === "string")
30
+ .map((alt) => ({
31
+ definedByAgentId: alt.definedByAgentId,
32
+ fingerprint: fingerprintId(alt.fingerprint),
33
+ ...(withBodies && isRecord(alt.definition) ? { definition: alt.definition } : {}),
34
+ }))
35
+ : [];
36
+ const definedByAgentIds = agentIdsOf(provenance);
37
+ return {
38
+ rule: conflict ? "listing-fallback" : rule,
39
+ outcome: conflict ? "conflict" : "selected",
40
+ definedByAgentId: conflict ? null : typeof provenance?.definedByAgentId === "string" ? provenance.definedByAgentId : null,
41
+ definedByAgentIds: definedByAgentIds.length > 0 ? definedByAgentIds : alternates.map((alt) => alt.definedByAgentId),
42
+ fingerprint: conflict ? null : fingerprintId(provenance?.fingerprint),
43
+ overridden: overridden && typeof overridden.definedByAgentId === "string"
44
+ ? {
45
+ definedByAgentId: overridden.definedByAgentId,
46
+ fingerprint: fingerprintId(overridden.fingerprint),
47
+ ...(withBodies && isRecord(overridden.definition) ? { definition: overridden.definition } : {}),
48
+ }
49
+ : null,
50
+ alternates,
51
+ };
52
+ }
53
+ function listingRule(kinds, scope) {
54
+ const conflicted = kinds.items.some((item) => item.resolution === "conflict");
55
+ return conflicted || (scope.unresolvedAgentIds?.length ?? 0) > 0 ? "listing-fallback" : "joint";
56
+ }
57
+ function objectFields(definition) {
58
+ const raws = Array.isArray(definition.fields) ? definition.fields : [];
59
+ const out = [];
60
+ for (const raw of raws) {
61
+ const field = fieldOf(raw);
62
+ if (!field || !isRecord(raw))
63
+ continue;
64
+ const declaredRefers = isRecord(raw.refersTo) && typeof raw.refersTo.objectType === "string";
65
+ out.push({
66
+ path: field.path,
67
+ valueType: field.valueType,
68
+ ...(field.contentType ? { contentType: field.contentType } : {}),
69
+ ...(field.enum ? { enum: field.enum } : {}),
70
+ ...(typeof raw.mixed === "boolean" ? { mixed: raw.mixed } : {}),
71
+ ...(field.refersTo ? { refersTo: field.refersTo, refersToSource: declaredRefers ? "pack" : "value-shapes" } : {}),
72
+ ...(field.shapes ? { shapes: field.shapes } : {}),
73
+ });
74
+ }
75
+ return out;
76
+ }
77
+ function functionEntries(view, definedByAgentId) {
78
+ return (view.functions ?? []).map((fn) => ({
79
+ ...fn,
80
+ description: fn.question,
81
+ objectType: view.id,
82
+ input: null,
83
+ inputStatus: "unspecified",
84
+ output: null,
85
+ outputStatus: "unspecified",
86
+ definedByAgentId,
87
+ }));
88
+ }
89
+ /** Fields are listed once on the object type, each with its `contentType`. */
90
+ function contentTypeEntry(view, objectType) {
91
+ const { fields, ...rest } = view;
92
+ return {
93
+ ...rest,
94
+ objectType,
95
+ declared: true,
96
+ discriminator: view.discriminator ?? null,
97
+ fieldCount: fields.length,
98
+ };
99
+ }
100
+ function notCounted(reason, retryable) {
101
+ return unavailable(reason, retryable);
102
+ }
103
+ function rowsFor(censusEntry, contentType, counts) {
104
+ if (!counts.requested)
105
+ return undefined;
106
+ if (contentType === "relationships")
107
+ return notCounted("NOT_COUNTED", false);
108
+ if (!counts.census)
109
+ return notCounted(counts.error ?? "CENSUS_UNAVAILABLE", true);
110
+ const hit = censusEntry?.contentTypes.find((ct) => ct.contentType === contentType);
111
+ return hit ? hit.rows : notCounted("NOT_IN_CENSUS", false);
112
+ }
113
+ function directoryFor(censusEntry, key, counts) {
114
+ if (!counts.requested)
115
+ return undefined;
116
+ if (!counts.census)
117
+ return notCounted(counts.error ?? "CENSUS_UNAVAILABLE", true);
118
+ return censusEntry ? censusEntry[key] : notCounted("NOT_IN_CENSUS", false);
119
+ }
120
+ export function includeOf(raw) {
121
+ const requested = csv(raw);
122
+ if (!requested)
123
+ return new Set(SECTIONS);
124
+ for (const item of requested) {
125
+ if (!SECTIONS.includes(item)) {
126
+ throw new ApiError(400, "VALIDATION", `include must list ${SECTIONS.join(", ")}`);
127
+ }
128
+ }
129
+ return new Set(requested);
130
+ }
131
+ function isExactZero(count) {
132
+ return count?.status === "exact" && count.value === 0;
133
+ }
134
+ export async function buildMapping(deps, scope, include, options = {}) {
135
+ const censusPromise = include.has("counts") ? deps.census.get(scope, { refresh: options.refresh }) : null;
136
+ censusPromise?.catch(() => undefined);
137
+ const kinds = await deps.loadObjectTypeKinds(deps.upstream, scope);
138
+ const catalog = kinds.objectTypes;
139
+ const rule = listingRule(kinds, scope);
140
+ const gapBase = { orgId: scope.orgId, agentIds: scope.agentIds };
141
+ const gaps = [];
142
+ const [definitionsResult, sourcesResult, counts] = await Promise.all([
143
+ include.has("relationships") ? loadDefinitions(deps.upstream, scope, catalog) : Promise.resolve(null),
144
+ include.has("sources") ? loadSources(deps.upstream, scope, catalog) : Promise.resolve(null),
145
+ (async () => {
146
+ if (!censusPromise)
147
+ return { census: null, error: null, requested: false };
148
+ try {
149
+ return { census: await censusPromise, error: null, requested: true };
150
+ }
151
+ catch (err) {
152
+ const code = err instanceof ApiError ? err.code : "CENSUS_UNAVAILABLE";
153
+ return { census: null, error: code, requested: true };
154
+ }
155
+ })(),
156
+ ]);
157
+ if (counts.requested && !counts.census) {
158
+ gaps.push({ ...gapBase, code: "SECTION_UNAVAILABLE", category: "unavailable", section: "counts", message: `census could not be read (${counts.error})`, retryable: true });
159
+ }
160
+ let definitions = [];
161
+ if (definitionsResult) {
162
+ gaps.push(...definitionsResult.gaps);
163
+ definitions = definitionsResult.definitions;
164
+ if (include.has("counts")) {
165
+ const linkCounts = await loadLinkCounts(deps.upstream, scope, definitions.map((definition) => definition.id));
166
+ definitions = withLinkCounts(definitions, linkCounts);
167
+ if (linkCounts.error) {
168
+ gaps.push({ ...gapBase, code: "COUNT_UNAVAILABLE", category: "unavailable", section: "counts", message: `link counts could not be read (${linkCounts.error})`, retryable: true });
169
+ }
170
+ }
171
+ }
172
+ const unresolved = scope.unresolvedAgentIds ?? [];
173
+ for (const agentId of unresolved) {
174
+ gaps.push({ orgId: scope.orgId, agentIds: [agentId], code: "RESOLUTION_FAILED", category: "resolution-failure", message: `agent ${agentId} did not resolve`, retryable: false });
175
+ }
176
+ const fingerprints = { ...(definitionsResult?.fingerprints ?? {}) };
177
+ const coverage = { declared: 0, populated: 0, empty: 0, unavailable: 0, estimated: 0 };
178
+ const objectTypes = [];
179
+ for (const view of catalog) {
180
+ const item = kinds.items.find((entry) => entry.id === view.id) ?? null;
181
+ const resolution = resolutionOf(item, rule, false);
182
+ if (resolution.fingerprint)
183
+ fingerprints[`object-types:${view.id}`] = resolution.fingerprint;
184
+ const censusEntry = counts.census?.objectTypes.find((entry) => entry.objectType === view.id);
185
+ const conflict = resolution.outcome === "conflict";
186
+ if (conflict) {
187
+ gaps.push({ ...gapBase, agentIds: resolution.definedByAgentIds, code: "RESOLUTION_CONFLICT", category: "resolution-failure", objectType: view.id, message: `agents ${resolution.definedByAgentIds.join(", ")} define ${view.id} differently`, retryable: false });
188
+ }
189
+ const definition = asRecord(item?.definition) ?? {};
190
+ const contentTypes = view.contentTypes
191
+ .map((ct) => {
192
+ const rows = rowsFor(censusEntry, ct.id, counts);
193
+ if (rows && ct.id !== "relationships") {
194
+ coverage.declared += 1;
195
+ if (rows.status === "exact") {
196
+ if (rows.method === "estimate")
197
+ coverage.estimated += 1;
198
+ else if (rows.value > 0)
199
+ coverage.populated += 1;
200
+ else
201
+ coverage.empty += 1;
202
+ }
203
+ else {
204
+ coverage.unavailable += 1;
205
+ if (counts.census) {
206
+ gaps.push({ ...gapBase, code: "COUNT_UNAVAILABLE", category: "unavailable", objectType: view.id, contentType: ct.id, message: `rows could not be counted (${rows.reason})`, ...(rows.observedAt ? { observedAt: rows.observedAt } : {}), retryable: rows.retryable, evidence: { method: rows.method ?? "live-content", upstream: rows.reason } });
207
+ }
208
+ }
209
+ }
210
+ return { ...contentTypeEntry(ct, view.id), ...(rows ? { rows } : {}) };
211
+ })
212
+ .filter((ct) => !options.onlyPresent || !isExactZero(ct.rows));
213
+ const records = directoryFor(censusEntry, "records", counts);
214
+ const recordsWithoutContent = directoryFor(censusEntry, "recordsWithoutContent", counts);
215
+ if (recordsWithoutContent?.status === "exact" && recordsWithoutContent.value > 0) {
216
+ gaps.push({ ...gapBase, code: "DIRECTORY_ONLY", category: "directory-only", objectType: view.id, message: `${recordsWithoutContent.value} directory records have no content`, retryable: false });
217
+ }
218
+ if (options.onlyPresent && isExactZero(records) && contentTypes.length === 0)
219
+ continue;
220
+ const pairs = include.has("relationships")
221
+ ? definitions.flatMap((definition) => definition.objectTypes
222
+ .filter((pair) => pair.fromObjectType === view.id || pair.toObjectType === view.id)
223
+ .map((pair) => pairEntry(definition, pair)))
224
+ : undefined;
225
+ objectTypes.push({
226
+ id: view.id,
227
+ name: view.name,
228
+ description: view.description ?? null,
229
+ descriptionStatus: view.descriptionStatus ?? "unspecified",
230
+ dataCategory: conflict ? (censusEntry?.dataCategory ?? null) : view.dataCategory || null,
231
+ ...(Array.isArray(definition.abstractTypes) ? { abstractTypes: definition.abstractTypes } : {}),
232
+ ...(Array.isArray(definition.implements) ? { implements: definition.implements } : {}),
233
+ resolution,
234
+ declared: true,
235
+ leadingContentType: view.leadingContentType,
236
+ ...(records ? { records } : {}),
237
+ ...(recordsWithoutContent ? { recordsWithoutContent } : {}),
238
+ contentTypes,
239
+ fields: conflict ? [] : objectFields(definition),
240
+ ...(include.has("functions") ? { functions: conflict ? [] : functionEntries(view, resolution.definedByAgentId) } : {}),
241
+ ...(pairs ? { relationships: pairs } : {}),
242
+ });
243
+ }
244
+ let sources;
245
+ if (sourcesResult) {
246
+ const { runsById: _runs, ...document } = sourcesResult;
247
+ sources = document;
248
+ gaps.push(...document.gaps);
249
+ }
250
+ const allFailed = scope.agentIds.length > 0 && unresolved.length === scope.agentIds.length;
251
+ if (allFailed) {
252
+ gaps.push({ ...gapBase, code: "RESOLUTION_FAILED", category: "resolution-failure", message: "no selected agent resolved", retryable: false });
253
+ }
254
+ const failing = gaps.some((gap) => gap.category === "unavailable" || gap.category === "resolution-failure" || gap.category === "inaccessible");
255
+ const status = allFailed ? "unavailable" : failing ? "partial" : "complete";
256
+ const countsAt = counts.census?.observedAt ?? null;
257
+ const body = {
258
+ scope: scopeBody(scope),
259
+ status,
260
+ observations: {
261
+ metadataAt: kinds.readAt,
262
+ countsAt,
263
+ consistentSnapshot: false,
264
+ },
265
+ metadata: { version: "fingerprint-set", fingerprints },
266
+ agents: scope.agentIds.map((id) => ({
267
+ id,
268
+ resolution: { ok: !unresolved.includes(id) },
269
+ })),
270
+ objectTypes: allFailed ? [] : objectTypes,
271
+ ...(include.has("relationships") ? { relationshipDefinitions: definitions } : {}),
272
+ ...(sources ? { sources } : {}),
273
+ ...(include.has("counts")
274
+ ? { coverage: { contentPairs: coverage, ratio: null, excludedFromAnyRatio: ["unavailable", "estimated"] } }
275
+ : {}),
276
+ gaps,
277
+ };
278
+ return { body, tag: { fingerprints, countsAt, sourcesAt: sources?.census.observedAt ?? null, include: [...include].sort(), onlyPresent: Boolean(options.onlyPresent), scope: scope.agentIds } };
279
+ }
280
+ function pairEntry(definition, pair) {
281
+ return {
282
+ definitionId: definition.id,
283
+ name: definition.name,
284
+ ...(definition.meaning ? { meaning: definition.meaning } : {}),
285
+ ...(definition.directionality ? { directionality: definition.directionality } : {}),
286
+ direction: "out",
287
+ ...(definition.from ? { from: definition.from } : {}),
288
+ ...(definition.to ? { to: definition.to } : {}),
289
+ fromObjectType: pair.fromObjectType,
290
+ toObjectType: pair.toObjectType,
291
+ ...(pair.fromPath ? { fromPath: pair.fromPath } : {}),
292
+ ...(pair.toPath ? { toPath: pair.toPath } : {}),
293
+ inView: pair.inView,
294
+ cardinalityStatus: definition.cardinalityStatus,
295
+ ...(pair.links ? { links: pair.links } : {}),
296
+ };
297
+ }
298
+ export function registerMappingRoutes(app, deps) {
299
+ app.get("/api/v1/mapping", async (req, reply) => {
300
+ const scope = await deps.scopeFor(req);
301
+ const query = queryOf(req);
302
+ const { body, tag } = await buildMapping(deps, scope, includeOf(query.include), {
303
+ onlyPresent: boolQuery(query.onlyPresent, "onlyPresent"),
304
+ refresh: boolQuery(query.refresh, "refresh"),
305
+ });
306
+ return sendWithEtag(req, reply, body, tag);
307
+ });
308
+ app.get("/api/v1/census", async (req, reply) => {
309
+ const scope = await deps.scopeFor(req);
310
+ const query = queryOf(req);
311
+ const [census, catalog] = await Promise.all([
312
+ deps.census.get(scope, { refresh: boolQuery(query.refresh, "refresh") }),
313
+ deps.loadCatalog(deps.upstream, scope),
314
+ ]);
315
+ const definitions = await loadDefinitions(deps.upstream, scope, catalog);
316
+ const linkCounts = await loadLinkCounts(deps.upstream, scope, definitions.definitions.map((definition) => definition.id));
317
+ const gapBase = { orgId: scope.orgId, agentIds: scope.agentIds };
318
+ const gaps = [];
319
+ const objectTypes = census.objectTypes.map((entry) => {
320
+ if (entry.resolution === "conflict") {
321
+ gaps.push({ ...gapBase, code: "RESOLUTION_CONFLICT", category: "resolution-failure", objectType: entry.objectType, message: "content types are not counted while the selected agents define this object type differently", retryable: false });
322
+ }
323
+ for (const ct of entry.contentTypes) {
324
+ if (ct.rows.status === "unavailable") {
325
+ gaps.push({ ...gapBase, code: "COUNT_UNAVAILABLE", category: "unavailable", objectType: entry.objectType, contentType: ct.contentType, message: `rows could not be counted (${ct.rows.reason})`, retryable: ct.rows.retryable });
326
+ }
327
+ }
328
+ return {
329
+ objectType: entry.objectType,
330
+ dataCategory: entry.dataCategory,
331
+ ...(entry.resolution ? { resolution: entry.resolution, contentTypesStatus: { status: "unavailable", reason: "RESOLUTION_CONFLICT" } } : {}),
332
+ records: entry.records,
333
+ recordsWithoutContent: entry.recordsWithoutContent,
334
+ contentTypes: entry.contentTypes,
335
+ };
336
+ });
337
+ for (const agentId of census.unresolvedAgentIds) {
338
+ gaps.push({ orgId: scope.orgId, agentIds: [agentId], code: "RESOLUTION_FAILED", category: "resolution-failure", message: `agent ${agentId} did not resolve`, retryable: false });
339
+ }
340
+ if (linkCounts.error) {
341
+ gaps.push({ ...gapBase, code: "COUNT_UNAVAILABLE", category: "unavailable", section: "counts", message: `link counts could not be read (${linkCounts.error})`, retryable: true });
342
+ }
343
+ const counted = withLinkCounts(definitions.definitions, linkCounts);
344
+ const status = gaps.some((gap) => gap.category === "unavailable" || gap.category === "resolution-failure") ? "partial" : "complete";
345
+ const body = {
346
+ scope: scopeBody(scope),
347
+ status,
348
+ observedAt: census.observedAt,
349
+ snapshot: "sequential",
350
+ objectTypes,
351
+ relationships: counted.map((definition) => ({
352
+ definitionId: definition.id,
353
+ ...(definition.links ? { links: definition.links } : {}),
354
+ pairs: definition.objectTypes.map((pair) => ({
355
+ fromObjectType: pair.fromObjectType,
356
+ toObjectType: pair.toObjectType,
357
+ ...(pair.links ? { links: pair.links } : {}),
358
+ })),
359
+ })),
360
+ gaps,
361
+ };
362
+ return sendWithEtag(req, reply, body, { observedAt: census.observedAt, links: linkCounts.observedAt, agents: scope.agentIds });
363
+ });
364
+ app.get("/api/v1/object-types/:objectType/definitions", async (req) => {
365
+ const scope = await deps.scopeFor(req);
366
+ const { objectType } = req.params;
367
+ const kinds = await deps.loadObjectTypeKinds(deps.upstream, scope);
368
+ const item = kinds.items.find((entry) => entry.id === objectType);
369
+ if (!item)
370
+ throw new ApiError(404, "READ_NOT_FOUND", `Unknown object type ${objectType}`);
371
+ const resolution = resolutionOf(item, listingRule(kinds, scope), true);
372
+ return {
373
+ scope: scopeBody(scope),
374
+ objectType,
375
+ resolution,
376
+ definition: resolution.outcome === "selected" && isRecord(item.definition) ? item.definition : null,
377
+ };
378
+ });
379
+ }
380
+ //# sourceMappingURL=mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/v1/mapping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ export type PlanningTarget = {
2
+ kind: "object-type";
3
+ objectType: string;
4
+ } | {
5
+ kind: "content-type";
6
+ objectType: string;
7
+ contentType: string;
8
+ } | {
9
+ kind: "relationship-pair";
10
+ definitionId: string;
11
+ fromObjectType: string;
12
+ toObjectType: string;
13
+ };
14
+ export type StoredPlanningItem = {
15
+ id: string;
16
+ orgId: string;
17
+ title: string;
18
+ outcome: string;
19
+ target: PlanningTarget;
20
+ category: string;
21
+ priority: string;
22
+ assigneeId: string | null;
23
+ stage: string;
24
+ archived: boolean;
25
+ revision: number;
26
+ createdBy: string;
27
+ createdAt: string;
28
+ updatedBy: string;
29
+ updatedAt: string;
30
+ evidence: unknown;
31
+ clientKey?: string;
32
+ };
33
+ export type PlanningFilter = {
34
+ stage?: string;
35
+ priority?: string;
36
+ /** `null` filters unassigned items. */
37
+ assigneeId?: string | null;
38
+ objectType?: string;
39
+ contentType?: string;
40
+ definitionId?: string;
41
+ archived: boolean;
42
+ };
43
+ export type PlanningChanges = Partial<Pick<StoredPlanningItem, "title" | "outcome" | "category" | "priority" | "assigneeId" | "stage" | "archived">>;
44
+ export type UpdateResult = {
45
+ ok: true;
46
+ item: StoredPlanningItem;
47
+ } | {
48
+ ok: false;
49
+ current: StoredPlanningItem | null;
50
+ };
51
+ export type PlanningStore = {
52
+ list(orgId: string, filter: PlanningFilter, page: {
53
+ limit: number;
54
+ after?: string;
55
+ }): Promise<{
56
+ items: StoredPlanningItem[];
57
+ next?: string;
58
+ }>;
59
+ get(orgId: string, id: string): Promise<StoredPlanningItem | null>;
60
+ /** Inserts, or returns the item that already holds `clientKey` with `created: false`. */
61
+ insert(orgId: string, item: StoredPlanningItem): Promise<{
62
+ item: StoredPlanningItem;
63
+ created: boolean;
64
+ }>;
65
+ /** Applies `changes` when the stored revision is `expectedRevision` (any revision when `null`). */
66
+ update(orgId: string, id: string, expectedRevision: number | null, changes: PlanningChanges, actor: string): Promise<UpdateResult>;
67
+ };
68
+ export declare function newPlanningId(): string;
69
+ export declare function planningDatabaseName(orgId: string): string;
70
+ /** Items in process memory. Tests and single-process demos. */
71
+ export declare function createMemoryPlanningStore(): PlanningStore;
72
+ /** Items in collection `planning_items` of `{orgId}-memorix-assistants`. */
73
+ export declare function createMongoPlanningStore(uri: string): PlanningStore;
74
+ //# sourceMappingURL=planning-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning-store.d.ts","sourceRoot":"","sources":["../../src/v1/planning-store.ts"],"names":[],"mappings":"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"}