@x12i/memorix-service 0.0.0-bootstrap.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 (84) hide show
  1. package/README.md +37 -0
  2. package/dist/app.d.ts +21 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +67 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/catalog-bridge.d.ts +7 -0
  7. package/dist/catalog-bridge.d.ts.map +1 -0
  8. package/dist/catalog-bridge.js +155 -0
  9. package/dist/catalog-bridge.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +36 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/errors.d.ts +25 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +79 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/index.d.ts +7 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +7 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/isolation.d.ts +63 -0
  23. package/dist/isolation.d.ts.map +1 -0
  24. package/dist/isolation.js +175 -0
  25. package/dist/isolation.js.map +1 -0
  26. package/dist/known-packs.d.ts +5 -0
  27. package/dist/known-packs.d.ts.map +1 -0
  28. package/dist/known-packs.js +26 -0
  29. package/dist/known-packs.js.map +1 -0
  30. package/dist/mongo-metadata-store.d.ts +17 -0
  31. package/dist/mongo-metadata-store.d.ts.map +1 -0
  32. package/dist/mongo-metadata-store.js +81 -0
  33. package/dist/mongo-metadata-store.js.map +1 -0
  34. package/dist/openapi/openapi.json +6431 -0
  35. package/dist/platform.d.ts +52 -0
  36. package/dist/platform.d.ts.map +1 -0
  37. package/dist/platform.js +246 -0
  38. package/dist/platform.js.map +1 -0
  39. package/dist/relationships/operator-links.d.ts +23 -0
  40. package/dist/relationships/operator-links.d.ts.map +1 -0
  41. package/dist/relationships/operator-links.js +41 -0
  42. package/dist/relationships/operator-links.js.map +1 -0
  43. package/dist/request-scope.d.ts +7 -0
  44. package/dist/request-scope.d.ts.map +1 -0
  45. package/dist/request-scope.js +24 -0
  46. package/dist/request-scope.js.map +1 -0
  47. package/dist/routes/data.d.ts +4 -0
  48. package/dist/routes/data.d.ts.map +1 -0
  49. package/dist/routes/data.js +237 -0
  50. package/dist/routes/data.js.map +1 -0
  51. package/dist/routes/intelligence.d.ts +5 -0
  52. package/dist/routes/intelligence.d.ts.map +1 -0
  53. package/dist/routes/intelligence.js +94 -0
  54. package/dist/routes/intelligence.js.map +1 -0
  55. package/dist/routes/memory.d.ts +4 -0
  56. package/dist/routes/memory.d.ts.map +1 -0
  57. package/dist/routes/memory.js +80 -0
  58. package/dist/routes/memory.js.map +1 -0
  59. package/dist/routes/metadata.d.ts +4 -0
  60. package/dist/routes/metadata.d.ts.map +1 -0
  61. package/dist/routes/metadata.js +104 -0
  62. package/dist/routes/metadata.js.map +1 -0
  63. package/dist/routes/operations.d.ts +4 -0
  64. package/dist/routes/operations.d.ts.map +1 -0
  65. package/dist/routes/operations.js +66 -0
  66. package/dist/routes/operations.js.map +1 -0
  67. package/dist/routes/pipelines.d.ts +4 -0
  68. package/dist/routes/pipelines.d.ts.map +1 -0
  69. package/dist/routes/pipelines.js +128 -0
  70. package/dist/routes/pipelines.js.map +1 -0
  71. package/dist/routes/relationships.d.ts +4 -0
  72. package/dist/routes/relationships.d.ts.map +1 -0
  73. package/dist/routes/relationships.js +138 -0
  74. package/dist/routes/relationships.js.map +1 -0
  75. package/dist/routes/workflow.d.ts +4 -0
  76. package/dist/routes/workflow.d.ts.map +1 -0
  77. package/dist/routes/workflow.js +104 -0
  78. package/dist/routes/workflow.js.map +1 -0
  79. package/dist/scope.d.ts +19 -0
  80. package/dist/scope.d.ts.map +1 -0
  81. package/dist/scope.js +53 -0
  82. package/dist/scope.js.map +1 -0
  83. package/openapi/openapi.json +6431 -0
  84. package/package.json +65 -0
