zelari-code 0.7.5 → 0.7.9

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 (44) hide show
  1. package/README.md +27 -1
  2. package/dist/cli/app.js +50 -18
  3. package/dist/cli/app.js.map +1 -1
  4. package/dist/cli/components/Sidebar.js +86 -39
  5. package/dist/cli/components/Sidebar.js.map +1 -1
  6. package/dist/cli/components/SplashScreen.js +204 -0
  7. package/dist/cli/components/SplashScreen.js.map +1 -0
  8. package/dist/cli/components/StatusBar.js +22 -18
  9. package/dist/cli/components/StatusBar.js.map +1 -1
  10. package/dist/cli/councilConfig.js +38 -0
  11. package/dist/cli/councilConfig.js.map +1 -0
  12. package/dist/cli/councilDispatcher.js +38 -32
  13. package/dist/cli/councilDispatcher.js.map +1 -1
  14. package/dist/cli/hooks/useChatTurn.js +80 -61
  15. package/dist/cli/hooks/useChatTurn.js.map +1 -1
  16. package/dist/cli/hooks/useExecutionTimer.js +25 -0
  17. package/dist/cli/hooks/useExecutionTimer.js.map +1 -0
  18. package/dist/cli/hooks/useGitChanges.js +142 -0
  19. package/dist/cli/hooks/useGitChanges.js.map +1 -0
  20. package/dist/cli/hooks/useSlashDispatch.js +9 -2
  21. package/dist/cli/hooks/useSlashDispatch.js.map +1 -1
  22. package/dist/cli/main.bundled.js +2560 -1231
  23. package/dist/cli/main.bundled.js.map +4 -4
  24. package/dist/cli/main.js +9 -2
  25. package/dist/cli/main.js.map +1 -1
  26. package/dist/cli/mcp/mcpClient.js +14 -6
  27. package/dist/cli/mcp/mcpClient.js.map +1 -1
  28. package/dist/cli/updater.js +8 -5
  29. package/dist/cli/updater.js.map +1 -1
  30. package/dist/cli/utils/cmdline.js +26 -0
  31. package/dist/cli/utils/cmdline.js.map +1 -0
  32. package/dist/cli/utils/paths.js +20 -0
  33. package/dist/cli/utils/paths.js.map +1 -0
  34. package/dist/cli/wizard/index.js +1 -1
  35. package/dist/cli/wizard/index.js.map +1 -1
  36. package/dist/cli/workspace/completeDesign.js +128 -0
  37. package/dist/cli/workspace/completeDesign.js.map +1 -0
  38. package/dist/cli/workspace/planDetect.js +17 -0
  39. package/dist/cli/workspace/planDetect.js.map +1 -0
  40. package/dist/cli/workspace/postCouncilHook.js +157 -20
  41. package/dist/cli/workspace/postCouncilHook.js.map +1 -1
  42. package/dist/cli/workspace/stubs.js +406 -225
  43. package/dist/cli/workspace/stubs.js.map +1 -1
  44. package/package.json +71 -71
@@ -1,38 +1,175 @@
1
1
  /**
2
2
  * workspace/postCouncilHook.ts — Run the AGENTS.MD auto-maintenance
3
- * after every council run completes.
3
+ * after every council run completes, then run the deterministic
4
+ * complete-design post-processor for design-phase workspaces.
4
5
  *
5
- * Used by `councilDispatcher` (Phase 4 wiring) to keep AGENTS.MD in sync
6
- * with the latest `.zelari/` artifacts.
6
+ * Used by `councilDispatcher` (Phase 4 wiring) to keep AGENTS.MD in
7
+ * sync with the latest `.zelari/` artifacts and to guarantee that
8
+ * tasks/milestones are present even when the council model (e.g.
9
+ * composer-2.5) refuses to emit createTask/createMilestone as real
10
+ * tool calls.
7
11
  */
