zelari-code 0.7.8 → 0.7.10
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 +95 -44
- package/bin/zelari-code.js +1 -1
- package/dist/agents/councilApi.js +7 -7
- package/dist/agents/councilApi.js.map +1 -1
- package/dist/agents/councilDirectives.js +3 -3
- package/dist/agents/promoteMember.js +2 -2
- package/dist/agents/roles.js +50 -32
- package/dist/agents/roles.js.map +1 -1
- package/dist/agents/skills/builtin/debugging.js +4 -4
- package/dist/agents/skills/builtin/debugging.js.map +1 -1
- package/dist/agents/skills/builtin/docs.js +23 -13
- package/dist/agents/skills/builtin/docs.js.map +1 -1
- package/dist/agents/skills/builtin/git-ops.js +3 -3
- package/dist/agents/skills/builtin/git-ops.js.map +1 -1
- package/dist/agents/skills/builtin/planning.js +4 -4
- package/dist/agents/skills/builtin/planning.js.map +1 -1
- package/dist/agents/skills/builtin/refactoring.js +3 -3
- package/dist/agents/skills/builtin/refactoring.js.map +1 -1
- package/dist/agents/skills/builtin/review.js +9 -9
- package/dist/agents/skills/builtin/review.js.map +1 -1
- package/dist/agents/skills/builtin/testing.js +3 -3
- package/dist/agents/skills/builtin/testing.js.map +1 -1
- package/dist/agents/tools.js +2 -9
- package/dist/agents/tools.js.map +1 -1
- package/dist/cli/app.js +79 -18
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/components/CollapsibleToolOutput.js +8 -26
- package/dist/cli/components/CollapsibleToolOutput.js.map +1 -1
- package/dist/cli/components/Header.js +6 -18
- package/dist/cli/components/Header.js.map +1 -1
- package/dist/cli/components/LiveRegion.js +7 -3
- package/dist/cli/components/LiveRegion.js.map +1 -1
- package/dist/cli/components/SelectList.js +67 -0
- package/dist/cli/components/SelectList.js.map +1 -0
- package/dist/cli/components/Sidebar.js +86 -37
- package/dist/cli/components/Sidebar.js.map +1 -1
- package/dist/cli/components/Spinner.js +51 -0
- package/dist/cli/components/Spinner.js.map +1 -0
- package/dist/cli/components/SplashScreen.js +117 -71
- package/dist/cli/components/SplashScreen.js.map +1 -1
- package/dist/cli/components/StatusBar.js +44 -32
- package/dist/cli/components/StatusBar.js.map +1 -1
- package/dist/cli/councilConfig.js +38 -0
- package/dist/cli/councilConfig.js.map +1 -0
- package/dist/cli/councilDispatcher.js +35 -49
- package/dist/cli/councilDispatcher.js.map +1 -1
- package/dist/cli/hooks/useChatTurn.js +80 -61
- package/dist/cli/hooks/useChatTurn.js.map +1 -1
- package/dist/cli/hooks/useExecutionTimer.js +25 -0
- package/dist/cli/hooks/useExecutionTimer.js.map +1 -0
- package/dist/cli/hooks/useGitChanges.js +142 -0
- package/dist/cli/hooks/useGitChanges.js.map +1 -0
- package/dist/cli/hooks/useSlashDispatch.js +20 -3
- package/dist/cli/hooks/useSlashDispatch.js.map +1 -1
- package/dist/cli/main.bundled.js +19776 -19052
- package/dist/cli/main.bundled.js.map +4 -4
- package/dist/cli/main.js +1 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/mcp/mcpClient.js +14 -6
- package/dist/cli/mcp/mcpClient.js.map +1 -1
- package/dist/cli/slashCommands.js +21 -4
- package/dist/cli/slashCommands.js.map +1 -1
- package/dist/cli/slashHandlers/provider.js +101 -4
- package/dist/cli/slashHandlers/provider.js.map +1 -1
- package/dist/cli/updater.js +8 -5
- package/dist/cli/updater.js.map +1 -1
- package/dist/cli/utils/cmdline.js +26 -0
- package/dist/cli/utils/cmdline.js.map +1 -0
- package/dist/cli/utils/paths.js +20 -0
- package/dist/cli/utils/paths.js.map +1 -0
- package/dist/cli/workspace/planDetect.js +17 -0
- package/dist/cli/workspace/planDetect.js.map +1 -0
- package/dist/cli/workspace/postCouncilHook.js +39 -28
- package/dist/cli/workspace/postCouncilHook.js.map +1 -1
- package/dist/cli/workspace/stubs.js +241 -196
- package/dist/cli/workspace/stubs.js.map +1 -1
- package/dist/main/core/AgentHarness.js +36 -7
- package/dist/main/core/AgentHarness.js.map +1 -1
- package/dist/main/core/tools/builtin/listFiles.js +43 -5
- package/dist/main/core/tools/builtin/listFiles.js.map +1 -1
- package/dist/main/core/tools/builtin/search.js +28 -120
- package/dist/main/core/tools/builtin/search.js.map +1 -1
- package/package.json +71 -71
- package/dist/cli/oauthCallbackServer.js +0 -207
- package/dist/cli/oauthCallbackServer.js.map +0 -1
- package/dist/main/core/tools/builtin/_walk.js +0 -129
- package/dist/main/core/tools/builtin/_walk.js.map +0 -1
- package/dist/main/core/tools/builtin/diff.js +0 -477
- package/dist/main/core/tools/builtin/diff.js.map +0 -1
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
* composer-2.5) refuses to emit createTask/createMilestone as real
|
|
10
10
|
* tool calls.
|
|
11
11
|
*/
|
|
12
|
-
import { spawn } from
|
|
13
|
-
import { existsSync, readFileSync } from
|
|
14
|
-
import { join } from
|
|
15
|
-
import { updateAgentsMd } from
|
|
16
|
-
import { runBuiltinCompleteDesign } from
|
|
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";
|
|
17
17
|
/**
|
|
18
18
|
* v0.7.7 Opzione B / v0.7.8 — Run the deterministic complete-design
|
|
19
19
|
* post-processor if the workspace is in design-phase (`.zelari/plan.json`
|
|
@@ -33,25 +33,34 @@ import { runBuiltinCompleteDesign } from './completeDesign.js';
|
|
|
33
33
|
*
|
|
34
34
|
* Disabled by setting `ZELARI_COMPLETE_DESIGN=0` in the environment.
|
|
35
35
|
*/
|
|
36
|
-
export async function runCompleteDesignPostProcessor(ctx) {
|
|
37
|
-
if (
|
|
38
|
-
return {
|
|
36
|
+
export async function runCompleteDesignPostProcessor(ctx, options) {
|
|
37
|
+
if (options?.runMode === "implementation") {
|
|
38
|
+
return {
|
|
39
|
+
ran: false,
|
|
40
|
+
reason: "implementation mode (complete-design skipped)",
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (process.env["ZELARI_COMPLETE_DESIGN"] === "0") {
|
|
44
|
+
return { ran: false, reason: "ZELARI_COMPLETE_DESIGN=0 (disabled)" };
|
|
39
45
|
}
|
|
40
|
-
const planJsonPath = join(ctx.rootDir,
|
|
41
|
-
const scriptPath = join(ctx.projectRoot,
|
|
46
|
+
const planJsonPath = join(ctx.rootDir, "plan.json");
|
|
47
|
+
const scriptPath = join(ctx.projectRoot, "complete-design.mjs");
|
|
42
48
|
if (!existsSync(planJsonPath)) {
|
|
43
|
-
return {
|
|
49
|
+
return {
|
|
50
|
+
ran: false,
|
|
51
|
+
reason: ".zelari/plan.json missing (not design-phase)",
|
|
52
|
+
};
|
|
44
53
|
}
|
|
45
54
|
let phaseCount = 0;
|
|
46
55
|
try {
|
|
47
|
-
const parsed = JSON.parse(readFileSync(planJsonPath,
|
|
56
|
+
const parsed = JSON.parse(readFileSync(planJsonPath, "utf8"));
|
|
48
57
|
phaseCount = Array.isArray(parsed.phases) ? parsed.phases.length : 0;
|
|
49
58
|
}
|
|
50
59
|
catch {
|
|
51
|
-
return { ran: false, reason:
|
|
60
|
+
return { ran: false, reason: ".zelari/plan.json corrupt" };
|
|
52
61
|
}
|
|
53
62
|
if (phaseCount === 0) {
|
|
54
|
-
return { ran: false, reason:
|
|
63
|
+
return { ran: false, reason: ".zelari/plan.json has no phases" };
|
|
55
64
|
}
|
|
56
65
|
if (!existsSync(scriptPath)) {
|
|
57
66
|
// v0.7.8: no workspace script → run the built-in deterministic
|
|
@@ -77,18 +86,18 @@ export async function runCompleteDesignPostProcessor(ctx) {
|
|
|
77
86
|
return await new Promise((resolveRun) => {
|
|
78
87
|
const child = spawn(process.execPath, [scriptPath], {
|
|
79
88
|
cwd: ctx.projectRoot,
|
|
80
|
-
stdio: [
|
|
89
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
81
90
|
env: process.env,
|
|
82
91
|
});
|
|
83
|
-
let stdout =
|
|
84
|
-
let stderr =
|
|
85
|
-
child.stdout?.on(
|
|
86
|
-
stdout += chunk.toString(
|
|
92
|
+
let stdout = "";
|
|
93
|
+
let stderr = "";
|
|
94
|
+
child.stdout?.on("data", (chunk) => {
|
|
95
|
+
stdout += chunk.toString("utf8");
|
|
87
96
|
});
|
|
88
|
-
child.stderr?.on(
|
|
89
|
-
stderr += chunk.toString(
|
|
97
|
+
child.stderr?.on("data", (chunk) => {
|
|
98
|
+
stderr += chunk.toString("utf8");
|
|
90
99
|
});
|
|
91
|
-
child.on(
|
|
100
|
+
child.on("error", (err) => {
|
|
92
101
|
resolveRun({
|
|
93
102
|
ran: true,
|
|
94
103
|
exitCode: -1,
|
|
@@ -96,14 +105,16 @@ export async function runCompleteDesignPostProcessor(ctx) {
|
|
|
96
105
|
reason: `spawn error: ${err.message}`,
|
|
97
106
|
});
|
|
98
107
|
});
|
|
99
|
-
child.on(
|
|
108
|
+
child.on("close", (code) => {
|
|
100
109
|
const exitCode = code ?? -1;
|
|
101
110
|
const ok = exitCode === 0;
|
|
102
111
|
resolveRun({
|
|
103
112
|
ran: true,
|
|
104
113
|
exitCode,
|
|
105
114
|
output: stdout + stderr,
|
|
106
|
-
...(ok
|
|
115
|
+
...(ok
|
|
116
|
+
? {}
|
|
117
|
+
: { reason: `complete-design exited with code ${exitCode}` }),
|
|
107
118
|
});
|
|
108
119
|
});
|
|
109
120
|
});
|
|
@@ -121,15 +132,15 @@ export async function runCompleteDesignPostProcessor(ctx) {
|
|
|
121
132
|
* Errors from either step are caught and reported in the result — the
|
|
122
133
|
* hook never throws.
|
|
123
134
|
*/
|
|
124
|
-
export async function runPostCouncilHook(ctx) {
|
|
135
|
+
export async function runPostCouncilHook(ctx, options) {
|
|
125
136
|
// ── Step 1: AGENTS.MD maintenance ─────────────────────────────────────
|
|
126
137
|
let agentsMdResult;
|
|
127
|
-
if (process.env[
|
|
138
|
+
if (process.env["ZELARI_AGENTS_MD"] === "0") {
|
|
128
139
|
agentsMdResult = {
|
|
129
140
|
ran: false,
|
|
130
141
|
changed: false,
|
|
131
142
|
sections: [],
|
|
132
|
-
reason:
|
|
143
|
+
reason: "ZELARI_AGENTS_MD=0 (disabled)",
|
|
133
144
|
};
|
|
134
145
|
}
|
|
135
146
|
else {
|
|
@@ -152,7 +163,7 @@ export async function runPostCouncilHook(ctx) {
|
|
|
152
163
|
}
|
|
153
164
|
}
|
|
154
165
|
// ── Step 2: complete-design post-processor ───────────────────────────
|
|
155
|
-
const completeDesign = await runCompleteDesignPostProcessor(ctx);
|
|
166
|
+
const completeDesign = await runCompleteDesignPostProcessor(ctx, options);
|
|
156
167
|
return {
|
|
157
168
|
ran: agentsMdResult.ran || completeDesign.ran,
|
|
158
169
|
changed: agentsMdResult.changed,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postCouncilHook.js","sourceRoot":"","sources":["../../../src/cli/workspace/postCouncilHook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AA6B/D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,GAAqB;
|
|
1
|
+
{"version":3,"file":"postCouncilHook.js","sourceRoot":"","sources":["../../../src/cli/workspace/postCouncilHook.ts"],"names":[],"mappings":"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"}
|