@pleri/olam-cli 0.1.120 → 0.1.125

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 (60) hide show
  1. package/dist/commands/bootstrap.d.ts +4 -0
  2. package/dist/commands/bootstrap.d.ts.map +1 -1
  3. package/dist/commands/bootstrap.js +64 -0
  4. package/dist/commands/bootstrap.js.map +1 -1
  5. package/dist/commands/mcp/install-shared.d.ts +2 -0
  6. package/dist/commands/mcp/install-shared.d.ts.map +1 -1
  7. package/dist/commands/mcp/install-shared.js +13 -0
  8. package/dist/commands/mcp/install-shared.js.map +1 -1
  9. package/dist/commands/mcp/uninstall.d.ts.map +1 -1
  10. package/dist/commands/mcp/uninstall.js +1 -10
  11. package/dist/commands/mcp/uninstall.js.map +1 -1
  12. package/dist/commands/memory/_paths.d.ts +15 -0
  13. package/dist/commands/memory/_paths.d.ts.map +1 -0
  14. package/dist/commands/memory/_paths.js +34 -0
  15. package/dist/commands/memory/_paths.js.map +1 -0
  16. package/dist/commands/memory/index.d.ts +17 -0
  17. package/dist/commands/memory/index.d.ts.map +1 -0
  18. package/dist/commands/memory/index.js +34 -0
  19. package/dist/commands/memory/index.js.map +1 -0
  20. package/dist/commands/memory/install.d.ts +57 -0
  21. package/dist/commands/memory/install.d.ts.map +1 -0
  22. package/dist/commands/memory/install.js +114 -0
  23. package/dist/commands/memory/install.js.map +1 -0
  24. package/dist/commands/memory/logs.d.ts +15 -0
  25. package/dist/commands/memory/logs.d.ts.map +1 -0
  26. package/dist/commands/memory/logs.js +45 -0
  27. package/dist/commands/memory/logs.js.map +1 -0
  28. package/dist/commands/memory/secret.d.ts +16 -0
  29. package/dist/commands/memory/secret.d.ts.map +1 -0
  30. package/dist/commands/memory/secret.js +79 -0
  31. package/dist/commands/memory/secret.js.map +1 -0
  32. package/dist/commands/memory/start.d.ts +23 -0
  33. package/dist/commands/memory/start.d.ts.map +1 -0
  34. package/dist/commands/memory/start.js +166 -0
  35. package/dist/commands/memory/start.js.map +1 -0
  36. package/dist/commands/memory/status.d.ts +25 -0
  37. package/dist/commands/memory/status.d.ts.map +1 -0
  38. package/dist/commands/memory/status.js +101 -0
  39. package/dist/commands/memory/status.js.map +1 -0
  40. package/dist/commands/memory/stop.d.ts +12 -0
  41. package/dist/commands/memory/stop.d.ts.map +1 -0
  42. package/dist/commands/memory/stop.js +81 -0
  43. package/dist/commands/memory/stop.js.map +1 -0
  44. package/dist/commands/memory/uninstall.d.ts +19 -0
  45. package/dist/commands/memory/uninstall.d.ts.map +1 -0
  46. package/dist/commands/memory/uninstall.js +60 -0
  47. package/dist/commands/memory/uninstall.js.map +1 -0
  48. package/dist/commands/seed.d.ts +27 -0
  49. package/dist/commands/seed.d.ts.map +1 -0
  50. package/dist/commands/seed.js +303 -0
  51. package/dist/commands/seed.js.map +1 -0
  52. package/dist/image-digests.json +1 -1
  53. package/dist/index.js +1643 -183
  54. package/dist/index.js.map +1 -1
  55. package/dist/lib/memory-secret.d.ts +48 -0
  56. package/dist/lib/memory-secret.d.ts.map +1 -0
  57. package/dist/lib/memory-secret.js +92 -0
  58. package/dist/lib/memory-secret.js.map +1 -0
  59. package/dist/mcp-server.js +481 -65
  60. package/package.json +1 -1
