@x12i/memorix-client-api 0.18.0 → 0.20.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 (112) 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 +285 -61
  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 +63 -0
  56. package/dist/v1/census.d.ts.map +1 -0
  57. package/dist/v1/census.js +154 -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 +323 -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/directory.d.ts +26 -0
  68. package/dist/v1/directory.d.ts.map +1 -0
  69. package/dist/v1/directory.js +89 -0
  70. package/dist/v1/directory.js.map +1 -0
  71. package/dist/v1/discovery.d.ts +24 -0
  72. package/dist/v1/discovery.d.ts.map +1 -0
  73. package/dist/v1/discovery.js +166 -0
  74. package/dist/v1/discovery.js.map +1 -0
  75. package/dist/v1/gaps.d.ts +18 -0
  76. package/dist/v1/gaps.d.ts.map +1 -0
  77. package/dist/v1/gaps.js +2 -0
  78. package/dist/v1/gaps.js.map +1 -0
  79. package/dist/v1/http.d.ts +18 -0
  80. package/dist/v1/http.d.ts.map +1 -0
  81. package/dist/v1/http.js +105 -0
  82. package/dist/v1/http.js.map +1 -0
  83. package/dist/v1/mapping.d.ts +161 -0
  84. package/dist/v1/mapping.d.ts.map +1 -0
  85. package/dist/v1/mapping.js +402 -0
  86. package/dist/v1/mapping.js.map +1 -0
  87. package/dist/v1/planning-store.d.ts +74 -0
  88. package/dist/v1/planning-store.d.ts.map +1 -0
  89. package/dist/v1/planning-store.js +192 -0
  90. package/dist/v1/planning-store.js.map +1 -0
  91. package/dist/v1/planning.d.ts +5 -0
  92. package/dist/v1/planning.d.ts.map +1 -0
  93. package/dist/v1/planning.js +297 -0
  94. package/dist/v1/planning.js.map +1 -0
  95. package/dist/v1/records.d.ts +18 -0
  96. package/dist/v1/records.d.ts.map +1 -0
  97. package/dist/v1/records.js +42 -0
  98. package/dist/v1/records.js.map +1 -0
  99. package/dist/v1/relationships.d.ts +72 -0
  100. package/dist/v1/relationships.d.ts.map +1 -0
  101. package/dist/v1/relationships.js +436 -0
  102. package/dist/v1/relationships.js.map +1 -0
  103. package/dist/v1/routes.d.ts +5 -0
  104. package/dist/v1/routes.d.ts.map +1 -0
  105. package/dist/v1/routes.js +16 -0
  106. package/dist/v1/routes.js.map +1 -0
  107. package/dist/v1/sources.d.ts +62 -0
  108. package/dist/v1/sources.d.ts.map +1 -0
  109. package/dist/v1/sources.js +218 -0
  110. package/dist/v1/sources.js.map +1 -0
  111. package/openapi/openapi.json +3616 -480
  112. package/package.json +74 -74
