zelari-code 1.0.1 → 1.0.3

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/main.js CHANGED
@@ -3,20 +3,29 @@
3
3
  * zelari-code — CLI coding agent on top of AnathemaBrain.
4
4
  * Phase 14 Task 14.3 + 14.4: multi-panel TUI + slash command wiring.
5
5
  */
6
- import React from 'react';
7
- import { render } from 'ink';
6
+ import React from "react";
7
+ import { render } from "ink";
8
8
  // @ts-ignore
9
- import { App } from './app.js';
10
- import { SplashGate } from './components/SplashScreen.js';
11
- import { getMetricsLogger } from './metrics.js';
12
- import { getProviderConfigPath } from './providerConfig.js';
13
- import { parseWizardFlags, shouldRunWizard, } from './wizard/firstRun.js';
14
- import { RunWizard } from './wizard/runWizard.js';
15
- import { parseHeadlessFlags } from './headless.js';
16
- import { runHeadless } from './runHeadless.js';
17
- import { loadSkillMdSkills } from './skillsMd.js';
18
- import { listCodingSkills } from '@zelari/core/skills';
19
- export const VERSION = '1.0.0';
9
+ import { App } from "./app.js";
10
+ import { SplashGate } from "./components/SplashScreen.js";
11
+ import { getMetricsLogger } from "./metrics.js";
12
+ import { getProviderConfigPath } from "./providerConfig.js";
13
+ import { parseWizardFlags, shouldRunWizard } from "./wizard/firstRun.js";
14
+ import { RunWizard } from "./wizard/runWizard.js";
15
+ import { parseHeadlessFlags } from "./headless.js";
16
+ import { runHeadless } from "./runHeadless.js";
17
+ import { loadSkillMdSkills } from "./skillsMd.js";
18
+ import { listCodingSkills } from "@zelari/core/skills";
19
+ import { getCurrentVersion } from "./updater.js";
20
+ /**
21
+ * Bundled CLI version. Derived from <pkg>/package.json at runtime so it
22
+ * stays in sync with `npm publish` / self-update checks (which also read
23
+ * package.json via `getCurrentVersion`). Previously hardcoded — that
24
+ * caused `--version` to show 1.0.0 after a 1.0.1 publish and confused
25
+ * `/update` (registry's "latest" was 1.0.1, current was 1.0.0 → update
26
+ * offered, then reinstalled 1.0.1 → no change apparent).
27
+ */
28
+ export const VERSION = getCurrentVersion();
20
29
  /**
21
30
  * Silent background update check (Task N.6, v3-N).
22
31
  *
@@ -28,11 +37,11 @@ export const VERSION = '1.0.0';
28
37
  * development where the bundled version is the source repo.
29
38
  */