@@ -0,0 +1,60 @@
1
+ /**
2
+ * olam memory uninstall — Remove `agentmemory` from the operator's host
3
+ * claude. Symmetric with `install`. Idempotent — "not registered" is
4
+ * success-as-noop.
5
+ *
6
+ * Plan reference: docs/plans/olam-agent-memory-distributed/phase-a-tasks.md A4
7
+ */
8
+ import { printError, printSuccess, printWarning } from '../../output.js';
9
+ import { DEFAULT_CLAUDE_SHELL_DEPS, REMEDY_CLAUDE_MISSING, isOnPath, looksLikeNotInstalled, normaliseScope, } from '../mcp/install-shared.js';
10
+ const MCP_NAME = 'agentmemory';
11
+ export function buildClaudeMcpRemoveArgs(scope) {
12
+ return {
13
+ command: 'claude',
14
+ args: ['mcp', 'remove', MCP_NAME, '--scope', scope],
15
+ };
16
+ }
17
+ export async function runUninstall(opts, deps = DEFAULT_CLAUDE_SHELL_DEPS) {
18
+ if (!isOnPath(deps, 'claude')) {
19
+ printError(REMEDY_CLAUDE_MISSING);
20
+ return 1;
21
+ }
22
+ const { command, args } = buildClaudeMcpRemoveArgs(opts.scope);
23
+ deps.log(`Unwiring: ${command} ${args.join(' ')}`);
24
+ const result = deps.spawn(command, args, {
25
+ encoding: 'utf8',
26
+ stdio: ['ignore', 'pipe', 'pipe'],
27
+ });
28
+ if (result.status === 0) {
29
+ printSuccess(`agentmemory MCP removed from claude (--scope ${opts.scope}).`);
30
+ return 0;
31
+ }
32
+ const stderr = result.stderr?.trim() ?? '';
33
+ const stdout = result.stdout?.trim() ?? '';
34
+ const combined = `${stderr}\n${stdout}`.trim();
35
+ if (looksLikeNotInstalled(combined)) {
36
+ printWarning(`agentmemory MCP not registered with claude (--scope ${opts.scope}); nothing to remove.`);
37
+ return 0;
38
+ }
39
+ printError(`claude mcp remove failed (rc=${result.status ?? 'unknown'}): ${combined || '(no output)'}`);
40
+ return result.status ?? 1;
41
+ }
42
+ export function registerMemoryUninstall(cmd) {
43
+ cmd
44
+ .command('uninstall')
45
+ .description('Remove agentmemory from the operator\'s host claude (symmetric with `install`; idempotent)')
46
+ .option('--scope <scope>', 'claude mcp scope: user | project | local', 'user')
47
+ .action(async (rawOpts) => {
48
+ const scope = normaliseScope(rawOpts.scope);
49
+ if (scope === null) {
50
+ printError(`--scope must be one of: user, project, local (got: ${rawOpts.scope})`);
51
+ process.exitCode = 1;
52
+ return;
53
+ }
54
+ const rc = await runUninstall({ scope });
55
+ if (rc !== 0) {
56
+ process.exitCode = rc;
57
+ }
58
+ });
59
+ }
60
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/commands/memory/uninstall.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,QAAQ,EACR,qBAAqB,EACrB,cAAc,GAGf,MAAM,0BAA0B,CAAC;AAElC,MAAM,QAAQ,GAAG,aAAa,CAAC;AAE/B,MAAM,UAAU,wBAAwB,CAAC,KAAe;IAItD,OAAO;QACL,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;KACpD,CAAC;AACJ,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAmB,EACnB,OAAwB,yBAAyB;IAEjD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC9B,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,GAAG,CAAC,aAAa,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;QACvC,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;KAClC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,YAAY,CAAC,gDAAgD,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAC7E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAE/C,IAAI,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,YAAY,CACV,uDAAuD,IAAI,CAAC,KAAK,uBAAuB,CACzF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,UAAU,CACR,gCAAgC,MAAM,CAAC,MAAM,IAAI,SAAS,MAAM,QAAQ,IAAI,aAAa,EAAE,CAC5F,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAY;IAClD,GAAG;SACA,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,4FAA4F,CAC7F;SACA,MAAM,CAAC,iBAAiB,EAAE,0CAA0C,EAAE,MAAM,CAAC;SAC7E,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;QAC5C,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,UAAU,CAAC,sDAAsD,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;YACnF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACb,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * `olam seed <subcommand>` — operator-facing CRUD for postgres seed templates.
3
+ *
4
+ * Phase A task A1 of `olam-hybrid-shared-postgres`. The hybrid path's
5
+ * `services.postgres.seed_template:` field in `.olam.yaml` references named
6
+ * template DBs on the operator's `olam-postgres` singleton. This command is
7
+ * the canonical way to populate, inspect, and remove those templates.
8
+ *
9
+ * Subcommands:
10
+ * bake — pg_dump a source DB into the singleton as a new template
11
+ * list — list seed-template DBs on the singleton
12
+ * remove — DROP a seed template (refuses if any per-world clones exist)
13
+ * verify — sanity-check a seed (existence, connectivity, size)
14
+ *
15
+ * Source modes for `bake`:
16
+ * --source-container <name> docker exec pg_dump inside a running container
17
+ * --source-url <postgres-url> pg_dump via libpq URL (host pg, neon, etc.)
18
+ * --source-local <db> pg_dump a DB that already lives on the singleton
19
+ *
20
+ * Generic across projects — atlas-core's `atlas_common_seed` /
21
+ * `atlas_merchant_seed`, atlas-pay's `atlas_pay_seed`, and any future repo's
22
+ * named seeds all flow through this same surface. No atlas-specific knowledge
23
+ * embedded.
24
+ */
25
+ import type { Command } from 'commander';
26
+ export declare function registerSeed(program: Command): void;
27
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyRzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqEnD"}
@@ -0,0 +1,303 @@
1
+ /**
2
+ * `olam seed <subcommand>` — operator-facing CRUD for postgres seed templates.
3
+ *
4
+ * Phase A task A1 of `olam-hybrid-shared-postgres`. The hybrid path's
5
+ * `services.postgres.seed_template:` field in `.olam.yaml` references named
6
+ * template DBs on the operator's `olam-postgres` singleton. This command is
7
+ * the canonical way to populate, inspect, and remove those templates.
8
+ *
9
+ * Subcommands:
10
+ * bake — pg_dump a source DB into the singleton as a new template
11
+ * list — list seed-template DBs on the singleton
12
+ * remove — DROP a seed template (refuses if any per-world clones exist)
13
+ * verify — sanity-check a seed (existence, connectivity, size)
14
+ *
15
+ * Source modes for `bake`:
16
+ * --source-container <name> docker exec pg_dump inside a running container
17
+ * --source-url <postgres-url> pg_dump via libpq URL (host pg, neon, etc.)
18
+ * --source-local <db> pg_dump a DB that already lives on the singleton
19
+ *
20
+ * Generic across projects — atlas-core's `atlas_common_seed` /
21
+ * `atlas_merchant_seed`, atlas-pay's `atlas_pay_seed`, and any future repo's
22
+ * named seeds all flow through this same surface. No atlas-specific knowledge
23
+ * embedded.
24
+ */
25
+ import { spawnSync, spawn as spawnAsync } from 'node:child_process';
26
+ import { printError, printSuccess, printInfo, printHeader, printWarning } from '../output.js';
27
+ const DEFAULT_SINGLETON_CONTAINER = 'olam-postgres';
28
+ const DEFAULT_SINGLETON_USER = 'development';
29
+ // ── helpers ─────────────────────────────────────────────────────────
30
+ /**
31
+ * Validate a seed name. Names map 1:1 to postgres DB identifiers, so they
32
+ * must be plain alphanumeric + underscore (matches `[a-z][a-z0-9_]*`).
33
+ * Hyphens are rejected — `CREATE DATABASE "foo-bar"` requires double-quoting
34
+ * everywhere downstream which is brittle.
35
+ */
36
+ function assertValidSeedName(name) {
37
+ if (!/^[a-z][a-z0-9_]*$/.test(name)) {
38
+ throw new Error(`invalid seed name "${name}" — must match [a-z][a-z0-9_]* (no hyphens, no uppercase)`);
39
+ }
40
+ }
41
+ function singletonDocker(container, user, args, stdin) {
42
+ return spawnSync('docker', ['exec', '-i', container, 'psql', '-U', user, ...args], { encoding: 'utf-8', input: stdin });
43
+ }
44
+ function singletonHasDb(container, user, db) {
45
+ const r = singletonDocker(container, user, [
46
+ '-d', 'postgres', '-tAc',
47
+ `SELECT 1 FROM pg_database WHERE datname='${db.replace(/'/g, "''")}'`,
48
+ ]);
49
+ return r.status === 0 && (r.stdout || '').trim() === '1';
50
+ }
51
+ function singletonListSeeds(container, user) {
52
+ const r = singletonDocker(container, user, [
53
+ '-d', 'postgres', '-tAc',
54
+ "SELECT datname || '|' || pg_size_pretty(pg_database_size(datname)) " +
55
+ "FROM pg_database WHERE datname LIKE '%\\_seed' ORDER BY datname",
56
+ ]);
57
+ if (r.status !== 0) {
58
+ throw new Error(`failed to list seeds: ${(r.stderr || '').trim()}`);
59
+ }
60
+ const lines = (r.stdout || '').trim().split('\n').filter((l) => l.length > 0);
61
+ return lines.map((line) => {
62
+ const [name = '', size = ''] = line.split('|');
63
+ return { name, size };
64
+ });
65
+ }
66
+ function singletonListClonesOf(container, user, seed) {
67
+ // World clones derive from `<seed-without-_seed>_world_<id>` per
68
+ // deriveWorldDbName in core/src/world/manager.ts.
69
+ const prefix = seed.endsWith('_seed') ? seed.slice(0, -'_seed'.length) : seed;
70
+ const r = singletonDocker(container, user, [
71
+ '-d', 'postgres', '-tAc',
72
+ `SELECT datname FROM pg_database WHERE datname LIKE '${prefix.replace(/'/g, "''")}_world_%' ORDER BY datname`,
73
+ ]);
74
+ if (r.status !== 0)
75
+ return [];
76
+ return (r.stdout || '').trim().split('\n').filter((l) => l.length > 0);
77
+ }
78
+ // ── bake ────────────────────────────────────────────────────────────
79
+ async function handleBake(opts) {
80
+ assertValidSeedName(opts.as);
81
+ const singleton = opts.singletonContainer ?? DEFAULT_SINGLETON_CONTAINER;
82
+ const singletonUser = opts.singletonUser ?? DEFAULT_SINGLETON_USER;
83
+ // Mode resolution — exactly one source must be set.
84
+ const sources = [opts.sourceContainer, opts.sourceUrl, opts.sourceLocal].filter(Boolean);
85
+ if (sources.length === 0) {
86
+ throw new Error('no source specified — pass exactly one of --source-container, --source-url, --source-local');
87
+ }
88
+ if (sources.length > 1) {
89
+ throw new Error('multiple sources specified — pass exactly one of --source-container, --source-url, --source-local');
90
+ }
91
+ // Pre-flight: singleton container reachable?
92
+ const ping = spawnSync('docker', ['inspect', '--format', '{{.State.Status}}', singleton], { encoding: 'utf-8' });
93
+ if (ping.status !== 0 || (ping.stdout || '').trim() !== 'running') {
94
+ throw new Error(`singleton container "${singleton}" not running — run \`olam bootstrap\` first`);
95
+ }
96
+ // Already exists?
97
+ if (singletonHasDb(singleton, singletonUser, opts.as)) {
98
+ if (!opts.force) {
99
+ throw new Error(`seed "${opts.as}" already exists — pass --force to overwrite (DROP + recreate)`);
100
+ }
101
+ // Check for active clones first; refuse drop if any.
102
+ const clones = singletonListClonesOf(singleton, singletonUser, opts.as);
103
+ if (clones.length > 0) {
104
+ throw new Error(`cannot --force overwrite "${opts.as}" — ${clones.length} per-world clone(s) still depend on it: ${clones.join(', ')}\n` +
105
+ `Destroy those worlds first, then re-bake.`);
106
+ }
107
+ printWarning(`Dropping existing seed "${opts.as}" (--force)`);
108
+ const drop = singletonDocker(singleton, singletonUser, ['-d', 'postgres', '-c', `DROP DATABASE "${opts.as}"`]);
109
+ if (drop.status !== 0) {
110
+ throw new Error(`DROP DATABASE failed: ${(drop.stderr || '').trim()}`);
111
+ }
112
+ }
113
+ process.stdout.write(` Creating empty target DB "${opts.as}" on singleton\n`);
114
+ const create = singletonDocker(singleton, singletonUser, ['-d', 'postgres', '-c', `CREATE DATABASE "${opts.as}"`]);
115
+ if (create.status !== 0) {
116
+ throw new Error(`CREATE DATABASE "${opts.as}" failed: ${(create.stderr || '').trim()}`);
117
+ }
118
+ // Pipe pg_dump → singleton psql. Use spawn (not spawnSync) so the stream
119
+ // can flow without buffering the whole dump in memory.
120
+ let dumpArgs;
121
+ // Initialised to the same minimal-PATH shape that every branch below sets;
122
+ // the spread of `process.env` (typed `string | undefined`) tripped tsc
123
+ // strict-mode and was always overwritten anyway.
124
+ let dumpEnv = { PATH: process.env['PATH'] || '' };
125
+ if (opts.sourceContainer) {
126
+ const srcDb = opts.sourceDb ?? 'postgres';
127
+ const srcUser = opts.sourceUser ?? DEFAULT_SINGLETON_USER;
128
+ process.stdout.write(` Source: container ${opts.sourceContainer} DB=${srcDb} user=${srcUser}\n`);
129
+ dumpArgs = ['exec', opts.sourceContainer, 'pg_dump', '-U', srcUser, '-d', srcDb, '--no-owner', '--no-privileges'];
130
+ dumpEnv = { PATH: process.env['PATH'] || '' };
131
+ }
132
+ else if (opts.sourceLocal) {
133
+ if (!singletonHasDb(singleton, singletonUser, opts.sourceLocal)) {
134
+ throw new Error(`--source-local "${opts.sourceLocal}" does not exist on singleton`);
135
+ }
136
+ process.stdout.write(` Source: singleton local DB ${opts.sourceLocal}\n`);
137
+ dumpArgs = ['exec', singleton, 'pg_dump', '-U', singletonUser, '-d', opts.sourceLocal, '--no-owner', '--no-privileges'];
138
+ dumpEnv = { PATH: process.env['PATH'] || '' };
139
+ }
140
+ else {
141
+ // sourceUrl
142
+ process.stdout.write(` Source: ${opts.sourceUrl.replace(/\/\/[^:]+:[^@]+@/, '//<creds>@')}\n`);
143
+ dumpArgs = ['exec', '-e', `PGURL=${opts.sourceUrl}`, singleton, 'sh', '-c', 'pg_dump --no-owner --no-privileges "$PGURL"'];
144
+ dumpEnv = { PATH: process.env['PATH'] || '' };
145
+ }
146
+ const dumper = spawnAsync('docker', dumpArgs, { stdio: ['ignore', 'pipe', 'inherit'], env: dumpEnv });
147
+ const loader = spawnAsync('docker', ['exec', '-i', singleton, 'psql', '-U', singletonUser, '-d', opts.as, '-v', 'ON_ERROR_STOP=1', '-q'], { stdio: ['pipe', 'inherit', 'inherit'], env: { PATH: process.env['PATH'] || '' } });
148
+ dumper.stdout.pipe(loader.stdin);
149
+ const [dumpExit, loadExit] = await Promise.all([
150
+ new Promise((res) => dumper.on('close', (code) => res(code ?? 1))),
151
+ new Promise((res) => loader.on('close', (code) => res(code ?? 1))),
152
+ ]);
153
+ if (dumpExit !== 0) {
154
+ throw new Error(`pg_dump exited with code ${dumpExit}`);
155
+ }
156
+ if (loadExit !== 0) {
157
+ throw new Error(`psql load exited with code ${loadExit}`);
158
+ }
159
+ // Verify
160
+ const size = singletonDocker(singleton, singletonUser, [
161
+ '-d', 'postgres', '-tAc',
162
+ `SELECT pg_size_pretty(pg_database_size('${opts.as}'))`,
163
+ ]);
164
+ const sizeStr = (size.stdout || '').trim() || 'unknown';
165
+ printSuccess(`Seed "${opts.as}" baked (${sizeStr})`);
166
+ }
167
+ // ── list ────────────────────────────────────────────────────────────
168
+ function handleList(opts) {
169
+ const singleton = opts.singletonContainer ?? DEFAULT_SINGLETON_CONTAINER;
170
+ const singletonUser = opts.singletonUser ?? DEFAULT_SINGLETON_USER;
171
+ const seeds = singletonListSeeds(singleton, singletonUser);
172
+ if (opts.json) {
173
+ process.stdout.write(JSON.stringify(seeds, null, 2) + '\n');
174
+ return;
175
+ }
176
+ if (seeds.length === 0) {
177
+ process.stdout.write('No seeds found on singleton.\n');
178
+ return;
179
+ }
180
+ printHeader(`${seeds.length} seed(s) on ${singleton}`);
181
+ const nameWidth = Math.max(...seeds.map((s) => s.name.length), 4);
182
+ for (const s of seeds) {
183
+ process.stdout.write(` ${s.name.padEnd(nameWidth)} ${s.size}\n`);
184
+ }
185
+ }
186
+ // ── remove ──────────────────────────────────────────────────────────
187
+ function handleRemove(name, opts) {
188
+ assertValidSeedName(name);
189
+ const singleton = opts.singletonContainer ?? DEFAULT_SINGLETON_CONTAINER;
190
+ const singletonUser = opts.singletonUser ?? DEFAULT_SINGLETON_USER;
191
+ if (!singletonHasDb(singleton, singletonUser, name)) {
192
+ printWarning(`Seed "${name}" does not exist on singleton — nothing to do`);
193
+ return;
194
+ }
195
+ const clones = singletonListClonesOf(singleton, singletonUser, name);
196
+ if (clones.length > 0 && !opts.force) {
197
+ throw new Error(`seed "${name}" has ${clones.length} active world clone(s): ${clones.join(', ')}\n` +
198
+ `Destroy those worlds first, or re-run with --force to drop anyway (CAUTION: leaves world DBs orphaned).`);
199
+ }
200
+ const drop = singletonDocker(singleton, singletonUser, ['-d', 'postgres', '-c', `DROP DATABASE "${name}"`]);
201
+ if (drop.status !== 0) {
202
+ throw new Error(`DROP DATABASE "${name}" failed: ${(drop.stderr || '').trim()}`);
203
+ }
204
+ printSuccess(`Removed seed "${name}"`);
205
+ }
206
+ // ── verify ──────────────────────────────────────────────────────────
207
+ function handleVerify(name, opts) {
208
+ assertValidSeedName(name);
209
+ const singleton = opts.singletonContainer ?? DEFAULT_SINGLETON_CONTAINER;
210
+ const singletonUser = opts.singletonUser ?? DEFAULT_SINGLETON_USER;
211
+ if (!singletonHasDb(singleton, singletonUser, name)) {
212
+ throw new Error(`seed "${name}" does not exist on singleton`);
213
+ }
214
+ // Heartbeat: run a trivial SELECT to prove connectivity + accessibility.
215
+ const heartbeat = singletonDocker(singleton, singletonUser, ['-d', name, '-tAc', 'SELECT 1']);
216
+ if (heartbeat.status !== 0 || (heartbeat.stdout || '').trim() !== '1') {
217
+ throw new Error(`heartbeat failed: ${(heartbeat.stderr || '').trim()}`);
218
+ }
219
+ // Size + table count for visibility.
220
+ const meta = singletonDocker(singleton, singletonUser, [
221
+ '-d', name, '-tAc',
222
+ "SELECT pg_size_pretty(pg_database_size(current_database())) || '|' || " +
223
+ "(SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public')",
224
+ ]);
225
+ const [size = '?', tableCount = '?'] = (meta.stdout || '').trim().split('|');
226
+ const clones = singletonListClonesOf(singleton, singletonUser, name);
227
+ printSuccess(`Seed "${name}" OK`);
228
+ printInfo('size', size);
229
+ printInfo('tables', `${tableCount} (public schema)`);
230
+ printInfo('clones', `${clones.length}${clones.length > 0 ? ' (' + clones.join(', ') + ')' : ''}`);
231
+ }
232
+ // ── register ────────────────────────────────────────────────────────
233
+ export function registerSeed(program) {
234
+ const seed = program
235
+ .command('seed')
236
+ .description('Manage postgres seed templates on the olam-postgres singleton');
237
+ seed
238
+ .command('bake')
239
+ .description('Bake a source DB into the singleton as a named seed template')
240
+ .requiredOption('--as <name>', 'Target seed name (e.g. atlas_common_seed); [a-z][a-z0-9_]*')
241
+ .option('--source-container <name>', 'Source: pg_dump inside this docker container')
242
+ .option('--source-url <url>', 'Source: pg_dump via postgres:// URL (libpq)')
243
+ .option('--source-local <db>', 'Source: pg_dump a DB already on the singleton')
244
+ .option('--source-db <db>', 'DB name to dump (when --source-container; default: postgres)')
245
+ .option('--source-user <user>', 'Source-side user (when --source-container; default: development)')
246
+ .option('--singleton-container <name>', 'Override singleton container name (default: olam-postgres)')
247
+ .option('--singleton-user <user>', 'Override singleton user (default: development)')
248
+ .option('--force', 'Drop + recreate if the seed already exists')
249
+ .action(async (opts) => {
250
+ try {
251
+ await handleBake(opts);
252
+ }
253
+ catch (err) {
254
+ printError(err instanceof Error ? err.message : String(err));
255
+ process.exit(1);
256
+ }
257
+ });
258
+ seed
259
+ .command('list')
260
+ .description('List seed templates on the singleton')
261
+ .option('--json', 'Emit machine-parseable JSON')
262
+ .option('--singleton-container <name>', 'Override singleton container name (default: olam-postgres)')
263
+ .option('--singleton-user <user>', 'Override singleton user (default: development)')
264
+ .action((opts) => {
265
+ try {
266
+ handleList(opts);
267
+ }
268
+ catch (err) {
269
+ printError(err instanceof Error ? err.message : String(err));
270
+ process.exit(1);
271
+ }
272
+ });
273
+ seed
274
+ .command('remove <name>')
275
+ .description('Remove a seed template (refuses by default if any per-world clones exist)')
276
+ .option('--force', 'DROP even if active clones exist (clones will be orphaned)')
277
+ .option('--singleton-container <name>', 'Override singleton container name (default: olam-postgres)')
278
+ .option('--singleton-user <user>', 'Override singleton user (default: development)')
279
+ .action((name, opts) => {
280
+ try {
281
+ handleRemove(name, opts);
282
+ }
283
+ catch (err) {
284
+ printError(err instanceof Error ? err.message : String(err));
285
+ process.exit(1);
286
+ }
287
+ });
288
+ seed
289
+ .command('verify <name>')
290
+ .description('Sanity-check a seed (existence, connectivity, size, clone count)')
291
+ .option('--singleton-container <name>', 'Override singleton container name (default: olam-postgres)')
292
+ .option('--singleton-user <user>', 'Override singleton user (default: development)')
293
+ .action((name, opts) => {
294
+ try {
295
+ handleVerify(name, opts);
296
+ }
297
+ catch (err) {
298
+ printError(err instanceof Error ? err.message : String(err));
299
+ process.exit(1);
300
+ }
301
+ });
302
+ }
303
+ //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,6 @@
5
5
  "host-cp": "sha256:13a26950fea2917ebb268f7bda04fd54267ffe8e5ba4a550db89f28eb309553f",
6
6
  "mcp-auth": "sha256:c82fcfca7ed1b139cbea252697487889b96b45a6575cfba076de7f57eaa943ac",
7
7
  "$schema_version": 1,
8
- "$published_version": "0.1.120",
8
+ "$published_version": "0.1.125",
9
9
  "$registry": "ghcr.io/pleri"
10
10
  }