@x12i/memorix-package-seed 1.0.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 (86) hide show
  1. package/README.md +114 -0
  2. package/dist/agent-merge.d.ts +17 -0
  3. package/dist/agent-merge.d.ts.map +1 -0
  4. package/dist/agent-merge.js +94 -0
  5. package/dist/agent-merge.js.map +1 -0
  6. package/dist/catalox.d.ts +21 -0
  7. package/dist/catalox.d.ts.map +1 -0
  8. package/dist/catalox.js +37 -0
  9. package/dist/catalox.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 +161 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/constants.d.ts +13 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +37 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/ensure-seeded.d.ts +36 -0
  19. package/dist/ensure-seeded.d.ts.map +1 -0
  20. package/dist/ensure-seeded.js +335 -0
  21. package/dist/ensure-seeded.js.map +1 -0
  22. package/dist/errors.d.ts +13 -0
  23. package/dist/errors.d.ts.map +1 -0
  24. package/dist/errors.js +13 -0
  25. package/dist/errors.js.map +1 -0
  26. package/dist/hash.d.ts +6 -0
  27. package/dist/hash.d.ts.map +1 -0
  28. package/dist/hash.js +27 -0
  29. package/dist/hash.js.map +1 -0
  30. package/dist/identity.d.ts +8 -0
  31. package/dist/identity.d.ts.map +1 -0
  32. package/dist/identity.js +60 -0
  33. package/dist/identity.js.map +1 -0
  34. package/dist/index.d.ts +21 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +45 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/lease.d.ts +17 -0
  39. package/dist/lease.d.ts.map +1 -0
  40. package/dist/lease.js +113 -0
  41. package/dist/lease.js.map +1 -0
  42. package/dist/ledger.d.ts +20 -0
  43. package/dist/ledger.d.ts.map +1 -0
  44. package/dist/ledger.js +48 -0
  45. package/dist/ledger.js.map +1 -0
  46. package/dist/manifest.d.ts +9 -0
  47. package/dist/manifest.d.ts.map +1 -0
  48. package/dist/manifest.js +275 -0
  49. package/dist/manifest.js.map +1 -0
  50. package/dist/platform-core.d.ts +19 -0
  51. package/dist/platform-core.d.ts.map +1 -0
  52. package/dist/platform-core.js +68 -0
  53. package/dist/platform-core.js.map +1 -0
  54. package/dist/secrets.d.ts +2 -0
  55. package/dist/secrets.d.ts.map +1 -0
  56. package/dist/secrets.js +34 -0
  57. package/dist/secrets.js.map +1 -0
  58. package/dist/types.d.ts +115 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +2 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/writers/inventory-agents.d.ts +3 -0
  63. package/dist/writers/inventory-agents.d.ts.map +1 -0
  64. package/dist/writers/inventory-agents.js +102 -0
  65. package/dist/writers/inventory-agents.js.map +1 -0
  66. package/dist/writers/native-items.d.ts +6 -0
  67. package/dist/writers/native-items.d.ts.map +1 -0
  68. package/dist/writers/native-items.js +63 -0
  69. package/dist/writers/native-items.js.map +1 -0
  70. package/dist/writers/orchestration.d.ts +5 -0
  71. package/dist/writers/orchestration.d.ts.map +1 -0
  72. package/dist/writers/orchestration.js +102 -0
  73. package/dist/writers/orchestration.js.map +1 -0
  74. package/dist/writers/pipeline-services.d.ts +3 -0
  75. package/dist/writers/pipeline-services.d.ts.map +1 -0
  76. package/dist/writers/pipeline-services.js +52 -0
  77. package/dist/writers/pipeline-services.js.map +1 -0
  78. package/dist/writers/registry.d.ts +5 -0
  79. package/dist/writers/registry.d.ts.map +1 -0
  80. package/dist/writers/registry.js +81 -0
  81. package/dist/writers/registry.js.map +1 -0
  82. package/dist/writers/worker-bases.d.ts +3 -0
  83. package/dist/writers/worker-bases.d.ts.map +1 -0
  84. package/dist/writers/worker-bases.js +36 -0
  85. package/dist/writers/worker-bases.js.map +1 -0
  86. package/package.json +62 -0
