@pleri/olam-cli 0.1.144 → 0.1.146
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/doctor.d.ts +53 -23
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +117 -46
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/logs.d.ts +17 -3
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +38 -35
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/memory/bridge.d.ts +57 -0
- package/dist/commands/memory/bridge.d.ts.map +1 -0
- package/dist/commands/memory/bridge.js +156 -0
- package/dist/commands/memory/bridge.js.map +1 -0
- package/dist/commands/memory/index.d.ts +3 -0
- package/dist/commands/memory/index.d.ts.map +1 -1
- package/dist/commands/memory/index.js +10 -1
- package/dist/commands/memory/index.js.map +1 -1
- package/dist/commands/memory/reclassify.d.ts +56 -0
- package/dist/commands/memory/reclassify.d.ts.map +1 -0
- package/dist/commands/memory/reclassify.js +177 -0
- package/dist/commands/memory/reclassify.js.map +1 -0
- package/dist/commands/memory/stats.d.ts +69 -0
- package/dist/commands/memory/stats.d.ts.map +1 -0
- package/dist/commands/memory/stats.js +164 -0
- package/dist/commands/memory/stats.js.map +1 -0
- package/dist/commands/skills-doctor.d.ts +14 -0
- package/dist/commands/skills-doctor.d.ts.map +1 -0
- package/dist/commands/skills-doctor.js +126 -0
- package/dist/commands/skills-doctor.js.map +1 -0
- package/dist/commands/skills-hook.d.ts +19 -0
- package/dist/commands/skills-hook.d.ts.map +1 -0
- package/dist/commands/skills-hook.js +99 -0
- package/dist/commands/skills-hook.js.map +1 -0
- package/dist/commands/skills-migrate-back.d.ts +21 -0
- package/dist/commands/skills-migrate-back.d.ts.map +1 -0
- package/dist/commands/skills-migrate-back.js +222 -0
- package/dist/commands/skills-migrate-back.js.map +1 -0
- package/dist/commands/skills-migrate.d.ts +33 -0
- package/dist/commands/skills-migrate.d.ts.map +1 -0
- package/dist/commands/skills-migrate.js +216 -0
- package/dist/commands/skills-migrate.js.map +1 -0
- package/dist/commands/skills-onboard.d.ts +26 -0
- package/dist/commands/skills-onboard.d.ts.map +1 -0
- package/dist/commands/skills-onboard.js +227 -0
- package/dist/commands/skills-onboard.js.map +1 -0
- package/dist/commands/skills-shadow-backups.d.ts +15 -0
- package/dist/commands/skills-shadow-backups.d.ts.map +1 -0
- package/dist/commands/skills-shadow-backups.js +132 -0
- package/dist/commands/skills-shadow-backups.js.map +1 -0
- package/dist/commands/skills-source.d.ts +37 -0
- package/dist/commands/skills-source.d.ts.map +1 -0
- package/dist/commands/skills-source.js +431 -0
- package/dist/commands/skills-source.js.map +1 -0
- package/dist/commands/skills.d.ts +11 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +170 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/status.d.ts +27 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +102 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/substrate-audit-log.d.ts +49 -0
- package/dist/commands/substrate-audit-log.d.ts.map +1 -0
- package/dist/commands/substrate-audit-log.js +148 -0
- package/dist/commands/substrate-audit-log.js.map +1 -0
- package/dist/commands/substrate.d.ts +60 -0
- package/dist/commands/substrate.d.ts.map +1 -0
- package/dist/commands/substrate.js +175 -0
- package/dist/commands/substrate.js.map +1 -0
- package/dist/commands/upgrade.d.ts +10 -0
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +30 -0
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/image-digests.json +7 -7
- package/dist/index.js +8394 -3876
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +69 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +146 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/health-probes.d.ts +72 -0
- package/dist/lib/health-probes.d.ts.map +1 -1
- package/dist/lib/health-probes.js +218 -0
- package/dist/lib/health-probes.js.map +1 -1
- package/dist/lib/instrumentation.d.ts +85 -0
- package/dist/lib/instrumentation.d.ts.map +1 -0
- package/dist/lib/instrumentation.js +104 -0
- package/dist/lib/instrumentation.js.map +1 -0
- package/dist/lib/kubectl-wrap.d.ts +59 -0
- package/dist/lib/kubectl-wrap.d.ts.map +1 -0
- package/dist/lib/kubectl-wrap.js +130 -0
- package/dist/lib/kubectl-wrap.js.map +1 -0
- package/dist/lib/manifest-refresh.d.ts +95 -0
- package/dist/lib/manifest-refresh.d.ts.map +1 -0
- package/dist/lib/manifest-refresh.js +222 -0
- package/dist/lib/manifest-refresh.js.map +1 -0
- package/dist/lib/port-forward.d.ts +101 -0
- package/dist/lib/port-forward.d.ts.map +1 -0
- package/dist/lib/port-forward.js +240 -0
- package/dist/lib/port-forward.js.map +1 -0
- package/dist/lib/upgrade-kubernetes.d.ts +77 -0
- package/dist/lib/upgrade-kubernetes.d.ts.map +1 -0
- package/dist/lib/upgrade-kubernetes.js +277 -0
- package/dist/lib/upgrade-kubernetes.js.map +1 -0
- package/dist/mcp-server.js +3328 -1166
- package/host-cp/k8s/manifests/00-namespace.yaml +7 -0
- package/host-cp/k8s/manifests/10-serviceaccount.yaml +8 -0
- package/host-cp/k8s/manifests/20-rbac.yaml +34 -0
- package/host-cp/k8s/manifests/30-configmap.yaml +30 -0
- package/host-cp/k8s/manifests/45-pvc.yaml +27 -0
- package/host-cp/k8s/manifests/50-deployment.yaml +148 -0
- package/host-cp/k8s/manifests/60-service.yaml +22 -0
- package/host-cp/k8s/templates/40-secret-template.yaml +32 -0
- package/host-cp/src/agent-runtime-trigger.mjs +74 -4
- package/host-cp/src/engine-identity.mjs +32 -0
- package/host-cp/src/plan-chat-service.mjs +31 -7
- package/host-cp/src/server.mjs +219 -9
- package/package.json +3 -2
|
@@ -11,6 +11,33 @@
|
|
|
11
11
|
* transitive @olam/adapters resolution.
|
|
12
12
|
*/
|
|
13
13
|
import type { Command } from 'commander';
|
|
14
|
+
/**
|
|
15
|
+
* Canonical runtime-state contract per Decision 17. Surfaced by host-cp's
|
|
16
|
+
* `GET /v1/worlds/:id/status` endpoint; both Docker and Kubernetes engines
|
|
17
|
+
* map their native state onto this shape so the wire-format is identical.
|
|
18
|
+
*/
|
|
19
|
+
export interface WorldRuntimeStatus {
|
|
20
|
+
readonly state: 'running' | 'starting' | 'stopped' | 'crashed' | 'unknown';
|
|
21
|
+
readonly ready_replicas: number;
|
|
22
|
+
readonly restarts: number;
|
|
23
|
+
readonly last_event_type: string | null;
|
|
24
|
+
readonly last_event_age_seconds: number | null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse and validate a server response payload into WorldRuntimeStatus.
|
|
28
|
+
* Returns null on any shape mismatch so the caller falls back gracefully.
|
|
29
|
+
* Exported for unit testing.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseRuntimeStatus(raw: unknown): WorldRuntimeStatus | null;
|
|
32
|
+
export type FetchRuntimeFn = (worldId: string, token: string) => Promise<WorldRuntimeStatus | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Default fetcher — hits host-cp's /v1/worlds/:id/status via the loopback
|
|
35
|
+
* port with a 2-second timeout. Returns null on any error so the calling
|
|
36
|
+
* `olam status` command renders the registry view without the runtime
|
|
37
|
+
* block when host-cp is down or the engine fails (preserves the legacy
|
|
38
|
+
* behaviour for operators with a stopped host-cp).
|
|
39
|
+
*/
|
|
40
|
+
export declare const fetchWorldRuntimeStatus: FetchRuntimeFn;
|
|
14
41
|
export interface MachineStatus {
|
|
15
42
|
readonly version: string;
|
|
16
43
|
readonly port: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC3E,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;CAChD;AAMD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAqB1E;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;AAEpG;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,cA6BlC,CAAC;AAEL,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAAC;AAC1E,MAAM,MAAM,WAAW,GAAG,MAAM,MAAM,GAAG,IAAI,CAAC;AAC9C,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC;IACxC,GAAG,EAAE;QAAE,YAAY,EAAE;YAAE,UAAU,EAAE,MAAM,OAAO,EAAE,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9D,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACtB,CAAC,CAAC;AAEH,wBAAsB,gBAAgB,CACpC,MAAM,CAAC,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,aAAa,EACxB,UAAU,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,aAAa,CAAC,CAoDxB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqGrD"}
|
package/dist/commands/status.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* transitive @olam/adapters resolution.
|
|
12
12
|
*/
|
|
13
13
|
import * as fs from 'node:fs';
|
|
14
|
+
import * as http from 'node:http';
|
|
14
15
|
import * as os from 'node:os';
|
|
15
16
|
import * as path from 'node:path';
|
|
16
17
|
import { printError, printInfo, printHeader, formatAge } from '../output.js';
|
|
@@ -18,6 +19,78 @@ import { printError, printInfo, printHeader, formatAge } from '../output.js';
|
|
|
18
19
|
// so status.ts doesn't import @olam/core/world/version-pin.ts (transitive dep).
|
|
19
20
|
const CLI_VERSION = process.env['OLAM_CLI_VERSION'] ?? '0.0.0';
|
|
20
21
|
const HOST_CP_PORT = 19000;
|
|
22
|
+
const STATE_ENUM = [
|
|
23
|
+
'running', 'starting', 'stopped', 'crashed', 'unknown',
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Parse and validate a server response payload into WorldRuntimeStatus.
|
|
27
|
+
* Returns null on any shape mismatch so the caller falls back gracefully.
|
|
28
|
+
* Exported for unit testing.
|
|
29
|
+
*/
|
|
30
|
+
export function parseRuntimeStatus(raw) {
|
|
31
|
+
if (!raw || typeof raw !== 'object')
|
|
32
|
+
return null;
|
|
33
|
+
const obj = raw;
|
|
34
|
+
const state = obj.state;
|
|
35
|
+
if (typeof state !== 'string')
|
|
36
|
+
return null;
|
|
37
|
+
if (!STATE_ENUM.includes(state))
|
|
38
|
+
return null;
|
|
39
|
+
const ready_replicas = typeof obj.ready_replicas === 'number' ? obj.ready_replicas : 0;
|
|
40
|
+
const restarts = typeof obj.restarts === 'number' ? obj.restarts : 0;
|
|
41
|
+
const last_event_type = typeof obj.last_event_type === 'string'
|
|
42
|
+
? obj.last_event_type
|
|
43
|
+
: null;
|
|
44
|
+
const last_event_age_seconds = typeof obj.last_event_age_seconds === 'number'
|
|
45
|
+
? obj.last_event_age_seconds
|
|
46
|
+
: null;
|
|
47
|
+
return {
|
|
48
|
+
state: state,
|
|
49
|
+
ready_replicas,
|
|
50
|
+
restarts,
|
|
51
|
+
last_event_type,
|
|
52
|
+
last_event_age_seconds,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Default fetcher — hits host-cp's /v1/worlds/:id/status via the loopback
|
|
57
|
+
* port with a 2-second timeout. Returns null on any error so the calling
|
|
58
|
+
* `olam status` command renders the registry view without the runtime
|
|
59
|
+
* block when host-cp is down or the engine fails (preserves the legacy
|
|
60
|
+
* behaviour for operators with a stopped host-cp).
|
|
61
|
+
*/
|
|
62
|
+
export const fetchWorldRuntimeStatus = (worldId, token) => new Promise((resolve) => {
|
|
63
|
+
const opts = {
|
|
64
|
+
host: '127.0.0.1',
|
|
65
|
+
port: HOST_CP_PORT,
|
|
66
|
+
path: `/v1/worlds/${encodeURIComponent(worldId)}/status`,
|
|
67
|
+
method: 'GET',
|
|
68
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
69
|
+
timeout: 2_000,
|
|
70
|
+
};
|
|
71
|
+
const req = http.request(opts, (res) => {
|
|
72
|
+
if (res.statusCode !== 200) {
|
|
73
|
+
res.resume();
|
|
74
|
+
return resolve(null);
|
|
75
|
+
}
|
|
76
|
+
let body = '';
|
|
77
|
+
res.setEncoding('utf-8');
|
|
78
|
+
res.on('data', (c) => { body += c; });
|
|
79
|
+
res.on('end', () => {
|
|
80
|
+
try {
|
|
81
|
+
const parsed = parseRuntimeStatus(JSON.parse(body));
|
|
82
|
+
resolve(parsed);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
resolve(null);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
res.on('error', () => resolve(null));
|
|
89
|
+
});
|
|
90
|
+
req.on('error', () => resolve(null));
|
|
91
|
+
req.on('timeout', () => { req.destroy(); resolve(null); });
|
|
92
|
+
req.end();
|
|
93
|
+
});
|
|
21
94
|
export async function getMachineStatus(_probe, _loadCtx, _readToken) {
|
|
22
95
|
// Lazy-load the Docker-heavy modules only when not injected (prod path).
|
|
23
96
|
const probe = _probe ?? (async () => {
|
|
@@ -78,6 +151,7 @@ export function registerStatus(program) {
|
|
|
78
151
|
.description('Show status (machine status when no world given; world details with a world ID)')
|
|
79
152
|
.argument('[world]', 'World ID — omit to show machine status')
|
|
80
153
|
.option('--json', 'Output as JSON')
|
|
154
|
+
.option('--pretty', 'Render world status as a human-readable table (engine-aware view)')
|
|
81
155
|
.action(async (worldId, opts) => {
|
|
82
156
|
// ── Machine status (no world arg) ────────────────────────────
|
|
83
157
|
if (!worldId) {
|
|
@@ -118,8 +192,22 @@ export function registerStatus(program) {
|
|
|
118
192
|
}
|
|
119
193
|
const cost = ctx.costTracker.getWorldCost(worldId);
|
|
120
194
|
const dashboardUrl = `http://localhost:${19080 + world.portOffset}`;
|
|
195
|
+
// Fetch the engine-aware runtime status. host-cp may be down or the
|
|
196
|
+
// engine may not yet have a record of this world — both produce
|
|
197
|
+
// `null`, and we omit the runtime block from the output instead of
|
|
198
|
+
// failing. Preserves legacy behavior when offline.
|
|
199
|
+
const { readToken } = await import('./host-cp.js');
|
|
200
|
+
const token = readToken();
|
|
201
|
+
const runtime = token ? await fetchWorldRuntimeStatus(worldId, token) : null;
|
|
121
202
|
if (opts.json) {
|
|
122
|
-
|
|
203
|
+
// Additive merge: existing world envelope stays as-is, runtime
|
|
204
|
+
// adds the 5 canonical fields under `runtime` for clear scope
|
|
205
|
+
// separation. Keeps existing --json consumers green (registry
|
|
206
|
+
// fields unchanged) while exposing the new engine-aware shape.
|
|
207
|
+
const payload = { ...world, dashboardUrl, cost };
|
|
208
|
+
if (runtime)
|
|
209
|
+
payload.runtime = runtime;
|
|
210
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
123
211
|
return;
|
|
124
212
|
}
|
|
125
213
|
printHeader(`${world.name} (${world.id})`);
|
|
@@ -140,6 +228,19 @@ export function registerStatus(program) {
|
|
|
140
228
|
printInfo('Created', world.createdAt);
|
|
141
229
|
printInfo('Uptime', formatAge(world.createdAt));
|
|
142
230
|
printInfo('Updated', world.updatedAt);
|
|
231
|
+
if (runtime) {
|
|
232
|
+
// Engine-aware runtime block. Decision 17 canonical shape; no
|
|
233
|
+
// engine name in stdout (per S2 — operator UX is invariant).
|
|
234
|
+
printInfo('Runtime state', runtime.state);
|
|
235
|
+
printInfo('Ready replicas', String(runtime.ready_replicas));
|
|
236
|
+
printInfo('Restarts', String(runtime.restarts));
|
|
237
|
+
if (runtime.last_event_type) {
|
|
238
|
+
const ageSuffix = runtime.last_event_age_seconds != null
|
|
239
|
+
? ` (${runtime.last_event_age_seconds}s ago)`
|
|
240
|
+
: '';
|
|
241
|
+
printInfo('Last event', `${runtime.last_event_type}${ageSuffix}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
143
244
|
});
|
|
144
245
|
}
|
|
145
246
|
//# sourceMappingURL=status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* substrate-audit-log.ts — `olam substrate audit-log` subcommand.
|
|
3
|
+
*
|
|
4
|
+
* Phase 1b C3 of olam-host-suite-phase-1b-k3s-beta-flavour (plan
|
|
5
|
+
* ~/.claude/plans/olam-host-suite-phase-1b-k3s-beta-flavour.md).
|
|
6
|
+
*
|
|
7
|
+
* Decisions consumed:
|
|
8
|
+
* D19 — audit-log inspection subcommand ships in PR3 (not deferred).
|
|
9
|
+
*
|
|
10
|
+
* Reads `~/.olam/state/manifest-refresh-audit.jsonl` and renders entries.
|
|
11
|
+
*
|
|
12
|
+
* Subcommand: `olam substrate audit-log`
|
|
13
|
+
* (registered under the existing `substrate` parent command via registerSubstrate)
|
|
14
|
+
*
|
|
15
|
+
* Flags:
|
|
16
|
+
* --json Emit raw JSONL on stdout (one entry per line).
|
|
17
|
+
* --since <ISO-date> Filter entries with ts >= <ISO-date>.
|
|
18
|
+
* --limit <N> Max entries (default 50; applied AFTER --since filter).
|
|
19
|
+
*
|
|
20
|
+
* No force-overwrite power — read-only. Absent log file prints "no entries"
|
|
21
|
+
* without error (exit 0).
|
|
22
|
+
*/
|
|
23
|
+
import type { Command } from 'commander';
|
|
24
|
+
import * as fs from 'node:fs';
|
|
25
|
+
export interface AuditLogDeps {
|
|
26
|
+
readonly auditLogPath?: string;
|
|
27
|
+
readonly stdout?: NodeJS.WritableStream;
|
|
28
|
+
readonly stderr?: NodeJS.WritableStream;
|
|
29
|
+
readonly readFileSync?: typeof fs.readFileSync;
|
|
30
|
+
readonly existsSync?: typeof fs.existsSync;
|
|
31
|
+
}
|
|
32
|
+
export interface AuditLogOpts {
|
|
33
|
+
readonly json?: boolean;
|
|
34
|
+
readonly since?: string;
|
|
35
|
+
readonly limit?: number | string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Implementation of `olam substrate audit-log`. Exported for testability.
|
|
39
|
+
*
|
|
40
|
+
* @returns process exit code (0 = success, 1 = error)
|
|
41
|
+
*/
|
|
42
|
+
export declare function handleAuditLog(opts: AuditLogOpts, deps?: AuditLogDeps): number;
|
|
43
|
+
/**
|
|
44
|
+
* Register `olam substrate audit-log` under the `substrate` parent command.
|
|
45
|
+
*
|
|
46
|
+
* Called from registerSubstrate() in substrate.ts.
|
|
47
|
+
*/
|
|
48
|
+
export declare function registerSubstrateAuditLog(substrateCmdRef: Command): void;
|
|
49
|
+
//# sourceMappingURL=substrate-audit-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"substrate-audit-log.d.ts","sourceRoot":"","sources":["../../src/commands/substrate-audit-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAI9B,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;CAC5C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAClC;AA2CD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,GAAE,YAAiB,GAAG,MAAM,CA2ElF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,OAAO,GAAG,IAAI,CAkBxE"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* substrate-audit-log.ts — `olam substrate audit-log` subcommand.
|
|
3
|
+
*
|
|
4
|
+
* Phase 1b C3 of olam-host-suite-phase-1b-k3s-beta-flavour (plan
|
|
5
|
+
* ~/.claude/plans/olam-host-suite-phase-1b-k3s-beta-flavour.md).
|
|
6
|
+
*
|
|
7
|
+
* Decisions consumed:
|
|
8
|
+
* D19 — audit-log inspection subcommand ships in PR3 (not deferred).
|
|
9
|
+
*
|
|
10
|
+
* Reads `~/.olam/state/manifest-refresh-audit.jsonl` and renders entries.
|
|
11
|
+
*
|
|
12
|
+
* Subcommand: `olam substrate audit-log`
|
|
13
|
+
* (registered under the existing `substrate` parent command via registerSubstrate)
|
|
14
|
+
*
|
|
15
|
+
* Flags:
|
|
16
|
+
* --json Emit raw JSONL on stdout (one entry per line).
|
|
17
|
+
* --since <ISO-date> Filter entries with ts >= <ISO-date>.
|
|
18
|
+
* --limit <N> Max entries (default 50; applied AFTER --since filter).
|
|
19
|
+
*
|
|
20
|
+
* No force-overwrite power — read-only. Absent log file prints "no entries"
|
|
21
|
+
* without error (exit 0).
|
|
22
|
+
*/
|
|
23
|
+
import * as fs from 'node:fs';
|
|
24
|
+
import pc from 'picocolors';
|
|
25
|
+
import { MANIFEST_REFRESH_AUDIT_LOG } from '../lib/manifest-refresh.js';
|
|
26
|
+
const DEFAULT_LIMIT = 50;
|
|
27
|
+
/**
|
|
28
|
+
* Parse the JSONL audit log file into entries. Skips malformed lines.
|
|
29
|
+
*/
|
|
30
|
+
function parseAuditLog(raw) {
|
|
31
|
+
const lines = raw.split('\n').filter((l) => l.trim().length > 0);
|
|
32
|
+
const entries = [];
|
|
33
|
+
for (const line of lines) {
|
|
34
|
+
try {
|
|
35
|
+
const entry = JSON.parse(line);
|
|
36
|
+
entries.push(entry);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Skip malformed lines silently.
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return entries;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Format a single entry as a pretty-printed table row.
|
|
46
|
+
*
|
|
47
|
+
* Table columns: ts | security_regression | accepted | changed_fields
|
|
48
|
+
*/
|
|
49
|
+
function formatEntryRow(entry, index) {
|
|
50
|
+
const ts = entry.ts ?? '(no timestamp)';
|
|
51
|
+
const regression = entry.security_regression ? pc.red('yes') : pc.green('no');
|
|
52
|
+
const accepted = entry.accepted ? pc.yellow('yes') : '—';
|
|
53
|
+
const fields = (entry.changed_fields ?? []).join(', ') || '—';
|
|
54
|
+
return ` ${String(index + 1).padStart(3)} ${ts} regression=${regression} accepted=${accepted} fields=[${fields}]`;
|
|
55
|
+
}
|
|
56
|
+
function formatHeader() {
|
|
57
|
+
return (` ${'#'.padStart(3)} ${'timestamp'.padEnd(27)} regression accepted fields\n` +
|
|
58
|
+
` ${'─'.repeat(3)} ${'─'.repeat(27)} ${'─'.repeat(10)} ${'─'.repeat(8)} ${'─'.repeat(20)}`);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Implementation of `olam substrate audit-log`. Exported for testability.
|
|
62
|
+
*
|
|
63
|
+
* @returns process exit code (0 = success, 1 = error)
|
|
64
|
+
*/
|
|
65
|
+
export function handleAuditLog(opts, deps = {}) {
|
|
66
|
+
const auditLogPath = deps.auditLogPath ?? MANIFEST_REFRESH_AUDIT_LOG;
|
|
67
|
+
const stdout = deps.stdout ?? process.stdout;
|
|
68
|
+
const stderr = deps.stderr ?? process.stderr;
|
|
69
|
+
const readFileSyncImpl = deps.readFileSync ?? fs.readFileSync;
|
|
70
|
+
const existsSyncImpl = deps.existsSync ?? fs.existsSync;
|
|
71
|
+
const rawLimit = opts.limit;
|
|
72
|
+
const limit = typeof rawLimit === 'number'
|
|
73
|
+
? rawLimit
|
|
74
|
+
: typeof rawLimit === 'string'
|
|
75
|
+
? Number.parseInt(rawLimit, 10)
|
|
76
|
+
: DEFAULT_LIMIT;
|
|
77
|
+
const effectiveLimit = Number.isFinite(limit) && limit > 0 ? limit : DEFAULT_LIMIT;
|
|
78
|
+
if (!existsSyncImpl(auditLogPath)) {
|
|
79
|
+
stdout.write('no entries\n');
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
let raw;
|
|
83
|
+
try {
|
|
84
|
+
raw = readFileSyncImpl(auditLogPath, 'utf8');
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
stderr.write(`${pc.red('error:')} could not read audit log at ${auditLogPath}: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
88
|
+
return 1;
|
|
89
|
+
}
|
|
90
|
+
let entries = parseAuditLog(raw);
|
|
91
|
+
// --since filter
|
|
92
|
+
if (opts.since) {
|
|
93
|
+
const sinceMs = Date.parse(opts.since);
|
|
94
|
+
if (Number.isNaN(sinceMs)) {
|
|
95
|
+
stderr.write(`${pc.red('error:')} invalid --since date "${opts.since}". Expected ISO-8601 (e.g. 2026-05-20T00:00:00Z).\n`);
|
|
96
|
+
return 1;
|
|
97
|
+
}
|
|
98
|
+
entries = entries.filter((e) => {
|
|
99
|
+
const ts = Date.parse(e.ts ?? '');
|
|
100
|
+
return !Number.isNaN(ts) && ts >= sinceMs;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// --limit (applied after filter, from the END of the list — most recent N)
|
|
104
|
+
if (entries.length > effectiveLimit) {
|
|
105
|
+
entries = entries.slice(-effectiveLimit);
|
|
106
|
+
}
|
|
107
|
+
if (entries.length === 0) {
|
|
108
|
+
stdout.write('no entries\n');
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
if (opts.json) {
|
|
112
|
+
for (const entry of entries) {
|
|
113
|
+
stdout.write(JSON.stringify(entry) + '\n');
|
|
114
|
+
}
|
|
115
|
+
return 0;
|
|
116
|
+
}
|
|
117
|
+
// Pretty-printed table.
|
|
118
|
+
stdout.write(formatHeader() + '\n');
|
|
119
|
+
entries.forEach((entry, i) => {
|
|
120
|
+
stdout.write(formatEntryRow(entry, i) + '\n');
|
|
121
|
+
});
|
|
122
|
+
stdout.write(`\n${entries.length} entr${entries.length === 1 ? 'y' : 'ies'} shown\n`);
|
|
123
|
+
return 0;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Register `olam substrate audit-log` under the `substrate` parent command.
|
|
127
|
+
*
|
|
128
|
+
* Called from registerSubstrate() in substrate.ts.
|
|
129
|
+
*/
|
|
130
|
+
export function registerSubstrateAuditLog(substrateCmdRef) {
|
|
131
|
+
substrateCmdRef
|
|
132
|
+
.command('audit-log')
|
|
133
|
+
.description('Inspect the manifest-refresh audit log (~/.olam/state/manifest-refresh-audit.jsonl). ' +
|
|
134
|
+
'Read-only. No force-overwrite power.')
|
|
135
|
+
.option('--json', 'Emit raw JSONL on stdout instead of a pretty table')
|
|
136
|
+
.option('--since <ISO-date>', 'Filter entries with timestamp >= <ISO-date>')
|
|
137
|
+
.option('--limit <N>', `Max entries to show (default ${DEFAULT_LIMIT})`)
|
|
138
|
+
.action((opts) => {
|
|
139
|
+
const code = handleAuditLog({
|
|
140
|
+
json: opts.json,
|
|
141
|
+
since: opts.since,
|
|
142
|
+
limit: opts.limit,
|
|
143
|
+
});
|
|
144
|
+
if (code !== 0)
|
|
145
|
+
process.exitCode = code;
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=substrate-audit-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"substrate-audit-log.js","sourceRoot":"","sources":["../../src/commands/substrate-audit-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* olam substrate — Manage the operator-facing deployment substrate.
|
|
3
|
+
*
|
|
4
|
+
* Phase 1b A2 of olam-host-suite-phase-1b-k3s-beta-flavour (plan
|
|
5
|
+
* ~/.claude/plans/olam-host-suite-phase-1b-k3s-beta-flavour.md).
|
|
6
|
+
*
|
|
7
|
+
* Subcommands:
|
|
8
|
+
* olam substrate get — print active substrate (+ flavor + beta-expiry)
|
|
9
|
+
* olam substrate set <substrate> — switch to compose | kubernetes
|
|
10
|
+
*
|
|
11
|
+
* Decisions consumed:
|
|
12
|
+
* D1 — `~/.olam/config.json` schema-versioned seam (host.substrate)
|
|
13
|
+
* D2 — user-facing vocab is `compose | kubernetes` (NOT docker | k3s)
|
|
14
|
+
* D7 — telemetry is opt-in stdout-emission (stderr `OLAM_INSTR`)
|
|
15
|
+
* D21 — canonical instrumentation event schema (olam.instr.v1)
|
|
16
|
+
*
|
|
17
|
+
* Risk mitigations:
|
|
18
|
+
* T2 — pre-flight via `runDoctor` programmatically with `engine: <target>` override.
|
|
19
|
+
* Refuses with actionable remediation if prereqs fail.
|
|
20
|
+
* T3 — refuses if worlds exist on current substrate (operator must `olam destroy --all`).
|
|
21
|
+
*
|
|
22
|
+
* Beta-expiry date: 2026-11-16 (Phase 1b ship-date + 6 months per Falsifiable
|
|
23
|
+
* signal section; surfaced in `get` output so operators see the commitment).
|
|
24
|
+
*/
|
|
25
|
+
import type { Command } from 'commander';
|
|
26
|
+
import { readConfig, writeConfig } from '../lib/config.js';
|
|
27
|
+
import { emitSubstrateSet } from '../lib/instrumentation.js';
|
|
28
|
+
import { type RunDoctorDeps } from './doctor.js';
|
|
29
|
+
export declare const BETA_EXPIRY_DATE: "2026-11-16";
|
|
30
|
+
type DoctorRunner = (opts: {
|
|
31
|
+
json?: boolean;
|
|
32
|
+
}, deps?: RunDoctorDeps) => Promise<{
|
|
33
|
+
exitCode: number;
|
|
34
|
+
}>;
|
|
35
|
+
type WorldsCounter = () => Promise<number>;
|
|
36
|
+
export type SubstrateDeps = {
|
|
37
|
+
readonly readConfig?: typeof readConfig;
|
|
38
|
+
readonly writeConfig?: typeof writeConfig;
|
|
39
|
+
readonly emit?: typeof emitSubstrateSet;
|
|
40
|
+
readonly runDoctor?: DoctorRunner;
|
|
41
|
+
readonly countWorlds?: WorldsCounter;
|
|
42
|
+
readonly stdout?: NodeJS.WritableStream;
|
|
43
|
+
readonly stderr?: NodeJS.WritableStream;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Implementation of `olam substrate get`. Reads the config + prints a single
|
|
47
|
+
* human-readable line. Exported for testability.
|
|
48
|
+
*/
|
|
49
|
+
export declare function handleGet(deps?: SubstrateDeps): Promise<number>;
|
|
50
|
+
/**
|
|
51
|
+
* Implementation of `olam substrate set <substrate>`. Validates target, runs
|
|
52
|
+
* pre-flight via doctor with the target engine, refuses on worlds-exist OR
|
|
53
|
+
* doctor-fail, persists config, emits instrumentation. Exported for testability.
|
|
54
|
+
*
|
|
55
|
+
* Returns the desired process exit code (0 = success, 1 = refused/fail).
|
|
56
|
+
*/
|
|
57
|
+
export declare function handleSet(target: string, deps?: SubstrateDeps): Promise<number>;
|
|
58
|
+
export declare function registerSubstrate(program: Command): void;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=substrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"substrate.d.ts","sourceRoot":"","sources":["../../src/commands/substrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5D,eAAO,MAAM,gBAAgB,EAAG,YAAqB,CAAC;AAEtD,KAAK,YAAY,GAAG,CAClB,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACxB,IAAI,CAAC,EAAE,aAAa,KACjB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnC,KAAK,aAAa,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,WAAW,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,gBAAgB,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CACzC,CAAC;AAiBF;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAMzE;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmGzF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiCxD"}
|