zelari-code 1.14.4 → 1.17.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.
Files changed (58) hide show
  1. package/README.md +3 -1
  2. package/dist/cli/app.js +8 -1
  3. package/dist/cli/app.js.map +1 -1
  4. package/dist/cli/components/StatusBar.js +5 -1
  5. package/dist/cli/components/StatusBar.js.map +1 -1
  6. package/dist/cli/councilDispatcher.js +3 -0
  7. package/dist/cli/councilDispatcher.js.map +1 -1
  8. package/dist/cli/hooks/chatStats.js +20 -2
  9. package/dist/cli/hooks/chatStats.js.map +1 -1
  10. package/dist/cli/hooks/conversationContext.js +5 -2
  11. package/dist/cli/hooks/conversationContext.js.map +1 -1
  12. package/dist/cli/hooks/historyCompaction.js +8 -1
  13. package/dist/cli/hooks/historyCompaction.js.map +1 -1
  14. package/dist/cli/hooks/useChatTurn.js +236 -60
  15. package/dist/cli/hooks/useChatTurn.js.map +1 -1
  16. package/dist/cli/hooks/useSlashDispatch.js +42 -0
  17. package/dist/cli/hooks/useSlashDispatch.js.map +1 -1
  18. package/dist/cli/main.bundled.js +2797 -863
  19. package/dist/cli/main.bundled.js.map +4 -4
  20. package/dist/cli/main.js +47 -0
  21. package/dist/cli/main.js.map +1 -1
  22. package/dist/cli/mcp/mcpManager.js +27 -6
  23. package/dist/cli/mcp/mcpManager.js.map +1 -1
  24. package/dist/cli/mcp/mcpPresets.js +77 -0
  25. package/dist/cli/mcp/mcpPresets.js.map +1 -0
  26. package/dist/cli/memory/fileBackend.js +11 -2
  27. package/dist/cli/memory/fileBackend.js.map +1 -1
  28. package/dist/cli/runHeadless.js +61 -4
  29. package/dist/cli/runHeadless.js.map +1 -1
  30. package/dist/cli/slashCommands.js +54 -1
  31. package/dist/cli/slashCommands.js.map +1 -1
  32. package/dist/cli/slashHandlers/cache.js +28 -0
  33. package/dist/cli/slashHandlers/cache.js.map +1 -0
  34. package/dist/cli/slashHandlers/state.js +83 -0
  35. package/dist/cli/slashHandlers/state.js.map +1 -0
  36. package/dist/cli/state/commitHelpers.js +62 -0
  37. package/dist/cli/state/commitHelpers.js.map +1 -0
  38. package/dist/cli/state/fileStateStore.js +262 -0
  39. package/dist/cli/state/fileStateStore.js.map +1 -0
  40. package/dist/cli/state/promptCacheStats.js +56 -0
  41. package/dist/cli/state/promptCacheStats.js.map +1 -0
  42. package/dist/cli/state/restoreState.js +70 -0
  43. package/dist/cli/state/restoreState.js.map +1 -0
  44. package/dist/cli/toolRegistry.js +22 -0
  45. package/dist/cli/toolRegistry.js.map +1 -1
  46. package/dist/cli/tools/askUser.js +71 -0
  47. package/dist/cli/tools/askUser.js.map +1 -0
  48. package/dist/cli/utils/doctor.js +19 -0
  49. package/dist/cli/utils/doctor.js.map +1 -1
  50. package/dist/cli/workspace/composeContext.js +210 -0
  51. package/dist/cli/workspace/composeContext.js.map +1 -0
  52. package/dist/cli/workspace/workspaceSummary.js +58 -31
  53. package/dist/cli/workspace/workspaceSummary.js.map +1 -1
  54. package/dist/cli/workspace/worldModel.js +331 -0
  55. package/dist/cli/workspace/worldModel.js.map +1 -0
  56. package/dist/cli/zelariMission.js +135 -18
  57. package/dist/cli/zelariMission.js.map +1 -1
  58. package/package.json +2 -2