@@ -0,0 +1,335 @@
1
+ import { getMemorixMetadataDatabaseName } from "@x12i/memorix-db-router";
2
+ import { ensurePackageSeedCatalogs, openPackageSeedCatalox, } from "./catalox.js";
3
+ import { PLATFORM_CORE_PACKAGE_ID } from "./constants.js";
4
+ import { MemorixPackageSeedError } from "./errors.js";
5
+ import { ledgerItemId } from "./hash.js";
6
+ import { buildLedgerItem, deleteLedgerItem, readLedgerItem, writeLedgerItem, } from "./ledger.js";
7
+ import { acquireSeedLease } from "./lease.js";
8
+ import { loadManifestFromDir } from "./manifest.js";
9
+ import { resolvePlaneWriter } from "./writers/registry.js";
10
+ function aggregateOutcome(targets) {
11
+ if (targets.some((t) => t.outcome === "failed"))
12
+ return "failed";
13
+ if (targets.some((t) => t.outcome === "conflict"))
14
+ return "conflict";
15
+ if (targets.some((t) => t.outcome === "applied"))
16
+ return "applied";
17
+ return "skipped";
18
+ }
19
+ async function applyPlanes(loaded, ctx) {
20
+ const reports = [];
21
+ for (const plane of loaded.planes) {
22
+ await ctx.checkFence();
23
+ const writer = resolvePlaneWriter(plane.kind, plane.catalogId);
24
+ const result = await writer(ctx, plane.items, {
25
+ ...plane.options,
26
+ catalogId: plane.catalogId,
27
+ });
28
+ reports.push({
29
+ kind: plane.kind,
30
+ catalogId: plane.catalogId,
31
+ itemCount: result.itemCount,
32
+ upserted: result.upserted,
33
+ skipped: result.skipped,
34
+ });
35
+ }
36
+ return reports;
37
+ }
38
+ async function applyToTarget(loaded, targetAgentId, options) {
39
+ const databaseName = getMemorixMetadataDatabaseName(targetAgentId);
40
+ let closeOwned = null;
41
+ try {
42
+ if (!options.skipPlatformCore && options.ensurePlatformCore) {
43
+ const core = await options.ensurePlatformCore(targetAgentId);
44
+ if (core &&
45
+ (core.outcome === "failed" || core.outcome === "conflict")) {
46
+ throw new MemorixPackageSeedError({
47
+ code: "CORE_BOOTSTRAP_FAILED",
48
+ message: `Platform core bootstrap ${core.outcome} for ${targetAgentId}`,
49
+ field: "platform-core",
50
+ value: core.outcome,
51
+ });
52
+ }
53
+ }
54
+ const opened = await openPackageSeedCatalox({
55
+ agentId: targetAgentId,
56
+ processEnv: options.processEnv,
57
+ mongoUri: options.mongoUri,
58
+ appId: options.appId,
59
+ });
60
+ closeOwned = opened.close;
61
+ await ensurePackageSeedCatalogs(opened.catalox);
62
+ const leaseKey = ledgerItemId(loaded.identity.packageId, targetAgentId);
63
+ const lease = await acquireSeedLease(opened.mongoDb, leaseKey);
64
+ try {
65
+ const existing = await readLedgerItem(opened.catalox, loaded.identity.packageId, targetAgentId);
66
+ if (options.mode === "strict" &&
67
+ existing?.status === "applied" &&
68
+ existing.contentHash === loaded.contentHash) {
69
+ return {
70
+ targetAgentId,
71
+ databaseName,
72
+ outcome: "skipped",
73
+ reasonCode: "SAME_CONTENT_HASH",
74
+ message: "Ledger contentHash matches; zero-write skip",
75
+ planes: existing.planes,
76
+ };
77
+ }
78
+ if (options.mode === "strict" &&
79
+ existing?.status === "applied" &&
80
+ existing.contentHash !== loaded.contentHash) {
81
+ return {
82
+ targetAgentId,
83
+ databaseName,
84
+ outcome: "conflict",
85
+ reasonCode: existing.seedRevision === loaded.manifest.seedRevision
86
+ ? "REVISION_NOT_BUMPED"
87
+ : "CONTENT_HASH_MISMATCH",
88
+ message: existing.seedRevision === loaded.manifest.seedRevision
89
+ ? "Payload changed but seedRevision was not bumped"
90
+ : "Applied seed content differs; use upgrade or force",
91
+ };
92
+ }
93
+ if (options.mode === "upgrade" &&
94
+ existing?.status === "applied" &&
95
+ existing.contentHash === loaded.contentHash) {
96
+ return {
97
+ targetAgentId,
98
+ databaseName,
99
+ outcome: "skipped",
100
+ reasonCode: "SAME_CONTENT_HASH",
101
+ message: "Ledger contentHash matches; zero-write skip",
102
+ planes: existing.planes,
103
+ };
104
+ }
105
+ if (options.mode === "upgrade" &&
106
+ existing?.status === "applied" &&
107
+ existing.seedRevision === loaded.manifest.seedRevision &&
108
+ existing.payloadHash !== loaded.payloadHash) {
109
+ return {
110
+ targetAgentId,
111
+ databaseName,
112
+ outcome: "conflict",
113
+ reasonCode: "REVISION_NOT_BUMPED",
114
+ message: "Payload changed but seedRevision was not bumped",
115
+ };
116
+ }
117
+ if (options.mode === "upgrade" &&
118
+ existing?.status === "applied" &&
119
+ existing.seedRevision === loaded.manifest.seedRevision &&
120
+ existing.contentHash !== loaded.contentHash) {
121
+ return {
122
+ targetAgentId,
123
+ databaseName,
124
+ outcome: "conflict",
125
+ reasonCode: "REVISION_NOT_BUMPED",
126
+ message: "upgrade requires a changed seedRevision",
127
+ };
128
+ }
129
+ const attempts = (existing?.attempts ?? 0) + 1;
130
+ await writeLedgerItem(opened.catalox, buildLedgerItem({
131
+ packageId: loaded.identity.packageId,
132
+ primaryAgentId: loaded.identity.agentId,
133
+ targetAgentId,
134
+ packageVersion: loaded.identity.packageVersion,
135
+ seedRevision: loaded.manifest.seedRevision,
136
+ payloadHash: loaded.payloadHash,
137
+ contentHash: loaded.contentHash,
138
+ status: "applying",
139
+ attempts,
140
+ appliedBy: options.actor,
141
+ }));
142
+ const planes = await applyPlanes(loaded, {
143
+ catalox: opened.catalox,
144
+ mongoDb: opened.mongoDb,
145
+ targetAgentId,
146
+ primaryAgentId: loaded.identity.agentId,
147
+ packageId: loaded.identity.packageId,
148
+ packageVersion: loaded.identity.packageVersion,
149
+ seedRevision: loaded.manifest.seedRevision,
150
+ mode: options.mode,
151
+ processEnv: options.processEnv,
152
+ appId: opened.appId,
153
+ abortSignal: lease.abortSignal,
154
+ checkFence: lease.checkFence,
155
+ });
156
+ await writeLedgerItem(opened.catalox, buildLedgerItem({
157
+ packageId: loaded.identity.packageId,
158
+ primaryAgentId: loaded.identity.agentId,
159
+ targetAgentId,
160
+ packageVersion: loaded.identity.packageVersion,
161
+ seedRevision: loaded.manifest.seedRevision,
162
+ payloadHash: loaded.payloadHash,
163
+ contentHash: loaded.contentHash,
164
+ status: "applied",
165
+ attempts,
166
+ appliedBy: options.actor,
167
+ planes,
168
+ }));
169
+ return {
170
+ targetAgentId,
171
+ databaseName,
172
+ outcome: "applied",
173
+ reasonCode: options.mode === "force" ? "FORCE_APPLIED" : "APPLIED",
174
+ planes,
175
+ };
176
+ }
177
+ catch (error) {
178
+ const message = error instanceof Error ? error.message : String(error);
179
+ const code = error instanceof MemorixPackageSeedError ? error.code : "APPLY_FAILED";
180
+ try {
181
+ const prior = await readLedgerItem(opened.catalox, loaded.identity.packageId, targetAgentId);
182
+ await writeLedgerItem(opened.catalox, buildLedgerItem({
183
+ packageId: loaded.identity.packageId,
184
+ primaryAgentId: loaded.identity.agentId,
185
+ targetAgentId,
186
+ packageVersion: loaded.identity.packageVersion,
187
+ seedRevision: loaded.manifest.seedRevision,
188
+ payloadHash: loaded.payloadHash,
189
+ contentHash: loaded.contentHash,
190
+ status: "failed",
191
+ attempts: (prior?.attempts ?? 0) + 1,
192
+ appliedBy: options.actor,
193
+ lastError: { message, at: new Date().toISOString(), code },
194
+ }));
195
+ }
196
+ catch {
197
+ /* best effort */
198
+ }
199
+ return {
200
+ targetAgentId,
201
+ databaseName,
202
+ outcome: "failed",
203
+ reasonCode: code,
204
+ message,
205
+ };
206
+ }
207
+ finally {
208
+ await lease.release().catch(() => undefined);
209
+ }
210
+ }
211
+ finally {
212
+ if (closeOwned)
213
+ await closeOwned().catch(() => undefined);
214
+ }
215
+ }
216
+ export async function ensureSeeded(options) {
217
+ const processEnv = options.processEnv ?? process.env;
218
+ const mode = options.mode ?? "strict";
219
+ const actor = options.actor ?? "package-seed";
220
+ const loaded = loadManifestFromDir(options.seedsDir, {
221
+ identity: options.identity,
222
+ });
223
+ if (loaded.identity.packageId === PLATFORM_CORE_PACKAGE_ID &&
224
+ !options.skipPlatformCore) {
225
+ // core pack itself must not recurse
226
+ options = { ...options, skipPlatformCore: true };
227
+ }
228
+ const destinationIds = options.applyTargetAgentIds?.length
229
+ ? options.applyTargetAgentIds
230
+ : loaded.identity.targetAgentIds;
231
+ const targets = [];
232
+ for (const targetAgentId of destinationIds) {
233
+ targets.push(await applyToTarget(loaded, targetAgentId, {
234
+ ...options,
235
+ mode,
236
+ processEnv,
237
+ actor,
238
+ }));
239
+ }
240
+ return {
241
+ outcome: aggregateOutcome(targets),
242
+ packageId: loaded.identity.packageId,
243
+ primaryAgentId: loaded.identity.agentId,
244
+ contentHash: loaded.contentHash,
245
+ payloadHash: loaded.payloadHash,
246
+ seedRevision: loaded.manifest.seedRevision,
247
+ targets,
248
+ };
249
+ }
250
+ export function createPackageSeeder(defaults) {
251
+ let closed = false;
252
+ const ensure = async (override = {}) => {
253
+ if (closed) {
254
+ throw new MemorixPackageSeedError({
255
+ code: "APPLY_FAILED",
256
+ message: "Package seeder has been closed",
257
+ });
258
+ }
259
+ return ensureSeeded({ ...defaults, ...override });
260
+ };
261
+ const status = async (packageId, targetAgentId) => {
262
+ const loaded = loadManifestFromDir(defaults.seedsDir, {
263
+ identity: defaults.identity,
264
+ });
265
+ const pkg = packageId ?? loaded.identity.packageId;
266
+ const targets = targetAgentId
267
+ ? [targetAgentId]
268
+ : loaded.identity.targetAgentIds;
269
+ const out = [];
270
+ for (const id of targets) {
271
+ const opened = await openPackageSeedCatalox({
272
+ agentId: id,
273
+ processEnv: defaults.processEnv,
274
+ mongoUri: defaults.mongoUri,
275
+ appId: defaults.appId,
276
+ });
277
+ try {
278
+ await ensurePackageSeedCatalogs(opened.catalox);
279
+ out.push({
280
+ targetAgentId: id,
281
+ databaseName: opened.databaseName,
282
+ ledger: await readLedgerItem(opened.catalox, pkg, id),
283
+ });
284
+ }
285
+ finally {
286
+ await opened.close();
287
+ }
288
+ }
289
+ return { targets: out };
290
+ };
291
+ const resetLedger = async (options) => {
292
+ const env = defaults.processEnv ?? process.env;
293
+ if (env.PACKAGE_SEED_ALLOW_RESET !== "1" || !options.yes) {
294
+ throw new MemorixPackageSeedError({
295
+ code: "RESET_NOT_ALLOWED",
296
+ message: "resetLedger requires PACKAGE_SEED_ALLOW_RESET=1 and yes: true",
297
+ });
298
+ }
299
+ if (!options.actor?.trim() || !options.reason?.trim()) {
300
+ throw new MemorixPackageSeedError({
301
+ code: "RESET_NOT_ALLOWED",
302
+ message: "resetLedger requires actor and reason",
303
+ });
304
+ }
305
+ const opened = await openPackageSeedCatalox({
306
+ agentId: options.targetAgentId,
307
+ processEnv: env,
308
+ mongoUri: defaults.mongoUri,
309
+ appId: defaults.appId,
310
+ });
311
+ try {
312
+ await ensurePackageSeedCatalogs(opened.catalox);
313
+ await deleteLedgerItem(opened.catalox, options.packageId, options.targetAgentId);
314
+ await opened.mongoDb
315
+ .collection("memorix-package-seed-leases")
316
+ .deleteOne({
317
+ _id: ledgerItemId(options.packageId, options.targetAgentId),
318
+ });
319
+ }
320
+ finally {
321
+ await opened.close();
322
+ }
323
+ };
324
+ const close = async () => {
325
+ closed = true;
326
+ };
327
+ return {
328
+ ensureSeeded: ensure,
329
+ status,
330
+ resetLedger,
331
+ close,
332
+ [Symbol.asyncDispose]: close,
333
+ };
334
+ }
335
+ //# sourceMappingURL=ensure-seeded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-seeded.js","sourceRoot":"","sources":["../src/ensure-seeded.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { MemorixPackageSeedErrorCode } from "./types.js";
2
+ export declare class MemorixPackageSeedError extends Error {
3
+ readonly code: MemorixPackageSeedErrorCode;
4
+ readonly field?: string;
5
+ readonly value?: unknown;
6
+ constructor(options: {
7
+ code: MemorixPackageSeedErrorCode;
8
+ message: string;
9
+ field?: string;
10
+ value?: unknown;
11
+ });
12
+ }
13
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAE9D,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEb,OAAO,EAAE;QACnB,IAAI,EAAE,2BAA2B,CAAC;QAClC,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB;CAOF"}
package/dist/errors.js ADDED
@@ -0,0 +1,13 @@
1
+ export class MemorixPackageSeedError extends Error {
2
+ code;
3
+ field;
4
+ value;
5
+ constructor(options) {
6
+ super(options.message);
7
+ this.name = "MemorixPackageSeedError";
8
+ this.code = options.code;
9
+ this.field = options.field;
10
+ this.value = options.value;
11
+ }
12
+ }
13
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACvC,IAAI,CAA8B;IAClC,KAAK,CAAU;IACf,KAAK,CAAW;IAEzB,YAAY,OAKX;QACC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;CACF"}
package/dist/hash.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare function canonicalize(value: unknown): unknown;
2
+ export declare function canonicalJson(value: unknown): string;
3
+ export declare function sha256Hex(value: string | Buffer): string;
4
+ export declare function hashCanonical(value: unknown): string;
5
+ export declare function ledgerItemId(packageId: string, targetAgentId: string): string;
6
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASpD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAI7E"}
package/dist/hash.js ADDED
@@ -0,0 +1,27 @@
1
+ import { createHash } from "node:crypto";
2
+ export function canonicalize(value) {
3
+ if (value === null || typeof value !== "object")
4
+ return value;
5
+ if (Array.isArray(value))
6
+ return value.map((item) => canonicalize(item));
7
+ const obj = value;
8
+ const out = {};
9
+ for (const key of Object.keys(obj).sort()) {
10
+ out[key] = canonicalize(obj[key]);
11
+ }
12
+ return out;
13
+ }
14
+ export function canonicalJson(value) {
15
+ return JSON.stringify(canonicalize(value));
16
+ }
17
+ export function sha256Hex(value) {
18
+ return createHash("sha256").update(value).digest("hex");
19
+ }
20
+ export function hashCanonical(value) {
21
+ return sha256Hex(canonicalJson(value));
22
+ }
23
+ export function ledgerItemId(packageId, targetAgentId) {
24
+ const enc = (s) => Buffer.from(s, "utf8").toString("base64url");
25
+ return `seed:v1:${enc(packageId)}:${enc(targetAgentId)}`;
26
+ }
27
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,aAAqB;IACnE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CACxB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,WAAW,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { PackageSeedIdentity } from "./types.js";
2
+ export declare function uniqueSorted(values: string[]): string[];
3
+ export declare function assertAgentId(agentId: string, field?: string): void;
4
+ export declare function normalizeIdentity(identity: PackageSeedIdentity): Required<PackageSeedIdentity> & {
5
+ targetAgentIds: string[];
6
+ };
7
+ export declare function assertIdentitiesMatch(a: PackageSeedIdentity, b: PackageSeedIdentity, field: string): void;
8
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEvD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAY,GAAG,IAAI,CActE;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,mBAAmB,GAC5B,QAAQ,CAAC,mBAAmB,CAAC,GAAG;IAAE,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,CA2B9D;AAED,wBAAgB,qBAAqB,CACnC,CAAC,EAAE,mBAAmB,EACtB,CAAC,EAAE,mBAAmB,EACtB,KAAK,EAAE,MAAM,GACZ,IAAI,CAcN"}
@@ -0,0 +1,60 @@
1
+ import { getMemorixMetadataDatabaseName } from "@x12i/memorix-db-router";
2
+ import { MemorixPackageSeedError } from "./errors.js";
3
+ export function uniqueSorted(values) {
4
+ return [...new Set(values.map((v) => v.trim()).filter(Boolean))].sort();
5
+ }
6
+ export function assertAgentId(agentId, field = "agentId") {
7
+ try {
8
+ getMemorixMetadataDatabaseName(agentId);
9
+ }
10
+ catch (error) {
11
+ throw new MemorixPackageSeedError({
12
+ code: "INVALID_IDENTITY",
13
+ message: error instanceof Error
14
+ ? `Invalid ${field}: ${error.message}`
15
+ : `Invalid ${field}`,
16
+ field,
17
+ value: agentId,
18
+ });
19
+ }
20
+ }
21
+ export function normalizeIdentity(identity) {
22
+ if (!identity || typeof identity !== "object") {
23
+ throw new MemorixPackageSeedError({
24
+ code: "MISSING_IDENTITY",
25
+ message: "Package seed identity is required",
26
+ });
27
+ }
28
+ const packageId = identity.packageId?.trim();
29
+ const packageVersion = identity.packageVersion?.trim();
30
+ const agentId = identity.agentId?.trim();
31
+ if (!packageId || !packageVersion || !agentId) {
32
+ throw new MemorixPackageSeedError({
33
+ code: "MISSING_IDENTITY",
34
+ message: "identity.packageId, identity.packageVersion, and identity.agentId are required",
35
+ });
36
+ }
37
+ assertAgentId(agentId, "agentId");
38
+ const targetAgentIds = uniqueSorted(identity.targetAgentIds?.length ? identity.targetAgentIds : [agentId]);
39
+ if (!targetAgentIds.includes(agentId)) {
40
+ targetAgentIds.push(agentId);
41
+ targetAgentIds.sort();
42
+ }
43
+ for (const id of targetAgentIds)
44
+ assertAgentId(id, "targetAgentIds");
45
+ return { packageId, packageVersion, agentId, targetAgentIds };
46
+ }
47
+ export function assertIdentitiesMatch(a, b, field) {
48
+ const na = normalizeIdentity(a);
49
+ const nb = normalizeIdentity(b);
50
+ if (na.packageId !== nb.packageId ||
51
+ na.agentId !== nb.agentId ||
52
+ JSON.stringify(na.targetAgentIds) !== JSON.stringify(nb.targetAgentIds)) {
53
+ throw new MemorixPackageSeedError({
54
+ code: "IDENTITY_MISMATCH",
55
+ message: `Identity mismatch for ${field}`,
56
+ field,
57
+ });
58
+ }
59
+ }
60
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { attachPlatformCoreBootstrap, ensurePlatformCoreSeeded, resolveDefaultPlatformCoreSeedsDir, setPlatformCoreSeedsDir } from "./platform-core.js";
2
+ import { createPackageSeeder, ensureSeeded, type EnsureSeededOptions, type PackageSeeder } from "./ensure-seeded.js";
3
+ import { ensurePackageSeedCatalogs, openPackageSeedCatalox } from "./catalox.js";
4
+ import { loadManifestFromDir, loadPackageSeedJson, loadIdentityFromPackageJson } from "./manifest.js";
5
+ import { registerCustomPlaneWriter, listBuiltinPlaneKinds } from "./writers/registry.js";
6
+ import { MemorixPackageSeedError } from "./errors.js";
7
+ import { PLATFORM_CORE_PACKAGE_ID, MEMORIX_PACKAGE_SEED_LEDGER_CATALOG, MEMORIX_PACKAGE_SEED_LEASES_COLLECTION, BUILTIN_PLANE_KINDS, NATIVE_CATALOG_ALLOWLIST } from "./constants.js";
8
+ import { hashCanonical, ledgerItemId, canonicalize } from "./hash.js";
9
+ import { normalizeIdentity, assertAgentId } from "./identity.js";
10
+ export type { EnsureSeededResult, LoadedPackageSeed, MemorixPackageSeedMode, MemorixPackageSeedOutcome, PackageSeedIdentity, PackageSeedManifest, PackageSeedLedgerItem, PlaneWriteReport, TargetApplyReport, PlaneWriter, SeedApplyContext, } from "./types.js";
11
+ export { MemorixPackageSeedError, createPackageSeeder, ensureSeeded, ensurePackageSeedCatalogs, openPackageSeedCatalox, loadManifestFromDir, loadPackageSeedJson, loadIdentityFromPackageJson, registerCustomPlaneWriter, listBuiltinPlaneKinds, ensurePlatformCoreSeeded, setPlatformCoreSeedsDir, resolveDefaultPlatformCoreSeedsDir, attachPlatformCoreBootstrap, PLATFORM_CORE_PACKAGE_ID, MEMORIX_PACKAGE_SEED_LEDGER_CATALOG, MEMORIX_PACKAGE_SEED_LEASES_COLLECTION, BUILTIN_PLANE_KINDS, NATIVE_CATALOG_ALLOWLIST, hashCanonical, ledgerItemId, canonicalize, normalizeIdentity, assertAgentId, };
12
+ export type { EnsureSeededOptions, PackageSeeder };
13
+ /** Startup helper for trusted package configuration only. */
14
+ export declare function runPackageSeedOnStart(options: {
15
+ seedsDir: string;
16
+ identity?: import("./types.js").PackageSeedIdentity;
17
+ processEnv?: NodeJS.ProcessEnv;
18
+ mongoUri?: string;
19
+ appId?: string;
20
+ }): Promise<import("./types.js").EnsureSeededResult | null>;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,kCAAkC,EAClC,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,wBAAwB,EACxB,mCAAmC,EACnC,sCAAsC,EACtC,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEjE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,kCAAkC,EAClC,2BAA2B,EAC3B,wBAAwB,EACxB,mCAAmC,EACnC,sCAAsC,EACtC,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,aAAa,GACd,CAAC;AAEF,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,CAAC;AAEnD,6DAA6D;AAC7D,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,YAAY,EAAE,mBAAmB,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAAC,CAmC1D"}
package/dist/index.js ADDED
@@ -0,0 +1,45 @@
1
+ import { attachPlatformCoreBootstrap, ensurePlatformCoreSeeded, resolveDefaultPlatformCoreSeedsDir, setPlatformCoreSeedsDir, } from "./platform-core.js";
2
+ import { createPackageSeeder, ensureSeeded, } from "./ensure-seeded.js";
3
+ import { ensurePackageSeedCatalogs, openPackageSeedCatalox, } from "./catalox.js";
4
+ import { loadManifestFromDir, loadPackageSeedJson, loadIdentityFromPackageJson, } from "./manifest.js";
5
+ import { registerCustomPlaneWriter, listBuiltinPlaneKinds } from "./writers/registry.js";
6
+ import { MemorixPackageSeedError } from "./errors.js";
7
+ import { PLATFORM_CORE_PACKAGE_ID, MEMORIX_PACKAGE_SEED_LEDGER_CATALOG, MEMORIX_PACKAGE_SEED_LEASES_COLLECTION, BUILTIN_PLANE_KINDS, NATIVE_CATALOG_ALLOWLIST, } from "./constants.js";
8
+ import { hashCanonical, ledgerItemId, canonicalize } from "./hash.js";
9
+ import { normalizeIdentity, assertAgentId } from "./identity.js";
10
+ export { MemorixPackageSeedError, createPackageSeeder, ensureSeeded, ensurePackageSeedCatalogs, openPackageSeedCatalox, loadManifestFromDir, loadPackageSeedJson, loadIdentityFromPackageJson, registerCustomPlaneWriter, listBuiltinPlaneKinds, ensurePlatformCoreSeeded, setPlatformCoreSeedsDir, resolveDefaultPlatformCoreSeedsDir, attachPlatformCoreBootstrap, PLATFORM_CORE_PACKAGE_ID, MEMORIX_PACKAGE_SEED_LEDGER_CATALOG, MEMORIX_PACKAGE_SEED_LEASES_COLLECTION, BUILTIN_PLANE_KINDS, NATIVE_CATALOG_ALLOWLIST, hashCanonical, ledgerItemId, canonicalize, normalizeIdentity, assertAgentId, };
11
+ /** Startup helper for trusted package configuration only. */
12
+ export async function runPackageSeedOnStart(options) {
13
+ const env = options.processEnv ?? process.env;
14
+ if (env.PACKAGE_SEED_ON_START !== "1")
15
+ return null;
16
+ const modeRaw = (env.PACKAGE_SEED_MODE ?? "strict").trim();
17
+ const mode = modeRaw === "upgrade" || modeRaw === "force" || modeRaw === "strict"
18
+ ? modeRaw
19
+ : "strict";
20
+ const strict = env.PACKAGE_SEED_STRICT !== "0";
21
+ const seeder = createPackageSeeder(attachPlatformCoreBootstrap({
22
+ seedsDir: options.seedsDir,
23
+ identity: options.identity,
24
+ mode,
25
+ processEnv: env,
26
+ mongoUri: options.mongoUri,
27
+ appId: options.appId,
28
+ }));
29
+ try {
30
+ const result = await seeder.ensureSeeded();
31
+ if (strict &&
32
+ (result.outcome === "failed" || result.outcome === "conflict")) {
33
+ throw new MemorixPackageSeedError({
34
+ code: "APPLY_FAILED",
35
+ message: `Package seed on start ${result.outcome}`,
36
+ value: result.outcome,
37
+ });
38
+ }
39
+ return result;
40
+ }
41
+ finally {
42
+ await seeder.close();
43
+ }
44
+ }
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,kCAAkC,EAClC,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,wBAAwB,EACxB,mCAAmC,EACnC,sCAAsC,EACtC,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAgBjE,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,kCAAkC,EAClC,2BAA2B,EAC3B,wBAAwB,EACxB,mCAAmC,EACnC,sCAAsC,EACtC,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,aAAa,GACd,CAAC;AAIF,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAM3C;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAC9C,IAAI,GAAG,CAAC,qBAAqB,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,MAAM,IAAI,GACR,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,QAAQ;QAClE,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,QAAQ,CAAC;IACf,MAAM,MAAM,GAAG,GAAG,CAAC,mBAAmB,KAAK,GAAG,CAAC;IAC/C,MAAM,MAAM,GAAG,mBAAmB,CAChC,2BAA2B,CAAC;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI;QACJ,UAAU,EAAE,GAAG;QACf,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CACH,CAAC;IACF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QAC3C,IACE,MAAM;YACN,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,EAC9D,CAAC;YACD,MAAM,IAAI,uBAAuB,CAAC;gBAChC,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,yBAAyB,MAAM,CAAC,OAAO,EAAE;gBAClD,KAAK,EAAE,MAAM,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Db } from "mongodb";
2
+ export type SeedLease = {
3
+ key: string;
4
+ owner: string;
5
+ fence: number;
6
+ release: () => Promise<void>;
7
+ heartbeat: () => Promise<boolean>;
8
+ checkFence: () => Promise<void>;
9
+ abortSignal: AbortSignal;
10
+ stop: () => void;
11
+ };
12
+ export declare function acquireSeedLease(db: Db, key: string, options?: {
13
+ ttlMs?: number;
14
+ waitMs?: number;
15
+ pollMs?: number;
16
+ }): Promise<SeedLease>;
17
+ //# sourceMappingURL=lease.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../src/lease.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AASlC,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AASF,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,GACL,OAAO,CAAC,SAAS,CAAC,CA6HpB"}