@x12i/memorix-service 3.0.4 → 3.0.6

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 (37) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/magit/magit-pack-service.d.ts +55 -0
  7. package/dist/magit/magit-pack-service.d.ts.map +1 -0
  8. package/dist/magit/magit-pack-service.js +217 -0
  9. package/dist/magit/magit-pack-service.js.map +1 -0
  10. package/dist/magit/pack-to-patchset.d.ts +26 -0
  11. package/dist/magit/pack-to-patchset.d.ts.map +1 -0
  12. package/dist/magit/pack-to-patchset.js +123 -0
  13. package/dist/magit/pack-to-patchset.js.map +1 -0
  14. package/dist/mongo-metadata-store.d.ts.map +1 -1
  15. package/dist/mongo-metadata-store.js +3 -1
  16. package/dist/mongo-metadata-store.js.map +1 -1
  17. package/dist/openapi/openapi.json +195 -0
  18. package/dist/pipeline-compile.d.ts +19 -0
  19. package/dist/pipeline-compile.d.ts.map +1 -0
  20. package/dist/pipeline-compile.js +98 -0
  21. package/dist/pipeline-compile.js.map +1 -0
  22. package/dist/platform.d.ts +6 -0
  23. package/dist/platform.d.ts.map +1 -1
  24. package/dist/platform.js +75 -7
  25. package/dist/platform.js.map +1 -1
  26. package/dist/routes/connector-invocations.js +2 -2
  27. package/dist/routes/memory.d.ts.map +1 -1
  28. package/dist/routes/memory.js +171 -3
  29. package/dist/routes/memory.js.map +1 -1
  30. package/dist/routes/metadata.d.ts.map +1 -1
  31. package/dist/routes/metadata.js +43 -0
  32. package/dist/routes/metadata.js.map +1 -1
  33. package/dist/routes/pipelines.d.ts.map +1 -1
  34. package/dist/routes/pipelines.js +28 -3
  35. package/dist/routes/pipelines.js.map +1 -1
  36. package/openapi/openapi.json +195 -0
  37. package/package.json +7 -6
package/README.md CHANGED
@@ -69,7 +69,7 @@ curl -s http://127.0.0.1:5100/api/diagnostics/scope \
69
69
 
70
70
  | Family | Role |
71
71
  |--------|------|
72
- | `/api/metadata` | Kinds, definitions, install/publish |
72
+ | `/api/metadata` | Kinds, definitions, install/publish, optional pack versions (`METADATA_MAGIT=1`) |
73
73
  | `/api/data` | Content get/list/write, compose, abstract |
74
74
  | `/api/relationships` | Query / discover / verify / rebuild (**no** ad-hoc link PUT) |
75
75
  | `/api/memory` | Pull, raw, sources, **checkpoints**, schedules, runs, `commit-page`, connection probe |
package/dist/index.d.ts CHANGED
@@ -4,4 +4,5 @@ export { ServiceError, mapErrorToHttp, redactSecrets, type ServiceErrorBody, } f
4
4
  export { createMemorixPlatform, PlatformStartupError, type MemorixPlatform, type PlatformDeps, type RuntimeMode, type OrgPorts, } from "./platform.js";
5
5
  export { createMemorixServiceApp, startMemorixServiceHttp, type CreateMemorixServiceAppOptions, type StartMemorixServiceOptions, } from "./app.js";
6
6
  export { generateSandboxOrgId, beginIsolationSession, cleanupIsolationSession, isolationEvidence, assertSafeSandboxOrgId, SANDBOX_ORG_PATTERN, SANDBOX_ORG_PREFIX, IsolationError, type IsolationSession, } from "./isolation.js";
7
+ export { MagitPackService, createMagitPackService, isMetadataMagitEnabled, type MagitPackServiceConfig, type PackVersionSummary, } from "./magit/magit-pack-service.js";
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,QAAQ,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,8BAA8B,EACnC,KAAK,0BAA0B,GAChC,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,QAAQ,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,8BAA8B,EACnC,KAAK,0BAA0B,GAChC,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACxB,MAAM,+BAA+B,CAAC"}
package/dist/index.js CHANGED
@@ -4,4 +4,5 @@ export { ServiceError, mapErrorToHttp, redactSecrets, } from "./errors.js";
4
4
  export { createMemorixPlatform, PlatformStartupError, } from "./platform.js";
