@pleri/olam-cli 0.1.120 → 0.1.126
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/dist/commands/bootstrap.d.ts +4 -0
- package/dist/commands/bootstrap.d.ts.map +1 -1
- package/dist/commands/bootstrap.js +64 -0
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +43 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/mcp/install-shared.d.ts +2 -0
- package/dist/commands/mcp/install-shared.d.ts.map +1 -1
- package/dist/commands/mcp/install-shared.js +13 -0
- package/dist/commands/mcp/install-shared.js.map +1 -1
- package/dist/commands/mcp/uninstall.d.ts.map +1 -1
- package/dist/commands/mcp/uninstall.js +1 -10
- package/dist/commands/mcp/uninstall.js.map +1 -1
- package/dist/commands/memory/_paths.d.ts +15 -0
- package/dist/commands/memory/_paths.d.ts.map +1 -0
- package/dist/commands/memory/_paths.js +34 -0
- package/dist/commands/memory/_paths.js.map +1 -0
- package/dist/commands/memory/index.d.ts +17 -0
- package/dist/commands/memory/index.d.ts.map +1 -0
- package/dist/commands/memory/index.js +34 -0
- package/dist/commands/memory/index.js.map +1 -0
- package/dist/commands/memory/install.d.ts +57 -0
- package/dist/commands/memory/install.d.ts.map +1 -0
- package/dist/commands/memory/install.js +114 -0
- package/dist/commands/memory/install.js.map +1 -0
- package/dist/commands/memory/logs.d.ts +15 -0
- package/dist/commands/memory/logs.d.ts.map +1 -0
- package/dist/commands/memory/logs.js +45 -0
- package/dist/commands/memory/logs.js.map +1 -0
- package/dist/commands/memory/secret.d.ts +16 -0
- package/dist/commands/memory/secret.d.ts.map +1 -0
- package/dist/commands/memory/secret.js +79 -0
- package/dist/commands/memory/secret.js.map +1 -0
- package/dist/commands/memory/start.d.ts +23 -0
- package/dist/commands/memory/start.d.ts.map +1 -0
- package/dist/commands/memory/start.js +166 -0
- package/dist/commands/memory/start.js.map +1 -0
- package/dist/commands/memory/status.d.ts +25 -0
- package/dist/commands/memory/status.d.ts.map +1 -0
- package/dist/commands/memory/status.js +101 -0
- package/dist/commands/memory/status.js.map +1 -0
- package/dist/commands/memory/stop.d.ts +12 -0
- package/dist/commands/memory/stop.d.ts.map +1 -0
- package/dist/commands/memory/stop.js +81 -0
- package/dist/commands/memory/stop.js.map +1 -0
- package/dist/commands/memory/uninstall.d.ts +19 -0
- package/dist/commands/memory/uninstall.d.ts.map +1 -0
- package/dist/commands/memory/uninstall.js +60 -0
- package/dist/commands/memory/uninstall.js.map +1 -0
- package/dist/commands/seed.d.ts +27 -0
- package/dist/commands/seed.d.ts.map +1 -0
- package/dist/commands/seed.js +303 -0
- package/dist/commands/seed.js.map +1 -0
- package/dist/image-digests.json +3 -3
- package/dist/index.js +1835 -259
- package/dist/index.js.map +1 -1
- package/dist/lib/memory-secret.d.ts +48 -0
- package/dist/lib/memory-secret.d.ts.map +1 -0
- package/dist/lib/memory-secret.js +92 -0
- package/dist/lib/memory-secret.js.map +1 -0
- package/dist/lib/world-mcp-register.d.ts +98 -0
- package/dist/lib/world-mcp-register.d.ts.map +1 -0
- package/dist/lib/world-mcp-register.js +117 -0
- package/dist/lib/world-mcp-register.js.map +1 -0
- package/dist/mcp-server.js +502 -65
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* olam memory stop — terminate the host agent-memory process gracefully.
|
|
3
|
+
*
|
|
4
|
+
* SIGTERM → wait 10s → SIGKILL. Removes the pidfile on clean exit.
|
|
5
|
+
* Idempotent: no pidfile or stale pidfile → exit 0 with informational message.
|
|
6
|
+
*
|
|
7
|
+
* Plan reference: docs/plans/olam-agent-memory-distributed/phase-a-tasks.md A2
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from 'commander';
|
|
10
|
+
export declare function runMemoryStop(): Promise<number>;
|
|
11
|
+
export declare function registerMemoryStop(cmd: Command): void;
|
|
12
|
+
//# sourceMappingURL=stop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/commands/memory/stop.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBzC,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAmDrD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAQrD"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* olam memory stop — terminate the host agent-memory process gracefully.
|
|
3
|
+
*
|
|
4
|
+
* SIGTERM → wait 10s → SIGKILL. Removes the pidfile on clean exit.
|
|
5
|
+
* Idempotent: no pidfile or stale pidfile → exit 0 with informational message.
|
|
6
|
+
*
|
|
7
|
+
* Plan reference: docs/plans/olam-agent-memory-distributed/phase-a-tasks.md A2
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, readFileSync, unlinkSync } from 'node:fs';
|
|
10
|
+
import { printSuccess, printWarning, printInfo, printHeader } from '../../output.js';
|
|
11
|
+
import { MEMORY_PID_PATH } from './_paths.js';
|
|
12
|
+
const SIGTERM_GRACE_MS = 10_000;
|
|
13
|
+
const POLL_MS = 250;
|
|
14
|
+
function isAlive(pid) {
|
|
15
|
+
try {
|
|
16
|
+
process.kill(pid, 0);
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export async function runMemoryStop() {
|
|
24
|
+
printHeader('olam memory stop');
|
|
25
|
+
if (!existsSync(MEMORY_PID_PATH)) {
|
|
26
|
+
printSuccess('no pidfile present (nothing to stop)');
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
29
|
+
const pid = parseInt(readFileSync(MEMORY_PID_PATH, 'utf8').trim(), 10);
|
|
30
|
+
if (!Number.isFinite(pid) || pid <= 0) {
|
|
31
|
+
printWarning(`pidfile contained invalid value; removing`);
|
|
32
|
+
unlinkSync(MEMORY_PID_PATH);
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
if (!isAlive(pid)) {
|
|
36
|
+
printSuccess(`pid ${pid} is not running (stale pidfile); cleaned up`);
|
|
37
|
+
unlinkSync(MEMORY_PID_PATH);
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
40
|
+
printInfo('pid', `${pid}`);
|
|
41
|
+
try {
|
|
42
|
+
process.kill(pid, 'SIGTERM');
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
printWarning(`SIGTERM to pid ${pid} failed: ${err.message}`);
|
|
46
|
+
}
|
|
47
|
+
// Wait for graceful exit
|
|
48
|
+
const deadline = Date.now() + SIGTERM_GRACE_MS;
|
|
49
|
+
while (Date.now() < deadline) {
|
|
50
|
+
if (!isAlive(pid))
|
|
51
|
+
break;
|
|
52
|
+
await new Promise((r) => setTimeout(r, POLL_MS));
|
|
53
|
+
}
|
|
54
|
+
if (isAlive(pid)) {
|
|
55
|
+
printWarning(`pid ${pid} did not exit within ${SIGTERM_GRACE_MS / 1000}s; sending SIGKILL`);
|
|
56
|
+
try {
|
|
57
|
+
process.kill(pid, 'SIGKILL');
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
printWarning(`SIGKILL to pid ${pid} failed: ${err.message}`);
|
|
61
|
+
}
|
|
62
|
+
// Brief wait for SIGKILL to take effect
|
|
63
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
64
|
+
}
|
|
65
|
+
if (existsSync(MEMORY_PID_PATH)) {
|
|
66
|
+
unlinkSync(MEMORY_PID_PATH);
|
|
67
|
+
}
|
|
68
|
+
printSuccess(`stopped (pid ${pid})`);
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
export function registerMemoryStop(cmd) {
|
|
72
|
+
cmd
|
|
73
|
+
.command('stop')
|
|
74
|
+
.description('Stop the host agent-memory process (SIGTERM → SIGKILL after 10s; idempotent)')
|
|
75
|
+
.action(async () => {
|
|
76
|
+
const rc = await runMemoryStop();
|
|
77
|
+
if (rc !== 0)
|
|
78
|
+
process.exitCode = rc;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/memory/stop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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 type { Command } from 'commander';
|
|
9
|
+
import { type ClaudeShellDeps, type McpScope } from '../mcp/install-shared.js';
|
|
10
|
+
export declare function buildClaudeMcpRemoveArgs(scope: McpScope): {
|
|
11
|
+
command: string;
|
|
12
|
+
args: string[];
|
|
13
|
+
};
|
|
14
|
+
export interface UninstallOpts {
|
|
15
|
+
scope: McpScope;
|
|
16
|
+
}
|
|
17
|
+
export declare function runUninstall(opts: UninstallOpts, deps?: ClaudeShellDeps): Promise<number>;
|
|
18
|
+
export declare function registerMemoryUninstall(cmd: Command): void;
|
|
19
|
+
//# sourceMappingURL=uninstall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/memory/uninstall.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAIlC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,GAAG;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAKA;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,EACnB,IAAI,GAAE,eAA2C,GAChD,OAAO,CAAC,MAAM,CAAC,CAkCjB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAmB1D"}
|
|
@@ -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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"}
|
package/dist/image-digests.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"auth": "sha256:c8ebf817e09719289c7d7e37056b24adacb9d9fbc555e2540fbe88dfd400f2d9",
|
|
3
|
-
"devbox": "sha256:
|
|
4
|
-
"devbox-base": "sha256:
|
|
3
|
+
"devbox": "sha256:88d3d7845cc9fabfe47217ef9bd3d4d7e1c22db770f452afd8627588588547c4",
|
|
4
|
+
"devbox-base": "sha256:817f0f1c2b0ea972032d428349a19d0e0a37ec4671adf5cd5fe541ac48e7b4ea",
|
|
5
5
|
"host-cp": "sha256:13a26950fea2917ebb268f7bda04fd54267ffe8e5ba4a550db89f28eb309553f",
|
|
6
6
|
"mcp-auth": "sha256:c82fcfca7ed1b139cbea252697487889b96b45a6575cfba076de7f57eaa943ac",
|
|
7
7
|
"$schema_version": 1,
|
|
8
|
-
"$published_version": "0.1.
|
|
8
|
+
"$published_version": "0.1.126",
|
|
9
9
|
"$registry": "ghcr.io/pleri"
|
|
10
10
|
}
|