@@ -0,0 +1,331 @@
1
+ /**
2
+ * worldModel — Schema-inspired lightweight task world model (P0/P1).
3
+ *
4
+ * Persists under `<cwd>/.zelari/world/`:
5
+ * hypothesis.md — working theory (notes.md analogue)
6
+ * checks.json — certifiable checks for run_backtest
7
+ * timeline.jsonl — append-only observations (optional ground truth)
8
+ *
9
+ * Kill switch: ZELARI_SCHEMA_LOOP=0 disables tool registration.
10
+ *
11
+ * Inspired by https://schema-harness.github.io/ — adapted for coding agents
12
+ * (no ARC grid; certify via shell checks + hypothesis files).
13
+ */
14
+ import { promises as fs } from 'node:fs';
15
+ import path from 'node:path';
16
+ import { spawn } from 'node:child_process';
17
+ import { z } from 'zod';
18
+ import { typedOk, typedErr, } from '@zelari/core/harness/tools/toolTypes';
19
+ export const WORLD_DIR_NAME = path.join('.zelari', 'world');
20
+ export const HYPOTHESIS_FILE = 'hypothesis.md';
21
+ export const CHECKS_FILE = 'checks.json';
22
+ export const TIMELINE_FILE = 'timeline.jsonl';
23
+ function worldDir(cwd) {
24
+ return path.join(cwd, WORLD_DIR_NAME);
25
+ }
26
+ async function ensureWorldDir(cwd) {
27
+ const dir = worldDir(cwd);
28
+ await fs.mkdir(dir, { recursive: true });
29
+ return dir;
30
+ }
31
+ async function appendTimeline(cwd, entry) {
32
+ const dir = await ensureWorldDir(cwd);
33
+ const line = JSON.stringify({ ts: new Date().toISOString(), ...entry }) + '\n';
34
+ await fs.appendFile(path.join(dir, TIMELINE_FILE), line, 'utf8');
35
+ }
36
+ async function readChecks(cwd) {
37
+ const p = path.join(worldDir(cwd), CHECKS_FILE);
38
+ try {
39
+ const raw = await fs.readFile(p, 'utf8');
40
+ const parsed = JSON.parse(raw);
41
+ return Array.isArray(parsed.checks) ? parsed.checks : [];
42
+ }
43
+ catch {
44
+ return [];
45
+ }
46
+ }
47
+ function runShell(command, cwd, timeoutMs, signal) {
48
+ return new Promise((resolve) => {
49
+ const isWin = process.platform === 'win32';
50
+ const child = spawn(isWin ? 'cmd.exe' : '/bin/sh', isWin ? ['/c', command] : ['-c', command], {
51
+ cwd,
52
+ env: process.env,
53
+ windowsHide: true,
54
+ stdio: ['ignore', 'pipe', 'pipe'],
55
+ });
56
+ let stdout = '';
57
+ let stderr = '';
58
+ let settled = false;
59
+ const finish = (exitCode) => {
60
+ if (settled)
61
+ return;
62
+ settled = true;
63
+ resolve({ exitCode, stdout, stderr });
64
+ };
65
+ const timer = setTimeout(() => {
66
+ try {
67
+ child.kill('SIGTERM');
68
+ }
69
+ catch {
70
+ /* ignore */
71
+ }
72
+ finish(124);
73
+ }, timeoutMs);
74
+ if (signal) {
75
+ if (signal.aborted) {
76
+ try {
77
+ child.kill('SIGTERM');
78
+ }
79
+ catch {
80
+ /* ignore */
81
+ }
82
+ clearTimeout(timer);
83
+ finish(130);
84
+ return;
85
+ }
86
+ signal.addEventListener('abort', () => {
87
+ try {
88
+ child.kill('SIGTERM');
89
+ }
90
+ catch {
91
+ /* ignore */
92
+ }
93
+ clearTimeout(timer);
94
+ finish(130);
95
+ }, { once: true });
96
+ }
97
+ child.stdout?.on('data', (d) => {
98
+ stdout += d.toString('utf8');
99
+ if (stdout.length > 32_000)
100
+ stdout = stdout.slice(0, 32_000);
101
+ });
102
+ child.stderr?.on('data', (d) => {
103
+ stderr += d.toString('utf8');
104
+ if (stderr.length > 32_000)
105
+ stderr = stderr.slice(0, 32_000);
106
+ });
107
+ child.on('error', () => {
108
+ clearTimeout(timer);
109
+ finish(1);
110
+ });
111
+ child.on('close', (code) => {
112
+ clearTimeout(timer);
113
+ finish(code ?? 1);
114
+ });
115
+ });
116
+ }
117
+ export async function runBacktest(cwd, signal) {
118
+ const checksPath = path.join(worldDir(cwd), CHECKS_FILE);
119
+ const hypothesisPath = path.join(worldDir(cwd), HYPOTHESIS_FILE);
120
+ const checks = await readChecks(cwd);
121
+ if (checks.length === 0) {
122
+ return {
123
+ ok: false,
124
+ passed: 0,
125
+ failed: 0,
126
+ total: 0,
127
+ results: [],
128
+ hypothesisPath,
129
+ checksPath,
130
+ };
131
+ }
132
+ const results = [];
133
+ for (const c of checks) {
134
+ const expectExit = c.expectExit ?? 0;
135
+ const timeoutMs = c.timeoutMs ?? 120_000;
136
+ const start = Date.now();
137
+ const { exitCode, stdout, stderr } = await runShell(c.command, cwd, timeoutMs, signal);
138
+ const combined = `${stdout}${stderr}`;
139
+ const preview = combined.slice(0, 400);
140
+ let ok = exitCode === expectExit;
141
+ let mismatch;
142
+ if (!ok) {
143
+ mismatch = `exit ${exitCode} (expected ${expectExit})`;
144
+ }
145
+ else if (c.expectStdoutIncludes && !combined.includes(c.expectStdoutIncludes)) {
146
+ ok = false;
147
+ mismatch = `stdout missing substring: ${c.expectStdoutIncludes}`;
148
+ }
149
+ results.push({
150
+ id: c.id,
151
+ command: c.command,
152
+ ok,
153
+ exitCode,
154
+ expectExit,
155
+ durationMs: Date.now() - start,
156
+ stdoutPreview: preview,
157
+ ...(mismatch ? { mismatch } : {}),
158
+ });
159
+ }
160
+ const passed = results.filter((r) => r.ok).length;
161
+ const failed = results.length - passed;
162
+ const summary = {
163
+ ok: failed === 0 && results.length > 0,
164
+ passed,
165
+ failed,
166
+ total: results.length,
167
+ results,
168
+ hypothesisPath,
169
+ checksPath,
170
+ };
171
+ await appendTimeline(cwd, { kind: 'backtest', ok: summary.ok, passed, failed, total: results.length });
172
+ return summary;
173
+ }
174
+ // ─── Tools ─────────────────────────────────────────────────────────────
175
+ const UpdateHypothesisSchema = z.object({
176
+ content: z.string().min(1).describe('Full markdown hypothesis / working notes (replaces file).'),
177
+ append: z
178
+ .boolean()
179
+ .optional()
180
+ .describe('If true, append content under a timestamp instead of replacing.'),
181
+ });
182
+ export const updateWorldHypothesisTool = {
183
+ name: 'update_world_hypothesis',
184
+ description: 'Write or append the task world-model hypothesis (Schema-style notes.md) to ' +
185
+ '.zelari/world/hypothesis.md. Use this to record what you believe is true ' +
186
+ 'about the bug/system, competing hypotheses, and what experiment would discriminate them. ' +
187
+ 'Do NOT claim work is done until run_backtest is green.',
188
+ permissions: ['write'],
189
+ timeoutMs: 10_000,
190
+ inputSchema: UpdateHypothesisSchema,
191
+ execute: async (args, ctx) => {
192
+ try {
193
+ const dir = await ensureWorldDir(ctx.cwd);
194
+ const file = path.join(dir, HYPOTHESIS_FILE);
195
+ if (args.append) {
196
+ const block = `\n\n## ${new Date().toISOString()}\n\n${args.content}\n`;
197
+ await fs.appendFile(file, block, 'utf8');
198
+ }
199
+ else {
200
+ await fs.writeFile(file, args.content, 'utf8');
201
+ }
202
+ const st = await fs.stat(file);
203
+ await appendTimeline(ctx.cwd, { kind: 'hypothesis_update', bytes: st.size, append: !!args.append });
204
+ return typedOk({ path: file, bytes: st.size });
205
+ }
206
+ catch (err) {
207
+ return typedErr(err instanceof Error ? err.message : String(err));
208
+ }
209
+ },
210
+ };
211
+ const WorldCheckSchema = z.object({
212
+ id: z.string().min(1),
213
+ command: z.string().min(1),
214
+ expectExit: z.number().int().optional(),
215
+ expectStdoutIncludes: z.string().optional(),
216
+ timeoutMs: z.number().int().positive().max(600_000).optional(),
217
+ });
218
+ const SetChecksSchema = z.object({
219
+ checks: z
220
+ .array(WorldCheckSchema)
221
+ .min(1)
222
+ .describe('List of certifiable shell checks (typecheck, unit tests, smoke scripts).'),
223
+ });
224
+ export const setWorldChecksTool = {
225
+ name: 'set_world_checks',
226
+ description: 'Replace .zelari/world/checks.json with certifiable checks used by run_backtest. ' +
227
+ 'Each check is a shell command + expected exit code (default 0). Prefer fast, ' +
228
+ 'deterministic commands (npm run typecheck, npx vitest run path/to/file).',
229
+ permissions: ['write'],
230
+ timeoutMs: 10_000,
231
+ inputSchema: SetChecksSchema,
232
+ execute: async (args, ctx) => {
233
+ try {
234
+ const dir = await ensureWorldDir(ctx.cwd);
235
+ const file = path.join(dir, CHECKS_FILE);
236
+ const body = { checks: args.checks };
237
+ await fs.writeFile(file, JSON.stringify(body, null, 2) + '\n', 'utf8');
238
+ await appendTimeline(ctx.cwd, { kind: 'checks_set', count: args.checks.length });
239
+ return typedOk({ path: file, count: args.checks.length });
240
+ }
241
+ catch (err) {
242
+ return typedErr(err instanceof Error ? err.message : String(err));
243
+ }
244
+ },
245
+ };
246
+ const RunBacktestSchema = z.object({
247
+ /** Reserved for future selective runs. */
248
+ dryRun: z.boolean().optional(),
249
+ });
250
+ export const runBacktestTool = {
251
+ name: 'run_backtest',
252
+ description: 'Schema-style certify: run every check in .zelari/world/checks.json and report ' +
253
+ 'exact pass/fail (exit code + optional stdout substring). Appends a timeline entry. ' +
254
+ 'If total=0, call set_world_checks first. NEVER claim the task is done when ok=false. ' +
255
+ 'On mismatch, revise hypothesis (update_world_hypothesis) and the implementation, then re-run.',
256
+ permissions: ['execute'],
257
+ timeoutMs: 600_000,
258
+ inputSchema: RunBacktestSchema,
259
+ execute: async (args, ctx) => {
260
+ try {
261
+ if (args.dryRun) {
262
+ const checks = await readChecks(ctx.cwd);
263
+ return typedOk({
264
+ ok: false,
265
+ passed: 0,
266
+ failed: 0,
267
+ total: checks.length,
268
+ results: checks.map((c) => ({
269
+ id: c.id,
270
+ command: c.command,
271
+ ok: false,
272
+ exitCode: -1,
273
+ expectExit: c.expectExit ?? 0,
274
+ durationMs: 0,
275
+ stdoutPreview: '(dryRun)',
276
+ mismatch: 'dryRun',
277
+ })),
278
+ hypothesisPath: path.join(worldDir(ctx.cwd), HYPOTHESIS_FILE),
279
+ checksPath: path.join(worldDir(ctx.cwd), CHECKS_FILE),
280
+ });
281
+ }
282
+ const result = await runBacktest(ctx.cwd, ctx.signal);
283
+ return typedOk(result);
284
+ }
285
+ catch (err) {
286
+ return typedErr(err instanceof Error ? err.message : String(err));
287
+ }
288
+ },
289
+ };
290
+ const RecordObsSchema = z.object({
291
+ kind: z.string().min(1).describe('Observation kind, e.g. surprise, probe, prediction_mismatch.'),
292
+ summary: z.string().min(1),
293
+ data: z.record(z.string(), z.unknown()).optional(),
294
+ });
295
+ export const recordWorldObservationTool = {
296
+ name: 'record_world_observation',
297
+ description: 'Append one ground-truth observation to .zelari/world/timeline.jsonl (Schema timeline). ' +
298
+ 'Use after a surprising tool result (prediction mismatch, unexpected exit code, wrong path) ' +
299
+ 'so later deliberation cannot rewrite history.',
300
+ permissions: ['write'],
301
+ timeoutMs: 5_000,
302
+ inputSchema: RecordObsSchema,
303
+ execute: async (args, ctx) => {
304
+ try {
305
+ const dir = await ensureWorldDir(ctx.cwd);
306
+ const file = path.join(dir, TIMELINE_FILE);
307
+ await appendTimeline(ctx.cwd, {
308
+ kind: args.kind,
309
+ summary: args.summary,
310
+ ...(args.data ? { data: args.data } : {}),
311
+ });
312
+ return typedOk({ path: file });
313
+ }
314
+ catch (err) {
315
+ return typedErr(err instanceof Error ? err.message : String(err));
316
+ }
317
+ },
318
+ };
319
+ /** All world-model tools (omit when ZELARI_SCHEMA_LOOP=0). */
320
+ export function createWorldModelTools() {
321
+ if (process.env['ZELARI_SCHEMA_LOOP'] === '0')
322
+ return [];
323
+ // Cast: ToolDefinition is invariant on input; registry accepts heterogeneous tools.
324
+ return [
325
+ updateWorldHypothesisTool,
326
+ setWorldChecksTool,
327
+ runBacktestTool,
328
+ recordWorldObservationTool,
329
+ ];
330
+ }
331
+ //# sourceMappingURL=worldModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worldModel.js","sourceRoot":"","sources":["../../../src/cli/workspace/worldModel.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,14 @@ import { promises as fs } from 'node:fs';
15
15
  import * as path from 'node:path';