8
- import { updateAgentsMd } from './agentsMd.js';
12
+ import { spawn } from "node:child_process";
13
+ import { existsSync, readFileSync } from "node:fs";
14
+ import { join } from "node:path";
15
+ import { updateAgentsMd } from "./agentsMd.js";
16
+ import { runBuiltinCompleteDesign } from "./completeDesign.js";
9
17
  /**
10
- * Run the post-council AGENTS.MD maintenance hook.
11
- * Returns info about what happened so the CLI can show a one-line summary
12
- * to the user (e.g. "AGENTS.MD updated: 2 sections changed (decisions, conventions)").
18
+ * v0.7.7 Opzione B / v0.7.8 Run the deterministic complete-design
19
+ * post-processor if the workspace is in design-phase (`.zelari/plan.json`
20
+ * exists with at least one phase).
13
21
  *
14
- * Respects `ZELARI_AGENTS_MD=0` env var to opt out.
22
+ * Resolution order:
23
+ * 1. A workspace-local `complete-design.mjs` at the project root wins
24
+ * (curated, domain-specific task templates) and is spawned as a
25
+ * child process.
26
+ * 2. Otherwise (v0.7.8) the built-in TypeScript fallback runs: it
27
+ * derives 3 tasks per phase from the REAL phases in plan.json and
28
+ * guarantees a milestone — versioned with the codebase, no per-
29
+ * workspace setup, immune to phase-ID drift.
30
+ *
31
+ * Errors are captured, never thrown — the post-processor is a
32
+ * best-effort safety net.
33
+ *
34
+ * Disabled by setting `ZELARI_COMPLETE_DESIGN=0` in the environment.
15
35
  */