@@ -0,0 +1,161 @@
1
+ import type { FastifyInstance } from "fastify";
2
+ import { type ClientScope } from "../scope.js";
3
+ import { type CountView } from "./census.js";
4
+ import type { V1Deps } from "./context.js";
5
+ import type { Gap } from "./gaps.js";
6
+ import { type DefinitionEntry } from "./relationships.js";
7
+ import { type SourcesDocument } from "./sources.js";
8
+ declare const SECTIONS: readonly ["counts", "relationships", "functions", "sources"];
9
+ type Section = (typeof SECTIONS)[number];
10
+ export type Resolution = {
11
+ rule: "joint" | "listing-fallback";
12
+ outcome: "selected" | "conflict";
13
+ definedByAgentId: string | null;
14
+ definedByAgentIds: string[];
15
+ fingerprint: string | null;
16
+ overridden: {
17
+ definedByAgentId: string;
18
+ fingerprint: string | null;
19
+ definition?: unknown;
20
+ } | null;
21
+ alternates: Array<{
22
+ definedByAgentId: string;
23
+ fingerprint: string | null;
24
+ definition?: unknown;
25
+ }>;
26
+ };
27
+ /** Resolution for one listing entry. Bodies are included only when `withBodies`. */
28
+ export declare function resolutionOf(item: Record<string, unknown> | null, rule: Resolution["rule"], withBodies: boolean): Resolution;
29
+ export type MappingInclude = Set<Section>;
30
+ export declare function includeOf(raw: unknown): MappingInclude;
31
+ export declare function buildMapping(deps: V1Deps, scope: ClientScope, include: MappingInclude, options?: {
32
+ onlyPresent?: boolean;
33
+ refresh?: boolean;
34
+ }): Promise<{
35
+ body: {
36
+ gaps: Gap[];
37
+ coverage?: {
38
+ contentPairs: {
39
+ declared: number;
40
+ populated: number;
41
+ empty: number;
42
+ unavailable: number;
43
+ estimated: number;
44
+ };
45
+ ratio: null;
46
+ excludedFromAnyRatio: string[];
47
+ } | undefined;
48
+ sources?: Omit<SourcesDocument, never> | undefined;
49
+ relationshipDefinitions?: DefinitionEntry[] | undefined;
50
+ scope: import("../scope.js").ScopeEcho;
51
+ status: string;
52
+ observations: {
53
+ metadataAt: string;
54
+ countsAt: string | null;
55
+ consistentSnapshot: boolean;
56
+ };
57
+ metadata: {
58
+ version: string;
59
+ fingerprints: Record<string, string>;
60
+ };
61
+ agents: {
62
+ id: string;
63
+ resolution: {
64
+ ok: boolean;
65
+ };
66
+ }[];
67
+ objectTypes: {
68
+ relationships?: {
69
+ links?: CountView | undefined;
70
+ inView: boolean;
71
+ cardinalityStatus: "declared" | "unspecified" | "partial";
72
+ toPath?: string | undefined;
73
+ fromPath?: string | undefined;
74
+ fromObjectType: string;
75
+ toObjectType: string;
76
+ to?: import("./relationships.js").Endpoint | undefined;
77
+ from?: import("./relationships.js").Endpoint | undefined;
78
+ direction: "out";
79
+ directionality?: "directed" | "undirected" | undefined;
80
+ meaning?: string | undefined;
81
+ definitionId: string;
82
+ name: string;
83
+ }[] | undefined;
84
+ functions?: {
85
+ description: string;
86
+ objectType: string;
87
+ input: null;
88
+ inputStatus: "unspecified";
89
+ output: null;
90
+ outputStatus: "unspecified";
91
+ definedByAgentId: string | null;
92
+ id: string;
93
+ question: string;
94
+ page: string;
95
+ composes: boolean;
96
+ pageStory: boolean;
97
+ reads: import("../catalog.js").FunctionReadView[];
98
+ template?: string;
99
+ kind?: "spine" | "threads";
100
+ }[] | undefined;
101
+ fields: Record<string, unknown>[];
102
+ alternateContentTypes?: {
103
+ rows: CountView;
104
+ dataCategory?: string | undefined;
105
+ contentType: string;
106
+ definedByAgentIds: string[];
107
+ }[] | undefined;
108
+ contentTypes: {
109
+ rows?: CountView | undefined;
110
+ objectType: string;
111
+ declared: boolean;
112
+ discriminator: {
113
+ path: string;
114
+ required?: boolean;
115
+ defaultValue?: string;
116
+ } | null;
117
+ fieldCount: number;
118
+ id: string;
119
+ name?: string;
120
+ nameSource?: "presentation" | "id";
121
+ description?: string | null;
122
+ descriptionStatus?: "declared" | "unspecified";
123
+ schema?: Record<string, unknown> | null;
124
+ schemaStatus?: "declared" | "unspecified";
125
+ required: boolean;
126
+ leading: boolean;
127
+ described: boolean;
128
+ derived: boolean;
129
+ writer?: string | Record<string, string>;
130
+ privateMetadata?: string[];
131
+ deletion?: import("../catalog.js").ContentDeletionView;
132
+ presentation?: import("../catalog.js").PresentationView;
133
+ origin?: import("../catalog.js").OriginView;
134
+ fieldMappings?: import("../catalog.js").FieldMappingProfileView[];
135
+ }[];
136
+ recordsWithoutContent?: CountView | undefined;
137
+ records?: CountView | undefined;
138
+ resolution: Resolution;
139
+ declared: boolean;
140
+ leadingContentType: string | null;
141
+ implements?: any[] | undefined;
142
+ abstractTypes?: any[] | undefined;
143
+ id: string;
144
+ name: string;
145
+ description: string | null;
146
+ descriptionStatus: "declared" | "unspecified";
147
+ dataCategory: string | null;
148
+ }[];
149
+ };
150
+ tag: {
151
+ fingerprints: Record<string, string>;
152
+ countsAt: string | null;
153
+ sourcesAt: string | null;
154
+ include: ("relationships" | "functions" | "sources" | "counts")[];
155
+ onlyPresent: boolean;
156
+ scope: string[];
157
+ };
158
+ }>;
159
+ export declare function registerMappingRoutes(app: FastifyInstance, deps: V1Deps): void;
160
+ export {};
161
+ //# sourceMappingURL=mapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../src/v1/mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAA2D,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACtG,OAAO,KAAK,EAAgB,MAAM,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAmD,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC3G,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAEjE,QAAA,MAAM,QAAQ,8DAA+D,CAAC;AAC9E,KAAK,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAAC;IACnC,OAAO,EAAE,UAAU,GAAG,UAAU,CAAC;IACjC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAClG,UAAU,EAAE,KAAK,CAAC;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACnG,CAAC;AAcF,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,GAAG,UAAU,CA+B5H;AAwED,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAE1C,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAStD;AAMD,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6J3D;AAqBD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CA+F9E"}
@@ -0,0 +1,402 @@
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
+ ...(conflict && counts.requested
240
+ ? {
241
+ alternateContentTypes: (censusEntry?.contentTypes ?? []).map((ct) => ({
242
+ contentType: ct.contentType,
243
+ definedByAgentIds: ct.definedByAgentIds ?? [],
244
+ ...(ct.dataCategory ? { dataCategory: ct.dataCategory } : {}),
245
+ rows: ct.rows,
246
+ })),
247
+ }
248
+ : {}),
249
+ fields: conflict ? [] : objectFields(definition),
250
+ ...(include.has("functions") ? { functions: conflict ? [] : functionEntries(view, resolution.definedByAgentId) } : {}),
251
+ ...(pairs ? { relationships: pairs } : {}),
252
+ });
253
+ }
254
+ let sources;
255
+ if (sourcesResult) {
256
+ const { runsById: _runs, ...document } = sourcesResult;
257
+ sources = document;
258
+ gaps.push(...document.gaps);
259
+ }
260
+ const allFailed = scope.agentIds.length > 0 && unresolved.length === scope.agentIds.length;
261
+ if (allFailed) {
262
+ gaps.push({ ...gapBase, code: "RESOLUTION_FAILED", category: "resolution-failure", message: "no selected agent resolved", retryable: false });
263
+ }
264
+ const failing = gaps.some((gap) => gap.category === "unavailable" || gap.category === "resolution-failure" || gap.category === "inaccessible");
265
+ const status = allFailed ? "unavailable" : failing ? "partial" : "complete";
266
+ const countsAt = counts.census?.observedAt ?? null;
267
+ const body = {
268
+ scope: scopeBody(scope),
269
+ status,
270
+ observations: {
271
+ metadataAt: kinds.readAt,
272
+ countsAt,
273
+ consistentSnapshot: false,
274
+ },
275
+ metadata: { version: "fingerprint-set", fingerprints },
276
+ agents: scope.agentIds.map((id) => ({
277
+ id,
278
+ resolution: { ok: !unresolved.includes(id) },
279
+ })),
280
+ objectTypes: allFailed ? [] : objectTypes,
281
+ ...(include.has("relationships") ? { relationshipDefinitions: definitions } : {}),
282
+ ...(sources ? { sources } : {}),
283
+ ...(include.has("counts")
284
+ ? { coverage: { contentPairs: coverage, ratio: null, excludedFromAnyRatio: ["unavailable", "estimated"] } }
285
+ : {}),
286
+ gaps,
287
+ };
288
+ return { body, tag: { fingerprints, countsAt, sourcesAt: sources?.census.observedAt ?? null, include: [...include].sort(), onlyPresent: Boolean(options.onlyPresent), scope: scope.agentIds } };
289
+ }
290
+ function pairEntry(definition, pair) {
291
+ return {
292
+ definitionId: definition.id,
293
+ name: definition.name,
294
+ ...(definition.meaning ? { meaning: definition.meaning } : {}),
295
+ ...(definition.directionality ? { directionality: definition.directionality } : {}),
296
+ direction: "out",
297
+ ...(definition.from ? { from: definition.from } : {}),
298
+ ...(definition.to ? { to: definition.to } : {}),
299
+ fromObjectType: pair.fromObjectType,
300
+ toObjectType: pair.toObjectType,
301
+ ...(pair.fromPath ? { fromPath: pair.fromPath } : {}),
302
+ ...(pair.toPath ? { toPath: pair.toPath } : {}),
303
+ inView: pair.inView,
304
+ cardinalityStatus: definition.cardinalityStatus,
305
+ ...(pair.links ? { links: pair.links } : {}),
306
+ };
307
+ }
308
+ export function registerMappingRoutes(app, deps) {
309
+ app.get("/api/v1/mapping", async (req, reply) => {
310
+ const scope = await deps.scopeFor(req);
311
+ const query = queryOf(req);
312
+ const { body, tag } = await buildMapping(deps, scope, includeOf(query.include), {
313
+ onlyPresent: boolQuery(query.onlyPresent, "onlyPresent"),
314
+ refresh: boolQuery(query.refresh, "refresh"),
315
+ });
316
+ return sendWithEtag(req, reply, body, tag);
317
+ });
318
+ app.get("/api/v1/census", async (req, reply) => {
319
+ const scope = await deps.scopeFor(req);
320
+ const query = queryOf(req);
321
+ const [census, catalog] = await Promise.all([
322
+ deps.census.get(scope, { refresh: boolQuery(query.refresh, "refresh") }),
323
+ deps.loadCatalog(deps.upstream, scope),
324
+ ]);
325
+ const definitions = await loadDefinitions(deps.upstream, scope, catalog);
326
+ const linkCounts = await loadLinkCounts(deps.upstream, scope, definitions.definitions.map((definition) => definition.id));
327
+ const gapBase = { orgId: scope.orgId, agentIds: scope.agentIds };
328
+ const gaps = [];
329
+ const objectTypes = census.objectTypes.map((entry) => {
330
+ if (entry.resolution === "conflict") {
331
+ gaps.push({
332
+ ...gapBase,
333
+ code: "RESOLUTION_CONFLICT",
334
+ category: "resolution-failure",
335
+ objectType: entry.objectType,
336
+ message: entry.contentTypes.length > 0
337
+ ? "the selected agents define this object type differently; rows are counted for every content type either definition names"
338
+ : "content types are not counted while the selected agents define this object type differently",
339
+ retryable: false,
340
+ });
341
+ }
342
+ for (const ct of entry.contentTypes) {
343
+ if (ct.rows.status === "unavailable") {
344
+ 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 });
345
+ }
346
+ }
347
+ return {
348
+ objectType: entry.objectType,
349
+ dataCategory: entry.dataCategory,
350
+ ...(entry.resolution ? { resolution: entry.resolution } : {}),
351
+ ...(entry.resolution && entry.contentTypes.length === 0
352
+ ? { contentTypesStatus: { status: "unavailable", reason: "RESOLUTION_CONFLICT" } }
353
+ : {}),
354
+ records: entry.records,
355
+ recordsWithoutContent: entry.recordsWithoutContent,
356
+ contentTypes: entry.contentTypes,
357
+ };
358
+ });
359
+ for (const agentId of census.unresolvedAgentIds) {
360
+ gaps.push({ orgId: scope.orgId, agentIds: [agentId], code: "RESOLUTION_FAILED", category: "resolution-failure", message: `agent ${agentId} did not resolve`, retryable: false });
361
+ }
362
+ if (linkCounts.error) {
363
+ gaps.push({ ...gapBase, code: "COUNT_UNAVAILABLE", category: "unavailable", section: "counts", message: `link counts could not be read (${linkCounts.error})`, retryable: true });
364
+ }
365
+ const counted = withLinkCounts(definitions.definitions, linkCounts);
366
+ const status = gaps.some((gap) => gap.category === "unavailable" || gap.category === "resolution-failure") ? "partial" : "complete";
367
+ const body = {
368
+ scope: scopeBody(scope),
369
+ status,
370
+ observedAt: census.observedAt,
371
+ snapshot: "sequential",
372
+ objectTypes,
373
+ relationships: counted.map((definition) => ({
374
+ definitionId: definition.id,
375
+ ...(definition.links ? { links: definition.links } : {}),
376
+ pairs: definition.objectTypes.map((pair) => ({
377
+ fromObjectType: pair.fromObjectType,
378
+ toObjectType: pair.toObjectType,
379
+ ...(pair.links ? { links: pair.links } : {}),
380
+ })),
381
+ })),
382
+ gaps,
383
+ };
384
+ return sendWithEtag(req, reply, body, { observedAt: census.observedAt, links: linkCounts.observedAt, agents: scope.agentIds });
385
+ });
386
+ app.get("/api/v1/object-types/:objectType/definitions", async (req) => {
387
+ const scope = await deps.scopeFor(req);
388
+ const { objectType } = req.params;
389
+ const kinds = await deps.loadObjectTypeKinds(deps.upstream, scope);
390
+ const item = kinds.items.find((entry) => entry.id === objectType);
391
+ if (!item)
392
+ throw new ApiError(404, "READ_NOT_FOUND", `Unknown object type ${objectType}`);
393
+ const resolution = resolutionOf(item, listingRule(kinds, scope), true);
394
+ return {
395
+ scope: scopeBody(scope),
396
+ objectType,
397
+ resolution,
398
+ definition: resolution.outcome === "selected" && isRecord(item.definition) ? item.definition : null,
399
+ };
400
+ });
401
+ }
402
+ //# 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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"}