30
39
  async function backgroundUpdateCheck() {
31
- if (process.env.ANATHEMA_DEV === '1')
40
+ if (process.env.ANATHEMA_DEV === "1")
32
41
  return;
33
42
  await new Promise((resolve) => setTimeout(resolve, 3000));
34
43
  try {
35
- const { checkForUpdate } = await import('./updater.js');
44
+ const { checkForUpdate } = await import("./updater.js");
36
45
  const info = await checkForUpdate();
37
46
  if (info.updateAvailable && !info.error) {
38
47
  // eslint-disable-next-line no-console
@@ -60,7 +69,7 @@ async function shutdown() {
60
69
  }
61
70
  try {
62
71
  // v0.7.5: kill spawned MCP server processes so they don't outlive the CLI.
63
- const { closeMcpClients } = await import('./mcp/mcpManager.js');
72
+ const { closeMcpClients } = await import("./mcp/mcpManager.js");
64
73
  closeMcpClients();
65
74
  }
66
75
  catch {
@@ -83,32 +92,42 @@ async function shutdown() {
83
92
  */
84
93
  function pickRootComponent() {
85
94
  const argv = process.argv.slice(2);
86
- if (argv.includes('--version') || argv.includes('-v')) {
95
+ if (argv.includes("--version") || argv.includes("-v")) {
87
96
  // eslint-disable-next-line no-console
88
97
  console.log(`zelari-code v${VERSION}`);
89
98
  process.exit(0);
90
99
  }
91
- if (argv.includes('--help') || argv.includes('-h')) {
100
+ if (argv.includes("--doctor") || argv.includes("doctor")) {
101
+ // v1.0.3: install-health diagnostic. Runs BEFORE the bundle is loaded
102
+ // and before any provider / config work, so it works on a broken
103
+ // install (missing bundle, missing shim, wrong PATH, etc.).
104
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
105
+ const { runDoctor } = require("./utils/doctor.js");
106
+ const healthy = runDoctor();
107
+ process.exit(healthy ? 0 : 1);
108
+ }
109
+ if (argv.includes("--help") || argv.includes("-h")) {
92
110
  // eslint-disable-next-line no-console
93
- console.log('zelari-code — AI Council coding agent CLI.\n' +
94
- '\n' +
95
- 'Usage: zelari-code [options]\n' +
96
- '\n' +
97
- 'Options:\n' +
98
- ' --version, -v Print version and exit\n' +
99
- ' --help, -h Print this help and exit\n' +
100
- ' --no-wizard Skip the first-run wizard\n' +
101
- ' --reset-config Re-run the wizard (clears provider.json on commit)\n' +
102
- ' --headless Run a single task without mounting the TUI\n' +
103
- ' --task <text> Task prompt (required in headless mode)\n' +
104
- ' --output json|plain Output format (default: json)\n' +
105
- ' --council Use the 6-member council pipeline\n' +
106
- ' --provider <id> Provider override (default: active)\n' +
107
- ' --model <id> Model override (default: provider default)\n' +
108
- '\n' +
109
- 'Environment:\n' +
110
- ' ZELARI_NO_WIZARD=1 Skip the first-run wizard\n' +
111
- ' ANATHEMA_DEV=1 Disable background update check\n');
111
+ console.log("zelari-code — AI Council coding agent CLI.\n" +
112
+ "\n" +
113
+ "Usage: zelari-code [options]\n" +
114
+ "\n" +
115
+ "Options:\n" +
116
+ " --version, -v Print version and exit\n" +
117
+ " --help, -h Print this help and exit\n" +
118
+ " --doctor Diagnose install health (shim, bundle, PATH, deps)\n" +
119
+ " --no-wizard Skip the first-run wizard\n" +
120
+ " --reset-config Re-run the wizard (clears provider.json on commit)\n" +
121
+ " --headless Run a single task without mounting the TUI\n" +
122
+ " --task <text> Task prompt (required in headless mode)\n" +
123
+ " --output json|plain Output format (default: json)\n" +
124
+ " --council Use the 6-member council pipeline\n" +
125
+ " --provider <id> Provider override (default: active)\n" +
126
+ " --model <id> Model override (default: provider default)\n" +
127
+ "\n" +
128
+ "Environment:\n" +
129
+ " ZELARI_NO_WIZARD=1 Skip the first-run wizard\n" +
130
+ " ANATHEMA_DEV=1 Disable background update check\n");
112
131
  process.exit(0);
113
132
  }
114
133
  // Headless mode: short-circuit TUI entirely. Must be checked BEFORE
@@ -116,7 +135,7 @@ function pickRootComponent() {
116
135
  // install (no provider.json yet) by passing --provider + env var.
117
136
  const headlessParse = parseHeadlessFlags(argv);
118
137
  if (headlessParse.options !== null) {
119
- return { kind: 'headless', headlessOpts: headlessParse.options };
138
+ return { kind: "headless", headlessOpts: headlessParse.options };
120
139
  }
121
140
  if (headlessParse.error !== undefined) {
122
141
  // eslint-disable-next-line no-console
@@ -133,13 +152,13 @@ function pickRootComponent() {
133
152
  if (decision.shouldRun) {
134
153
  // eslint-disable-next-line no-console
135
154
  console.error(`[zelari-code] starting wizard: ${decision.reason}`);
136
- return { kind: 'wizard', element: React.createElement(RunWizard) };
155
+ return { kind: "wizard", element: React.createElement(RunWizard) };
137
156
  }
138
157
  // v0.7.8: one-shot startup splash (ASCII emblem, ~2s or any-key skip),
139
158
  // then the App mounts. Skipped automatically for non-TTY stdout, small
140
159
  // terminals, or ZELARI_NO_SPLASH=1 — see components/SplashScreen.tsx.
141
160
  return {
142
- kind: 'app',
161
+ kind: "app",
143
162
  element: React.createElement(SplashGate, { version: VERSION }, React.createElement(App)),
144
163
  };
145
164
  }
@@ -155,7 +174,7 @@ function loadUserSkills() {
155
174
  const summary = loadSkillMdSkills(process.cwd(), { existingIds: existing });
156
175
  if (summary.loaded.length > 0) {
157
176
  // eslint-disable-next-line no-console
158
- console.error(`[zelari-code] loaded ${summary.loaded.length} SKILL.md skill(s): ${summary.loaded.join(', ')}`);
177
+ console.error(`[zelari-code] loaded ${summary.loaded.length} SKILL.md skill(s): ${summary.loaded.join(", ")}`);
159
178
  }
160
179
  for (const s of summary.skipped) {
161
180
  // eslint-disable-next-line no-console
@@ -168,22 +187,24 @@ function loadUserSkills() {
168
187
  }
169
188
  function main() {
170
189
  const picked = pickRootComponent();
171
- if (picked.kind === 'done')
190
+ if (picked.kind === "done")
172
191
  return; // --version or --help printed + exited
173
192
  loadUserSkills();
174
- if (picked.kind === 'headless') {
193
+ if (picked.kind === "headless") {
175
194
  void runHeadless(picked.headlessOpts).then((code) => {
176
- void getMetricsLogger().flush().catch(() => { });
195
+ void getMetricsLogger()
196
+ .flush()
197
+ .catch(() => { });
177
198
  process.exit(code);
178
199
  });
179
200
  return;
180
201
  }
181
202
  const { waitUntilExit, unmount } = render(picked.element);
182
- process.on('SIGINT', () => {
203
+ process.on("SIGINT", () => {
183
204
  unmount();
184
205
  void shutdown();
185
206
  });
186
- process.on('SIGTERM', () => {
207
+ process.on("SIGTERM", () => {
187
208
  unmount();
188
209
  void shutdown();
189
210
  });
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
@@ -11,18 +11,19 @@
11
11
  *
12
12
  * @see https://modelcontextprotocol.io/specification (stdio transport)
13
13
  */
14
- import { spawn } from 'node:child_process';
15
- import { buildCmdLine } from '../utils/cmdline.js';
14
+ import { spawn } from "node:child_process";
15
+ import { buildCmdLine } from "../utils/cmdline.js";
16
+ import { getCurrentVersion } from "../updater.js";
16
17
  const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
17
18
  const INIT_TIMEOUT_MS = 15_000;
18
- export const MCP_PROTOCOL_VERSION = '2025-03-26';
19
+ export const MCP_PROTOCOL_VERSION = "2025-03-26";
19
20
  export class McpClient {
20
21
  serverName;
21
22
  config;
22
23
  child = null;
23
24
  nextId = 1;
24
25
  pending = new Map();
25
- stdoutBuffer = '';
26
+ stdoutBuffer = "";
26
27
  closed = false;
27
28
  constructor(serverName, config) {
28
29
  this.serverName = serverName;
@@ -33,7 +34,7 @@ export class McpClient {
33
34
  if (this.child)
34
35
  return;
35
36
  const spawnOpts = {
36
- stdio: ['pipe', 'pipe', 'pipe'],
37
+ stdio: ["pipe", "pipe", "pipe"],
37
38
  env: { ...process.env, ...(this.config.env ?? {}) },
38
39
  windowsHide: true,
39
40
  };
@@ -41,37 +42,37 @@ export class McpClient {
41
42
  // execute, so a shell is required — but passing an args ARRAY together
42
43
  // with shell:true is deprecated (DEP0190: args concatenated unescaped).
43
44
  // Build the command line ourselves with explicit quoting instead.
44
- const child = (process.platform === 'win32'
45
+ const child = (process.platform === "win32"
45
46
  ? spawn(buildCmdLine(this.config.command, this.config.args ?? []), {
46
47
  ...spawnOpts,
47
48
  shell: true,
48
49
  })
49
50
  : spawn(this.config.command, this.config.args ?? [], spawnOpts));
50
51
  this.child = child;
51
- child.stdout.setEncoding('utf8');
52
- child.stdout.on('data', (chunk) => this.onStdout(chunk));
53
- child.on('error', (err) => this.failAll(new Error(`[mcp:${this.serverName}] spawn failed: ${err.message}`)));
54
- child.on('exit', (code) => {
52
+ child.stdout.setEncoding("utf8");
53
+ child.stdout.on("data", (chunk) => this.onStdout(chunk));
54
+ child.on("error", (err) => this.failAll(new Error(`[mcp:${this.serverName}] spawn failed: ${err.message}`)));
55
+ child.on("exit", (code) => {
55
56
  if (!this.closed) {
56
- this.failAll(new Error(`[mcp:${this.serverName}] server exited (code ${code ?? 'null'})`));
57
+ this.failAll(new Error(`[mcp:${this.serverName}] server exited (code ${code ?? "null"})`));
57
58
  }
58
59
  });
59
- await this.request('initialize', {
60
+ await this.request("initialize", {
60
61
  protocolVersion: MCP_PROTOCOL_VERSION,
61
62
  capabilities: {},
62
- clientInfo: { name: 'zelari-code', version: '0.7.9' },
63
+ clientInfo: { name: "zelari-code", version: getCurrentVersion() },
63
64
  }, INIT_TIMEOUT_MS);
64
- this.notify('notifications/initialized', {});
65
+ this.notify("notifications/initialized", {});
65
66
  }
66
67
  /** Discover the server's tools. */
67
68
  async listTools() {
68
- const res = (await this.request('tools/list', {}));
69
+ const res = (await this.request("tools/list", {}));
69
70
  return (res.tools ?? [])
70
71
  .filter((t) => !!t.name)
71
72
  .map((t) => ({
72
73
  name: t.name,
73
- description: t.description ?? '',
74
- inputSchema: t.inputSchema ?? { type: 'object', properties: {} },
74
+ description: t.description ?? "",
75
+ inputSchema: t.inputSchema ?? { type: "object", properties: {} },
75
76
  }));
76
77
  }
77
78
  /**
@@ -79,10 +80,12 @@ export class McpClient {
79
80
  * items are summarized by type. Throws when the server flags isError.
80
81
  */
81
82
  async callTool(name, args, timeoutMs = DEFAULT_REQUEST_TIMEOUT_MS) {
82
- const res = (await this.request('tools/call', { name, arguments: args }, timeoutMs));
83
+ const res = (await this.request("tools/call", { name, arguments: args }, timeoutMs));
83
84
  const text = (res.content ?? [])
84
- .map((c) => (c.type === 'text' && typeof c.text === 'string' ? c.text : `[${c.type ?? 'unknown'} content]`))
85
- .join('\n');
85
+ .map((c) => c.type === "text" && typeof c.text === "string"
86
+ ? c.text
87
+ : `[${c.type ?? "unknown"} content]`)
88
+ .join("\n");
86
89
  if (res.isError)
87
90
  throw new Error(text || `tool "${name}" reported an error`);
88
91
  return text;
@@ -100,14 +103,14 @@ export class McpClient {
100
103
  if (!child)
101
104
  return Promise.reject(new Error(`[mcp:${this.serverName}] not started`));
102
105
  const id = this.nextId++;
103
- const payload = JSON.stringify({ jsonrpc: '2.0', id, method, params });
106
+ const payload = JSON.stringify({ jsonrpc: "2.0", id, method, params });
104
107
  return new Promise((resolve, reject) => {
105
108
  const timer = setTimeout(() => {
106
109
  this.pending.delete(id);
107
110
  reject(new Error(`[mcp:${this.serverName}] ${method} timed out after ${timeoutMs}ms`));
108
111
  }, timeoutMs);
109
112
  this.pending.set(id, { resolve, reject, timer });
110
- child.stdin.write(payload + '\n', (err) => {
113
+ child.stdin.write(payload + "\n", (err) => {
111
114
  if (err) {
112
115
  clearTimeout(timer);
113
116
  this.pending.delete(id);
@@ -117,12 +120,12 @@ export class McpClient {
117
120
  });
118
121
  }
119
122
  notify(method, params) {
120
- this.child?.stdin.write(JSON.stringify({ jsonrpc: '2.0', method, params }) + '\n');
123
+ this.child?.stdin.write(JSON.stringify({ jsonrpc: "2.0", method, params }) + "\n");
121
124
  }
122
125
  onStdout(chunk) {
123
126
  this.stdoutBuffer += chunk;
124
127
  let nl;
125
- while ((nl = this.stdoutBuffer.indexOf('\n')) >= 0) {
128
+ while ((nl = this.stdoutBuffer.indexOf("\n")) >= 0) {
126
129
  const line = this.stdoutBuffer.slice(0, nl).trim();
127
130
  this.stdoutBuffer = this.stdoutBuffer.slice(nl + 1);
128
131
  if (!line)
@@ -134,7 +137,7 @@ export class McpClient {
134
137
  catch {
135
138
  continue; // servers sometimes log garbage to stdout — ignore non-JSON
136
139
  }
137
- if (typeof msg.id !== 'number')
140
+ if (typeof msg.id !== "number")
138
141
  continue; // notification from server — none handled yet
139
142
  const pending = this.pending.get(msg.id);
140
143
  if (!pending)
@@ -142,7 +145,7 @@ export class McpClient {
142
145
  this.pending.delete(msg.id);
143
146
  clearTimeout(pending.timer);
144
147
  if (msg.error) {
145
- pending.reject(new Error(`[mcp:${this.serverName}] ${msg.error.message ?? 'JSON-RPC error'} (code ${msg.error.code ?? '?'})`));
148
+ pending.reject(new Error(`[mcp:${this.serverName}] ${msg.error.message ?? "JSON-RPC error"} (code ${msg.error.code ?? "?"})`));
146
149
  }
147
150
  else {
148
151
  pending.resolve(msg.result);
@@ -1 +1 @@
1
- {"version":3,"file":"mcpClient.js","sourceRoot":"","sources":["../../../src/cli/mcp/mcpClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcpClient.js","sourceRoot":"","sources":["../../../src/cli/mcp/mcpClient.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { appendSystem } from '../hooks/messageHelpers.js';
1
+ import { appendSystem } from "../hooks/messageHelpers.js";
2
2
  export async function handleUpdateCheck(ctx) {
3
3
  try {
4
- const { checkForUpdate } = await import('../updater.js');
4
+ const { checkForUpdate } = await import("../updater.js");
5
5
  const info = await checkForUpdate();
6
6
  if (info.error) {
7
7
  appendSystem(ctx.setMessages, `[update] check failed: ${info.error}`);
@@ -19,9 +19,9 @@ export async function handleUpdateCheck(ctx) {
19
19
  }
20
20
  }
21
21
  export async function handleUpdatePerform(ctx) {
22
- appendSystem(ctx.setMessages, '[update] running `npm install -g zelari-code@latest`...');
22
+ appendSystem(ctx.setMessages, "[update] running `npm install -g zelari-code@latest`...");
23
23
  try {
24
- const { performUpdate } = await import('../updater.js');
24
+ const { performUpdate } = await import("../updater.js");
25
25
  const res = await performUpdate();
26
26
  if (res.ok) {
27
27
  appendSystem(ctx.setMessages, `[update] ✅ installed successfully\n\n` +
@@ -29,12 +29,83 @@ export async function handleUpdatePerform(ctx) {
29
29
  `(exit with /exit or Ctrl+C, then run \`zelari-code\` again)`);
30
30
  }
31
31
  else {
32
- appendSystem(ctx.setMessages, `[update] failed: ${res.error ?? 'unknown error'}\n\n` +
33
- `npm output:\n${res.output || '(empty)'}`);
32
+ // v1.0.3: show the FULL npm output (not just the last error line) so
33
+ // the user can see exactly what npm complained about, and append a
34
+ // targeted recovery hint for the most common failure modes we have
35
+ // seen in the wild: missing global-prefix shim (Windows npm 10/11),
36
+ // and a stale shim pointing at an older install.
37
+ const output = res.output?.trim() || "(empty)";
38
+ const hint = buildUpdateFailureHint(res.error ?? "", output, res.exitCode);
39
+ appendSystem(ctx.setMessages, `[update] ❌ failed: ${res.error ?? "unknown error"}\n` +
40
+ `exit code: ${res.exitCode ?? "n/a"}\n\n` +
41
+ `npm output:\n${output}\n\n` +
42
+ hint);
34
43
  }
35
44
  }
36
45
  catch (err) {
37
46
  appendSystem(ctx.setMessages, `[update error] ${err instanceof Error ? err.message : String(err)}`);
38
47
  }
39
48
  }
49
+ /**
50
+ * Build a short, targeted recovery hint based on the npm error text.
51
+ *
52
+ * The "shim broken" / "command not found after update" failure mode is
53
+ * the most common one in the field (Windows + npm 10/11 drops the
54
+ * global shim on major upgrades). We detect it heuristically from the
55
+ * error + output and surface the exact recovery command.
56
+ *
57
+ * @internal exported for unit testing
58
+ */
59
+ export function buildUpdateFailureHint(error, output, exitCode) {
60
+ const haystack = `${error}\n${output}`.toLowerCase();
61
+ const isWin = process.platform === "win32";
62
+ // ERESOLVE / EPEERINVALID — usually means the user has a different
63
+ // version of @zelari/core or another peer installed globally.
64
+ if (haystack.includes("eresolve") ||
65
+ haystack.includes("epeerinvalid") ||
66
+ haystack.includes("peer dep")) {
67
+ return ("💡 hint: peer-dependency conflict. Try:\n" +
68
+ " npm install -g zelari-code@latest --legacy-peer-deps\n" +
69
+ " or: npm install -g zelari-code@latest --force");
70
+ }
71
+ // EACCES / EPERM — permission issue, common on macOS/Linux when the
72
+ // global prefix is owned by root.
73
+ if (haystack.includes("eacces") || haystack.includes("eperm")) {
74
+ return ("💡 hint: permission denied. On macOS/Linux, avoid sudo with npm:\n" +
75
+ " https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally\n" +
76
+ " On Windows, re-run the terminal as Administrator.");
77
+ }
78
+ // ENOENT for npm itself — the shell could not find `npm` on PATH.
79
+ if (haystack.includes("enoent") && haystack.includes("npm")) {
80
+ return ("💡 hint: `npm` was not found on PATH for the spawned shell.\n" +
81
+ " Re-open the terminal so it picks up your current PATH, or set:\n" +
82
+ ' export PATH="$(npm prefix -g)/bin:$PATH" (POSIX)\n' +
83
+ ' $env:Path = "$(npm prefix -g);$env:Path" (PowerShell)');
84
+ }
85
+ // Shim-related: shim not created / "command not found" on next run.
86
+ // We can't always see this from the npm output (the failure often
87
+ // happens silently), but if the output mentions zelari-code and any
88
+ // of the typical shim failure tokens, surface the recovery.
89
+ if (haystack.includes("zelari-code") &&
90
+ (haystack.includes("not found") ||
91
+ haystack.includes("eexist") ||
92
+ haystack.includes("ebusy") ||
93
+ haystack.includes("shim") ||
94
+ exitCode === 0) // exit 0 but we got here means ok=false — defensive
95
+ ) {
96
+ return ("💡 hint: the install may have completed but the global bin shim\n" +
97
+ " is missing or stale (common on Windows + npm 10/11 after major\n" +
98
+ " upgrades). To repair:\n" +
99
+ " npm install -g zelari-code@latest --force\n" +
100
+ " Then re-open the terminal. If `zelari-code` is still not found,\n" +
101
+ " run the doctor: `zelari-code doctor`");
102
+ }
103
+ // Generic: at least tell the user what we tried and where the output went.
104
+ return ("💡 hint: the install did not succeed. To retry with more detail:\n" +
105
+ " npm install -g zelari-code@latest --verbose 2>&1 | tail -40\n" +
106
+ " On Windows, also try: `npm install -g zelari-code@latest --force`\n" +
107
+ (isWin
108
+ ? " Run `zelari-code doctor` from a new terminal to diagnose shim / PATH issues.\n"
109
+ : ""));
110
+ }
40
111
  //# sourceMappingURL=updater.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"updater.js","sourceRoot":"","sources":["../../../src/cli/slashHandlers/updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAiB1D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAwB;IAC9D,IAAI,CAAC;QACH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,0BAA0B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAChC,YAAY,CACV,GAAG,CAAC,WAAW,EACf,2BAA2B,IAAI,CAAC,aAAa,wBAAwB,IAAI,CAAC,cAAc,KAAK;gBAC3F,iFAAiF,CACpF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,wBAAwB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtG,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAwB;IAChE,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,yDAAyD,CAAC,CAAC;IACzF,IAAI,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,YAAY,CACV,GAAG,CAAC,WAAW,EACf,uCAAuC;gBACrC,+DAA+D;gBAC/D,6DAA6D,CAChE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,YAAY,CACV,GAAG,CAAC,WAAW,EACf,sBAAsB,GAAG,CAAC,KAAK,IAAI,eAAe,MAAM;gBACtD,gBAAgB,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE,CAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtG,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"updater.js","sourceRoot":"","sources":["../../../src/cli/slashHandlers/updater.ts"],"names":[],"mappings":"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"}