zelari-code 2.55.0 → 2.57.0
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/README.md +1 -1
- package/dist/cli/app.js +2 -2
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/budget/modelContextBuilder.js +4 -1
- package/dist/cli/budget/modelContextBuilder.js.map +1 -1
- package/dist/cli/commands/evolve.js +247 -0
- package/dist/cli/commands/evolve.js.map +1 -0
- package/dist/cli/commands/replay.js +202 -0
- package/dist/cli/commands/replay.js.map +1 -0
- package/dist/cli/commands/session.js +264 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/spineSession.js +77 -0
- package/dist/cli/commands/spineSession.js.map +1 -0
- package/dist/cli/components/StatusBar.js +6 -2
- package/dist/cli/components/StatusBar.js.map +1 -1
- package/dist/cli/components/statusChips.js +43 -0
- package/dist/cli/components/statusChips.js.map +1 -1
- package/dist/cli/councilDispatcher.js +12 -0
- package/dist/cli/councilDispatcher.js.map +1 -1
- package/dist/cli/evolution/controller.js +107 -0
- package/dist/cli/evolution/controller.js.map +1 -0
- package/dist/cli/evolution/ledger.js +127 -0
- package/dist/cli/evolution/ledger.js.map +1 -1
- package/dist/cli/evolution/patternLedger.js +165 -0
- package/dist/cli/evolution/patternLedger.js.map +1 -0
- package/dist/cli/headless/runOneTurn.js +31 -1
- package/dist/cli/headless/runOneTurn.js.map +1 -1
- package/dist/cli/hooks/useChatTurn.js +60 -2
- package/dist/cli/hooks/useChatTurn.js.map +1 -1
- package/dist/cli/hooks/useSlashDispatch.js +8 -0
- package/dist/cli/hooks/useSlashDispatch.js.map +1 -1
- package/dist/cli/inbox.js +63 -10
- package/dist/cli/inbox.js.map +1 -1
- package/dist/cli/inboxSources.js +173 -0
- package/dist/cli/inboxSources.js.map +1 -0
- package/dist/cli/main.bundled.js +11889 -8078
- package/dist/cli/main.bundled.js.map +4 -4
- package/dist/cli/main.js +80 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/memory/mcpAdapter.js +3 -1
- package/dist/cli/memory/mcpAdapter.js.map +1 -1
- package/dist/cli/memory/onePager.js +93 -0
- package/dist/cli/memory/onePager.js.map +1 -0
- package/dist/cli/memory/serviceFactory.js +5 -0
- package/dist/cli/memory/serviceFactory.js.map +1 -1
- package/dist/cli/memory/sqliteBackend.js +40 -3
- package/dist/cli/memory/sqliteBackend.js.map +1 -1
- package/dist/cli/memory/sqliteCodec.js +2 -0
- package/dist/cli/memory/sqliteCodec.js.map +1 -1
- package/dist/cli/memory/sqliteSchema.js +11 -1
- package/dist/cli/memory/sqliteSchema.js.map +1 -1
- package/dist/cli/plugins/bundleCommand.js +238 -0
- package/dist/cli/plugins/bundleCommand.js.map +1 -0
- package/dist/cli/plugins/bundleDiscover.js +74 -0
- package/dist/cli/plugins/bundleDiscover.js.map +1 -0
- package/dist/cli/plugins/bundleFs.js +57 -0
- package/dist/cli/plugins/bundleFs.js.map +1 -0
- package/dist/cli/plugins/bundleHookDef.js +70 -0
- package/dist/cli/plugins/bundleHookDef.js.map +1 -0
- package/dist/cli/plugins/bundleLoad.js +180 -0
- package/dist/cli/plugins/bundleLoad.js.map +1 -0
- package/dist/cli/plugins/bundleManifest.js +233 -0
- package/dist/cli/plugins/bundleManifest.js.map +1 -0
- package/dist/cli/plugins/bundleMcp.js +41 -0
- package/dist/cli/plugins/bundleMcp.js.map +1 -0
- package/dist/cli/plugins/bundleState.js +142 -0
- package/dist/cli/plugins/bundleState.js.map +1 -0
- package/dist/cli/runHeadless.js +102 -12
- package/dist/cli/runHeadless.js.map +1 -1
- package/dist/cli/safety/decisionEmit.js +43 -0
- package/dist/cli/safety/decisionEmit.js.map +1 -0
- package/dist/cli/safety/permissionGate.js +239 -0
- package/dist/cli/safety/permissionGate.js.map +1 -0
- package/dist/cli/safety/permissionPolicy.js +279 -0
- package/dist/cli/safety/permissionPolicy.js.map +1 -0
- package/dist/cli/safety/permissionRules.js +145 -0
- package/dist/cli/safety/permissionRules.js.map +1 -0
- package/dist/cli/safety/sessionSink.js +169 -0
- package/dist/cli/safety/sessionSink.js.map +1 -0
- package/dist/cli/slashCommands.js +29 -3
- package/dist/cli/slashCommands.js.map +1 -1
- package/dist/cli/slashHandlers/evolve.js +41 -0
- package/dist/cli/slashHandlers/evolve.js.map +1 -0
- package/dist/cli/slashHandlers/memory.js +21 -0
- package/dist/cli/slashHandlers/memory.js.map +1 -1
- package/dist/cli/slashHandlers/permissions.js +170 -0
- package/dist/cli/slashHandlers/permissions.js.map +1 -0
- package/dist/cli/statusline/inboxFeed.js +76 -0
- package/dist/cli/statusline/inboxFeed.js.map +1 -0
- package/dist/cli/statusline/statuslineItems.js +15 -0
- package/dist/cli/statusline/statuslineItems.js.map +1 -1
- package/dist/cli/toolRegistry.js +161 -7
- package/dist/cli/toolRegistry.js.map +1 -1
- package/dist/cli/toolResultCache.js +4 -22
- package/dist/cli/toolResultCache.js.map +1 -1
- package/dist/cli/tools/askUser.js +17 -2
- package/dist/cli/tools/askUser.js.map +1 -1
- package/dist/cli/tools/execProcess.js +15 -1
- package/dist/cli/tools/execProcess.js.map +1 -1
- package/dist/cli/tools/krakenWorktree.js +334 -43
- package/dist/cli/tools/krakenWorktree.js.map +1 -1
- package/dist/cli/tools/taskTool.js +179 -43
- package/dist/cli/tools/taskTool.js.map +1 -1
- package/dist/cli/tools/verifyDebtSpine.js +41 -0
- package/dist/cli/tools/verifyDebtSpine.js.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* commands/session — `zelari-code session validate [<sessionId>] [--json]`
|
|
3
|
+
* and `zelari-code session waive-debt <sessionId> <taskId> [--note <text>]`.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS: the spine reader is TOLERANT by contract — a corrupt line,
|
|
6
|
+
* a seq gap, a duplicate or an unknown kind never throws, it becomes a
|
|
7
|
+
* `ReplayIssue` and the rest of the log still replays (ADR-0016). That is the
|
|
8
|
+
* right default for recovery, and the wrong default for "is this log sound?".
|
|
9
|
+
* `validate` is the second half of the pair: it reads the same spine through
|
|
10
|
+
* the SAME reader and reports the issues the reader collected, with `seq` and
|
|
11
|
+
* reason, so an audit can act on them.
|
|
12
|
+
*
|
|
13
|
+
* `waive-debt` is the K1.5/F5 "or waive it" half of the verify-debt pair: the
|
|
14
|
+
* debt cache hydrates un-cleared `verify.debt_open` slots at every turn start,
|
|
15
|
+
* so a slot whose repair landed under a DIFFERENT taskId (a later repair
|
|
16
|
+
* tentacle, a spot-check by the operator) would re-shout forever. This closes
|
|
17
|
+
* the slot on the spine itself, through the same locked writer the runtime
|
|
18
|
+
* uses. A waiver is an OPERATOR assertion, never a verification (ADR-0023).
|
|
19
|
+
*
|
|
20
|
+
* zelari-code session validate current marker → newest spine
|
|
21
|
+
* zelari-code session validate <id> one explicit session
|
|
22
|
+
* zelari-code session validate --json machine-readable report
|
|
23
|
+
* zelari-code session waive-debt <id> <taskId> [--note <text>]
|
|
24
|
+
*
|
|
25
|
+
* EXIT CODE IS THE VERDICT (unlike `replay`, which reports and exits 0):
|
|
26
|
+
* validate — 0 clean / 1 issues (or no spine to validate);
|
|
27
|
+
* waive-debt — 0 cleared / 1 bad invocation or unknown taskId /
|
|
28
|
+
* 2 spine locked by a live writer (never forced) /
|
|
29
|
+
* 3 read or write error.
|
|
30
|
+
*
|
|
31
|
+
* `validate` is READ-ONLY; `waive-debt` appends exactly ONE event.
|
|
32
|
+
*
|
|
33
|
+
* @since v2.59.0 (WS7 / shadow replay; waive-debt K1.5/F5)
|
|
34
|
+
*/
|
|
35
|
+
import { readFileSync } from 'node:fs';
|
|
36
|
+
import path from 'node:path';
|
|
37
|
+
import { parseSessionLogText, SessionLogLockedError, SessionLogWriter, } from '@zelari/core/session';
|
|
38
|
+
import { resolveSpineSession } from './spineSession.js';
|
|
39
|
+
import { replayOpenVerifyDebts } from '../tools/verifyDebtSpine.js';
|
|
40
|
+
/** Flags that take a value — the token after one is never a positional. */
|
|
41
|
+
const VALUE_FLAGS = new Set(['--cwd', '--note']);
|
|
42
|
+
/** Parse `session` flags. Never throws; unknown flags are ignored (acp parity). */
|
|
43
|
+
export function parseSessionFlags(argv) {
|
|
44
|
+
const args = argv[0] === 'session' ? argv.slice(1) : [...argv];
|
|
45
|
+
const out = {};
|
|
46
|
+
if (args.includes('--help') || args.includes('-h'))
|
|
47
|
+
out.help = true;
|
|
48
|
+
out.json = args.includes('--json');
|
|
49
|
+
const i = args.indexOf('--cwd');
|
|
50
|
+
const cwd = i >= 0 ? args[i + 1] : undefined;
|
|
51
|
+
if (cwd !== undefined && cwd.trim() !== '' && !cwd.startsWith('--'))
|
|
52
|
+
out.cwd = cwd;
|
|
53
|
+
const n = args.indexOf('--note');
|
|
54
|
+
const note = n >= 0 ? args[n + 1] : undefined;
|
|
55
|
+
if (note !== undefined && note.trim() !== '' && !note.startsWith('--'))
|
|
56
|
+
out.note = note;
|
|
57
|
+
const positional = args.filter((a, idx) => !a.startsWith('-') && !VALUE_FLAGS.has(args[idx - 1] ?? ''));
|
|
58
|
+
// positional[0] is the subcommand itself (`validate` / `waive-debt`).
|
|
59
|
+
if (positional[1] !== undefined)
|
|
60
|
+
out.sessionId = positional[1];
|
|
61
|
+
if (positional[2] !== undefined)
|
|
62
|
+
out.task = positional[2];
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
export function sessionHelpText() {
|
|
66
|
+
return ('zelari-code session — inspect and curate one session spine\n' +
|
|
67
|
+
'\n' +
|
|
68
|
+
'Usage:\n' +
|
|
69
|
+
' zelari-code session validate [<sessionId>] [--json]\n' +
|
|
70
|
+
' zelari-code session waive-debt <sessionId> <taskId> [--note <text>]\n' +
|
|
71
|
+
'\n' +
|
|
72
|
+
'validate re-reads the log with the core tolerant reader and reports the\n' +
|
|
73
|
+
'ReplayIssues it collected (corrupt lines, schema mismatches, seq gaps /\n' +
|
|
74
|
+
'duplicates / non-monotonic seq) with line, seq and reason. With no\n' +
|
|
75
|
+
'<sessionId>: the current-session marker, else the newest spine.\n' +
|
|
76
|
+
'\n' +
|
|
77
|
+
'waive-debt closes ONE open verify-debt slot (a verify.debt_open with no\n' +
|
|
78
|
+
'matching verify.debt_cleared) by appending the cleared event through the\n' +
|
|
79
|
+
'same locked writer the runtime uses. A waiver is an OPERATOR assertion,\n' +
|
|
80
|
+
'not a verification (ADR-0023) — the event carries source=waiver plus the\n' +
|
|
81
|
+
'optional --note, so replay can always tell the two apart.\n' +
|
|
82
|
+
'\n' +
|
|
83
|
+
'Options:\n' +
|
|
84
|
+
' --json (validate) Print the report as JSON\n' +
|
|
85
|
+
' --note <text> (waive-debt) Why the slot is being waived\n' +
|
|
86
|
+
' --cwd <path> Workspace root for the sessions dir\n' +
|
|
87
|
+
' (default: current directory;\n' +
|
|
88
|
+
' ZELARI_SESSIONS_DIR overrides both)\n' +
|
|
89
|
+
' --help, -h This text\n' +
|
|
90
|
+
'\n' +
|
|
91
|
+
'Exit codes: validate — 0 clean / 1 issues (or no spine). waive-debt —\n' +
|
|
92
|
+
'0 cleared / 1 bad invocation or unknown taskId / 2 spine locked by a\n' +
|
|
93
|
+
'live writer / 3 read or write error.\n');
|
|
94
|
+
}
|
|
95
|
+
/** Human path (cwd-relative when possible) so the report stays readable. */
|
|
96
|
+
function shortPath(p, cwd) {
|
|
97
|
+
const rel = path.relative(cwd, p);
|
|
98
|
+
return rel && !rel.startsWith('..') ? rel : p;
|
|
99
|
+
}
|
|
100
|
+
/** One issue → `line 12 seq-gap seq=9 <detail>` (fields it actually carries). */
|
|
101
|
+
function formatIssue(issue) {
|
|
102
|
+
const seq = issue.seq === undefined ? '' : ` seq=${issue.seq}`;
|
|
103
|
+
const detail = issue.detail === undefined ? '' : ` ${issue.detail}`;
|
|
104
|
+
return ` line ${String(issue.line).padStart(5)} ${issue.type}${seq}${detail}`;
|
|
105
|
+
}
|
|
106
|
+
/** Pure renderer — the parsed report → text. No I/O, no clock, no color. */
|
|
107
|
+
export function renderValidateReport(input) {
|
|
108
|
+
const { report } = input;
|
|
109
|
+
const last = report.events[report.events.length - 1];
|
|
110
|
+
const lines = [];
|
|
111
|
+
lines.push(`session validate — ${input.sessionId}`);
|
|
112
|
+
lines.push(` spine: ${shortPath(input.eventsPath, input.cwd ?? process.cwd())}`);
|
|
113
|
+
lines.push(` events: ${report.events.length} last seq: ${last?.seq ?? 0}`);
|
|
114
|
+
if (report.ok) {
|
|
115
|
+
lines.push(' OK — every line parsed, seq 1..n gap-free');
|
|
116
|
+
return lines.join('\n');
|
|
117
|
+
}
|
|
118
|
+
lines.push(` ISSUES: ${report.issues.length} (the tolerant reader skipped these lines)`);
|
|
119
|
+
for (const issue of report.issues)
|
|
120
|
+
lines.push(formatIssue(issue));
|
|
121
|
+
return lines.join('\n');
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* `waive-debt` — close one open verify-debt slot with an operator waiver.
|
|
125
|
+
*
|
|
126
|
+
* Writes exactly ONE event (`verify.debt_cleared {taskId, source:'waiver',
|
|
127
|
+
* note?}`, actor user/operator) through `SessionLogWriter.open`, which owns
|
|
128
|
+
* the ADR-0016 single-writer lock: a live session refuses with exit 2 and
|
|
129
|
+
* NOTHING is written — this command never forces a lock takeover.
|
|
130
|
+
*/
|
|
131
|
+
async function runWaiveDebt(opts, cwd) {
|
|
132
|
+
const sessionId = opts.sessionId?.trim() ?? '';
|
|
133
|
+
const taskId = opts.task?.trim() ?? '';
|
|
134
|
+
if (sessionId.length === 0 || taskId.length === 0) {
|
|
135
|
+
process.stderr.write('[session] usage: zelari-code session waive-debt <sessionId> <taskId> [--note <text>]\n');
|
|
136
|
+
return 1;
|
|
137
|
+
}
|
|
138
|
+
const resolved = resolveSpineSession({ sessionId, cwd });
|
|
139
|
+
if ('error' in resolved) {
|
|
140
|
+
process.stderr.write(`[session] ${resolved.error}\n`);
|
|
141
|
+
return 3;
|
|
142
|
+
}
|
|
143
|
+
let report;
|
|
144
|
+
try {
|
|
145
|
+
report = parseSessionLogText(resolved.eventsPath, readFileSync(resolved.eventsPath, 'utf-8'));
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
process.stderr.write(`[session] ${err instanceof Error ? err.message : String(err)}\n`);
|
|
149
|
+
return 3;
|
|
150
|
+
}
|
|
151
|
+
const open = replayOpenVerifyDebts(report.events);
|
|
152
|
+
const debt = open.get(taskId);
|
|
153
|
+
if (debt === undefined) {
|
|
154
|
+
process.stderr.write(`[session] taskId '${taskId}' is not an open verify debt on this spine\n`);
|
|
155
|
+
if (open.size === 0) {
|
|
156
|
+
process.stdout.write(' no open verify debts\n');
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
process.stdout.write(' open verify debts:\n');
|
|
160
|
+
for (const [id, rec] of open)
|
|
161
|
+
process.stdout.write(` ${id} ${rec.description}\n`);
|
|
162
|
+
}
|
|
163
|
+
return 1;
|
|
164
|
+
}
|
|
165
|
+
const last = report.events[report.events.length - 1];
|
|
166
|
+
const sessionDir = path.dirname(resolved.eventsPath);
|
|
167
|
+
let writer;
|
|
168
|
+
try {
|
|
169
|
+
writer = await SessionLogWriter.open(sessionDir, resolved.sessionId, (last?.seq ?? 0) + 1);
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
if (err instanceof SessionLogLockedError) {
|
|
173
|
+
process.stderr.write(`[session] ${err.message} — close the live session first; nothing was written\n`);
|
|
174
|
+
return 2;
|
|
175
|
+
}
|
|
176
|
+
process.stderr.write(`[session] ${err instanceof Error ? err.message : String(err)}\n`);
|
|
177
|
+
return 3;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
const envelope = await writer.append({
|
|
181
|
+
kind: 'verify.debt_cleared',
|
|
182
|
+
actor: { type: 'user', role: 'operator' },
|
|
183
|
+
data: { taskId, source: 'waiver', ...(opts.note !== undefined ? { note: opts.note } : {}) },
|
|
184
|
+
});
|
|
185
|
+
await writer.close();
|
|
186
|
+
process.stdout.write(`session waive-debt — ${resolved.sessionId}\n`);
|
|
187
|
+
process.stdout.write(` cleared: ${taskId} — ${debt.description}\n`);
|
|
188
|
+
process.stdout.write(` event: verify.debt_cleared seq=${envelope.seq} (source=waiver)\n`);
|
|
189
|
+
if (opts.note !== undefined)
|
|
190
|
+
process.stdout.write(` note: ${opts.note}\n`);
|
|
191
|
+
process.stdout.write(' honesty: a waiver is an OPERATOR assertion, not a verification (ADR-0023: unknown ≠ pass)\n');
|
|
192
|
+
return 0;
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
await writer.close().catch(() => undefined);
|
|
196
|
+
process.stderr.write(`[session] ${err instanceof Error ? err.message : String(err)}\n`);
|
|
197
|
+
return 3;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Entry point for `zelari-code session …`. Accepts argv WITH or WITHOUT the
|
|
202
|
+
* leading `session` token. Never throws; the exit code is the return value.
|
|
203
|
+
*/
|
|
204
|
+
export async function runSessionCommand(argv) {
|
|
205
|
+
try {
|
|
206
|
+
const args = argv[0] === 'session' ? argv.slice(1) : [...argv];
|
|
207
|
+
const opts = parseSessionFlags(args);
|
|
208
|
+
const subcommand = args.find((a, idx) => !a.startsWith('-') && !VALUE_FLAGS.has(args[idx - 1] ?? ''));
|
|
209
|
+
if (opts.help === true) {
|
|
210
|
+
process.stdout.write(sessionHelpText());
|
|
211
|
+
return 0;
|
|
212
|
+
}
|
|
213
|
+
if (subcommand === undefined) {
|
|
214
|
+
process.stderr.write('[session] missing subcommand\n\n');
|
|
215
|
+
process.stdout.write(sessionHelpText());
|
|
216
|
+
return 1;
|
|
217
|
+
}
|
|
218
|
+
if (subcommand === 'waive-debt') {
|
|
219
|
+
return await runWaiveDebt(opts, path.resolve(opts.cwd ?? process.cwd()));
|
|
220
|
+
}
|
|
221
|
+
if (subcommand !== 'validate') {
|
|
222
|
+
process.stderr.write(`[session] unknown subcommand '${subcommand}'\n\n`);
|
|
223
|
+
process.stdout.write(sessionHelpText());
|
|
224
|
+
return 1;
|
|
225
|
+
}
|
|
226
|
+
const cwd = path.resolve(opts.cwd ?? process.cwd());
|
|
227
|
+
const resolved = resolveSpineSession({
|
|
228
|
+
...(opts.sessionId !== undefined ? { sessionId: opts.sessionId } : {}),
|
|
229
|
+
cwd,
|
|
230
|
+
});
|
|
231
|
+
if ('error' in resolved) {
|
|
232
|
+
process.stderr.write(`[session] ${resolved.error}\n`);
|
|
233
|
+
return 1;
|
|
234
|
+
}
|
|
235
|
+
const text = readFileSync(resolved.eventsPath, 'utf-8');
|
|
236
|
+
const report = parseSessionLogText(resolved.eventsPath, text);
|
|
237
|
+
const last = report.events[report.events.length - 1];
|
|
238
|
+
if (opts.json === true) {
|
|
239
|
+
process.stdout.write(`${JSON.stringify({
|
|
240
|
+
schemaVersion: 1,
|
|
241
|
+
sessionId: resolved.sessionId,
|
|
242
|
+
path: resolved.eventsPath,
|
|
243
|
+
ok: report.ok,
|
|
244
|
+
eventCount: report.events.length,
|
|
245
|
+
lastSeq: last?.seq ?? 0,
|
|
246
|
+
issues: report.issues,
|
|
247
|
+
}, null, 2)}\n`);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
process.stdout.write(`${renderValidateReport({
|
|
251
|
+
sessionId: resolved.sessionId,
|
|
252
|
+
eventsPath: resolved.eventsPath,
|
|
253
|
+
report,
|
|
254
|
+
cwd,
|
|
255
|
+
})}\n`);
|
|
256
|
+
}
|
|
257
|
+
return report.ok ? 0 : 1;
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
process.stderr.write(`[zelari-code session] ${err instanceof Error ? err.message : String(err)}\n`);
|
|
261
|
+
return 1;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/cli/commands/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* commands/spineSession — which spine session a read-only command means.
|
|
3
|
+
*
|
|
4
|
+
* `replay` and `session validate` both answer "give me ONE session's
|
|
5
|
+
* events.jsonl" and must agree on the answer, so the selection lives here once:
|
|
6
|
+
*
|
|
7
|
+
* 1. an explicit session id (must have an events.jsonl), else
|
|
8
|
+
* 2. the current-session marker (`getCurrentSessionId()`), else
|
|
9
|
+
* 3. the NEWEST session dir that actually holds an events.jsonl.
|
|
10
|
+
*
|
|
11
|
+
* The directory resolves exactly like every other spine writer/reader
|
|
12
|
+
* (`resolveSessionsDir`: ZELARI_SESSIONS_DIR → `<workspaceRoot>/.zelari/sessions`,
|
|
13
|
+
* ADR-0016), so commands/replay sees what the hosts wrote. Step 3 mirrors
|
|
14
|
+
* commands/report.ts's `newestSessionId` ("newest by LAST event ts") so
|
|
15
|
+
* `report`, `replay` and `session validate` never disagree about the newest run.
|
|
16
|
+
*
|
|
17
|
+
* READ-ONLY by construction: stat/readdir/read of the spine, nothing else.
|
|
18
|
+
*/
|
|
19
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
20
|
+
import path from 'node:path';
|
|
21
|
+
import { parseSessionLogText, resolveSessionsDir } from '@zelari/core/session';
|
|
22
|
+
import { getCurrentSessionId } from '../sessionManager.js';
|
|
23
|
+
/** Newest session dir holding an events.jsonl (by last event ts), or null. */
|
|
24
|
+
export function newestSpineSessionId(sessionsDir) {
|
|
25
|
+
let names;
|
|
26
|
+
try {
|
|
27
|
+
names = readdirSync(sessionsDir).filter((n) => existsSync(path.join(sessionsDir, n, 'events.jsonl')));
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (names.length === 0)
|
|
33
|
+
return null;
|
|
34
|
+
const scored = names.map((n) => {
|
|
35
|
+
try {
|
|
36
|
+
const text = readFileSync(path.join(sessionsDir, n, 'events.jsonl'), 'utf-8');
|
|
37
|
+
const events = parseSessionLogText('events.jsonl', text).events;
|
|
38
|
+
return { n, ts: events[events.length - 1]?.ts ?? 0 };
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return { n, ts: 0 };
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
scored.sort((a, b) => b.ts - a.ts);
|
|
45
|
+
return scored[0]?.n ?? null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Resolve the one session a read-only command targets. Never throws: every
|
|
49
|
+
* failure mode comes back as `{ error }` naming the path it looked at.
|
|
50
|
+
*/
|
|
51
|
+
export function resolveSpineSession(query = {}) {
|
|
52
|
+
const cwd = query.cwd ?? process.cwd();
|
|
53
|
+
const sessionsDir = resolveSessionsDir({ workspaceRoot: cwd, env: query.env });
|
|
54
|
+
const at = (sessionId) => ({
|
|
55
|
+
sessionId,
|
|
56
|
+
sessionsDir,
|
|
57
|
+
eventsPath: path.join(sessionsDir, sessionId, 'events.jsonl'),
|
|
58
|
+
});
|
|
59
|
+
if (query.sessionId !== undefined && query.sessionId !== '') {
|
|
60
|
+
const candidate = at(query.sessionId);
|
|
61
|
+
return existsSync(candidate.eventsPath)
|
|
62
|
+
? candidate
|
|
63
|
+
: { error: `no session spine at ${candidate.eventsPath}` };
|
|
64
|
+
}
|
|
65
|
+
const marker = getCurrentSessionId();
|
|
66
|
+
if (marker !== null) {
|
|
67
|
+
const candidate = at(marker);
|
|
68
|
+
if (existsSync(candidate.eventsPath))
|
|
69
|
+
return candidate;
|
|
70
|
+
}
|
|
71
|
+
const newest = newestSpineSessionId(sessionsDir);
|
|
72
|
+
if (newest === null) {
|
|
73
|
+
return { error: `no session spine found under ${sessionsDir}` };
|
|
74
|
+
}
|
|
75
|
+
return at(newest);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=spineSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spineSession.js","sourceRoot":"","sources":["../../../src/cli/commands/spineSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ import { TUI_PALETTE, modeColor } from './tuiPalette.js';
|
|
|
17
17
|
* region as short as possible. A single status line + the input bar + the
|
|
18
18
|
* streaming tail is always well under a screen, so no full repaint.
|
|
19
19
|
*/
|
|
20
|
-
function StatusBarImpl({ model, provider, sessionId, sessionActive, queueCount = 0, busy = false, mode = 'kraken', phase = 'build', cwd, elapsedMs = null, lastMs = null, costUsd = 0, cachedTokens = 0, cacheHitRate = 0, contextUsed = 0, contextLimit = 0, todoSummary = null, krakenLive = null, krakenGraph = null, verify = null, permissions = null, jail = null, verdict = null, }) {
|
|
20
|
+
function StatusBarImpl({ model, provider, sessionId, sessionActive, queueCount = 0, busy = false, mode = 'kraken', phase = 'build', cwd, elapsedMs = null, lastMs = null, costUsd = 0, cachedTokens = 0, cacheHitRate = 0, contextUsed = 0, contextLimit = 0, todoSummary = null, krakenLive = null, krakenGraph = null, verify = null, permissions = null, jail = null, verdict = null, inbox = null, }) {
|
|
21
21
|
const ctxLabel = contextLimit > 0
|
|
22
22
|
? `${formatTokens(contextUsed)}/${formatTokens(contextLimit)}`
|
|
23
23
|
: contextUsed > 0
|
|
@@ -48,6 +48,9 @@ function StatusBarImpl({ model, provider, sessionId, sessionActive, queueCount =
|
|
|
48
48
|
verdict ? (React.createElement(React.Fragment, null,
|
|
49
49
|
React.createElement(Text, { dimColor: true }, " \u00B7 "),
|
|
50
50
|
React.createElement(Text, { bold: true, color: verdict.tone }, verdict.label))) : null,
|
|
51
|
+
inbox ? (React.createElement(React.Fragment, null,
|
|
52
|
+
React.createElement(Text, { dimColor: true }, " \u00B7 "),
|
|
53
|
+
React.createElement(Text, { bold: true, color: inbox.tone }, inbox.label))) : null,
|
|
51
54
|
React.createElement(Text, { bold: true, color: TUI_PALETTE.brand }, provider),
|
|
52
55
|
React.createElement(Text, { dimColor: true }, " \u00B7 "),
|
|
53
56
|
React.createElement(Text, null, model),
|
|
@@ -140,7 +143,8 @@ export function statusBarPropsEqual(prev, next) {
|
|
|
140
143
|
statusChipPropsEqual(prev.verify, next.verify) &&
|
|
141
144
|
statusChipPropsEqual(prev.permissions, next.permissions) &&
|
|
142
145
|
statusChipPropsEqual(prev.jail, next.jail) &&
|
|
143
|
-
statusChipPropsEqual(prev.verdict, next.verdict)
|
|
146
|
+
statusChipPropsEqual(prev.verdict, next.verdict) &&
|
|
147
|
+
statusChipPropsEqual(prev.inbox, next.inbox));
|
|
144
148
|
}
|
|
145
149
|
export const StatusBar = React.memo(StatusBarImpl, statusBarPropsEqual);
|
|
146
150
|
//# sourceMappingURL=StatusBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../src/cli/components/StatusBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../src/cli/components/StatusBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ import { activeJailMode, probeJailBackend, OS_JAIL_ENV } from '../safety/osJail.
|
|
|
23
23
|
import { activePolicyLoadSurface, POLICY_LOAD_MODE_ENV } from '../safety/policyLoadMode.js';
|
|
24
24
|
import { loadStatusLineConfig } from '../statusline/statuslineConfig.js';
|
|
25
25
|
import { readVerdictFeed, verdictFeedText } from '../statusline/verdictFeed.js';
|
|
26
|
+
import { inboxFeedText, readInboxFeed } from '../statusline/inboxFeed.js';
|
|
26
27
|
import { getCurrentSessionId } from '../sessionManager.js';
|
|
27
28
|
/**
|
|
28
29
|
* t114: is this item part of the user's (or default) status-line order?
|
|
@@ -132,4 +133,46 @@ export function cachedVerdictStatusChip(env = process.env) {
|
|
|
132
133
|
export function resetVerdictChipCacheForTests() {
|
|
133
134
|
verdictChipCache = null;
|
|
134
135
|
}
|
|
136
|
+
/** Pure: feed -> chip. Exported for tests; never touches disk. */
|
|
137
|
+
export function inboxChipFromFeed(feed, env = process.env) {
|
|
138
|
+
const label = inboxFeedText(feed, env);
|
|
139
|
+
if (label === null)
|
|
140
|
+
return null;
|
|
141
|
+
// Red = something needs your decision (a need), yellow = news to read.
|
|
142
|
+
return { label, tone: feed && feed.needs > 0 ? 'red' : 'yellow' };
|
|
143
|
+
}
|
|
144
|
+
/** Every input the inbox chip depends on, flattened into a comparable key. */
|
|
145
|
+
function inboxChipKey(env) {
|
|
146
|
+
const sessionId = getCurrentSessionId();
|
|
147
|
+
let mtime = 'none';
|
|
148
|
+
if (sessionId) {
|
|
149
|
+
try {
|
|
150
|
+
const file = path.join(resolveSessionsDir({ env }), sessionId, 'events.jsonl');
|
|
151
|
+
mtime = existsSync(file) ? String(statSync(file).mtimeMs) : 'none';
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
mtime = 'none';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return `${sessionId ?? 'no-session'}|${env.ZELARI_INBOX ?? ''}|${mtime}`;
|
|
158
|
+
}
|
|
159
|
+
let inboxChipCache = null;
|
|
160
|
+
/**
|
|
161
|
+
* Cached inbox chip — safe to call from a render body. Opt-in item: it only
|
|
162
|
+
* paints when `/statusline on inbox` added it to the configured order.
|
|
163
|
+
*/
|
|
164
|
+
export function cachedInboxStatusChip(env = process.env) {
|
|
165
|
+
if (!statusLineItemEnabled('inbox'))
|
|
166
|
+
return null;
|
|
167
|
+
const key = inboxChipKey(env);
|
|
168
|
+
if (inboxChipCache && inboxChipCache.key === key)
|
|
169
|
+
return inboxChipCache.chip;
|
|
170
|
+
const chip = inboxChipFromFeed(readInboxFeed({ env }), env);
|
|
171
|
+
inboxChipCache = { key, chip };
|
|
172
|
+
return chip;
|
|
173
|
+
}
|
|
174
|
+
/** TEST-ONLY: drop the memoized inbox chip (same discipline as the verdict chip). */
|
|
175
|
+
export function resetInboxChipCacheForTests() {
|
|
176
|
+
inboxChipCache = null;
|
|
177
|
+
}
|
|
135
178
|
//# sourceMappingURL=statusChips.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusChips.js","sourceRoot":"","sources":["../../../src/cli/components/statusChips.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"statusChips.js","sourceRoot":"","sources":["../../../src/cli/components/statusChips.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { runCouncilPure, resolveCouncilRunMode, } from "@zelari/core/council";
|
|
16
16
|
import { resolveCouncilTier } from "./councilConfig.js";
|
|
17
|
+
// WS7 slice 4c (t139): the ONE binding that makes council members' tool
|
|
18
|
+
// invocations emit on the parent session spine (see safety/sessionSink.ts).
|
|
19
|
+
import { bindSessionSinkToRegistry } from "./safety/sessionSink.js";
|
|
17
20
|
import { hasWorkspacePlan } from "./workspace/planDetect.js";
|
|
18
21
|
import { createWorkspaceContext } from "./workspace/stubs.js";
|
|
19
22
|
import { createWorkspaceToolRegistry } from "./workspace/toolRegistry.js";
|
|
@@ -78,6 +81,15 @@ export async function* dispatchCouncil(userMessage, options) {
|
|
|
78
81
|
if (config.tools) {
|
|
79
82
|
const { registerCliToolsIntoCouncilCatalog } = await import("./toolRegistry.js");
|
|
80
83
|
registerCliToolsIntoCouncilCatalog(config.tools);
|
|
84
|
+
// WS7 slice 4c (t139): bind the parent spine sink to the registry the
|
|
85
|
+
// members dispatch against. Done AFTER the catalog bridge so a tool added
|
|
86
|
+
// by it is covered too. Re-registering keeps each name's slot in the
|
|
87
|
+
// registry Map, so the member-visible tool order — and the prompt-cache
|
|
88
|
+
// prefix built from it — stays byte-identical whether or not a sink is
|
|
89
|
+
// given. No sink ⇒ nothing happens (today's dormant behavior).
|
|
90
|
+
if (options.sessionEventSink) {
|
|
91
|
+
bindSessionSinkToRegistry(config.tools, options.sessionEventSink);
|
|
92
|
+
}
|
|
81
93
|
}
|
|
82
94
|
const callbacks = {};
|
|
83
95
|
if (options.onCouncilStatus) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"councilDispatcher.js","sourceRoot":"","sources":["../../src/cli/councilDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,cAAc,EACd,qBAAqB,GAItB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"councilDispatcher.js","sourceRoot":"","sources":["../../src/cli/councilDispatcher.ts"],"names":[],"mappings":"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"}
|