16
- export async function runPostCouncilHook(ctx) {
17
- if (process.env['ZELARI_AGENTS_MD'] === '0') {
18
- return { ran: false, changed: false, sections: [], reason: 'ZELARI_AGENTS_MD=0 (disabled)' };
19
- }
20
- try {
21
- const result = await updateAgentsMd(ctx, ctx.projectRoot);
36
+ export async function runCompleteDesignPostProcessor(ctx, options) {
37
+ if (options?.runMode === "implementation") {
22
38
  return {
23
- ran: true,
24
- changed: result.changed,
25
- sections: result.sections,
26
- ...(result.reason ? { reason: result.reason } : {}),
39
+ ran: false,
40
+ reason: "implementation mode (complete-design skipped)",
27
41
  };
28
42
  }
29
- catch (err) {
43
+ if (process.env["ZELARI_COMPLETE_DESIGN"] === "0") {
44
+ return { ran: false, reason: "ZELARI_COMPLETE_DESIGN=0 (disabled)" };
45
+ }
46
+ const planJsonPath = join(ctx.rootDir, "plan.json");
47
+ const scriptPath = join(ctx.projectRoot, "complete-design.mjs");
48
+ if (!existsSync(planJsonPath)) {
30
49
  return {
50
+ ran: false,
51
+ reason: ".zelari/plan.json missing (not design-phase)",
52
+ };
53
+ }
54
+ let phaseCount = 0;
55
+ try {
56
+ const parsed = JSON.parse(readFileSync(planJsonPath, "utf8"));
57
+ phaseCount = Array.isArray(parsed.phases) ? parsed.phases.length : 0;
58
+ }
59
+ catch {
60
+ return { ran: false, reason: ".zelari/plan.json corrupt" };
61
+ }
62
+ if (phaseCount === 0) {
63
+ return { ran: false, reason: ".zelari/plan.json has no phases" };
64
+ }
65
+ if (!existsSync(scriptPath)) {
66
+ // v0.7.8: no workspace script → run the built-in deterministic
67
+ // fallback instead of skipping. Same guarantees (≥3 tasks per phase,
68
+ // ≥1 milestone), zero per-workspace setup.
69
+ try {
70
+ const builtin = await runBuiltinCompleteDesign(ctx);
71
+ return {
72
+ ran: builtin.ran,
73
+ ...(builtin.ran ? { exitCode: 0 } : {}),
74
+ output: `builtin complete-design: +${builtin.tasksAdded} tasks, +${builtin.milestonesAdded} milestones`,
75
+ ...(builtin.reason ? { reason: builtin.reason } : {}),
76
+ };
77
+ }
78
+ catch (err) {
79
+ return {
80
+ ran: true,
81
+ exitCode: -1,
82
+ reason: `builtin complete-design error: ${err instanceof Error ? err.message : String(err)}`,
83
+ };
84
+ }
85
+ }
86
+ return await new Promise((resolveRun) => {
87
+ const child = spawn(process.execPath, [scriptPath], {
88
+ cwd: ctx.projectRoot,
89
+ stdio: ["ignore", "pipe", "pipe"],
90
+ env: process.env,
91
+ });
92
+ let stdout = "";
93
+ let stderr = "";
94
+ child.stdout?.on("data", (chunk) => {
95
+ stdout += chunk.toString("utf8");
96
+ });
97
+ child.stderr?.on("data", (chunk) => {
98
+ stderr += chunk.toString("utf8");
99
+ });
100
+ child.on("error", (err) => {
101
+ resolveRun({
102
+ ran: true,
103
+ exitCode: -1,
104
+ output: stderr,
105
+ reason: `spawn error: ${err.message}`,
106
+ });
107
+ });
108
+ child.on("close", (code) => {
109
+ const exitCode = code ?? -1;
110
+ const ok = exitCode === 0;
111
+ resolveRun({
112
+ ran: true,
113
+ exitCode,
114
+ output: stdout + stderr,
115
+ ...(ok
116
+ ? {}
117
+ : { reason: `complete-design exited with code ${exitCode}` }),
118
+ });
119
+ });
120
+ });
121
+ }
122
+ /**
123
+ * Run the post-council hook pipeline:
124
+ * 1. AGENTS.MD auto-maintenance (can be skipped via ZELARI_AGENTS_MD=0).
125
+ * 2. complete-design post-processor (design-phase only, can be skipped
126
+ * via ZELARI_COMPLETE_DESIGN=0).
127
+ *
128
+ * The `completeDesign` field carries the secondary result so the CLI can
129
+ * surface it ("complete-design: 12 tasks + 1 milestone added"). The
130
+ * primary `changed`/`sections` reflect the AGENTS.MD step only.
131
+ *
132
+ * Errors from either step are caught and reported in the result — the
133
+ * hook never throws.
134
+ */
135
+ export async function runPostCouncilHook(ctx, options) {
136
+ // ── Step 1: AGENTS.MD maintenance ─────────────────────────────────────
137
+ let agentsMdResult;
138
+ if (process.env["ZELARI_AGENTS_MD"] === "0") {
139
+ agentsMdResult = {
31
140
  ran: false,
32
141
  changed: false,
33
142
  sections: [],
34
- reason: `error: ${err instanceof Error ? err.message : String(err)}`,
143
+ reason: "ZELARI_AGENTS_MD=0 (disabled)",
35
144
  };
36
145
  }
146
+ else {
147
+ try {
148
+ const result = await updateAgentsMd(ctx, ctx.projectRoot);
149
+ agentsMdResult = {
150
+ ran: true,
151
+ changed: result.changed,
152
+ sections: result.sections,
153
+ ...(result.reason ? { reason: result.reason } : {}),
154
+ };
155
+ }
156
+ catch (err) {
157
+ agentsMdResult = {
158
+ ran: false,
159
+ changed: false,
160
+ sections: [],
161
+ reason: `error: ${err instanceof Error ? err.message : String(err)}`,
162
+ };
163
+ }
164
+ }
165
+ // ── Step 2: complete-design post-processor ───────────────────────────
166
+ const completeDesign = await runCompleteDesignPostProcessor(ctx, options);
167
+ return {
168
+ ran: agentsMdResult.ran || completeDesign.ran,
169
+ changed: agentsMdResult.changed,
170
+ sections: agentsMdResult.sections,
171
+ ...(agentsMdResult.reason ? { reason: agentsMdResult.reason } : {}),
172
+ completeDesign,
173
+ };
37
174
  }
38
175
  //# sourceMappingURL=postCouncilHook.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"postCouncilHook.js","sourceRoot":"","sources":["../../../src/cli/workspace/postCouncilHook.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAU/C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAqB;IAC5D,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5C,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IAC/F,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1D,OAAO;YACL,GAAG,EAAE,IAAI;YACT,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,GAAG,EAAE,KAAK;YACV,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SACrE,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"postCouncilHook.js","sourceRoot":"","sources":["../../../src/cli/workspace/postCouncilHook.ts"],"names":[],"mappings":"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"}