@pleri/olam-cli 0.1.104 → 0.1.106
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.map +1 -1
- package/dist/commands/bootstrap.js +29 -1
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/kg-build.d.ts.map +1 -1
- package/dist/commands/kg-build.js +5 -0
- package/dist/commands/kg-build.js.map +1 -1
- package/dist/commands/kg-status.d.ts +59 -0
- package/dist/commands/kg-status.d.ts.map +1 -0
- package/dist/commands/kg-status.js +345 -0
- package/dist/commands/kg-status.js.map +1 -0
- package/dist/commands/kg-watch.d.ts +49 -0
- package/dist/commands/kg-watch.d.ts.map +1 -0
- package/dist/commands/kg-watch.js +172 -0
- package/dist/commands/kg-watch.js.map +1 -0
- package/dist/image-digests.json +4 -4
- package/dist/index.js +484 -83
- package/host-cp/src/server.mjs +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* olam kg watch <workspace> — opt-in pristine watcher.
|
|
3
|
+
*
|
|
4
|
+
* Phase C2 of olam-kg-service (plan ~/.claude/plans/olam-kg-service.md).
|
|
5
|
+
*
|
|
6
|
+
* Runs `graphify <workspacePath> --watch --update --graph <pristinePath>/graph.json`
|
|
7
|
+
* as a managed subprocess against the operator's workspace clone so the
|
|
8
|
+
* pristine KG stays fresh as host-side commits land. Off by default;
|
|
9
|
+
* operator opts in per workspace.
|
|
10
|
+
*
|
|
11
|
+
* Single-instance enforcement via PID file at
|
|
12
|
+
* `~/.olam/kg/<workspace>/.watch.pid`. Reclaim stale PIDs (process gone
|
|
13
|
+
* but file remains) silently. Reject when an active PID still owns the
|
|
14
|
+
* file.
|
|
15
|
+
*
|
|
16
|
+
* Lifecycle:
|
|
17
|
+
* 1. CLI process spawns graphify in the FOREGROUND (`detached: false`)
|
|
18
|
+
* so the operator's terminal owns it; Ctrl-C kills both cleanly.
|
|
19
|
+
* 2. SIGINT/SIGTERM on this process → forwarded to graphify; subprocess
|
|
20
|
+
* exits; CLI removes PID file; CLI exits.
|
|
21
|
+
* 3. graphify exiting on its own → CLI removes PID file + exits with
|
|
22
|
+
* graphify's status code.
|
|
23
|
+
*
|
|
24
|
+
* Risk T7 mitigation: workspace name regex-validated via @olam/core's
|
|
25
|
+
* `validateWorkspaceName`; `--graph` path resolved via `kgPristinePath`
|
|
26
|
+
* (which asserts the resolved path stays under `~/.olam/kg/`). All
|
|
27
|
+
* subprocess invocations use argv arrays (no shell interpolation).
|
|
28
|
+
*/
|
|
29
|
+
import type { Command } from 'commander';
|
|
30
|
+
import { spawn } from 'node:child_process';
|
|
31
|
+
interface KgWatchOptions {
|
|
32
|
+
readonly cwd?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface RunKgWatchDeps {
|
|
35
|
+
/** Spawn factory; injectable for tests so we don't fork real graphify. */
|
|
36
|
+
readonly spawnImpl?: typeof spawn;
|
|
37
|
+
/** Resolve workspace cwd; defaults to process.cwd(). */
|
|
38
|
+
readonly cwd?: string;
|
|
39
|
+
/** Suppresses signal-handler registration during tests. */
|
|
40
|
+
readonly registerSignalHandlers?: boolean;
|
|
41
|
+
}
|
|
42
|
+
interface RunResult {
|
|
43
|
+
readonly exitCode: number;
|
|
44
|
+
readonly pidWritten: boolean;
|
|
45
|
+
}
|
|
46
|
+
export declare function runKgWatch(workspaceArg: string | undefined, opts: KgWatchOptions, deps?: RunKgWatchDeps): Promise<RunResult>;
|
|
47
|
+
export declare function registerKgWatchCommand(kg: Command): void;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=kg-watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kg-watch.d.ts","sourceRoot":"","sources":["../../src/commands/kg-watch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAO9D,UAAU,cAAc;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAqED,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,wDAAwD;IACxD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAsB,UAAU,CAC9B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,IAAI,EAAE,cAAc,EACpB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,SAAS,CAAC,CAyEpB;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAWxD"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* olam kg watch <workspace> — opt-in pristine watcher.
|
|
3
|
+
*
|
|
4
|
+
* Phase C2 of olam-kg-service (plan ~/.claude/plans/olam-kg-service.md).
|
|
5
|
+
*
|
|
6
|
+
* Runs `graphify <workspacePath> --watch --update --graph <pristinePath>/graph.json`
|
|
7
|
+
* as a managed subprocess against the operator's workspace clone so the
|
|
8
|
+
* pristine KG stays fresh as host-side commits land. Off by default;
|
|
9
|
+
* operator opts in per workspace.
|
|
10
|
+
*
|
|
11
|
+
* Single-instance enforcement via PID file at
|
|
12
|
+
* `~/.olam/kg/<workspace>/.watch.pid`. Reclaim stale PIDs (process gone
|
|
13
|
+
* but file remains) silently. Reject when an active PID still owns the
|
|
14
|
+
* file.
|
|
15
|
+
*
|
|
16
|
+
* Lifecycle:
|
|
17
|
+
* 1. CLI process spawns graphify in the FOREGROUND (`detached: false`)
|
|
18
|
+
* so the operator's terminal owns it; Ctrl-C kills both cleanly.
|
|
19
|
+
* 2. SIGINT/SIGTERM on this process → forwarded to graphify; subprocess
|
|
20
|
+
* exits; CLI removes PID file; CLI exits.
|
|
21
|
+
* 3. graphify exiting on its own → CLI removes PID file + exits with
|
|
22
|
+
* graphify's status code.
|
|
23
|
+
*
|
|
24
|
+
* Risk T7 mitigation: workspace name regex-validated via @olam/core's
|
|
25
|
+
* `validateWorkspaceName`; `--graph` path resolved via `kgPristinePath`
|
|
26
|
+
* (which asserts the resolved path stays under `~/.olam/kg/`). All
|
|
27
|
+
* subprocess invocations use argv arrays (no shell interpolation).
|
|
28
|
+
*/
|
|
29
|
+
import { spawn } from 'node:child_process';
|
|
30
|
+
import fs from 'node:fs';
|
|
31
|
+
import path from 'node:path';
|
|
32
|
+
import { kgPristinePath } from '@olam/core/src/kg/storage-paths.js';
|
|
33
|
+
import { validateWorkspaceName } from '@olam/core/src/world/workspace-name.js';
|
|
34
|
+
import { printError, printInfo, printSuccess } from '../output.js';
|
|
35
|
+
function pidFilePath(workspace) {
|
|
36
|
+
return path.join(kgPristinePath(workspace), '.watch.pid');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check whether a given PID is currently a live process.
|
|
40
|
+
*
|
|
41
|
+
* `process.kill(pid, 0)` returns truthy AND doesn't actually send a
|
|
42
|
+
* signal when called with signal=0 — it's the standard POSIX liveness
|
|
43
|
+
* check. Throws ESRCH when the PID is dead. EPERM means "exists but
|
|
44
|
+
* I can't signal it" (different user); we treat EPERM as "alive" because
|
|
45
|
+
* the same operator owning olam should own the graphify subprocess.
|
|
46
|
+
*/
|
|
47
|
+
function isPidAlive(pid) {
|
|
48
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
49
|
+
return false;
|
|
50
|
+
try {
|
|
51
|
+
process.kill(pid, 0);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
const code = err.code;
|
|
56
|
+
if (code === 'EPERM')
|
|
57
|
+
return true; // exists, different user
|
|
58
|
+
return false; // ESRCH or other → dead
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function readAndClassifyPid(workspace) {
|
|
62
|
+
const file = pidFilePath(workspace);
|
|
63
|
+
if (!fs.existsSync(file))
|
|
64
|
+
return { status: 'no-pidfile', pid: null };
|
|
65
|
+
let pid;
|
|
66
|
+
try {
|
|
67
|
+
const raw = fs.readFileSync(file, 'utf-8').trim();
|
|
68
|
+
pid = Number.parseInt(raw, 10);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Unreadable → treat as stale; the writer must have been killed mid-flush
|
|
72
|
+
fs.rmSync(file, { force: true });
|
|
73
|
+
return { status: 'stale-reclaimed', pid: null };
|
|
74
|
+
}
|
|
75
|
+
if (!Number.isInteger(pid) || pid <= 0) {
|
|
76
|
+
fs.rmSync(file, { force: true });
|
|
77
|
+
return { status: 'stale-reclaimed', pid: null };
|
|
78
|
+
}
|
|
79
|
+
if (isPidAlive(pid))
|
|
80
|
+
return { status: 'active', pid };
|
|
81
|
+
fs.rmSync(file, { force: true });
|
|
82
|
+
return { status: 'stale-reclaimed', pid: null };
|
|
83
|
+
}
|
|
84
|
+
function writePidFile(workspace, pid) {
|
|
85
|
+
const file = pidFilePath(workspace);
|
|
86
|
+
const dir = path.dirname(file);
|
|
87
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
88
|
+
fs.writeFileSync(file, String(pid), { encoding: 'utf-8' });
|
|
89
|
+
}
|
|
90
|
+
function removePidFile(workspace) {
|
|
91
|
+
const file = pidFilePath(workspace);
|
|
92
|
+
try {
|
|
93
|
+
fs.rmSync(file, { force: true });
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// best-effort cleanup
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export async function runKgWatch(workspaceArg, opts, deps = {}) {
|
|
100
|
+
const cwd = deps.cwd ?? opts.cwd ?? process.cwd();
|
|
101
|
+
const name = workspaceArg ?? path.basename(cwd).toLowerCase();
|
|
102
|
+
try {
|
|
103
|
+
validateWorkspaceName(name);
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
printError(err.message);
|
|
107
|
+
return { exitCode: 1, pidWritten: false };
|
|
108
|
+
}
|
|
109
|
+
const pristinePath = kgPristinePath(name);
|
|
110
|
+
const graphPath = path.join(pristinePath, 'graphify-out', 'graph.json');
|
|
111
|
+
// Single-instance gate. PRE-spawn so we never start a duplicate watcher.
|
|
112
|
+
const pidState = readAndClassifyPid(name);
|
|
113
|
+
if (pidState.status === 'active') {
|
|
114
|
+
printError(`olam kg watch ${name} — already running (PID ${pidState.pid}). `
|
|
115
|
+
+ `Send SIGINT to that process to stop the existing watcher first.`);
|
|
116
|
+
return { exitCode: 1, pidWritten: false };
|
|
117
|
+
}
|
|
118
|
+
if (pidState.status === 'stale-reclaimed') {
|
|
119
|
+
printInfo('stale-pid', `reclaimed dead PID file at ${pidFilePath(name)}`);
|
|
120
|
+
}
|
|
121
|
+
const spawnFn = deps.spawnImpl ?? spawn;
|
|
122
|
+
const child = spawnFn('graphify', [cwd, '--watch', '--update', '--graph', graphPath], {
|
|
123
|
+
cwd,
|
|
124
|
+
env: process.env,
|
|
125
|
+
detached: false,
|
|
126
|
+
stdio: 'inherit',
|
|
127
|
+
});
|
|
128
|
+
if (typeof child.pid !== 'number') {
|
|
129
|
+
printError('graphify failed to launch (no PID assigned)');
|
|
130
|
+
return { exitCode: 1, pidWritten: false };
|
|
131
|
+
}
|
|
132
|
+
writePidFile(name, child.pid);
|
|
133
|
+
printSuccess(`olam kg watch ${name} — graphify PID ${child.pid} (Ctrl-C to stop)`);
|
|
134
|
+
if (deps.registerSignalHandlers !== false) {
|
|
135
|
+
const forward = (sig) => {
|
|
136
|
+
if (child.pid && !child.killed) {
|
|
137
|
+
try {
|
|
138
|
+
process.kill(child.pid, sig);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// child already dead; fall through to wait
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
process.on('SIGINT', () => forward('SIGINT'));
|
|
146
|
+
process.on('SIGTERM', () => forward('SIGTERM'));
|
|
147
|
+
}
|
|
148
|
+
return new Promise((resolve) => {
|
|
149
|
+
child.on('exit', (code, signal) => {
|
|
150
|
+
removePidFile(name);
|
|
151
|
+
const exitCode = typeof code === 'number' ? code : signal === 'SIGINT' || signal === 'SIGTERM' ? 0 : 1;
|
|
152
|
+
resolve({ exitCode, pidWritten: true });
|
|
153
|
+
});
|
|
154
|
+
child.on('error', (err) => {
|
|
155
|
+
removePidFile(name);
|
|
156
|
+
printError(`graphify subprocess error: ${err.message}`);
|
|
157
|
+
resolve({ exitCode: 1, pidWritten: true });
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
export function registerKgWatchCommand(kg) {
|
|
162
|
+
kg.command('watch')
|
|
163
|
+
.description('Run graphify --watch against a workspace, keeping its pristine KG fresh '
|
|
164
|
+
+ 'as host-side commits land. Single-instance via PID file; Ctrl-C cleanly stops.')
|
|
165
|
+
.argument('[workspace]', 'workspace name (lowercase alphanumeric + hyphens/underscores)')
|
|
166
|
+
.action(async (workspaceArg) => {
|
|
167
|
+
const r = await runKgWatch(workspaceArg, {});
|
|
168
|
+
if (r.exitCode !== 0)
|
|
169
|
+
process.exitCode = r.exitCode;
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=kg-watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kg-watch.js","sourceRoot":"","sources":["../../src/commands/kg-watch.ts"],"names":[],"mappings":"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"}
|
package/dist/image-digests.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"auth": "sha256:4853cf21c4f63ffcc0e44bf1b1e1240aa5bd33348cbced2e1e2960aca0744484",
|
|
3
|
-
"devbox": "sha256:
|
|
4
|
-
"devbox-base": "sha256:
|
|
5
|
-
"host-cp": "sha256:
|
|
3
|
+
"devbox": "sha256:6b1e5ef2491cda97e87bdf0a8ce41a23c14bf14f018a360ed36c81c9c3b59ff2",
|
|
4
|
+
"devbox-base": "sha256:594d489bb7dfeb19a3196618d437124a5e52bf2ffd16b619fad3a90e5b0f69ec",
|
|
5
|
+
"host-cp": "sha256:98f424f472baf67bb17b286329f33facf830a04f88afb555192f4ece54e8b1ae",
|
|
6
6
|
"mcp-auth": "sha256:5da67023e96f685589676b191105fa260eaa0199ef1af43e7a63f982880c7bf7",
|
|
7
7
|
"$schema_version": 1,
|
|
8
|
-
"$published_version": "0.1.
|
|
8
|
+
"$published_version": "0.1.106",
|
|
9
9
|
"$registry": "ghcr.io/pleri"
|
|
10
10
|
}
|