zelari-code 1.0.0 → 1.0.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.
|
@@ -15,11 +15,26 @@ 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
|
const DEFAULT_MAX_ITER = 10;
|
|
18
|
+
const DEFAULT_MAX_STALL = 2;
|
|
18
19
|
export function resolveMaxIterations(env = process.env) {
|
|
19
20
|
const raw = env.ZELARI_MISSION_MAX_ITER;
|
|
20
21
|
const n = raw ? Number.parseInt(raw, 10) : DEFAULT_MAX_ITER;
|
|
21
22
|
return Number.isFinite(n) && n > 0 ? n : DEFAULT_MAX_ITER;
|
|
22
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Consecutive implementation iterations that write 0 files before the mission
|
|
26
|
+
* bails out with `stalled`. Grinding the full iteration budget when every run
|
|
27
|
+
* writes nothing just burns council calls without approaching a deliverable —
|
|
28
|
+
* this caps that waste and surfaces an actionable message instead. `0` disables
|
|
29
|
+
* stall detection (fall back to the plain iteration budget).
|
|
30
|
+
*/
|
|
31
|
+
export function resolveMaxStall(env = process.env) {
|
|
32
|
+
const raw = env.ZELARI_MISSION_MAX_STALL;
|
|
33
|
+
if (raw === undefined)
|
|
34
|
+
return DEFAULT_MAX_STALL;
|
|
35
|
+
const n = Number.parseInt(raw, 10);
|
|
36
|
+
return Number.isFinite(n) && n >= 0 ? n : DEFAULT_MAX_STALL;
|
|
37
|
+
}
|
|
23
38
|
/** True unless auto-start is explicitly requested. */
|
|
24
39
|
export function isMissionAutoStart(env = process.env) {
|
|
25
40
|
return env.ZELARI_MISSION_AUTO === '1';
|
|
@@ -39,7 +54,10 @@ function buildSlicePrompt(brief, userMessage, runMode, iteration) {
|
|
|
39
54
|
? ' Address any remaining verification failures recorded in .zelari/completion.json.'
|
|
40
55
|
: '';
|
|
41
56
|
return (`${userMessage}\n\n[Zelari mission] Implement the MVP slice: ` +
|
|
42
|
-
`${brief.deliverableThisMission}.${fix}`
|
|
57
|
+
`${brief.deliverableThisMission}.${fix} ` +
|
|
58
|
+
'You MUST create or modify the real project files with write_file / edit_file — ' +
|
|
59
|
+
'not just describe them in prose. A run that claims completion without writing ' +
|
|
60
|
+
'any file is a failed run and will not be accepted.');
|
|
43
61
|
}
|
|
44
62
|
/** Render the brief as a chat block for the confirmation step. */
|
|
45
63
|
export function formatBriefForChat(brief) {
|
|
@@ -71,6 +89,7 @@ export function formatBriefForChat(brief) {
|
|
|
71
89
|
export async function runZelariMission(userMessage, brief, deps) {
|
|
72
90
|
const now = deps.now ?? (() => new Date());
|
|
73
91
|
const maxIter = deps.maxIterations ?? resolveMaxIterations(deps.env);
|
|
92
|
+
const maxStall = resolveMaxStall(deps.env);
|
|
74
93
|
const missionId = deps.missionId ?? `m_${randomUUID().slice(0, 8)}`;
|
|
75
94
|
const startedAt = now().toISOString();
|
|
76
95
|
const state = {
|
|
@@ -87,6 +106,9 @@ export async function runZelariMission(userMessage, brief, deps) {
|
|
|
87
106
|
await deps.memory.init(deps.projectRoot);
|
|
88
107
|
await writeMissionState(deps.projectRoot, state);
|
|
89
108
|
const designFirst = brief.phases[0]?.mode === 'design-phase';
|
|
109
|
+
// Consecutive implementation iterations that wrote 0 project files. Reset on
|
|
110
|
+
// any real write. Drives the `stalled` early-out (see resolveMaxStall).
|
|
111
|
+
let noWriteStreak = 0;
|
|
90
112
|
for (let i = 1; i <= maxIter; i++) {
|
|
91
113
|
state.iteration = i;
|
|
92
114
|
const runMode = i === 1 && designFirst ? 'design-phase' : 'implementation';
|
|
@@ -124,6 +146,27 @@ export async function runZelariMission(userMessage, brief, deps) {
|
|
|
124
146
|
deps.emit(`[zelari] ✓ missione completata — slice MVP verde all'iterazione ${i}.`);
|
|
125
147
|
return state;
|
|
126
148
|
}
|
|
149
|
+
// Stall detection: an implementation slice that wrote 0 files made no
|
|
150
|
+
// progress toward the deliverable (the documented composer-2.5 mode —
|
|
151
|
+
// synthesis claims done but nothing is written). Bail early with an
|
|
152
|
+
// actionable message instead of burning the whole iteration budget on
|
|
153
|
+
// identical no-op runs. Only counts when the driver reports writeCount.
|
|
154
|
+
if (runMode === 'implementation' && typeof result.writeCount === 'number') {
|
|
155
|
+
if (result.writeCount === 0)
|
|
156
|
+
noWriteStreak++;
|
|
157
|
+
else
|
|
158
|
+
noWriteStreak = 0;
|
|
159
|
+
if (maxStall > 0 && noWriteStreak >= maxStall) {
|
|
160
|
+
state.status = 'stalled';
|
|
161
|
+
state.updatedAt = now().toISOString();
|
|
162
|
+
await writeMissionState(deps.projectRoot, state);
|
|
163
|
+
deps.emit(`[zelari] fermata: ${noWriteStreak} iterazioni di implementation senza ` +
|
|
164
|
+
'scrivere alcun file (il modello dichiara "fatto" ma non produce il ' +
|
|
165
|
+
'deliverable). Prova un modello più capace o verifica provider/chiave. ' +
|
|
166
|
+
'Stato salvato in .zelari/mission-state.json');
|
|
167
|
+
return state;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
127
170
|
await writeMissionState(deps.projectRoot, state);
|
|
128
171
|
}
|
|
129
172
|
state.status = 'stopped';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zelariMission.js","sourceRoot":"","sources":["../../src/cli/zelariMission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
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.0.
|
|
3
|
+
"version": "1.0.1",
|
|
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": "N-THEM Studio",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|