5
5
  export { createMemorixServiceApp, startMemorixServiceHttp, } from "./app.js";
6
6
  export { generateSandboxOrgId, beginIsolationSession, cleanupIsolationSession, isolationEvidence, assertSafeSandboxOrgId, SANDBOX_ORG_PATTERN, SANDBOX_ORG_PREFIX, IsolationError, } from "./isolation.js";
7
+ export { MagitPackService, createMagitPackService, isMetadataMagitEnabled, } from "./magit/magit-pack-service.js";
7
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,GAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAKrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GAGxB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,GAEf,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,GAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAKrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GAGxB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,GAEf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,GAGvB,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,55 @@
1
+ import type { MetadataPack } from "@x12i/memorix-metadata";
2
+ export type MagitActor = {
3
+ subject: string;
4
+ scopes?: string[];
5
+ };
6
+ export type PackVersionSummary = {
7
+ commit: string;
8
+ agentId: string;
9
+ checksum: string | null;
10
+ message: string | null;
11
+ createdAt: string;
12
+ source: "save-version" | "head";
13
+ reused?: boolean;
14
+ };
15
+ export type MagitPackServiceConfig = {
16
+ /** Parent directory; each org gets `${repoRootParent}/${orgId}`. */
17
+ repoRootParent: string;
18
+ /** Env var name Magit reads for Mongo (default MONGO_URI). */
19
+ mongoUrlEnv: string;
20
+ /** URI written into process.env[mongoUrlEnv] before Magit source ops. */
21
+ mongoUri: string;
22
+ /** Metadata DB name for this isolation session / org. */
23
+ metadataDb: string;
24
+ storageUrl?: string;
25
+ storageTokenEnv?: string;
26
+ };
27
+ export declare function isMetadataMagitEnabled(): boolean;
28
+ export declare function resolveMagitRepoRootParent(): string;
29
+ export declare class MagitPackService {
30
+ private readonly cfg;
31
+ private readonly ensured;
32
+ constructor(cfg: MagitPackServiceConfig);
33
+ repoRootFor(orgId: string): string;
34
+ ensureRepo(orgId: string): Promise<void>;
35
+ saveVersion(orgId: string, pack: MetadataPack, opts: {
36
+ message: string;
37
+ actor?: MagitActor;
38
+ }): Promise<{
39
+ commit: string;
40
+ checksum: string;
41
+ reused: boolean;
42
+ }>;
43
+ history(orgId: string, agentId: string, opts?: {
44
+ maxCount?: number;
45
+ }): Promise<PackVersionSummary[]>;
46
+ /**
47
+ * Snapshot a temporary seed agent so HEAD carries `memorix_metadata_agents`,
48
+ * then remove the seed from live Mongo (saveVersion must stay non-live).
49
+ */
50
+ private seedAgentsCollectionCommit;
51
+ private ensureMongoEnv;
52
+ private mapError;
53
+ }
54
+ export declare function createMagitPackService(cfg: MagitPackServiceConfig): MagitPackService;
55
+ //# sourceMappingURL=magit-pack-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magit-pack-service.d.ts","sourceRoot":"","sources":["../../src/magit/magit-pack-service.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAW3D,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEhE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAmBF,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAInD;AAED,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAEhB,GAAG,EAAE,sBAAsB;IAExD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI5B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CxC,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,UAAU,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAuB3D,OAAO,CACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3B,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAgDhC;;;OAGG;YACW,0BAA0B;IAsCxC,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,QAAQ;CAajB;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,sBAAsB,GAAG,gBAAgB,CAEpF"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * MagitPackService — server-only façade over @x12i/magit for pack versioning.
3
+ * Phase 0: ensureRepo + saveVersion (proposePatchset) + history.
4
+ */
5
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
6
+ import { join } from "node:path";
7
+ import { MongoClient } from "mongodb";
8
+ import { magit, listProposalLedgerEntries, isPatchsetError, } from "@x12i/magit";
9
+ import { ServiceError } from "../errors.js";
10
+ import { MAGIT_AGENTS_COLLECTION, MAGIT_SEED_AGENT_ID, packToPatchset, parseSaveVersionIdempotencyKey, } from "./pack-to-patchset.js";
11
+ const MEMORIX_LENS = {
12
+ [MAGIT_AGENTS_COLLECTION]: {
13
+ docKey: "agentId",
14
+ explode: {
15
+ path: "definitions",
16
+ recordId: "{agentId}/{kind}/{id}",
17
+ recordFields: ["kind", "id"],
18
+ carry: ["agentId"],
19
+ },
20
+ preserve: "passthrough",
21
+ },
22
+ };
23
+ const MAGITIGNORE = `# Memorix Phase 0 — ignore install ledger (not versioned)
24
+ memorix_metadata_install_ledger
25
+ `;
26
+ export function isMetadataMagitEnabled() {
27
+ return process.env.METADATA_MAGIT?.trim() === "1";
28
+ }
29
+ export function resolveMagitRepoRootParent() {
30
+ const fromEnv = process.env.MAGIT_REPO_ROOT?.trim();
31
+ if (fromEnv)
32
+ return fromEnv;
33
+ return join(process.cwd(), ".tmp", "magit-repos");
34
+ }
35
+ export class MagitPackService {
36
+ cfg;
37
+ ensured = new Set();
38
+ constructor(cfg) {
39
+ this.cfg = cfg;
40
+ }
41
+ repoRootFor(orgId) {
42
+ return join(this.cfg.repoRootParent, orgId);
43
+ }
44
+ async ensureRepo(orgId) {
45
+ if (this.ensured.has(orgId))
46
+ return;
47
+ try {
48
+ this.ensureMongoEnv();
49
+ mkdirSync(this.cfg.repoRootParent, { recursive: true });
50
+ const repoRoot = this.repoRootFor(orgId);
51
+ mkdirSync(repoRoot, { recursive: true });
52
+ const repo = await magit.open({ repoRoot });
53
+ const configPath = join(repoRoot, ".magit", "config.json");
54
+ if (!existsSync(configPath)) {
55
+ await repo.init({
56
+ name: `memorix-metadata-${orgId}`,
57
+ driver: "transform",
58
+ urlEnv: this.cfg.mongoUrlEnv,
59
+ db: this.cfg.metadataDb,
60
+ driverConfig: {
61
+ kind: "transform",
62
+ base: {
63
+ kind: "mongo",
64
+ urlEnv: this.cfg.mongoUrlEnv,
65
+ db: this.cfg.metadataDb,
66
+ },
67
+ lens: MEMORIX_LENS,
68
+ encodingProfile: "current",
69
+ },
70
+ storageProvider: "x12i-http",
71
+ storageUrl: this.cfg.storageUrl ||
72
+ process.env.MAGIT_STORAGE_URL?.trim() ||
73
+ "https://magit-storage.x12i.com",
74
+ storageTokenEnv: this.cfg.storageTokenEnv || "MAGIT_TOKEN",
75
+ storageTenant: orgId,
76
+ environmentName: "draft",
77
+ skipRemoteBootstrap: true,
78
+ });
79
+ writeFileSync(join(repoRoot, ".magitignore"), MAGITIGNORE, "utf8");
80
+ // Proposals can only edit collections present in the base commit.
81
+ await this.seedAgentsCollectionCommit(repo);
82
+ }
83
+ this.ensured.add(orgId);
84
+ }
85
+ catch (err) {
86
+ throw this.mapError(err, "failed to ensure Magit repo");
87
+ }
88
+ }
89
+ async saveVersion(orgId, pack, opts) {
90
+ const message = opts.message?.trim();
91
+ if (!message) {
92
+ throw new ServiceError("VALIDATION", "message required for save version", 400);
93
+ }
94
+ await this.ensureRepo(orgId);
95
+ try {
96
+ const repo = await magit.open({ repoRoot: this.repoRootFor(orgId) });
97
+ const { patchset, checksum } = packToPatchset(pack, {
98
+ message,
99
+ actor: opts.actor?.subject,
100
+ });
101
+ const result = await repo.proposePatchset(patchset);
102
+ return {
103
+ commit: result.commitHash,
104
+ checksum,
105
+ reused: result.reused,
106
+ };
107
+ }
108
+ catch (err) {
109
+ throw this.mapError(err, "failed to save pack version");
110
+ }
111
+ }
112
+ async history(orgId, agentId, opts) {
113
+ if (!agentId?.trim()) {
114
+ throw new ServiceError("VALIDATION", "agentId required", 400);
115
+ }
116
+ await this.ensureRepo(orgId);
117
+ const maxCount = opts?.maxCount ?? 50;
118
+ try {
119
+ const repoRoot = this.repoRootFor(orgId);
120
+ const repo = await magit.open({ repoRoot });
121
+ const metagitDir = repo.repoPaths().metagitDir;
122
+ const proposals = await listProposalLedgerEntries(metagitDir);
123
+ const saved = [];
124
+ for (const entry of proposals) {
125
+ const parsed = parseSaveVersionIdempotencyKey(entry.idempotencyKey);
126
+ if (!parsed || parsed.agentId !== agentId)
127
+ continue;
128
+ saved.push({
129
+ commit: entry.commitHash,
130
+ agentId: parsed.agentId,
131
+ checksum: parsed.checksum,
132
+ message: null,
133
+ createdAt: entry.createdAt,
134
+ source: "save-version",
135
+ });
136
+ }
137
+ const headCommits = await repo.listCommitsFromHead({ maxCount });
138
+ const head = headCommits.map((c) => ({
139
+ commit: c.hash,
140
+ agentId,
141
+ checksum: typeof c.proposal?.provenance?.checksum === "string"
142
+ ? c.proposal.provenance.checksum
143
+ : null,
144
+ message: c.message ?? null,
145
+ createdAt: c.timestamp,
146
+ source: "head",
147
+ }));
148
+ const byCommit = new Map();
149
+ for (const row of head)
150
+ byCommit.set(row.commit, row);
151
+ // Prefer save-version rows (checksum from idempotency key).
152
+ for (const row of saved)
153
+ byCommit.set(row.commit, row);
154
+ return [...byCommit.values()]
155
+ .sort((a, b) => b.createdAt.localeCompare(a.createdAt))
156
+ .slice(0, maxCount);
157
+ }
158
+ catch (err) {
159
+ throw this.mapError(err, "failed to list pack versions");
160
+ }
161
+ }
162
+ /**
163
+ * Snapshot a temporary seed agent so HEAD carries `memorix_metadata_agents`,
164
+ * then remove the seed from live Mongo (saveVersion must stay non-live).
165
+ */
166
+ async seedAgentsCollectionCommit(repo) {
167
+ this.ensureMongoEnv();
168
+ const client = new MongoClient(this.cfg.mongoUri);
169
+ await client.connect();
170
+ try {
171
+ const col = client
172
+ .db(this.cfg.metadataDb)
173
+ .collection(MAGIT_AGENTS_COLLECTION);
174
+ await col.updateOne({ _id: MAGIT_SEED_AGENT_ID }, {
175
+ $set: {
176
+ agentId: MAGIT_SEED_AGENT_ID,
177
+ checksum: "magit-seed",
178
+ definitions: [
179
+ {
180
+ kind: "agents",
181
+ id: MAGIT_SEED_AGENT_ID,
182
+ definition: {
183
+ id: MAGIT_SEED_AGENT_ID,
184
+ name: "magit-seed",
185
+ parentId: null,
186
+ },
187
+ },
188
+ ],
189
+ },
190
+ }, { upsert: true });
191
+ await repo.commit({ message: "memorix: seed metadata collections" });
192
+ await col.deleteOne({ _id: MAGIT_SEED_AGENT_ID });
193
+ }
194
+ finally {
195
+ await client.close();
196
+ }
197
+ }
198
+ ensureMongoEnv() {
199
+ if (!this.cfg.mongoUri?.trim()) {
200
+ throw new ServiceError("MAGIT_UNAVAILABLE", "mongo URI required for Magit metadata versioning", 503);
201
+ }
202
+ process.env[this.cfg.mongoUrlEnv] = this.cfg.mongoUri;
203
+ }
204
+ mapError(err, fallback) {
205
+ if (err instanceof ServiceError)
206
+ return err;
207
+ if (isPatchsetError(err)) {
208
+ return new ServiceError("VALIDATION", err.message || "invalid pack version patchset", 400, { magitCode: err.code });
209
+ }
210
+ const message = err instanceof Error ? err.message : String(err);
211
+ return new ServiceError("MAGIT_UNAVAILABLE", `${fallback}: ${message}`, 503);
212
+ }
213
+ }
214
+ export function createMagitPackService(cfg) {
215
+ return new MagitPackService(cfg);
216
+ }
217
+ //# sourceMappingURL=magit-pack-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magit-pack-service.js","sourceRoot":"","sources":["../../src/magit/magit-pack-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type MetadataPack } from "@x12i/memorix-metadata";
2
+ import type { MetagitPatchsetV1 } from "@x12i/magit";
3
+ /** Temporary agent written only into the Magit seed commit (not left live). */
4
+ export declare const MAGIT_SEED_AGENT_ID = "__magit_seed__";
5
+ export type PackDefinitionRecord = {
6
+ kind: string;
7
+ id: string;
8
+ agentId: string;
9
+ definition: Record<string, unknown>;
10
+ };
11
+ export declare function packToDefinitionRecords(pack: MetadataPack): PackDefinitionRecord[];
12
+ export declare function recordIdForDefinition(agentId: string, kind: string, id: string): string;
13
+ export declare function saveVersionIdempotencyKey(agentId: string, checksum: string, message: string): string;
14
+ export declare function parseSaveVersionIdempotencyKey(key: string): {
15
+ agentId: string;
16
+ checksum: string;
17
+ } | null;
18
+ export declare function packToPatchset(pack: MetadataPack, opts: {
19
+ message: string;
20
+ actor?: string;
21
+ }): {
22
+ patchset: MetagitPatchsetV1;
23
+ checksum: string;
24
+ };
25
+ export declare const MAGIT_AGENTS_COLLECTION = "memorix_metadata_agents";
26
+ //# sourceMappingURL=pack-to-patchset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-to-patchset.d.ts","sourceRoot":"","sources":["../../src/magit/pack-to-patchset.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAuB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAI1E,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAkBpD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB,EAAE,CAkClF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CAGR;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,GACV;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS9C;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,QAAQ,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAsCnD;AAED,eAAO,MAAM,uBAAuB,4BAAoB,CAAC"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Convert a Memorix MetadataPack into Magit patchset ops (transform-record shape).
3
+ */
4
+ import { createHash } from "node:crypto";
5
+ import { isValidCustomKindId, } from "@x12i/memorix-metadata";
6
+ import { checksumMetadataPack } from "@x12i/memorix-metadata-runtime";
7
+ const AGENTS_COLLECTION = "memorix_metadata_agents";
8
+ /** Temporary agent written only into the Magit seed commit (not left live). */
9
+ export const MAGIT_SEED_AGENT_ID = "__magit_seed__";
10
+ const PACK_FIELDS = [
11
+ { kind: "agents", field: "agents" },
12
+ { kind: "object-types", field: "objectTypes" },
13
+ { kind: "abstract-types", field: "abstractTypes" },
14
+ { kind: "abstract-bindings", field: "abstractBindings" },
15
+ { kind: "relationship-definitions", field: "relationshipDefinitions" },
16
+ { kind: "mappings", field: "mappings" },
17
+ { kind: "views", field: "views" },
18
+ { kind: "writes", field: "writes" },
19
+ { kind: "sources", field: "sources" },
20
+ { kind: "services", field: "services" },
21
+ { kind: "pipelines", field: "pipelines" },
22
+ { kind: "schedules", field: "schedules" },
23
+ { kind: "kind-declarations", field: "kindDeclarations" },
24
+ ];
25
+ export function packToDefinitionRecords(pack) {
26
+ const agentId = pack.agentId;
27
+ const out = [];
28
+ for (const { kind, field } of PACK_FIELDS) {
29
+ const arr = pack[field];
30
+ if (!Array.isArray(arr))
31
+ continue;
32
+ for (const item of arr) {
33
+ if (!item || typeof item !== "object")
34
+ continue;
35
+ const id = item.id;
36
+ if (typeof id !== "string" || !id)
37
+ continue;
38
+ out.push({
39
+ kind,
40
+ id,
41
+ agentId,
42
+ definition: { ...item },
43
+ });
44
+ }
45
+ }
46
+ for (const [kindId, items] of Object.entries(pack.extensions ?? {})) {
47
+ if (!isValidCustomKindId(kindId) || !Array.isArray(items))
48
+ continue;
49
+ for (const item of items) {
50
+ if (!item || typeof item !== "object")
51
+ continue;
52
+ const id = item.id;
53
+ if (typeof id !== "string" || !id)
54
+ continue;
55
+ out.push({
56
+ kind: kindId,
57
+ id,
58
+ agentId,
59
+ definition: { ...item },
60
+ });
61
+ }
62
+ }
63
+ out.sort((a, b) => a.kind.localeCompare(b.kind) || a.id.localeCompare(b.id));
64
+ return out;
65
+ }
66
+ export function recordIdForDefinition(agentId, kind, id) {
67
+ return `${agentId}/${kind}/${id}`;
68
+ }
69
+ export function saveVersionIdempotencyKey(agentId, checksum, message) {
70
+ const msgKey = createHash("sha256").update(message).digest("hex").slice(0, 16);
71
+ return `memorix-save/v1/${agentId}/${checksum}/${msgKey}`;
72
+ }
73
+ export function parseSaveVersionIdempotencyKey(key) {
74
+ const parts = key.split("/");
75
+ if (parts.length !== 5 || parts[0] !== "memorix-save" || parts[1] !== "v1") {
76
+ return null;
77
+ }
78
+ const agentId = parts[2];
79
+ const checksum = parts[3];
80
+ if (!agentId || !checksum)
81
+ return null;
82
+ return { agentId, checksum };
83
+ }
84
+ export function packToPatchset(pack, opts) {
85
+ const checksum = checksumMetadataPack(pack);
86
+ const records = packToDefinitionRecords(pack);
87
+ const ops = [
88
+ // Drop the ensureRepo seed record from the proposed snapshot.
89
+ {
90
+ op: "delete",
91
+ collection: AGENTS_COLLECTION,
92
+ id: recordIdForDefinition(MAGIT_SEED_AGENT_ID, "agents", MAGIT_SEED_AGENT_ID),
93
+ },
94
+ ...records.map((r) => ({
95
+ op: "put",
96
+ collection: AGENTS_COLLECTION,
97
+ id: recordIdForDefinition(r.agentId, r.kind, r.id),
98
+ record: {
99
+ kind: r.kind,
100
+ id: r.id,
101
+ agentId: r.agentId,
102
+ definition: r.definition,
103
+ },
104
+ })),
105
+ ];
106
+ const patchset = {
107
+ schemaVersion: "metagit.patchset.v1",
108
+ base: "HEAD",
109
+ message: opts.message,
110
+ idempotencyKey: saveVersionIdempotencyKey(pack.agentId, checksum, opts.message),
111
+ provenance: {
112
+ actor: opts.actor ?? "memorix-service",
113
+ reason: opts.message,
114
+ agentId: pack.agentId,
115
+ source: "memorix-save-version",
116
+ checksum,
117
+ },
118
+ ops,
119
+ };
120
+ return { patchset, checksum };
121
+ }
122
+ export const MAGIT_AGENTS_COLLECTION = AGENTS_COLLECTION;
123
+ //# sourceMappingURL=pack-to-patchset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-to-patchset.js","sourceRoot":"","sources":["../../src/magit/pack-to-patchset.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mongo-metadata-store.d.ts","sourceRoot":"","sources":["../src/mongo-metadata-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAEV,aAAa,EAEd,MAAM,gCAAgC,CAAC;AAcxC,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG;IACjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;CACxB,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,EAAE,GAAG,oBAAoB,CAuFrE"}
1
+ {"version":3,"file":"mongo-metadata-store.d.ts","sourceRoot":"","sources":["../src/mongo-metadata-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAEV,aAAa,EAEd,MAAM,gCAAgC,CAAC;AAgBxC,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG;IACjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;CACxB,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,EAAE,GAAG,oBAAoB,CAyFrE"}
@@ -13,6 +13,7 @@ export function createMongoMetadataStore(db) {
13
13
  const pack = memory.getAgentPack(agentId);
14
14
  return {
15
15
  _id: agentId,
16
+ agentId,
16
17
  checksum: pack.checksum,
17
18
  definitions: pack.definitions,
18
19
  };
@@ -63,7 +64,8 @@ export function createMongoMetadataStore(db) {
63
64
  .toArray();
64
65
  const scratch = createInMemoryMetadataStore();
65
66
  for (const doc of agentDocs) {
66
- scratch.replaceAgentPack(doc._id, doc.checksum, doc.definitions, new Date(0).toISOString());
67
+ const agentId = doc.agentId || doc._id;
68
+ scratch.replaceAgentPack(agentId, doc.checksum, doc.definitions, new Date(0).toISOString());
67
69
  }
68
70
  for (const entry of ledgerDocs) {
69
71
  const { _id: _omit, ...rest } = entry;
@@ -1 +1 @@
1
- {"version":3,"file":"mongo-metadata-store.js","sourceRoot":"","sources":["../src/mongo-metadata-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mongo-metadata-store.js","sourceRoot":"","sources":["../src/mongo-metadata-store.ts"],"names":[],"mappings":"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"}