16
16
  import { formatMemoryHits } from './memory/fileBackend.js';
17
17
  import { createCheckpoint } from './checkpoint/checkpointManager.js';
18
- const DEFAULT_MAX_ITER = 10;
18
+ import { getStateStore } from './state/fileStateStore.js';
19
+ import { discoveriesFromOutcome, tryStateCommit } from './state/commitHelpers.js';
20
+ /**
21
+ * Default budget for **implementation** slices only.
22
+ * Design-phase (when the brief asks for it) is free and does not consume this.
23
+ * Override via `ZELARI_MISSION_MAX_ITER`.
24
+ */
25
+ const DEFAULT_MAX_ITER = 6;
19
26
  const DEFAULT_MAX_STALL = 2;
20
27
  export function resolveMaxIterations(env = process.env) {
21
28
  const raw = env.ZELARI_MISSION_MAX_ITER;
@@ -106,12 +113,21 @@ export async function runZelariMission(userMessage, brief, deps) {
106
113
  };
107
114
  await deps.memory.init(deps.projectRoot);
108
115
  await writeMissionState(deps.projectRoot, state);
116
+ const stateStore = deps.stateStore ?? (await getStateStore(deps.projectRoot, deps.env ?? process.env));
117
+ try {
118
+ await stateStore.init(deps.projectRoot);
119
+ }
120
+ catch {
121
+ // fail-open
122
+ }
109
123
  // Safety net: snapshot the working tree before the mission mutates files,
110
124
  // so a bad run can be rolled back atomically (opt out: ZELARI_CHECKPOINT=0).
111
125
  // Best-effort — a non-git project or a git hiccup just skips the checkpoint.
126
+ let missionCheckpointId;
112
127
  if ((deps.env ?? process.env).ZELARI_CHECKPOINT !== '0') {
113
128
  const cp = await createCheckpoint(deps.projectRoot, `zelari mission ${missionId}`);
114
129
  if (cp.ok) {
130
+ missionCheckpointId = cp.value.id;
115
131
  deps.emit(`[zelari] checkpoint ${cp.value.id} creato — se la missione va storta ripristina con \`/rollback ${cp.value.id}\`.`);
116
132
  }
117
133
  }
@@ -119,41 +135,141 @@ export async function runZelariMission(userMessage, brief, deps) {
119
135
  // Consecutive implementation iterations that wrote 0 project files. Reset on
120
136
  // any real write. Drives the `stalled` early-out (see resolveMaxStall).
121
137
  let noWriteStreak = 0;
122
- for (let i = 1; i <= maxIter; i++) {
123
- state.iteration = i;
124
- const runMode = i === 1 && designFirst ? 'design-phase' : 'implementation';
138
+ // Wall-clock step counter (design + impl) for state.iteration / logging.
139
+ let step = 0;
140
+ // Implementation slices only this is what maxIter budgets.
141
+ let implStep = 0;
142
+ // One free design-phase pass when the brief asks for it (does not burn budget).
143
+ let pendingDesign = designFirst;
144
+ while (true) {
145
+ const runMode = pendingDesign ? 'design-phase' : 'implementation';
146
+ if (runMode === 'implementation') {
147
+ if (implStep >= maxIter)
148
+ break;
149
+ implStep++;
150
+ }
151
+ step++;
152
+ state.iteration = step;
125
153
  const hits = await deps.memory.search(`${brief.deliverableThisMission} ${userMessage}`, {
126
154
  limit: 8,
127
155
  metadataFilter: { projectRoot: deps.projectRoot },
128
156
  });
129
- const ragContext = formatMemoryHits(hits);
130
- const slicePrompt = buildSlicePrompt(brief, userMessage, runMode, i);
131
- deps.emit(`[zelari] iterazione ${i}/${maxIter} · ${runMode} · slice ${brief.sliceMvp.id}`);
157
+ // Memory (soft RAG) + durable HEAD materialization (verified + progress).
158
+ // lastGoodCommitId is retained for resume/oracle; next-slice context uses HEAD
159
+ // so progress soft-commits are visible immediately.
160
+ let durableBlock = '';
161
+ try {
162
+ durableBlock = await stateStore.materializeContext();
163
+ }
164
+ catch {
165
+ durableBlock = '';
166
+ }
167
+ const memBlock = formatMemoryHits(hits);
168
+ const ragContext = [durableBlock, memBlock].filter(Boolean).join('\n\n');
169
+ // buildSlicePrompt uses iteration>1 for "fix remaining failures" — that
170
+ // should track implementation attempts, not free design steps.
171
+ const promptIter = runMode === 'implementation' ? implStep : 1;
172
+ const slicePrompt = buildSlicePrompt(brief, userMessage, runMode, promptIter);
173
+ const implementerRetry = runMode === 'implementation' && implStep > 1;
174
+ if (runMode === 'design-phase') {
175
+ deps.emit(`[zelari] design-phase (fuori budget) · step ${step} · slice ${brief.sliceMvp.id}`);
176
+ }
177
+ else if (implementerRetry) {
178
+ deps.emit(`[zelari] implementazione ${implStep}/${maxIter} · step ${step} · ` +
179
+ `roster ridotto (Minosse+Lucifero) · slice ${brief.sliceMvp.id}`);
180
+ }
181
+ else {
182
+ deps.emit(`[zelari] implementazione ${implStep}/${maxIter} · step ${step} · ` +
183
+ `council completo · slice ${brief.sliceMvp.id}`);
184
+ }
132
185
  let result;
133
186
  try {
134
- result = await deps.runSlice({ userMessage: slicePrompt, runMode, ragContext, iteration: i });
187
+ result = await deps.runSlice({
188
+ userMessage: slicePrompt,
189
+ runMode,
190
+ ragContext,
191
+ iteration: step,
192
+ implementationIndex: runMode === 'implementation' ? implStep : undefined,
193
+ implementerRetry,
194
+ });
135
195
  }
136
196
  catch (err) {
137
197
  state.status = 'error';
138
198
  state.updatedAt = now().toISOString();
139
199
  await writeMissionState(deps.projectRoot, state);
140
- deps.emit(`[zelari] errore all'iterazione ${i}: ${err instanceof Error ? err.message : String(err)}`);
200
+ deps.emit(`[zelari] errore allo step ${step}: ${err instanceof Error ? err.message : String(err)}`);
141
201
  return state;
142
202
  }
143
203
  await deps.memory.add(JSON.stringify({
144
- iteration: i,
204
+ iteration: step,
205
+ implStep: runMode === 'implementation' ? implStep : 0,
145
206
  runMode,
146
207
  completionOk: result.completionOk,
147
208
  synthesis: result.synthesisText?.slice(0, 2000) ?? '',
148
- }), { projectRoot: deps.projectRoot, missionId, sliceId: brief.sliceMvp.id, source: 'council', iteration: i });
209
+ }), {
210
+ projectRoot: deps.projectRoot,
211
+ missionId,
212
+ sliceId: brief.sliceMvp.id,
213
+ source: 'council',
214
+ iteration: step,
215
+ });
149
216
  state.lastCompletionOk = result.completionOk;
150
217
  state.updatedAt = now().toISOString();
151
- // Success only when an IMPLEMENTATION slice completes a design-phase run
152
- // never writes completion.json, so it always advances the loop.
153
- if (result.completionOk && runMode === 'implementation') {
218
+ // Design is free: clear the flag and continue into implementation budget.
219
+ if (runMode === 'design-phase') {
220
+ pendingDesign = false;
221
+ await writeMissionState(deps.projectRoot, state);
222
+ continue;
223
+ }
224
+ // Durable accumulation: verified success → hard commit; progress with
225
+ // writes → soft progress commit so the next slice inherits discoveries.
226
+ const wrote = typeof result.writeCount === 'number' && result.writeCount > 0;
227
+ if (result.completionOk || wrote) {
228
+ const hard = result.completionOk === true;
229
+ const commitRes = await tryStateCommit({
230
+ projectRoot: deps.projectRoot,
231
+ store: stateStore,
232
+ env: deps.env,
233
+ mode: 'zelari',
234
+ layer: hard
235
+ ? `mission:impl-${implStep}`
236
+ : `mission:progress-${implStep}`,
237
+ label: hard
238
+ ? `zelari ${brief.sliceMvp.id} impl ${implStep} verified`
239
+ : `zelari ${brief.sliceMvp.id} progress impl ${implStep}`,
240
+ sessionId: missionId,
241
+ verification: { ok: hard, ran: result.ran },
242
+ force: !hard,
243
+ withCheckpoint: hard,
244
+ discoveries: discoveriesFromOutcome({
245
+ stepId: `${missionId}-${step}`,
246
+ synthesis: result.synthesisText,
247
+ writeCount: result.writeCount,
248
+ note: hard
249
+ ? `Implementation slice ${implStep} completed (verified)`
250
+ : `Progress slice ${implStep} (${result.writeCount} writes, not yet complete)`,
251
+ }),
252
+ });
253
+ if (commitRes.ok && commitRes.meta?.id) {
254
+ // Only advance lastGoodCommitId on verified commits (Palmer: oracle PASS).
255
+ if (hard) {
256
+ state.lastGoodCommitId = commitRes.meta.id;
257
+ if (commitRes.checkpointId) {
258
+ missionCheckpointId = commitRes.checkpointId;
259
+ }
260
+ }
261
+ deps.emit(`[zelari] state commit ${commitRes.meta.id}` +
262
+ ` (${hard ? 'verified' : 'progress'} layer mission:${hard ? 'impl' : 'progress'}-${implStep})`);
263
+ }
264
+ else if (commitRes.error) {
265
+ deps.emit(`[zelari] state commit skipped: ${commitRes.error}`);
266
+ }
267
+ }
268
+ // Success only when an IMPLEMENTATION slice completes.
269
+ if (result.completionOk) {
154
270
  state.status = 'success';
155
271
  await writeMissionState(deps.projectRoot, state);
156
- deps.emit(`[zelari] ✓ missione completata — slice MVP verde all'iterazione ${i}.`);
272
+ deps.emit(`[zelari] ✓ missione completata — slice MVP verde all'implementazione ${implStep}/${maxIter} (step ${step}).`);
157
273
  return state;
158
274
  }
159
275
  // Stall detection: an implementation slice that wrote 0 files made no
@@ -161,7 +277,7 @@ export async function runZelariMission(userMessage, brief, deps) {
161
277
  // synthesis claims done but nothing is written). Bail early with an
162
278
  // actionable message instead of burning the whole iteration budget on
163
279
  // identical no-op runs. Only counts when the driver reports writeCount.
164
- if (runMode === 'implementation' && typeof result.writeCount === 'number') {
280
+ if (typeof result.writeCount === 'number') {
165
281
  if (result.writeCount === 0)
166
282
  noWriteStreak++;
167
283
  else
@@ -182,8 +298,9 @@ export async function runZelariMission(userMessage, brief, deps) {
182
298
  state.status = 'stopped';
183
299
  state.updatedAt = now().toISOString();
184
300
  await writeMissionState(deps.projectRoot, state);
185
- deps.emit(`[zelari] fermata dopo ${maxIter} iterazioni senza completamento verde. ` +
186
- 'Stato salvato in .zelari/mission-state.json');
301
+ deps.emit(`[zelari] fermata dopo ${maxIter} implementazioni senza completamento verde` +
302
+ (designFirst ? ' (design-phase esclusa dal budget)' : '') +
303
+ '. Stato salvato in .zelari/mission-state.json');
187
304
  return state;
188
305
  }
189
306
  //# sourceMappingURL=zelariMission.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zelariMission.js","sourceRoot":"","sources":["../../src/cli/zelariMission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zelariMission.js","sourceRoot":"","sources":["../../src/cli/zelariMission.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zelari-code",
3
- "version": "1.14.4",
3
+ "version": "1.17.0",
4
4
  "description": "Zelari Code — AI Council coding agent CLI. Multi-agent orchestration (Caronte, Nettuno, Gerione, Plutone, Minosse, Lucifero) with slash commands, provider-agnostic LLM streaming, and self-update.",
5
5
  "author": "Anathema Studio <https://anathema-studio.com/>",
6
6
  "license": "MIT",
@@ -50,7 +50,7 @@
50
50
  },
51
51
  "devDependencies": {
52
52
  "@testing-library/react": "^16.3.2",
53
- "@zelari/core": "1.14.4",
53
+ "@zelari/core": "1.17.0",
54
54
  "@types/node": "^25.3.0",
55
55
  "@types/react": "^19.0.10",
56
56
  "esbuild": "^0.25.0",