zelari-code 2.17.0 → 2.18.1
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/cli/commands/inspectSession.js +86 -0
- package/dist/cli/commands/inspectSession.js.map +1 -0
- package/dist/cli/main.bundled.js +470 -205
- package/dist/cli/main.bundled.js.map +4 -4
- package/dist/cli/main.js +15 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/runHeadless.js +53 -0
- package/dist/cli/runHeadless.js.map +1 -1
- package/dist/cli/sessionSpine.js +32 -0
- package/dist/cli/sessionSpine.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* inspectSession.ts — `zelari-code inspect <session-id> [--json]` (v0.10).
|
|
3
|
+
*
|
|
4
|
+
* FIRST consumer of the NDJSON `harness_state` event: reads the ADR-0023
|
|
5
|
+
* read-model for one spine session (`<sessionsDir>/<id>/events.jsonl`) and
|
|
6
|
+
* prints a human-readable report — header (session id + turnsTotal), one
|
|
7
|
+
* line per turn (verification verdict + completion contract with blocker
|
|
8
|
+
* count), and a "support lens" section (context projections, memory
|
|
9
|
+
* events, compactions). `--json` prints the raw state instead.
|
|
10
|
+
*
|
|
11
|
+
* Advisory-only: reads the session spine, writes nothing, emits no events,
|
|
12
|
+
* never influences mission/run exit codes. The sessions dir resolves exactly
|
|
13
|
+
* like the harness_state emitter (workspaceRoot + ZELARI_SESSIONS_DIR,
|
|
14
|
+
* ADR-0016) so the read matches what the headless hosts wrote. The
|
|
15
|
+
* reader/derivation are REUSED from harnessState.ts — no re-parsing here.
|
|
16
|
+
*/
|
|
17
|
+
import path from 'node:path';
|
|
18
|
+
import { existsSync } from 'node:fs';
|
|
19
|
+
import { resolveSessionsDir } from '@zelari/core/session';
|
|
20
|
+
import { readHarnessState } from '../harnessState.js';
|
|
21
|
+
/**
|
|
22
|
+
* Pure renderer — HarnessState → report text. No I/O, no clock, no color,
|
|
23
|
+
* so it is testable without spawning the CLI (same discipline as the
|
|
24
|
+
* read-model it renders).
|
|
25
|
+
*/
|
|
26
|
+
export function renderInspectReport(state) {
|
|
27
|
+
const lines = [
|
|
28
|
+
`session ${state.session.sessionId} status=${state.session.status} turns=${state.execution.turnsTotal}`,
|
|
29
|
+
];
|
|
30
|
+
const contractByTurn = new Map(state.execution.contracts.map((c) => [c.turn, c]));
|
|
31
|
+
for (const turn of state.turns) {
|
|
32
|
+
const contract = contractByTurn.get(turn.index);
|
|
33
|
+
const verification = turn.verification
|
|
34
|
+
? `${turn.verification.verdict}${turn.verification.strict ? '' : ' (non-strict)'}`
|
|
35
|
+
: 'unknown'; // ADR-0023: no verification evidence ⇒ unknown ≠ pass.
|
|
36
|
+
const blockers = contract?.blockers ?? [];
|
|
37
|
+
const completion = contract?.complete
|
|
38
|
+
? 'complete'
|
|
39
|
+
: blockers.length > 0
|
|
40
|
+
? `incomplete — ${blockers.length} blockers: ${blockers.join(', ')}`
|
|
41
|
+
: 'incomplete';
|
|
42
|
+
lines.push(` turn ${turn.index} [${turn.outcome}] verification: ${verification} contract: ${completion}`);
|
|
43
|
+
}
|
|
44
|
+
lines.push('');
|
|
45
|
+
lines.push('support lens:');
|
|
46
|
+
const projections = state.support.contextProjections;
|
|
47
|
+
const last = projections[projections.length - 1];
|
|
48
|
+
lines.push(` context projections: ${projections.length}` +
|
|
49
|
+
(last ? ` (last: ${last.contextChars} chars → ${last.returnedCount} items)` : ''));
|
|
50
|
+
lines.push(` memory events: ${state.support.memoryEvents}`);
|
|
51
|
+
const saved = state.support.tokensSavedByCompaction;
|
|
52
|
+
lines.push(` compactions: ${state.support.compactions}${saved !== undefined ? ` (${saved} tokens saved)` : ''}`);
|
|
53
|
+
return lines.join('\n');
|
|
54
|
+
}
|
|
55
|
+
/** Run the session-inspect command. Prints to stdout/stderr; returns the exit code. */
|
|
56
|
+
export async function runInspectSession(opts) {
|
|
57
|
+
const sessionsDir = resolveSessionsDir({ workspaceRoot: opts.cwd ?? process.cwd() });
|
|
58
|
+
const sessionDir = path.join(sessionsDir, opts.sessionId);
|
|
59
|
+
const eventsPath = path.join(sessionDir, 'events.jsonl');
|
|
60
|
+
// readHarnessState is tolerant by contract (missing log ⇒ empty pending
|
|
61
|
+
// state), so "session not found" is checked HERE, before the read.
|
|
62
|
+
if (!existsSync(sessionDir)) {
|
|
63
|
+
// eslint-disable-next-line no-console
|
|
64
|
+
console.error(`zelari-code inspect: no session directory at ${sessionDir}`);
|
|
65
|
+
return 1;
|
|
66
|
+
}
|
|
67
|
+
if (!existsSync(eventsPath)) {
|
|
68
|
+
// eslint-disable-next-line no-console
|
|
69
|
+
console.error(`zelari-code inspect: session directory has no events.jsonl at ${eventsPath}`);
|
|
70
|
+
return 1;
|
|
71
|
+
}
|
|
72
|
+
let state;
|
|
73
|
+
try {
|
|
74
|
+
state = await readHarnessState(sessionDir);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
78
|
+
// eslint-disable-next-line no-console
|
|
79
|
+
console.error(`zelari-code inspect: cannot read session at ${sessionDir}: ${msg}`);
|
|
80
|
+
return 1;
|
|
81
|
+
}
|
|
82
|
+
// eslint-disable-next-line no-console
|
|
83
|
+
console.log(opts.json ? JSON.stringify(state, null, 2) : renderInspectReport(state));
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=inspectSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectSession.js","sourceRoot":"","sources":["../../../src/cli/commands/inspectSession.ts"],"names":[],"mappings":"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"}
|