zelari-code 1.6.0 → 1.7.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.
- package/dist/cli/hooks/historyCompaction.js +6 -5
- package/dist/cli/hooks/historyCompaction.js.map +1 -1
- package/dist/cli/hooks/useChatTurn.js +28 -22
- package/dist/cli/hooks/useChatTurn.js.map +1 -1
- package/dist/cli/main.bundled.js +636 -81
- package/dist/cli/main.bundled.js.map +4 -4
- package/dist/cli/runHeadless.js +79 -8
- package/dist/cli/runHeadless.js.map +1 -1
- package/dist/cli/utils/envNumber.js +62 -0
- package/dist/cli/utils/envNumber.js.map +1 -0
- package/dist/cli/utils/prereqChecks.js +96 -26
- package/dist/cli/utils/prereqChecks.js.map +1 -1
- package/package.json +2 -2
package/dist/cli/runHeadless.js
CHANGED
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
import { AgentHarness } from '@zelari/core/harness';
|
|
17
17
|
import { createBuiltinToolRegistry } from './toolRegistry.js';
|
|
18
18
|
import { emitEvent, openaiCompatibleProvider, resolveHeadlessKey, resolveHeadlessProvider, } from './headless.js';
|
|
19
|
+
import { buildSystemPrompt, getAllTools, SINGLE_AGENT_IDENTITY_MODULE, buildLanguagePolicyModuleFor, } from '@zelari/core/skills';
|
|
20
|
+
import { envNumber } from './utils/envNumber.js';
|
|
19
21
|
export async function runHeadless(opts) {
|
|
20
22
|
const { provider, model } = resolveHeadlessProvider(opts);
|
|
21
23
|
const key = await resolveHeadlessKey(provider);
|
|
@@ -42,11 +44,81 @@ async function runHeadlessSingle(opts, provider, model, providerStream) {
|
|
|
42
44
|
description: t.function.description,
|
|
43
45
|
parameters: t.function.parameters,
|
|
44
46
|
}));
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
const toolNames = tools.map((t) => t.name);
|
|
48
|
+
// v1.7.0: route through buildSystemPrompt with SINGLE_AGENT_IDENTITY_MODULE
|
|
49
|
+
// + the language-policy directive so the headless single-mode replies in
|
|
50
|
+
// the user's language. Before this, the prompt was an inline 3-line array
|
|
51
|
+
// missing 7 of 11 behavioral directives (anti-confabulation, act-don't-
|
|
52
|
+
// describe, output self-check, clarification protocol, safety, formatting,
|
|
53
|
+
// tool-usage) AND the response language policy — two regressions in one.
|
|
54
|
+
// The fallback below preserves the pre-1.7 inline behavior for any case
|
|
55
|
+
// where buildSystemPrompt throws (e.g. test context without a populated
|
|
56
|
+
// catalog).
|
|
57
|
+
//
|
|
58
|
+
// v1.7.0 fix (agy audit): build the language module ONCE outside the
|
|
59
|
+
// try/catch so a thrown detection error in `buildLanguagePolicyModuleFor`
|
|
60
|
+
// does not re-throw inside the catch (which would crash the CLI instead
|
|
61
|
+
// of recovering). The module's directive content is wrapped in try/catch
|
|
62
|
+
// too, so even a Unicode edge case degrades to a minimal "reply in
|
|
63
|
+
// Italian" stub.
|
|
64
|
+
let systemPrompt;
|
|
65
|
+
let languageDirectiveContent;
|
|
66
|
+
try {
|
|
67
|
+
languageDirectiveContent = buildLanguagePolicyModuleFor(opts.task).content;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Detection threw (e.g. malformed input). Use a safe stub so the rest
|
|
71
|
+
// of the prompt assembly still proceeds.
|
|
72
|
+
languageDirectiveContent = '# Response Language\nReply in the user\'s language when possible, otherwise Italian.';
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const headlessRole = {
|
|
76
|
+
id: 'single',
|
|
77
|
+
name: 'Zelari Code',
|
|
78
|
+
codename: 'zelari',
|
|
79
|
+
role: 'headless coding agent',
|
|
80
|
+
color: '#00d9a3',
|
|
81
|
+
avatar: '◆',
|
|
82
|
+
tools: toolNames,
|
|
83
|
+
// v1.7.0 fix (agy audit): include platform/shell context in the role
|
|
84
|
+
// prompt so the agent knows its cwd and shell — previously this was
|
|
85
|
+
// empty (systemPrompt: '') and the agent lacked the platform block
|
|
86
|
+
// the TUI single-agent path gets.
|
|
87
|
+
systemPrompt: [
|
|
88
|
+
'# Platform',
|
|
89
|
+
`platform: ${process.platform}`,
|
|
90
|
+
`shell: ${process.platform === 'win32' ? 'cmd.exe / Git Bash (auto-detected)' : '/bin/sh'}`,
|
|
91
|
+
'',
|
|
92
|
+
'# Working Directory',
|
|
93
|
+
`You are running in: ${process.cwd()}`,
|
|
94
|
+
'All relative file paths are resolved against this directory.',
|
|
95
|
+
'The shell is NON-INTERACTIVE (stdin closed): pass non-interactive flags (--yes, --force, --template).',
|
|
96
|
+
].join('\n'),
|
|
97
|
+
};
|
|
98
|
+
systemPrompt = buildSystemPrompt(headlessRole, {
|
|
99
|
+
tools: getAllTools(),
|
|
100
|
+
toolNames,
|
|
101
|
+
aiConfig: {
|
|
102
|
+
enabledSkills: [],
|
|
103
|
+
enabledTools: toolNames,
|
|
104
|
+
customPromptModules: [SINGLE_AGENT_IDENTITY_MODULE, {
|
|
105
|
+
type: 'language-policy',
|
|
106
|
+
title: 'Response Language',
|
|
107
|
+
priority: 5,
|
|
108
|
+
content: languageDirectiveContent,
|
|
109
|
+
}],
|
|
110
|
+
agentSkillConfigs: [],
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
systemPrompt = [
|
|
116
|
+
'You are zelari-code, a CLI coding agent. Be concise and direct.',
|
|
117
|
+
'When the user asks you to write code, debug, or explore, be proactive: list files and read key files to understand the project.',
|
|
118
|
+
'When you finish a task, briefly summarize what you did.',
|
|
119
|
+
languageDirectiveContent,
|
|
120
|
+
].join('\n');
|
|
121
|
+
}
|
|
50
122
|
const harness = new AgentHarness({
|
|
51
123
|
model,
|
|
52
124
|
provider,
|
|
@@ -59,9 +131,8 @@ async function runHeadlessSingle(opts, provider, model, providerStream) {
|
|
|
59
131
|
toolRegistry,
|
|
60
132
|
providerStream,
|
|
61
133
|
maxToolLoopIterations: (() => {
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
return Number.isFinite(n) && n > 0 ? n : 30;
|
|
134
|
+
const n = envNumber(process.env.ZELARI_MAX_TOOL_LOOP_ITERATIONS, { default: 30, min: 1 });
|
|
135
|
+
return n;
|
|
65
136
|
})(),
|
|
66
137
|
});
|
|
67
138
|
let finalReason = 'completed';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runHeadless.js","sourceRoot":"","sources":["../../src/cli/runHeadless.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EACL,SAAS,EACT,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,GAExB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"runHeadless.js","sourceRoot":"","sources":["../../src/cli/runHeadless.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a string from env / user input into a bounded integer.
|
|
3
|
+
*
|
|
4
|
+
* @param raw The raw env-var value (already trimmed by the caller when needed).
|
|
5
|
+
* Empty string and "undefined" / "null" tokens are treated as unset.
|
|
6
|
+
* @param opts See {@link EnvNumberOptions}.
|
|
7
|
+
*/
|
|
8
|
+
export function envNumber(raw, opts) {
|
|
9
|
+
const { default: def, min, max } = opts;
|
|
10
|
+
if (raw === undefined || raw === null)
|
|
11
|
+
return def;
|
|
12
|
+
const trimmed = raw.trim();
|
|
13
|
+
if (trimmed.length === 0)
|
|
14
|
+
return def;
|
|
15
|
+
// Defensive: some env vars accidentally end up as the literal string
|
|
16
|
+
// "undefined" / "null" when JSON.stringify(undefined) leaks in. Treat
|
|
17
|
+
// those as unset too.
|
|
18
|
+
if (trimmed.toLowerCase() === 'undefined' || trimmed.toLowerCase() === 'null')
|
|
19
|
+
return def;
|
|
20
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
21
|
+
// parseInt with non-numeric trailing chars (e.g. "30x") silently returns
|
|
22
|
+
// the prefix. Reject anything that doesn't fully parse. The validation:
|
|
23
|
+
//
|
|
24
|
+
// 1. Must be finite (NaN, Infinity rejected).
|
|
25
|
+
// 2. The integer part of the input must round-trip to the same magnitude.
|
|
26
|
+
//
|
|
27
|
+
// We intentionally ACCEPT these input forms:
|
|
28
|
+
// - Leading `+` sign: "+30" → 30 (some shell scripts emit this)
|
|
29
|
+
// - Leading zeros: "0030" → 30 (octal-style, harmless in decimal parseInt)
|
|
30
|
+
// - Negative sign: "-30" → -30
|
|
31
|
+
//
|
|
32
|
+
// We intentionally REJECT:
|
|
33
|
+
// - Trailing junk: "30x" (parseInt returns 30 but the input was malformed)
|
|
34
|
+
// - Unicode minus: "−30" (U+2212, NOT ASCII U+002D; parseInt sees NaN)
|
|
35
|
+
// - Floats: "30.5" (truncating to 30 silently is the bug we're avoiding)
|
|
36
|
+
//
|
|
37
|
+
// Strategy: strip an optional sign, strip leading zeros, then compare the
|
|
38
|
+
// round-trip. If the input was a negative number, the parsed result must
|
|
39
|
+
// round-trip back to the same magnitude (without the sign) — and we check
|
|
40
|
+
// the sign explicitly.
|
|
41
|
+
if (!Number.isFinite(parsed))
|
|
42
|
+
return def;
|
|
43
|
+
const absStr = `${Math.abs(parsed)}`;
|
|
44
|
+
const body = trimmed.replace(/^[-+]/, '').replace(/^0+(?=\d)/, '');
|
|
45
|
+
if (body !== absStr)
|
|
46
|
+
return def;
|
|
47
|
+
// Sign sanity: input must start with `-` (negative) or `+`/digit (non-negative).
|
|
48
|
+
// Catches inputs like "--30" (double-negative) which parseInt would interpret
|
|
49
|
+
// as 30 but the syntax is bogus.
|
|
50
|
+
const firstChar = trimmed[0];
|
|
51
|
+
const expectedSign = parsed < 0 ? '-' : /[0-9+]/.test(firstChar ?? '');
|
|
52
|
+
const actualSign = parsed < 0 ? firstChar === '-' : firstChar !== '-';
|
|
53
|
+
if (!expectedSign || !actualSign)
|
|
54
|
+
return def;
|
|
55
|
+
let clamped = parsed;
|
|
56
|
+
if (min !== undefined && clamped < min)
|
|
57
|
+
clamped = min;
|
|
58
|
+
if (max !== undefined && clamped > max)
|
|
59
|
+
clamped = max;
|
|
60
|
+
return clamped;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=envNumber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envNumber.js","sourceRoot":"","sources":["../../../src/cli/utils/envNumber.ts"],"names":[],"mappings":"AAoCA;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,GAA8B,EAAE,IAAsB;IAC9E,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACxC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAClD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACrC,qEAAqE;IACrE,sEAAsE;IACtE,sBAAsB;IACtB,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM;QAAE,OAAO,GAAG,CAAC;IAE1F,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5C,yEAAyE;IACzE,wEAAwE;IACxE,EAAE;IACF,gDAAgD;IAChD,4EAA4E;IAC5E,EAAE;IACF,6CAA6C;IAC7C,qEAAqE;IACrE,kFAAkF;IAClF,sCAAsC;IACtC,EAAE;IACF,2BAA2B;IAC3B,kFAAkF;IAClF,8EAA8E;IAC9E,sFAAsF;IACtF,EAAE;IACF,0EAA0E;IAC1E,yEAAyE;IACzE,0EAA0E;IAC1E,uBAAuB;IACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,CAAC;IACzC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACnE,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,GAAG,CAAC;IAChC,iFAAiF;IACjF,8EAA8E;IAC9E,iCAAiC;IACjC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC;IACtE,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU;QAAE,OAAO,GAAG,CAAC;IAE7C,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,GAAG;QAAE,OAAO,GAAG,GAAG,CAAC;IACtD,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,GAAG;QAAE,OAAO,GAAG,GAAG,CAAC;IACtD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
*/
|
|
36
36
|
import { execSync, spawnSync } from "node:child_process";
|
|
37
37
|
import { existsSync } from "node:fs";
|
|
38
|
+
import { dirname } from "node:path";
|
|
38
39
|
/** Minimum Node major version (mirrors `engines.node` ">=20.0.0" in package.json). */
|
|
39
40
|
const MIN_NODE_MAJOR = 20;
|
|
40
41
|
/** Standard Git for Windows bash locations (mirrors shellResolver.STANDARD_BASH_PATHS). */
|
|
@@ -44,16 +45,45 @@ const STANDARD_BASH_PATHS = [
|
|
|
44
45
|
"C:\\Program Files (x86)\\Git\\bin\\bash.exe",
|
|
45
46
|
"C:\\Program Files (x86)\\Git\\usr\\bin\\bash.exe",
|
|
46
47
|
];
|
|
48
|
+
/**
|
|
49
|
+
* True when `p` is the WSL bash launcher, not Git Bash.
|
|
50
|
+
* Must stay in lockstep with `shellResolver.isWslBashPath`.
|
|
51
|
+
*
|
|
52
|
+
* @see packages/core/src/core/tools/builtin/shellResolver.ts
|
|
53
|
+
*/
|
|
54
|
+
export function isWslBashPath(p) {
|
|
55
|
+
if (!p || typeof p !== "string")
|
|
56
|
+
return false;
|
|
57
|
+
const n = p.replace(/\//g, "\\").toLowerCase();
|
|
58
|
+
if (n.includes("\\windows\\system32\\bash.exe"))
|
|
59
|
+
return true;
|
|
60
|
+
if (n.includes("\\windows\\syswow64\\bash.exe"))
|
|
61
|
+
return true;
|
|
62
|
+
if (n.includes("\\windowsapps\\bash.exe"))
|
|
63
|
+
return true;
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
/** Accept only a real (non-WSL) bash path that exists on disk. */
|
|
67
|
+
function acceptBashPath(p) {
|
|
68
|
+
if (!p || p.trim().length === 0)
|
|
69
|
+
return null;
|
|
70
|
+
const trimmed = p.trim();
|
|
71
|
+
if (isWslBashPath(trimmed))
|
|
72
|
+
return null;
|
|
73
|
+
if (!existsSyncSafe(trimmed))
|
|
74
|
+
return null;
|
|
75
|
+
return trimmed;
|
|
76
|
+
}
|
|
47
77
|
/**
|
|
48
78
|
* Resolve the shell the agent will use — SYNC version of `resolveShell()`.
|
|
49
79
|
*
|
|
50
80
|
* Replicated (not imported) so this module has no runtime dependency on
|
|
51
81
|
* @zelari/core. The detection order MUST stay in lockstep with
|
|
52
82
|
* `packages/core/src/core/tools/builtin/shellResolver.ts:resolveBashWindows`:
|
|
53
|
-
* 1. ZELARI_SHELL env var (explicit override)
|
|
54
|
-
* 2. SHELL env var (set by Git Bash / MSYS2 sessions)
|
|
83
|
+
* 1. ZELARI_SHELL env var (explicit override; WSL rejected)
|
|
84
|
+
* 2. SHELL env var (set by Git Bash / MSYS2 sessions; WSL rejected)
|
|
55
85
|
* 3. Standard Git for Windows install paths (existsSync probe)
|
|
56
|
-
* 4. `where bash` (PATH lookup)
|
|
86
|
+
* 4. `where bash` (PATH lookup; skip WSL launchers)
|
|
57
87
|
* 5. Fallback: cmd.exe on win32, /bin/sh on POSIX
|
|
58
88
|
*/
|
|
59
89
|
function resolveAgentShellSync() {
|
|
@@ -62,40 +92,43 @@ function resolveAgentShellSync() {
|
|
|
62
92
|
return { bashPath: null, isBash: true, via: "/bin/sh" };
|
|
63
93
|
}
|
|
64
94
|
// 1. Explicit override.
|
|
65
|
-
const
|
|
66
|
-
if (
|
|
67
|
-
return { bashPath:
|
|
95
|
+
const fromEnv = acceptBashPath(process.env.ZELARI_SHELL);
|
|
96
|
+
if (fromEnv) {
|
|
97
|
+
return { bashPath: fromEnv, isBash: true, via: `bash (${fromEnv})` };
|
|
68
98
|
}
|
|
69
99
|
// 2. SHELL env var (Git Bash / MSYS2 sessions).
|
|
70
|
-
const
|
|
71
|
-
if (
|
|
72
|
-
sessionShell.trim().length > 0 &&
|
|
73
|
-
existsSyncSafe(sessionShell)) {
|
|
100
|
+
const fromSession = acceptBashPath(process.env.SHELL);
|
|
101
|
+
if (fromSession) {
|
|
74
102
|
return {
|
|
75
|
-
bashPath:
|
|
103
|
+
bashPath: fromSession,
|
|
76
104
|
isBash: true,
|
|
77
|
-
via: `bash (${
|
|
105
|
+
via: `bash (${fromSession})`,
|
|
78
106
|
};
|
|
79
107
|
}
|
|
80
108
|
// 3. Standard install paths.
|
|
81
109
|
for (const p of STANDARD_BASH_PATHS) {
|
|
82
|
-
|
|
83
|
-
|
|
110
|
+
const accepted = acceptBashPath(p);
|
|
111
|
+
if (accepted) {
|
|
112
|
+
return { bashPath: accepted, isBash: true, via: `bash (${accepted})` };
|
|
84
113
|
}
|
|
85
114
|
}
|
|
86
115
|
// 4. `where bash` — PATH lookup. `where` ships with Windows as a real .exe.
|
|
116
|
+
// Skip WSL launchers (System32/WindowsApps); prefer a later non-WSL hit.
|
|
87
117
|
try {
|
|
88
118
|
const result = spawnSync("where", ["bash"], {
|
|
89
119
|
encoding: "utf8",
|
|
90
120
|
windowsHide: true,
|
|
91
121
|
});
|
|
92
122
|
if (result.status === 0 && result.stdout) {
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
123
|
+
for (const line of result.stdout.split(/\r?\n/)) {
|
|
124
|
+
const accepted = acceptBashPath(line);
|
|
125
|
+
if (accepted) {
|
|
126
|
+
return {
|
|
127
|
+
bashPath: accepted,
|
|
128
|
+
isBash: true,
|
|
129
|
+
via: `bash (${accepted})`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
99
132
|
}
|
|
100
133
|
}
|
|
101
134
|
}
|
|
@@ -105,6 +138,30 @@ function resolveAgentShellSync() {
|
|
|
105
138
|
// 5. Fallback: cmd.exe. POSIX commands (ls, which, $VAR) may fail here.
|
|
106
139
|
return { bashPath: null, isBash: false, via: "cmd.exe" };
|
|
107
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Env for agent-shell probes/spawns: ensure the directory that hosts the
|
|
143
|
+
* running node binary is on PATH (covers "user-only Node install" when the
|
|
144
|
+
* main process already found node via a richer PATH than Git Bash inherits).
|
|
145
|
+
*/
|
|
146
|
+
function agentProbeEnv() {
|
|
147
|
+
const env = { ...process.env };
|
|
148
|
+
try {
|
|
149
|
+
const nodeDir = dirname(process.execPath);
|
|
150
|
+
if (!nodeDir)
|
|
151
|
+
return env;
|
|
152
|
+
const sep = process.platform === "win32" ? ";" : ":";
|
|
153
|
+
const current = env.PATH ?? env.Path ?? "";
|
|
154
|
+
const parts = current.split(sep).filter((p) => p.length > 0);
|
|
155
|
+
const has = parts.some((p) => p.toLowerCase() === nodeDir.toLowerCase());
|
|
156
|
+
if (!has) {
|
|
157
|
+
env.PATH = `${nodeDir}${sep}${current}`;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// ignore — best-effort
|
|
162
|
+
}
|
|
163
|
+
return env;
|
|
164
|
+
}
|
|
108
165
|
/** existsSync that swallows edge-case errors (invalid chars on win32, etc.). */
|
|
109
166
|
function existsSyncSafe(p) {
|
|
110
167
|
try {
|
|
@@ -123,16 +180,18 @@ function existsSyncSafe(p) {
|
|
|
123
180
|
function probeTool(tool) {
|
|
124
181
|
const shell = resolveAgentShellSync();
|
|
125
182
|
let stdout = "";
|
|
183
|
+
const env = agentProbeEnv();
|
|
126
184
|
if (shell.bashPath) {
|
|
127
185
|
// Real bash (win32 Git Bash or explicit ZELARI_SHELL): spawn directly
|
|
128
186
|
// with `-c` so we get the EXACT environment the agent's `bash` tool
|
|
129
187
|
// gets — this is what catches the "node visible to main, invisible to
|
|
130
|
-
// bash" mismatch.
|
|
188
|
+
// bash" mismatch. PATH is enriched with dirname(process.execPath).
|
|
131
189
|
try {
|
|
132
190
|
const r = spawnSync(shell.bashPath, ["-c", `${tool} --version`], {
|
|
133
191
|
encoding: "utf8",
|
|
134
192
|
stdio: ["ignore", "pipe", "ignore"],
|
|
135
193
|
windowsHide: true,
|
|
194
|
+
env,
|
|
136
195
|
});
|
|
137
196
|
if (r.status === 0)
|
|
138
197
|
stdout = (r.stdout || "").trim();
|
|
@@ -143,11 +202,12 @@ function probeTool(tool) {
|
|
|
143
202
|
}
|
|
144
203
|
}
|
|
145
204
|
else if (process.platform === "win32") {
|
|
146
|
-
// cmd.exe fallback (no Git Bash found).
|
|
205
|
+
// cmd.exe fallback (no Git Bash found / WSL-only). shell:true → cmd.exe.
|
|
147
206
|
try {
|
|
148
207
|
stdout = execSync(`${tool} --version`, {
|
|
149
208
|
encoding: "utf8",
|
|
150
209
|
stdio: ["ignore", "pipe", "ignore"],
|
|
210
|
+
env,
|
|
151
211
|
}).trim();
|
|
152
212
|
}
|
|
153
213
|
catch {
|
|
@@ -160,6 +220,7 @@ function probeTool(tool) {
|
|
|
160
220
|
stdout = execSync(`${tool} --version`, {
|
|
161
221
|
encoding: "utf8",
|
|
162
222
|
stdio: ["ignore", "pipe", "ignore"],
|
|
223
|
+
env,
|
|
163
224
|
}).trim();
|
|
164
225
|
}
|
|
165
226
|
catch {
|
|
@@ -181,14 +242,23 @@ function probeTool(tool) {
|
|
|
181
242
|
function nodeMissingHint() {
|
|
182
243
|
const shell = resolveAgentShellSync();
|
|
183
244
|
if (process.platform === "win32") {
|
|
245
|
+
if (!shell.isBash) {
|
|
246
|
+
// cmd.exe fallback still can't see node → genuine missing/broken PATH.
|
|
247
|
+
return (`node is not reachable from the agent's shell (${shell.via}).\n` +
|
|
248
|
+
` Install Node >= ${MIN_NODE_MAJOR} (https://nodejs.org) and ensure it is\n` +
|
|
249
|
+
` on PATH, then open a NEW terminal. Optional: install Git for\n` +
|
|
250
|
+
` Windows so the agent can use real bash (https://git-scm.com/download/win).`);
|
|
251
|
+
}
|
|
252
|
+
// Real Git Bash (or ZELARI_SHELL) selected but node missing inside it.
|
|
184
253
|
return (`node is not reachable from the agent's shell (${shell.via}).\n` +
|
|
185
254
|
` This usually means Node was installed for "current user" only,\n` +
|
|
186
|
-
` while Git Bash
|
|
255
|
+
` while Git Bash sees a different Path. Fix (pick one):\n` +
|
|
187
256
|
` - Reinstall Node (https://nodejs.org) and choose\n` +
|
|
188
257
|
` "Add to PATH for all users", OR\n` +
|
|
189
|
-
` - Add
|
|
190
|
-
`
|
|
191
|
-
`
|
|
258
|
+
` - Add your nodejs folder to the User or System Path, OR\n` +
|
|
259
|
+
` - Set ZELARI_SHELL to a bash that already sees node.\n` +
|
|
260
|
+
` Note: WSL's C:\\Windows\\System32\\bash.exe is NOT a valid agent\n` +
|
|
261
|
+
` shell — install Git for Windows instead.`);
|
|
192
262
|
}
|
|
193
263
|
return (`node is not on the agent's shell PATH.\n` +
|
|
194
264
|
` Install Node >= ${MIN_NODE_MAJOR} (https://nodejs.org) or, if you use\n` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prereqChecks.js","sourceRoot":"","sources":["../../../src/cli/utils/prereqChecks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"prereqChecks.js","sourceRoot":"","sources":["../../../src/cli/utils/prereqChecks.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.
|
|
3
|
+
"version": "1.7.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",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@testing-library/react": "^16.3.2",
|
|
50
|
-
"@zelari/core": "1.
|
|
50
|
+
"@zelari/core": "1.7.1",
|
|
51
51
|
"@types/node": "^25.3.0",
|
|
52
52
|
"@types/react": "^19.0.10",
|
|
53
53
|
"esbuild": "^0.25.0",
|