@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.
- package/README.md +114 -0
- package/dist/agent-merge.d.ts +17 -0
- package/dist/agent-merge.d.ts.map +1 -0
- package/dist/agent-merge.js +94 -0
- package/dist/agent-merge.js.map +1 -0
- package/dist/catalox.d.ts +21 -0
- package/dist/catalox.d.ts.map +1 -0
- package/dist/catalox.js +37 -0
- package/dist/catalox.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +161 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants.d.ts +13 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +37 -0
- package/dist/constants.js.map +1 -0
- package/dist/ensure-seeded.d.ts +36 -0
- package/dist/ensure-seeded.d.ts.map +1 -0
- package/dist/ensure-seeded.js +335 -0
- package/dist/ensure-seeded.js.map +1 -0
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/hash.d.ts +6 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +27 -0
- package/dist/hash.js.map +1 -0
- package/dist/identity.d.ts +8 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +60 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/lease.d.ts +17 -0
- package/dist/lease.d.ts.map +1 -0
- package/dist/lease.js +113 -0
- package/dist/lease.js.map +1 -0
- package/dist/ledger.d.ts +20 -0
- package/dist/ledger.d.ts.map +1 -0
- package/dist/ledger.js +48 -0
- package/dist/ledger.js.map +1 -0
- package/dist/manifest.d.ts +9 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +275 -0
- package/dist/manifest.js.map +1 -0
- package/dist/platform-core.d.ts +19 -0
- package/dist/platform-core.d.ts.map +1 -0
- package/dist/platform-core.js +68 -0
- package/dist/platform-core.js.map +1 -0
- package/dist/secrets.d.ts +2 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +34 -0
- package/dist/secrets.js.map +1 -0
- package/dist/types.d.ts +115 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/writers/inventory-agents.d.ts +3 -0
- package/dist/writers/inventory-agents.d.ts.map +1 -0
- package/dist/writers/inventory-agents.js +102 -0
- package/dist/writers/inventory-agents.js.map +1 -0
- package/dist/writers/native-items.d.ts +6 -0
- package/dist/writers/native-items.d.ts.map +1 -0
- package/dist/writers/native-items.js +63 -0
- package/dist/writers/native-items.js.map +1 -0
- package/dist/writers/orchestration.d.ts +5 -0
- package/dist/writers/orchestration.d.ts.map +1 -0
- package/dist/writers/orchestration.js +102 -0
- package/dist/writers/orchestration.js.map +1 -0
- package/dist/writers/pipeline-services.d.ts +3 -0
- package/dist/writers/pipeline-services.d.ts.map +1 -0
- package/dist/writers/pipeline-services.js +52 -0
- package/dist/writers/pipeline-services.js.map +1 -0
- package/dist/writers/registry.d.ts +5 -0
- package/dist/writers/registry.d.ts.map +1 -0
- package/dist/writers/registry.js +81 -0
- package/dist/writers/registry.js.map +1 -0
- package/dist/writers/worker-bases.d.ts +3 -0
- package/dist/writers/worker-bases.d.ts.map +1 -0
- package/dist/writers/worker-bases.js +36 -0
- package/dist/writers/worker-bases.js.map +1 -0
- package/package.json +62 -0
package/README.md
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# `@x12i/memorix-package-seed`
|
|
2
|
+
|
|
3
|
+
Package-owned Catalox seeding with mandatory agent identity, multi-agent replication, platform-core bootstrap, validated plane writers, and an atomic once-only ledger.
|
|
4
|
+
|
|
5
|
+
## Catalox database routing
|
|
6
|
+
|
|
7
|
+
Seeding does **not** use `MEMORIX_AGENT_ID` / `MEMORIX_CATALOX_DB` for the destination database. The pack declares `identity.agentId` + `targetAgentIds`, and each destination is opened as:
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { getMemorixMetadataDatabaseName } from "@x12i/memorix-db-router";
|
|
11
|
+
|
|
12
|
+
const dbName = getMemorixMetadataDatabaseName(agentId); // `<agentId>-memorix-catalox`
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Shared env requirements: `MONGO_URI` and Memorix app id (`MEMORIX_APP_ID` / descriptors resolution).
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @x12i/memorix-package-seed
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Pack layout
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
my-pack/
|
|
27
|
+
package-seed.json
|
|
28
|
+
package-seed.manifest.json
|
|
29
|
+
pipeline-services.json # optional
|
|
30
|
+
abstraction-map.json # optional
|
|
31
|
+
pipeline-steps.json # optional
|
|
32
|
+
pipeline-definitions.json # optional
|
|
33
|
+
pipeline-templates.json # optional
|
|
34
|
+
inventory-agents.json # optional
|
|
35
|
+
artifacts/ # authoring-only (e.g. entra mappings)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Staging packs live under [`.operational/package-seed-packs/`](../.operational/package-seed-packs/README.md) (MOVE-OUT vs STAY documented there).
|
|
39
|
+
|
|
40
|
+
## API
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
import {
|
|
44
|
+
createPackageSeeder,
|
|
45
|
+
attachPlatformCoreBootstrap,
|
|
46
|
+
ensureSeeded,
|
|
47
|
+
loadManifestFromDir,
|
|
48
|
+
runPackageSeedOnStart,
|
|
49
|
+
} from "@x12i/memorix-package-seed";
|
|
50
|
+
|
|
51
|
+
const seeder = createPackageSeeder(
|
|
52
|
+
attachPlatformCoreBootstrap({
|
|
53
|
+
seedsDir: new URL("./seeds", import.meta.url).pathname,
|
|
54
|
+
mode: "strict", // strict | upgrade | force
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
const result = await seeder.ensureSeeded();
|
|
60
|
+
// result.outcome: applied | skipped | conflict | failed
|
|
61
|
+
} finally {
|
|
62
|
+
await seeder.close();
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Startup helper (trusted package config only — never wire to arbitrary HTTP input):
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
PACKAGE_SEED_ON_START=1 PACKAGE_SEED_MODE=strict PACKAGE_SEED_STRICT=1
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
await runPackageSeedOnStart({ seedsDir: "./seeds" });
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Modes
|
|
77
|
+
|
|
78
|
+
| Mode | Behavior |
|
|
79
|
+
|------|----------|
|
|
80
|
+
| `strict` (default) | same contentHash → skip; different → conflict |
|
|
81
|
+
| `upgrade` | re-apply when `seedRevision` changes; revision-not-bumped → conflict |
|
|
82
|
+
| `force` | always re-apply (ops) |
|
|
83
|
+
|
|
84
|
+
### Platform core
|
|
85
|
+
|
|
86
|
+
Before integration packs, `ensurePlatformCoreSeeded(targetAgentId)` applies `@x12i/memorix-platform-core-seed` into that agent’s Catalox DB (`PACKAGE_SEED_PLATFORM_CORE_DIR` or `.operational/package-seed-packs/_platform-core`).
|
|
87
|
+
|
|
88
|
+
### Ledger + lease
|
|
89
|
+
|
|
90
|
+
- Ledger catalog: `memorix-package-seed-ledger` (Catalox native items)
|
|
91
|
+
- Atomic leases: Mongo collection `memorix-package-seed-leases` with fencing/heartbeat
|
|
92
|
+
- `resetLedger` removes ledger/lease state only (never seeded catalog data); requires `PACKAGE_SEED_ALLOW_RESET=1`, `yes: true`, actor, reason
|
|
93
|
+
|
|
94
|
+
## CLI
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npx memorix-package-seed validate --dir ./seeds
|
|
98
|
+
npx memorix-package-seed apply --dir ./seeds --mode strict
|
|
99
|
+
npx memorix-package-seed status --dir ./seeds
|
|
100
|
+
PACKAGE_SEED_ALLOW_RESET=1 npx memorix-package-seed reset-ledger \
|
|
101
|
+
--dir ./seeds --target agent-firewall-topology --actor ops --reason migrate --yes
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Exit codes: `0` ok/skipped, `1` failed, `2` validation/conflict, `3` status-not-found.
|
|
105
|
+
|
|
106
|
+
## Security boundary
|
|
107
|
+
|
|
108
|
+
Seed roots and identities are **trusted deployment configuration**. Do not expose an HTTP endpoint that accepts arbitrary package/agent/file input.
|
|
109
|
+
|
|
110
|
+
## Related
|
|
111
|
+
|
|
112
|
+
- `@x12i/memorix-db-router` — database name routing
|
|
113
|
+
- `@x12i/memorix-pipeline-services` / `@x12i/memorix-pipeline-orchestrator` — typed plane writers
|
|
114
|
+
- `.operational/package-seed-packs/` — exported MOVE-OUT packs
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare function collectItemAgents(item: unknown): string[];
|
|
2
|
+
/**
|
|
3
|
+
* Ensures every declared item agent is in targetAgentIds, then merges primary
|
|
4
|
+
* agentId into agents / scope.agents without dropping additional scopes.
|
|
5
|
+
* Set injectAgents:false for inventory-agents plane items ({id,label} defs).
|
|
6
|
+
*/
|
|
7
|
+
export declare function mergePrimaryAgent(item: unknown, primaryAgentId: string, options: {
|
|
8
|
+
targetAgentIds: string[];
|
|
9
|
+
allowAdditionalAgents: boolean;
|
|
10
|
+
injectAgents?: boolean;
|
|
11
|
+
}): unknown;
|
|
12
|
+
export declare function mergePlaneItems(items: unknown[], primaryAgentId: string, options: {
|
|
13
|
+
targetAgentIds: string[];
|
|
14
|
+
allowAdditionalAgents: boolean;
|
|
15
|
+
injectAgents?: boolean;
|
|
16
|
+
}): unknown[];
|
|
17
|
+
//# sourceMappingURL=agent-merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-merge.d.ts","sourceRoot":"","sources":["../src/agent-merge.ts"],"names":[],"mappings":"AAOA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAczD;AAaD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE;IACP,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GACA,OAAO,CAsDT;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EAAE,EAChB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE;IACP,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GACA,OAAO,EAAE,CAEX"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { MemorixPackageSeedError } from "./errors.js";
|
|
2
|
+
import { uniqueSorted } from "./identity.js";
|
|
3
|
+
function isRecord(value) {
|
|
4
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5
|
+
}
|
|
6
|
+
export function collectItemAgents(item) {
|
|
7
|
+
if (!isRecord(item))
|
|
8
|
+
return [];
|
|
9
|
+
const agents = [];
|
|
10
|
+
if (Array.isArray(item.agents)) {
|
|
11
|
+
for (const a of item.agents) {
|
|
12
|
+
if (typeof a === "string" && a.trim())
|
|
13
|
+
agents.push(a.trim());
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
if (isRecord(item.scope) && Array.isArray(item.scope.agents)) {
|
|
17
|
+
for (const a of item.scope.agents) {
|
|
18
|
+
if (typeof a === "string" && a.trim())
|
|
19
|
+
agents.push(a.trim());
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return uniqueSorted(agents);
|
|
23
|
+
}
|
|
24
|
+
function isInventoryPolicyDocument(item) {
|
|
25
|
+
if (item.id === "memorix-ui-agents")
|
|
26
|
+
return true;
|
|
27
|
+
if (Array.isArray(item.agents) &&
|
|
28
|
+
item.agents.some((a) => isRecord(a) && typeof a.id === "string")) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Ensures every declared item agent is in targetAgentIds, then merges primary
|
|
35
|
+
* agentId into agents / scope.agents without dropping additional scopes.
|
|
36
|
+
* Set injectAgents:false for inventory-agents plane items ({id,label} defs).
|
|
37
|
+
*/
|
|
38
|
+
export function mergePrimaryAgent(item, primaryAgentId, options) {
|
|
39
|
+
if (!isRecord(item))
|
|
40
|
+
return item;
|
|
41
|
+
if (isInventoryPolicyDocument(item) || options.injectAgents === false) {
|
|
42
|
+
const nestedIds = Array.isArray(item.agents)
|
|
43
|
+
? item.agents
|
|
44
|
+
.filter((a) => isRecord(a))
|
|
45
|
+
.map((a) => (typeof a.id === "string" ? a.id.trim() : ""))
|
|
46
|
+
.filter(Boolean)
|
|
47
|
+
: [];
|
|
48
|
+
const declaredId = typeof item.id === "string" &&
|
|
49
|
+
item.id.trim() &&
|
|
50
|
+
item.id !== "memorix-ui-agents"
|
|
51
|
+
? [item.id.trim()]
|
|
52
|
+
: [];
|
|
53
|
+
const ids = uniqueSorted([...nestedIds, ...declaredId]);
|
|
54
|
+
const foreign = ids.filter((a) => !options.targetAgentIds.includes(a));
|
|
55
|
+
if (foreign.length > 0) {
|
|
56
|
+
throw new MemorixPackageSeedError({
|
|
57
|
+
code: "AGENT_SCOPE_MISMATCH",
|
|
58
|
+
message: `Item agents ${JSON.stringify(foreign)} are outside targetAgentIds ${JSON.stringify(options.targetAgentIds)}`,
|
|
59
|
+
field: "agents",
|
|
60
|
+
value: foreign,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return item;
|
|
64
|
+
}
|
|
65
|
+
const next = { ...item };
|
|
66
|
+
const existing = collectItemAgents(item);
|
|
67
|
+
const foreign = existing.filter((a) => !options.targetAgentIds.includes(a));
|
|
68
|
+
if (foreign.length > 0) {
|
|
69
|
+
throw new MemorixPackageSeedError({
|
|
70
|
+
code: "AGENT_SCOPE_MISMATCH",
|
|
71
|
+
message: `Item agents ${JSON.stringify(foreign)} are outside targetAgentIds ${JSON.stringify(options.targetAgentIds)}`,
|
|
72
|
+
field: "agents",
|
|
73
|
+
value: foreign,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const merged = uniqueSorted([...existing, primaryAgentId]);
|
|
77
|
+
next.agents = merged;
|
|
78
|
+
if (isRecord(next.scope)) {
|
|
79
|
+
next.scope = {
|
|
80
|
+
...next.scope,
|
|
81
|
+
agents: uniqueSorted([
|
|
82
|
+
...(Array.isArray(next.scope.agents)
|
|
83
|
+
? next.scope.agents.filter((a) => typeof a === "string")
|
|
84
|
+
: []),
|
|
85
|
+
primaryAgentId,
|
|
86
|
+
]),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return next;
|
|
90
|
+
}
|
|
91
|
+
export function mergePlaneItems(items, primaryAgentId, options) {
|
|
92
|
+
return items.map((item) => mergePrimaryAgent(item, primaryAgentId, options));
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=agent-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-merge.js","sourceRoot":"","sources":["../src/agent-merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CataloxBound } from "@x12i/catalox";
|
|
2
|
+
import type { Db } from "mongodb";
|
|
3
|
+
export type OpenPackageSeedCataloxResult = {
|
|
4
|
+
catalox: CataloxBound;
|
|
5
|
+
mongoDb: Db;
|
|
6
|
+
mongoStore: {
|
|
7
|
+
close: () => Promise<void>;
|
|
8
|
+
db: Db;
|
|
9
|
+
};
|
|
10
|
+
databaseName: string;
|
|
11
|
+
appId: string;
|
|
12
|
+
close: () => Promise<void>;
|
|
13
|
+
};
|
|
14
|
+
export declare function openPackageSeedCatalox(options: {
|
|
15
|
+
agentId: string;
|
|
16
|
+
processEnv?: NodeJS.ProcessEnv;
|
|
17
|
+
mongoUri?: string;
|
|
18
|
+
appId?: string;
|
|
19
|
+
}): Promise<OpenPackageSeedCataloxResult>;
|
|
20
|
+
export declare function ensurePackageSeedCatalogs(catalox: CataloxBound): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=catalox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalox.d.ts","sourceRoot":"","sources":["../src/catalox.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAKlC,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,EAAE,CAAC;IACZ,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,EAAE,EAAE,EAAE,CAAA;KAAE,CAAC;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CA4BxC;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
package/dist/catalox.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { getMemorixMetadataDatabaseName } from "@x12i/memorix-db-router";
|
|
2
|
+
import { createMemorixCataloxFromEnv, resolveMemorixAppId, } from "@x12i/memorix-descriptors";
|
|
3
|
+
import { MEMORIX_PACKAGE_SEED_LEDGER_CATALOG, } from "./constants.js";
|
|
4
|
+
export async function openPackageSeedCatalox(options) {
|
|
5
|
+
const processEnv = options.processEnv ?? process.env;
|
|
6
|
+
const databaseName = getMemorixMetadataDatabaseName(options.agentId);
|
|
7
|
+
const appId = resolveMemorixAppId({ appId: options.appId }, processEnv);
|
|
8
|
+
const { catalox, mongoStore } = await createMemorixCataloxFromEnv({
|
|
9
|
+
processEnv,
|
|
10
|
+
dbName: databaseName,
|
|
11
|
+
mongoUri: options.mongoUri,
|
|
12
|
+
});
|
|
13
|
+
const bound = catalox.withContext({
|
|
14
|
+
appId,
|
|
15
|
+
actor: { type: "service", id: `package-seed:${options.agentId}` },
|
|
16
|
+
superAdmin: true,
|
|
17
|
+
});
|
|
18
|
+
const close = async () => {
|
|
19
|
+
await mongoStore.close();
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
catalox: bound,
|
|
23
|
+
mongoDb: mongoStore.db,
|
|
24
|
+
mongoStore,
|
|
25
|
+
databaseName,
|
|
26
|
+
appId,
|
|
27
|
+
close,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export async function ensurePackageSeedCatalogs(catalox) {
|
|
31
|
+
await catalox.ensureCatalog({
|
|
32
|
+
catalogId: MEMORIX_PACKAGE_SEED_LEDGER_CATALOG,
|
|
33
|
+
name: "Memorix package seed ledger",
|
|
34
|
+
status: "active",
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=catalox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalox.js","sourceRoot":"","sources":["../src/catalox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,mCAAmC,GACpC,MAAM,gBAAgB,CAAC;AAWxB,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAK5C;IACC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IACrD,MAAM,YAAY,GAAG,8BAA8B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,mBAAmB,CAC/B,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EACxB,UAAU,CACX,CAAC;IACF,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,2BAA2B,CAAC;QAChE,UAAU;QACV,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;QAChC,KAAK;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,OAAO,CAAC,OAAO,EAAE,EAAE;QACjE,UAAU,EAAE,IAAI;KACjB,CAAiB,CAAC;IACnB,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,UAAU,CAAC,EAAE;QACtB,UAAU;QACV,YAAY;QACZ,KAAK;QACL,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAqB;IAErB,MAAM,OAAO,CAAC,aAAa,CAAC;QAC1B,SAAS,EAAE,mCAAmC;QAC9C,IAAI,EAAE,6BAA6B;QACnC,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;AACL,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { MemorixPackageSeedError } from "./errors.js";
|
|
4
|
+
import { createPackageSeeder, ensureSeeded } from "./ensure-seeded.js";
|
|
5
|
+
import { loadManifestFromDir } from "./manifest.js";
|
|
6
|
+
import { attachPlatformCoreBootstrap } from "./platform-core.js";
|
|
7
|
+
function printHelp() {
|
|
8
|
+
console.log(`memorix-package-seed <command> [options]
|
|
9
|
+
|
|
10
|
+
Commands:
|
|
11
|
+
validate --dir <seedDir> [--agent <agentId>]
|
|
12
|
+
apply --dir <seedDir> [--agent <agentId>] [--mode strict|upgrade|force]
|
|
13
|
+
status --dir <seedDir> [--agent <agentId>]
|
|
14
|
+
reset-ledger --dir <seedDir> --target <agentId> --actor <who> --reason <why> --yes
|
|
15
|
+
|
|
16
|
+
Exit codes:
|
|
17
|
+
0 applied/skipped/status-found/valid
|
|
18
|
+
1 failed
|
|
19
|
+
2 validation/conflict
|
|
20
|
+
3 status-not-found
|
|
21
|
+
`);
|
|
22
|
+
}
|
|
23
|
+
function argValue(args, name) {
|
|
24
|
+
const idx = args.indexOf(name);
|
|
25
|
+
if (idx === -1)
|
|
26
|
+
return undefined;
|
|
27
|
+
return args[idx + 1];
|
|
28
|
+
}
|
|
29
|
+
function hasFlag(args, name) {
|
|
30
|
+
return args.includes(name);
|
|
31
|
+
}
|
|
32
|
+
function parseMode(raw) {
|
|
33
|
+
if (!raw || raw === "strict")
|
|
34
|
+
return "strict";
|
|
35
|
+
if (raw === "upgrade" || raw === "force")
|
|
36
|
+
return raw;
|
|
37
|
+
throw new MemorixPackageSeedError({
|
|
38
|
+
code: "INVALID_MANIFEST",
|
|
39
|
+
message: `Invalid --mode ${raw}`,
|
|
40
|
+
field: "mode",
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async function main(argv) {
|
|
44
|
+
const [cmd, ...args] = argv;
|
|
45
|
+
if (!cmd || cmd === "--help" || cmd === "-h" || cmd === "help") {
|
|
46
|
+
printHelp();
|
|
47
|
+
return 0;
|
|
48
|
+
}
|
|
49
|
+
const dir = argValue(args, "--dir");
|
|
50
|
+
if (!dir) {
|
|
51
|
+
console.error("Missing --dir <seedDir>");
|
|
52
|
+
return 2;
|
|
53
|
+
}
|
|
54
|
+
const seedsDir = resolve(dir);
|
|
55
|
+
const agent = argValue(args, "--agent");
|
|
56
|
+
try {
|
|
57
|
+
if (cmd === "validate") {
|
|
58
|
+
const loaded = loadManifestFromDir(seedsDir, { cliAgentId: agent });
|
|
59
|
+
console.log(JSON.stringify({
|
|
60
|
+
ok: true,
|
|
61
|
+
packageId: loaded.identity.packageId,
|
|
62
|
+
agentId: loaded.identity.agentId,
|
|
63
|
+
targetAgentIds: loaded.identity.targetAgentIds,
|
|
64
|
+
seedRevision: loaded.manifest.seedRevision,
|
|
65
|
+
payloadHash: loaded.payloadHash,
|
|
66
|
+
contentHash: loaded.contentHash,
|
|
67
|
+
planes: loaded.planes.map((p) => ({
|
|
68
|
+
kind: p.kind,
|
|
69
|
+
catalogId: p.catalogId,
|
|
70
|
+
itemCount: p.items.length,
|
|
71
|
+
source: p.source,
|
|
72
|
+
})),
|
|
73
|
+
artifacts: loaded.artifactPaths,
|
|
74
|
+
}, null, 2));
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
if (cmd === "apply") {
|
|
78
|
+
const mode = parseMode(argValue(args, "--mode"));
|
|
79
|
+
// Assert --agent identity up front.
|
|
80
|
+
loadManifestFromDir(seedsDir, { cliAgentId: agent });
|
|
81
|
+
const result = await ensureSeeded(attachPlatformCoreBootstrap({
|
|
82
|
+
seedsDir,
|
|
83
|
+
mode,
|
|
84
|
+
actor: "cli",
|
|
85
|
+
}));
|
|
86
|
+
console.log(JSON.stringify(result, null, 2));
|
|
87
|
+
if (result.outcome === "failed")
|
|
88
|
+
return 1;
|
|
89
|
+
if (result.outcome === "conflict")
|
|
90
|
+
return 2;
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
if (cmd === "status") {
|
|
94
|
+
const loaded = loadManifestFromDir(seedsDir, { cliAgentId: agent });
|
|
95
|
+
const seeder = createPackageSeeder({ seedsDir });
|
|
96
|
+
try {
|
|
97
|
+
const status = await seeder.status(loaded.identity.packageId, agent);
|
|
98
|
+
console.log(JSON.stringify(status, null, 2));
|
|
99
|
+
const found = status.targets.some((t) => t.ledger);
|
|
100
|
+
return found ? 0 : 3;
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
await seeder.close();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (cmd === "reset-ledger") {
|
|
107
|
+
const target = argValue(args, "--target");
|
|
108
|
+
const actor = argValue(args, "--actor");
|
|
109
|
+
const reason = argValue(args, "--reason");
|
|
110
|
+
const yes = hasFlag(args, "--yes");
|
|
111
|
+
if (!target || !actor || !reason) {
|
|
112
|
+
console.error("reset-ledger requires --target --actor --reason --yes");
|
|
113
|
+
return 2;
|
|
114
|
+
}
|
|
115
|
+
const loaded = loadManifestFromDir(seedsDir, { cliAgentId: agent });
|
|
116
|
+
const seeder = createPackageSeeder({ seedsDir });
|
|
117
|
+
try {
|
|
118
|
+
await seeder.resetLedger({
|
|
119
|
+
packageId: loaded.identity.packageId,
|
|
120
|
+
targetAgentId: target,
|
|
121
|
+
actor,
|
|
122
|
+
reason,
|
|
123
|
+
yes,
|
|
124
|
+
});
|
|
125
|
+
console.log(JSON.stringify({ ok: true, packageId: loaded.identity.packageId, target }, null, 2));
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
await seeder.close();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
console.error(`Unknown command: ${cmd}`);
|
|
133
|
+
printHelp();
|
|
134
|
+
return 2;
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
138
|
+
const code = error instanceof MemorixPackageSeedError ? error.code : "APPLY_FAILED";
|
|
139
|
+
console.error(JSON.stringify({ ok: false, code, message }, null, 2));
|
|
140
|
+
if (error instanceof MemorixPackageSeedError &&
|
|
141
|
+
(code === "IDENTITY_MISMATCH" ||
|
|
142
|
+
code === "INVALID_MANIFEST" ||
|
|
143
|
+
code === "INVALID_PATH" ||
|
|
144
|
+
code === "INVALID_PLANE" ||
|
|
145
|
+
code === "UNKNOWN_PLANE_KIND" ||
|
|
146
|
+
code === "SECRET_DETECTED" ||
|
|
147
|
+
code === "AGENT_SCOPE_MISMATCH" ||
|
|
148
|
+
code === "REVISION_NOT_BUMPED" ||
|
|
149
|
+
code === "MISSING_CUSTOM_WRITER" ||
|
|
150
|
+
code === "RESET_NOT_ALLOWED" ||
|
|
151
|
+
code === "MISSING_IDENTITY" ||
|
|
152
|
+
code === "INVALID_IDENTITY" ||
|
|
153
|
+
code === "PAYLOAD_TOO_LARGE")) {
|
|
154
|
+
return 2;
|
|
155
|
+
}
|
|
156
|
+
return 1;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const exitCode = await main(process.argv.slice(2));
|
|
160
|
+
process.exit(exitCode);
|
|
161
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const MEMORIX_PACKAGE_SEED_LEDGER_CATALOG: "memorix-package-seed-ledger";
|
|
2
|
+
export declare const MEMORIX_PACKAGE_SEED_LEASES_COLLECTION: "memorix-package-seed-leases";
|
|
3
|
+
export declare const PLATFORM_CORE_PACKAGE_ID: "@x12i/memorix-platform-core-seed";
|
|
4
|
+
export declare const MAX_PLANE_FILE_BYTES: number;
|
|
5
|
+
export declare const MAX_PACK_BYTES: number;
|
|
6
|
+
export declare const MAX_PLANES = 100;
|
|
7
|
+
export declare const MAX_TOTAL_ITEMS = 100000;
|
|
8
|
+
export declare const DEFAULT_LEASE_TTL_MS = 30000;
|
|
9
|
+
export declare const DEFAULT_LEASE_WAIT_MS = 60000;
|
|
10
|
+
export declare const DEFAULT_LEASE_POLL_MS = 250;
|
|
11
|
+
export declare const NATIVE_CATALOG_ALLOWLIST: readonly ["memorix-integration-abstraction-maps", "memorix-security-unified-objects", "memorix-security-relationship-types", "memorix-cross-domain-unification", "memorix-object-type-descriptors", "lists", "memorix-item-descriptors", "memorix-graph-descriptors", "memorix-inventory-policies", "memorix-write-descriptors", "memorix-workflow-field-schemas"];
|
|
12
|
+
export declare const BUILTIN_PLANE_KINDS: readonly ["pipeline-services", "pipeline-worker-bases", "integration-abstraction-map", "pipeline-steps", "pipeline-definitions", "pipeline-templates", "inventory-agents", "native-catalog-items", "object-types", "skills-metadata", "custom"];
|
|
13
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,EAC9C,6BAAsC,CAAC;AAEzC,eAAO,MAAM,sCAAsC,EACjD,6BAAsC,CAAC;AAEzC,eAAO,MAAM,wBAAwB,EACnC,kCAA2C,CAAC;AAE9C,eAAO,MAAM,oBAAoB,QAAmB,CAAC;AACrD,eAAO,MAAM,cAAc,QAAmB,CAAC;AAC/C,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,eAAe,SAAU,CAAC;AAEvC,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,eAAO,MAAM,wBAAwB,oWAY3B,CAAC;AAEX,eAAO,MAAM,mBAAmB,iPAYtB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export const MEMORIX_PACKAGE_SEED_LEDGER_CATALOG = "memorix-package-seed-ledger";
|
|
2
|
+
export const MEMORIX_PACKAGE_SEED_LEASES_COLLECTION = "memorix-package-seed-leases";
|
|
3
|
+
export const PLATFORM_CORE_PACKAGE_ID = "@x12i/memorix-platform-core-seed";
|
|
4
|
+
export const MAX_PLANE_FILE_BYTES = 10 * 1024 * 1024;
|
|
5
|
+
export const MAX_PACK_BYTES = 50 * 1024 * 1024;
|
|
6
|
+
export const MAX_PLANES = 100;
|
|
7
|
+
export const MAX_TOTAL_ITEMS = 100_000;
|
|
8
|
+
export const DEFAULT_LEASE_TTL_MS = 30_000;
|
|
9
|
+
export const DEFAULT_LEASE_WAIT_MS = 60_000;
|
|
10
|
+
export const DEFAULT_LEASE_POLL_MS = 250;
|
|
11
|
+
export const NATIVE_CATALOG_ALLOWLIST = [
|
|
12
|
+
"memorix-integration-abstraction-maps",
|
|
13
|
+
"memorix-security-unified-objects",
|
|
14
|
+
"memorix-security-relationship-types",
|
|
15
|
+
"memorix-cross-domain-unification",
|
|
16
|
+
"memorix-object-type-descriptors",
|
|
17
|
+
"lists",
|
|
18
|
+
"memorix-item-descriptors",
|
|
19
|
+
"memorix-graph-descriptors",
|
|
20
|
+
"memorix-inventory-policies",
|
|
21
|
+
"memorix-write-descriptors",
|
|
22
|
+
"memorix-workflow-field-schemas",
|
|
23
|
+
];
|
|
24
|
+
export const BUILTIN_PLANE_KINDS = [
|
|
25
|
+
"pipeline-services",
|
|
26
|
+
"pipeline-worker-bases",
|
|
27
|
+
"integration-abstraction-map",
|
|
28
|
+
"pipeline-steps",
|
|
29
|
+
"pipeline-definitions",
|
|
30
|
+
"pipeline-templates",
|
|
31
|
+
"inventory-agents",
|
|
32
|
+
"native-catalog-items",
|
|
33
|
+
"object-types",
|
|
34
|
+
"skills-metadata",
|
|
35
|
+
"custom",
|
|
36
|
+
];
|
|
37
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mCAAmC,GAC9C,6BAAsC,CAAC;AAEzC,MAAM,CAAC,MAAM,sCAAsC,GACjD,6BAAsC,CAAC;AAEzC,MAAM,CAAC,MAAM,wBAAwB,GACnC,kCAA2C,CAAC;AAE9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC;AAC9B,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAEvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,sCAAsC;IACtC,kCAAkC;IAClC,qCAAqC;IACrC,kCAAkC;IAClC,iCAAiC;IACjC,OAAO;IACP,0BAA0B;IAC1B,2BAA2B;IAC3B,4BAA4B;IAC5B,2BAA2B;IAC3B,gCAAgC;CACxB,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,mBAAmB;IACnB,uBAAuB;IACvB,6BAA6B;IAC7B,gBAAgB;IAChB,sBAAsB;IACtB,oBAAoB;IACpB,kBAAkB;IAClB,sBAAsB;IACtB,cAAc;IACd,iBAAiB;IACjB,QAAQ;CACA,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { EnsureSeededResult, MemorixPackageSeedMode, PackageSeedIdentity, PackageSeedLedgerItem } from "./types.js";
|
|
2
|
+
export type EnsureSeededOptions = {
|
|
3
|
+
identity?: PackageSeedIdentity;
|
|
4
|
+
seedsDir: string;
|
|
5
|
+
mode?: MemorixPackageSeedMode;
|
|
6
|
+
processEnv?: NodeJS.ProcessEnv;
|
|
7
|
+
mongoUri?: string;
|
|
8
|
+
appId?: string;
|
|
9
|
+
actor?: string;
|
|
10
|
+
/** When set, apply only these destinations (e.g. platform-core bootstrap). */
|
|
11
|
+
applyTargetAgentIds?: string[];
|
|
12
|
+
skipPlatformCore?: boolean;
|
|
13
|
+
ensurePlatformCore?: (targetAgentId: string) => Promise<EnsureSeededResult | null>;
|
|
14
|
+
};
|
|
15
|
+
export type PackageSeeder = {
|
|
16
|
+
ensureSeeded: (options?: Partial<EnsureSeededOptions>) => Promise<EnsureSeededResult>;
|
|
17
|
+
status: (packageId?: string, targetAgentId?: string) => Promise<{
|
|
18
|
+
targets: Array<{
|
|
19
|
+
targetAgentId: string;
|
|
20
|
+
databaseName: string;
|
|
21
|
+
ledger: PackageSeedLedgerItem | null;
|
|
22
|
+
}>;
|
|
23
|
+
}>;
|
|
24
|
+
resetLedger: (options: {
|
|
25
|
+
packageId: string;
|
|
26
|
+
targetAgentId: string;
|
|
27
|
+
actor: string;
|
|
28
|
+
reason: string;
|
|
29
|
+
yes: boolean;
|
|
30
|
+
}) => Promise<void>;
|
|
31
|
+
close: () => Promise<void>;
|
|
32
|
+
[Symbol.asyncDispose]: () => Promise<void>;
|
|
33
|
+
};
|
|
34
|
+
export declare function ensureSeeded(options: EnsureSeededOptions): Promise<EnsureSeededResult>;
|
|
35
|
+
export declare function createPackageSeeder(defaults: EnsureSeededOptions): PackageSeeder;
|
|
36
|
+
//# sourceMappingURL=ensure-seeded.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-seeded.d.ts","sourceRoot":"","sources":["../src/ensure-seeded.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,kBAAkB,EAElB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,CACnB,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,CACZ,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,KACnC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAC9D,OAAO,EAAE,KAAK,CAAC;YACb,aAAa,EAAE,MAAM,CAAC;YACtB,YAAY,EAAE,MAAM,CAAC;YACrB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;SACtC,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,WAAW,EAAE,CAAC,OAAO,EAAE;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,OAAO,CAAC;KACd,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C,CAAC;AAiRF,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA0C7B;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,mBAAmB,GAC5B,aAAa,CAqGf"}
|