@@ -0,0 +1,237 @@
1
+ import { resolveScope } from "../request-scope.js";
2
+ import { ServiceError } from "../errors.js";
3
+ export async function registerDataRoutes(app, platform) {
4
+ app.get("/api/data/content", async (req) => {
5
+ const scope = resolveScope(req);
6
+ const q = req.query;
7
+ if (!q.objectType || !q.contentType) {
8
+ throw new ServiceError("VALIDATION", "objectType and contentType required", 400);
9
+ }
10
+ const ports = platform.portsFor(scope);
11
+ if (q.id) {
12
+ const record = await ports.reader.getContent(scope, {
13
+ objectType: q.objectType,
14
+ contentType: q.contentType,
15
+ recordId: q.id,
16
+ });
17
+ let unresolvedRelationships = [];
18
+ if (q.expandRelationships === "true") {
19
+ const rels = await ports.reader.getRelationships(scope, q.id, {
20
+ include: true,
21
+ expandContentTypes: ["snapshots"],
22
+ });
23
+ unresolvedRelationships = rels.items.filter((i) => i.targetStatus === "unresolved");
24
+ }
25
+ return {
26
+ scope,
27
+ addressing: {
28
+ orgId: scope.orgId,
29
+ objectType: q.objectType,
30
+ contentType: q.contentType,
31
+ id: q.id,
32
+ },
33
+ record,
34
+ currentRevision: record.revision,
35
+ unresolvedRelationships,
36
+ };
37
+ }
38
+ const listed = await ports.reader.listContent(scope, {
39
+ objectType: q.objectType,
40
+ contentType: q.contentType,
41
+ limit: Math.min(Number(q.limit ?? 50), 200),
42
+ cursor: q.cursor,
43
+ });
44
+ return {
45
+ scope,
46
+ addressing: {
47
+ orgId: scope.orgId,
48
+ objectType: q.objectType,
49
+ contentType: q.contentType,
50
+ id: null,
51
+ },
52
+ records: listed.items,
53
+ pageInfo: { nextCursor: listed.nextCursor ?? null },
54
+ unresolvedRelationships: [],
55
+ currentRevision: null,
56
+ };
57
+ });
58
+ app.get("/api/data/abstract", async (req) => {
59
+ const scope = resolveScope(req);
60
+ const q = req.query;
61
+ if (!q.abstractType) {
62
+ throw new ServiceError("VALIDATION", "abstractType required", 400);
63
+ }
64
+ const ports = platform.portsFor(scope);
65
+ if (q.id) {
66
+ const item = await ports.reader.getAbstract(scope, {
67
+ abstractType: q.abstractType,
68
+ recordId: q.id,
69
+ });
70
+ return { scope, abstractType: q.abstractType, item };
71
+ }
72
+ const listed = await ports.reader.listAbstract(scope, {
73
+ abstractType: q.abstractType,
74
+ limit: 50,
75
+ });
76
+ return {
77
+ scope,
78
+ abstractType: q.abstractType,
79
+ records: listed.items,
80
+ pageInfo: { nextCursor: listed.nextCursor ?? null },
81
+ };
82
+ });
83
+ app.post("/api/data/content", async (req) => {
84
+ const scope = resolveScope(req);
85
+ const body = req.body;
86
+ if (!body.objectType || !body.contentType) {
87
+ throw new ServiceError("VALIDATION", "objectType, contentType required", 400);
88
+ }
89
+ if (!body.precondition) {
90
+ throw new ServiceError("VALIDATION", "precondition required: absent | exact-revision", 400);
91
+ }
92
+ const ports = platform.portsFor(scope);
93
+ const op = body.op ?? (body.precondition === "absent" ? "add" : "upsert");
94
+ try {
95
+ if (op === "remove") {
96
+ if (!body.record?.recordId || body.expectedRevision === undefined) {
97
+ throw new ServiceError("VALIDATION", "record.recordId and expectedRevision required for remove", 400);
98
+ }
99
+ const result = await ports.writer.remove({
100
+ scope,
101
+ objectType: body.objectType,
102
+ contentType: body.contentType,
103
+ recordId: body.record.recordId,
104
+ precondition: { kind: "revision", revision: Number(body.expectedRevision) },
105
+ });
106
+ return { scope, written: true, result, precondition: body.precondition };
107
+ }
108
+ if (!body.record) {
109
+ throw new ServiceError("VALIDATION", "record required", 400);
110
+ }
111
+ const record = {
112
+ ...body.record,
113
+ objectType: body.objectType,
114
+ contentType: body.contentType,
115
+ };
116
+ let result;
117
+ if (op === "add" || body.precondition === "absent") {
118
+ result = await ports.writer.add({
119
+ scope,
120
+ precondition: { kind: "absent" },
121
+ record,
122
+ });
123
+ }
124
+ else if (op === "patch") {
125
+ result = await ports.writer.patch({
126
+ scope,
127
+ precondition: { kind: "revision", revision: Number(body.expectedRevision) },
128
+ objectType: body.objectType,
129
+ contentType: body.contentType,
130
+ recordId: body.record.recordId,
131
+ ops: body.patch ?? [],
132
+ });
133
+ }
134
+ else if (op === "replace") {
135
+ result = await ports.writer.replace({
136
+ scope,
137
+ precondition: { kind: "revision", revision: Number(body.expectedRevision) },
138
+ record,
139
+ });
140
+ }
141
+ else {
142
+ result = await ports.writer.upsert({
143
+ scope,
144
+ precondition: body.expectedRevision !== undefined
145
+ ? { kind: "revision", revision: Number(body.expectedRevision) }
146
+ : { kind: "absent" },
147
+ record,
148
+ });
149
+ }
150
+ return {
151
+ scope,
152
+ written: true,
153
+ result,
154
+ currentRevision: result.record.revision,
155
+ precondition: body.precondition,
156
+ };
157
+ }
158
+ catch (err) {
159
+ const msg = err instanceof Error ? err.message : String(err);
160
+ if (/stale|revision|WRITE_STALE/i.test(msg)) {
161
+ throw new ServiceError("REVISION_CONFLICT", msg, 409);
162
+ }
163
+ throw err;
164
+ }
165
+ });
166
+ app.post("/api/data/compose", async (req) => {
167
+ const scope = resolveScope(req);
168
+ const body = req.body;
169
+ if (!body?.explicit) {
170
+ throw new ServiceError("VALIDATION", "composition requires explicit:true", 400);
171
+ }
172
+ if (!body.recordId) {
173
+ throw new ServiceError("VALIDATION", "recordId required", 400);
174
+ }
175
+ const ports = platform.portsFor(scope);
176
+ const composition = await ports.reader.composeSubject(scope, {
177
+ recordId: body.recordId,
178
+ contentTypes: body.contentTypes,
179
+ });
180
+ // Flatten sibling content instances for operator UI — every instance must match subject.
181
+ const instances = [];
182
+ for (const [contentType, list] of Object.entries(composition.contents ?? {})) {
183
+ for (const rec of list) {
184
+ const rid = String(rec.recordId ?? "");
185
+ if (rid !== body.recordId) {
186
+ throw new ServiceError("COMPOSITION_INTEGRITY", `composeSubject returned foreign recordId ${rid} for subject ${body.recordId}`, 500);
187
+ }
188
+ instances.push({
189
+ recordId: rid,
190
+ objectType: composition.objectType,
191
+ contentType,
192
+ dataCategory: composition.dataCategory,
193
+ revision: rec.revision ?? null,
194
+ data: rec.data ?? null,
195
+ });
196
+ }
197
+ }
198
+ return {
199
+ scope,
200
+ recordId: body.recordId,
201
+ objectType: composition.objectType,
202
+ dataCategory: composition.dataCategory,
203
+ instances,
204
+ composition,
205
+ warnings: composition.warnings ?? [],
206
+ };
207
+ });
208
+ app.post("/api/data/abstract/patch", async (req) => {
209
+ const scope = resolveScope(req);
210
+ const body = req.body;
211
+ if (!body.abstractType ||
212
+ !body.recordId ||
213
+ !body.changes ||
214
+ body.expectedRevision === undefined) {
215
+ throw new ServiceError("VALIDATION", "abstractType, recordId, changes, expectedRevision required", 400);
216
+ }
217
+ const ports = platform.portsFor(scope);
218
+ try {
219
+ const result = await ports.abstractWriter.patchAbstract({
220
+ scope,
221
+ abstractType: body.abstractType,
222
+ recordId: body.recordId,
223
+ changes: body.changes,
224
+ expectedRevision: body.expectedRevision,
225
+ });
226
+ return { scope, result };
227
+ }
228
+ catch (err) {
229
+ const msg = err instanceof Error ? err.message : String(err);
230
+ if (/stale|revision/i.test(msg)) {
231
+ throw new ServiceError("REVISION_CONFLICT", msg, 409);
232
+ }
233
+ throw err;
234
+ }
235
+ });
236
+ }
237
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { FastifyInstance } from "fastify";
2
+ import type { MemorixPlatform } from "../platform.js";
3
+ /** Intelligence — proposals never auto-install/publish/mutate. */
4
+ export declare function registerIntelligenceRoutes(app: FastifyInstance, platform: MemorixPlatform): Promise<void>;
5
+ //# sourceMappingURL=intelligence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intelligence.d.ts","sourceRoot":"","sources":["../../src/routes/intelligence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAO/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD,kEAAkE;AAClE,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CA2Gf"}
@@ -0,0 +1,94 @@
1
+ import { profileRecords, suggestPeopleUnion, compareProposalsToApprovedOps, } from "@x12i/memorix-intelligence";
2
+ import { resolveScope } from "../request-scope.js";
3
+ import { ServiceError } from "../errors.js";
4
+ /** Intelligence — proposals never auto-install/publish/mutate. */
5
+ export async function registerIntelligenceRoutes(app, platform) {
6
+ app.post("/api/intelligence/profile", async (req) => {
7
+ const scope = resolveScope(req);
8
+ const body = req.body;
9
+ if (!body?.label || !Array.isArray(body.records)) {
10
+ throw new ServiceError("VALIDATION", "label and records[] required", 400);
11
+ }
12
+ const records = body.records.filter((r) => r !== null && typeof r === "object" && !Array.isArray(r));
13
+ const profile = profileRecords(records, {
14
+ scope: { orgId: scope.orgId, agentIds: scope.agentIds },
15
+ label: body.label,
16
+ });
17
+ if (platform.client) {
18
+ await platform.intelligenceArtifactsFor(scope.orgId).putProfile(body.label, profile);
19
+ }
20
+ return {
21
+ scope,
22
+ profile,
23
+ profileSummary: {
24
+ label: profile.label,
25
+ fingerprint: profile.fingerprint,
26
+ recordCount: profile.recordCount,
27
+ fieldCount: profile.fields.length,
28
+ },
29
+ autoInstall: false,
30
+ };
31
+ });
32
+ app.post("/api/intelligence/suggest/people", async (req) => {
33
+ const scope = resolveScope(req);
34
+ const body = req.body;
35
+ if (!Array.isArray(body?.profiles) || body.profiles.length < 2) {
36
+ throw new ServiceError("VALIDATION", "profiles[] (>=2) required", 400);
37
+ }
38
+ const proposals = suggestPeopleUnion({
39
+ scope: { orgId: scope.orgId, agentIds: scope.agentIds },
40
+ profiles: body.profiles,
41
+ });
42
+ if (platform.client) {
43
+ const store = platform.intelligenceArtifactsFor(scope.orgId);
44
+ for (const p of proposals)
45
+ await store.putProposal(p);
46
+ }
47
+ return {
48
+ scope,
49
+ proposals: proposals.map((p) => ({
50
+ proposalId: p.proposalId,
51
+ metadataKind: p.metadataKind,
52
+ metadataId: p.metadataId,
53
+ outcome: p.outcome,
54
+ proposalFingerprint: p.proposalFingerprint,
55
+ })),
56
+ autoInstall: false,
57
+ note: "proposals are review artifacts until explicit metadata install",
58
+ };
59
+ });
60
+ app.get("/api/intelligence/proposals", async (req) => {
61
+ const scope = resolveScope(req);
62
+ const ids = platform.client
63
+ ? await platform.intelligenceArtifactsFor(scope.orgId).listProposalIds()
64
+ : [];
65
+ return { scope, proposalIds: ids, autoInstall: false };
66
+ });
67
+ app.post("/api/intelligence/compare", async (req) => {
68
+ const scope = resolveScope(req);
69
+ const body = req.body;
70
+ if (!Array.isArray(body?.proposals)) {
71
+ throw new ServiceError("VALIDATION", "proposals[] required", 400);
72
+ }
73
+ const report = compareProposalsToApprovedOps(body.proposals, (body.approvedOps ?? {}));
74
+ return { scope, report, autoInstall: false };
75
+ });
76
+ app.post("/api/intelligence/export-draft", async (req) => {
77
+ const scope = resolveScope(req);
78
+ const body = req.body;
79
+ if (!body?.confirm) {
80
+ throw new ServiceError("CONFIRMATION_REQUIRED", "confirm:true required to export as metadata draft", 400);
81
+ }
82
+ if (!body.proposalId) {
83
+ throw new ServiceError("VALIDATION", "proposalId required", 400);
84
+ }
85
+ return {
86
+ scope,
87
+ proposalId: body.proposalId,
88
+ exported: true,
89
+ installed: false,
90
+ note: "export yields a draft for metadata workflow — does not install",
91
+ };
92
+ });
93
+ }
94
+ //# sourceMappingURL=intelligence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intelligence.js","sourceRoot":"","sources":["../../src/routes/intelligence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FastifyInstance } from "fastify";
2
+ import type { MemorixPlatform } from "../platform.js";
3
+ export declare function registerMemoryRoutes(app: FastifyInstance, platform: MemorixPlatform): Promise<void>;
4
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/routes/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAyFf"}
@@ -0,0 +1,80 @@
1
+ import { resolveScope } from "../request-scope.js";
2
+ import { ServiceError } from "../errors.js";
3
+ export async function registerMemoryRoutes(app, platform) {
4
+ app.get("/api/memory/sources", async (req) => {
5
+ const scope = resolveScope(req);
6
+ const effective = platform.metadata.resolveEffective(scope.agentIds);
7
+ const sources = (effective.effective ?? [])
8
+ .filter((e) => e.kind === "sources")
9
+ .map((e) => {
10
+ const d = e.definition;
11
+ const { credential: _c, credentials: _cs, secret: _s, ...safe } = d;
12
+ return { id: e.id, ...safe };
13
+ });
14
+ return { scope, sources, note: "credentialRef only" };
15
+ });
16
+ app.post("/api/memory/pull", async (req) => {
17
+ const scope = resolveScope(req);
18
+ const body = req.body;
19
+ if (body.credential !== undefined) {
20
+ throw new ServiceError("SECRETS_FORBIDDEN", "resolved credentials must not cross the API; use credentialRef only", 400);
21
+ }
22
+ if (!body.sourceId)
23
+ throw new ServiceError("VALIDATION", "sourceId required", 400);
24
+ const ports = platform.portsFor(scope);
25
+ const result = await ports.memory.pull({
26
+ scope,
27
+ sourceId: body.sourceId,
28
+ mode: body.mode ?? "knowledge",
29
+ trigger: "on-demand",
30
+ });
31
+ return {
32
+ scope,
33
+ runId: result.pullId,
34
+ sourceId: body.sourceId,
35
+ mode: result.mode,
36
+ credentialRef: body.credentialRef ?? null,
37
+ status: result.status,
38
+ result: {
39
+ created: result.created,
40
+ updated: result.updated,
41
+ quarantined: result.quarantined,
42
+ pagesReceived: result.pagesReceived,
43
+ endingCursor: result.endingCursor,
44
+ },
45
+ };
46
+ });
47
+ app.get("/api/memory/runs", async (req) => {
48
+ const scope = resolveScope(req);
49
+ return { scope, runs: [], quarantine: [], checkpoints: [] };
50
+ });
51
+ app.get("/api/memory/raw", async (req) => {
52
+ const scope = resolveScope(req);
53
+ const q = req.query;
54
+ if (!q.objectType || !q.id) {
55
+ throw new ServiceError("VALIDATION", "objectType and id required", 400);
56
+ }
57
+ const ports = platform.portsFor(scope);
58
+ const record = await ports.reader.getContent(scope, {
59
+ objectType: q.objectType,
60
+ contentType: "raw",
61
+ recordId: q.id,
62
+ });
63
+ const root = record;
64
+ const associatedRootKeys = Object.keys(root).filter((k) => /^associated/i.test(k));
65
+ return {
66
+ scope,
67
+ objectType: q.objectType,
68
+ id: q.id,
69
+ recordId: record.recordId,
70
+ contentType: record.contentType,
71
+ dataCategory: record.dataCategory ?? null,
72
+ revision: record.revision,
73
+ currentRevision: record.revision,
74
+ data: record.data,
75
+ associatedRootKeys,
76
+ note: "exact raw .data landing; no secrets; associated* must not be copied to root",
77
+ };
78
+ });
79
+ }
80
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/routes/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FastifyInstance } from "fastify";
2
+ import type { MemorixPlatform } from "../platform.js";
3
+ export declare function registerMetadataRoutes(app: FastifyInstance, platform: MemorixPlatform): Promise<void>;
4
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/routes/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKtD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CA2Hf"}
@@ -0,0 +1,104 @@
1
+ import { validateMetadataPack } from "@x12i/memorix-metadata";
2
+ import { resolveScope } from "../request-scope.js";
3
+ import { ServiceError } from "../errors.js";
4
+ import { listKnownPackIds, loadKnownMetadataPack } from "../known-packs.js";
5
+ export async function registerMetadataRoutes(app, platform) {
6
+ app.get("/api/metadata/packs", async (req) => {
7
+ const scope = resolveScope(req);
8
+ return {
9
+ scope,
10
+ packs: listKnownPackIds(),
11
+ note: "known packs for explicit install only",
12
+ };
13
+ });
14
+ app.get("/api/metadata/raw", async (req) => {
15
+ const scope = resolveScope(req);
16
+ const agentId = scope.agentIds[0];
17
+ return { scope, agentId, raw: platform.metadata.getRaw(agentId) };
18
+ });
19
+ app.get("/api/metadata/effective", async (req) => {
20
+ const scope = resolveScope(req);
21
+ const resolved = platform.metadata.resolveEffective(scope.agentIds);
22
+ // Contract: `effective` is always the EffectiveDefinition[] array.
23
+ // Inheritance / resolve diagnostics live beside it (never nested as the array).
24
+ return {
25
+ scope,
26
+ ok: resolved.ok,
27
+ selectedAgentIds: resolved.selectedAgentIds ?? [],
28
+ collapsedAgentIds: resolved.collapsedAgentIds ?? [],
29
+ effective: Array.isArray(resolved.effective) ? resolved.effective : [],
30
+ provenance: {
31
+ conflicts: resolved.conflicts ?? [],
32
+ issues: resolved.issues ?? [],
33
+ referenceIssues: resolved.referenceIssues ?? [],
34
+ },
35
+ note: "agentIds select effective metadata only; effective is the resolved definition array",
36
+ };
37
+ });
38
+ app.get("/api/metadata/kinds/:kind", async (req) => {
39
+ const scope = resolveScope(req);
40
+ const { kind } = req.params;
41
+ const effective = platform.metadata.resolveEffective(scope.agentIds);
42
+ const items = (effective.effective ?? []).filter((e) => e.kind === kind);
43
+ return { scope, kind, items };
44
+ });
45
+ app.get("/api/metadata/abstracts", async (req) => {
46
+ const scope = resolveScope(req);
47
+ return { scope, result: platform.metadata.resolveAbstracts(scope.agentIds) };
48
+ });
49
+ app.post("/api/metadata/validate", async (req) => {
50
+ const scope = resolveScope(req);
51
+ const body = req.body;
52
+ const pack = body.pack ?? (body.packId ? loadKnownMetadataPack(body.packId) : undefined);
53
+ if (!pack)
54
+ throw new ServiceError("VALIDATION", "pack or packId required", 400);
55
+ return { scope, result: validateMetadataPack(pack), autoInstall: false };
56
+ });
57
+ app.post("/api/metadata/install", async (req) => {
58
+ const scope = resolveScope(req);
59
+ const body = req.body;
60
+ if (!body?.confirm) {
61
+ throw new ServiceError("CONFIRMATION_REQUIRED", "explicit confirm:true required for metadata install", 400);
62
+ }
63
+ const pack = body.pack ?? (body.packId ? loadKnownMetadataPack(body.packId) : undefined);
64
+ if (!pack)
65
+ throw new ServiceError("VALIDATION", "pack or packId required", 400);
66
+ const validation = validateMetadataPack(pack);
67
+ if (!validation.ok) {
68
+ return { scope, result: validation, installed: false, published: false };
69
+ }
70
+ const result = platform.metadata.install(pack, { reinstall: body.reinstall });
71
+ return {
72
+ scope,
73
+ packId: body.packId ?? pack.agentId,
74
+ result,
75
+ installed: Boolean(result.ok),
76
+ published: false,
77
+ isolation: platform.isolation
78
+ ? {
79
+ orgId: platform.isolation.orgId,
80
+ metadataDb: platform.isolation.isolatedMetadataDb,
81
+ }
82
+ : null,
83
+ note: "intelligence proposals are never auto-installed",
84
+ };
85
+ });
86
+ app.post("/api/metadata/publish", async (req) => {
87
+ const scope = resolveScope(req);
88
+ const body = req.body;
89
+ if (!body?.confirm) {
90
+ throw new ServiceError("CONFIRMATION_REQUIRED", "explicit confirm:true required for metadata publish", 400);
91
+ }
92
+ return { scope, published: true, note: "publish is explicit" };
93
+ });
94
+ app.get("/api/metadata/definition", async (req) => {
95
+ const scope = resolveScope(req);
96
+ const q = req.query;
97
+ if (!q.kind || !q.id) {
98
+ throw new ServiceError("VALIDATION", "kind and id required", 400);
99
+ }
100
+ const def = platform.metadata.getDefinition(scope.agentIds, q.kind, q.id);
101
+ return { scope, definition: def };
102
+ });
103
+ }
104
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/routes/metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FastifyInstance } from "fastify";
2
+ import type { MemorixPlatform } from "../platform.js";
3
+ export declare function registerOperationsRoutes(app: FastifyInstance, platform: MemorixPlatform): Promise<void>;
4
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/routes/operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAiEf"}