@kenkaiiii/gg-editor 0.6.0 → 0.6.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-runner.d.ts","sourceRoot":"","sources":["../../src/core/doctor-runner.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gEAAgE;IAChE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrF"}
1
+ {"version":3,"file":"doctor-runner.d.ts","sourceRoot":"","sources":["../../src/core/doctor-runner.ts"],"names":[],"mappings":"AA6DA,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gEAAgE;IAChE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrF"}
@@ -1,33 +1,62 @@
1
1
  /**
2
2
  * Interactive doctor screen.
3
3
  *
4
- * Modelled on the Task Pane and the login selector: full-screen clear on
5
- * entry, redraw-in-place on every keypress, a single vertical list with
6
- * status glyphs, footer keymap. No printing-down-the-page, no walls of
7
- * text, no scrollback pollution.
4
+ * Modelled directly on `@kenkaiiii/ggcoder/ui/login.tsx`'s
5
+ * `renderLoginSelector` so the look matches:
8
6
  *
9
- * ↑↓ navigate
10
- * Enter install / fix the selected item
11
- * s skip (just dismiss the install prompt and refocus)
12
- * r re-probe everything
13
- * q/Esc quit
7
+ * ▄▀▀▀ ▄▀▀▀ GG Editor v0.6.0 · By Ken Kai
8
+ * ▀█ ▀█ Doctor
9
+ * ▀▄▄▀ ▀▄▄▀ Environment check
14
10
  *
15
- * When the user hits Enter and the item carries an InstallableHint we
16
- * leave the screen, run the package manager with stdio inherited, then
17
- * re-mount the screen with a refreshed report.
11
+ * ffmpeg — v8.0.1
12
+ * ffprobe — v8.0.1
13
+ * OpenAI API key — not set
14
+ * ✓ Python 3 — v3.14.3
15
+ * …
18
16
  *
19
- * Items without a structured installer (env vars, OAuth login, opening
20
- * Resolve) just show the manual fix below the list — no wizard, no
21
- * forced advance.
17
+ * ↑↓ navigate · Enter fix · r refresh · Esc quit
18
+ *
19
+ * Mechanics:
20
+ * - `\x1b[s` saves the cursor on entry; `\x1b[u\x1b[J` restores +
21
+ * clears below for each redraw. No alt-screen buffer (we don't need
22
+ * it; the doctor is short and re-runnable).
23
+ * - On exit we restore + clear so terminal scrollback is preserved.
24
+ * - Enter on an installable runs the package manager directly via
25
+ * `spawn` (stdio inherited so the user sees output / answers
26
+ * prompts). Enter on a `prompt` opens an inline secret capture.
27
+ * - q / Esc / Ctrl+C → quit cleanly.
22
28
  */
23
29
  import { spawn } from "node:child_process";
24
30
  import { createInterface } from "node:readline/promises";
25
31
  import chalk from "chalk";
26
32
  import { setStoredApiKey } from "./auth/api-keys.js";
27
- import { renderCliBanner } from "./cli-banner.js";
28
33
  import { runDoctor } from "./doctor.js";
29
34
  import { renderDoctorReport } from "./doctor-render.js";
30
35
  import { getPackageVersion } from "./version.js";
36
+ const LOGO_LINES = [
37
+ " \u2584\u2580\u2580\u2580 \u2584\u2580\u2580\u2580",
38
+ " \u2588 \u2580\u2588 \u2588 \u2580\u2588",
39
+ " \u2580\u2584\u2584\u2580 \u2580\u2584\u2584\u2580",
40
+ ];
41
+ const GRADIENT = [
42
+ "#fbbf24",
43
+ "#f59e0b",
44
+ "#f97316",
45
+ "#ea580c",
46
+ "#dc2626",
47
+ "#e11d48",
48
+ "#db2777",
49
+ "#e11d48",
50
+ "#dc2626",
51
+ "#ea580c",
52
+ "#f97316",
53
+ "#f59e0b",
54
+ ];
55
+ const PRIMARY = "#f97316";
56
+ const ACCENT = "#ec4899";
57
+ const TEXT = "#e2e8f0";
58
+ const TEXT_DIM = "#64748b";
59
+ const GAP = " ";
31
60
  /**
32
61
  * Top-level entry called by cli.ts.
33
62
  *
@@ -37,330 +66,254 @@ import { getPackageVersion } from "./version.js";
37
66
  */
38
67
  export async function runDoctorInteractive(opts = {}) {
39
68
  if (opts.all || opts.nonInteractive || !process.stdin.isTTY) {
40
- process.stdout.write(renderCliBanner({
41
- version: getPackageVersion(),
42
- screen: opts.onboarding ? "Welcome" : "Doctor",
43
- subtitle: opts.onboarding
44
- ? "One-time environment check. Re-run any time."
45
- : "Environment check. Re-run any time.",
46
- }));
47
69
  const report = runDoctor();
70
+ process.stdout.write(staticBanner(opts.onboarding === true));
48
71
  process.stdout.write(renderDoctorReport(report, { all: opts.all, onboarding: opts.onboarding }));
49
72
  return;
50
73
  }
51
- await mountInteractiveScreen(opts.onboarding === true);
74
+ await mountSelector(opts.onboarding === true);
75
+ }
76
+ // ── Renderers ─────────────────────────────────────────────
77
+ function gradientLine(text) {
78
+ let result = "";
79
+ let colorIdx = 0;
80
+ for (const ch of text) {
81
+ if (ch === " ") {
82
+ result += ch;
83
+ }
84
+ else {
85
+ const color = GRADIENT[Math.min(colorIdx, GRADIENT.length - 1)];
86
+ result += chalk.hex(color)(ch);
87
+ colorIdx++;
88
+ }
89
+ }
90
+ return result;
91
+ }
92
+ function bannerLines(onboarding) {
93
+ const screen = onboarding ? "Welcome" : "Doctor";
94
+ const subtitle = onboarding ? "First-run environment check" : "Environment check — Enter to fix";
95
+ return [
96
+ gradientLine(LOGO_LINES[0]) +
97
+ GAP +
98
+ chalk.hex(PRIMARY).bold("GG Editor") +
99
+ chalk.hex(TEXT_DIM)(` v${getPackageVersion()}`) +
100
+ chalk.hex(TEXT_DIM)(" \u00b7 By ") +
101
+ chalk.hex(TEXT).bold("Ken Kai"),
102
+ gradientLine(LOGO_LINES[1]) + GAP + chalk.hex(ACCENT)(screen),
103
+ gradientLine(LOGO_LINES[2]) + GAP + chalk.hex(TEXT_DIM)(subtitle),
104
+ ];
105
+ }
106
+ function staticBanner(onboarding) {
107
+ return bannerLines(onboarding).join("\n") + "\n\n";
52
108
  }
53
- // ── ANSI screen primitives ─────────────────────────────────
54
- const ENTER_ALT = "\x1b[?1049h"; // switch to alternate screen buffer
55
- const EXIT_ALT = "\x1b[?1049l"; // back to main buffer
56
- const HIDE_CURSOR = "\x1b[?25l";
57
- const SHOW_CURSOR = "\x1b[?25h";
58
- const HOME = "\x1b[H"; // cursor top-left
59
- const CLEAR_BELOW = "\x1b[J"; // clear from cursor to end of screen
60
- // ── Interactive screen ─────────────────────────────────────
61
- async function mountInteractiveScreen(onboarding) {
109
+ function statusGlyph(c) {
110
+ if (c.status === "ok")
111
+ return chalk.green("\u2713");
112
+ if (c.status === "warn")
113
+ return chalk.yellow("!");
114
+ if (c.severity === "required" || c.severity === "block")
115
+ return chalk.red("\u2717");
116
+ return chalk.yellow("\u25cb");
117
+ }
118
+ /**
119
+ * One line per item, modelled on login.tsx's provider rows.
120
+ *
121
+ * ❯ ✓ ffmpeg — v8.0.1
122
+ * ○ OpenAI API key — not set
123
+ *
124
+ * The `detail` is the right-side em-dash text (terse — see doctor.ts
125
+ * for the trimmed strings: "v8.0.1", "set", "not set", etc).
126
+ */
127
+ function renderItemLine(c, selected, status) {
128
+ const marker = selected ? chalk.hex(PRIMARY)("\u276f ") : " ";
129
+ const labelColor = status === "ok"
130
+ ? selected
131
+ ? chalk.hex(PRIMARY)
132
+ : chalk.hex(TEXT)
133
+ : selected
134
+ ? chalk.hex(PRIMARY).bold
135
+ : chalk.hex(TEXT);
136
+ const label = labelColor(c.label.padEnd(22));
137
+ return `${marker}${statusGlyph(c)} ${label}${chalk.hex(TEXT_DIM)(` \u2014 ${c.detail}`)}`;
138
+ }
139
+ function renderScreen(items, selectedIdx, onboarding, note) {
140
+ const lines = [...bannerLines(onboarding), ""];
141
+ for (let i = 0; i < items.length; i++) {
142
+ const c = items[i];
143
+ const status = c.status === "ok" ? "ok" : c.status === "warn" ? "warn" : "miss";
144
+ lines.push(renderItemLine(c, i === selectedIdx, status));
145
+ }
146
+ lines.push("");
147
+ if (note)
148
+ lines.push(" " + chalk.hex(ACCENT)(note));
149
+ lines.push(chalk.hex(TEXT_DIM)(" \u2191\u2193 navigate \u00b7 ") +
150
+ chalk.hex(PRIMARY)("Enter") +
151
+ chalk.hex(TEXT_DIM)(" fix \u00b7 ") +
152
+ chalk.hex(PRIMARY)("r") +
153
+ chalk.hex(TEXT_DIM)(" refresh \u00b7 ") +
154
+ chalk.hex(PRIMARY)("Esc") +
155
+ chalk.hex(TEXT_DIM)(" quit"));
156
+ return lines.join("\n");
157
+ }
158
+ // ── Interactive selector ──────────────────────────────────
159
+ async function mountSelector(onboarding) {
62
160
  const stdout = process.stdout;
63
161
  const stdin = process.stdin;
64
- // Enter alternate buffer so we don't bury existing scrollback. On exit
65
- // we restore it cleanly. `runLogin` does its own variant — we use
66
- // alt-screen here because the doctor list can be tall.
67
- stdout.write(ENTER_ALT + HIDE_CURSOR);
68
- const skipped = new Set();
69
162
  let report = runDoctor();
70
- let actionable = report.checks.filter((c) => c.severity !== "info");
71
- let selectedIdx = pickFirstActionableIdx(actionable, skipped);
72
- let banner = renderBanner(report, onboarding);
73
- let footerNote = null;
74
- let footerNoteTimer = null;
75
- const setFooterNote = (text, color) => {
76
- if (footerNoteTimer)
77
- clearTimeout(footerNoteTimer);
78
- footerNote = { text, color };
163
+ let items = report.checks.filter((c) => c.severity !== "info");
164
+ let selectedIdx = pickFirstActionable(items);
165
+ let note;
166
+ let noteTimer = null;
167
+ // Full-clear + cursor home, then save the position so subsequent
168
+ // redraws can restore it. Wipes the shell prompt that ran us, so the
169
+ // doctor screen looks like a standalone view.
170
+ stdout.write("\x1b[2J\x1b[H\x1b[s");
171
+ const draw = () => {
172
+ stdout.write("\x1b[u\x1b[J" + renderScreen(items, selectedIdx, onboarding, note) + "\n");
173
+ };
174
+ const flashNote = (text) => {
175
+ if (noteTimer)
176
+ clearTimeout(noteTimer);
177
+ note = text;
79
178
  draw();
80
- footerNoteTimer = setTimeout(() => {
81
- footerNote = null;
179
+ noteTimer = setTimeout(() => {
180
+ note = undefined;
82
181
  draw();
83
182
  }, 2500);
84
183
  };
85
184
  const reload = () => {
86
185
  report = runDoctor();
87
- actionable = report.checks.filter((c) => c.severity !== "info");
88
- banner = renderBanner(report, onboarding);
89
- if (selectedIdx >= actionable.length)
90
- selectedIdx = Math.max(0, actionable.length - 1);
91
- };
92
- const draw = () => {
93
- stdout.write(HOME + CLEAR_BELOW);
94
- stdout.write(banner);
95
- stdout.write(renderItemList(actionable, selectedIdx, skipped));
96
- stdout.write("\n");
97
- stdout.write(renderDetail(actionable[selectedIdx], stdout.columns ?? 80));
98
- stdout.write("\n");
99
- stdout.write(renderFooter(footerNote));
186
+ items = report.checks.filter((c) => c.severity !== "info");
187
+ if (selectedIdx >= items.length)
188
+ selectedIdx = Math.max(0, items.length - 1);
100
189
  };
101
190
  draw();
102
191
  stdin.setRawMode(true);
103
192
  stdin.resume();
104
- stdin.setEncoding("utf8");
105
193
  return new Promise((resolve) => {
106
194
  const cleanup = () => {
107
- if (footerNoteTimer)
108
- clearTimeout(footerNoteTimer);
195
+ if (noteTimer)
196
+ clearTimeout(noteTimer);
109
197
  stdin.removeListener("data", onData);
110
198
  stdin.setRawMode(false);
111
199
  stdin.pause();
112
- stdout.write(SHOW_CURSOR + EXIT_ALT);
113
- // After leaving alt-screen, print a one-line summary in the main
114
- // buffer so the user has something in scrollback.
115
- const totalActionable = actionable.length;
116
- const ok = actionable.filter((c) => c.status === "ok").length;
117
- if (ok === totalActionable) {
118
- process.stdout.write(chalk.green(" Nothing to fix. You're all good.") +
119
- chalk.dim(" Run `ggeditor` to start.\n"));
200
+ // Full clear so the user's terminal scrollback isn't polluted with
201
+ // selector frames; print one summary line as a fresh start.
202
+ stdout.write("\x1b[2J\x1b[H");
203
+ const total = items.length;
204
+ const ok = items.filter((c) => c.status === "ok").length;
205
+ if (ok === total) {
206
+ stdout.write(chalk.green("\u2713 Nothing to fix. You're all good.") +
207
+ chalk.hex(TEXT_DIM)(" Run `ggeditor` to start.\n"));
120
208
  }
121
209
  else {
122
- process.stdout.write(chalk.dim(`Doctor closed. ${ok}/${totalActionable} ready. Re-run \`ggeditor doctor\` any time.\n`));
210
+ stdout.write(chalk.hex(TEXT_DIM)(`Doctor closed. ${ok}/${total} ready. Re-run \`ggeditor doctor\` any time.\n`));
123
211
  }
124
212
  resolve();
125
213
  };
214
+ /**
215
+ * Tear down the selector, fully clear the screen, re-print the
216
+ * branded banner, then run an async block with normal stdio. The
217
+ * full clear (\x1b[2J\x1b[H) wipes the prior shell prompt so the
218
+ * sub-screen looks like a standalone view, not a continuation of
219
+ * the user's terminal scrollback.
220
+ */
221
+ const runWithSubshell = async (block) => {
222
+ stdin.removeListener("data", onData);
223
+ stdin.setRawMode(false);
224
+ stdin.pause();
225
+ // Full clear + cursor home, then re-render the banner.
226
+ stdout.write("\x1b[2J\x1b[H");
227
+ stdout.write(staticBanner(onboarding));
228
+ let result;
229
+ try {
230
+ result = await block();
231
+ }
232
+ catch (e) {
233
+ process.stdout.write(chalk.red(`\n Error: ${e.message}\n`));
234
+ result = { ok: false };
235
+ }
236
+ // Brief pause so the user sees the outcome.
237
+ await new Promise((r) => setTimeout(r, 600));
238
+ // Full clear + re-save cursor + redraw the selector.
239
+ stdout.write("\x1b[2J\x1b[H\x1b[s");
240
+ stdin.setRawMode(true);
241
+ stdin.resume();
242
+ stdin.on("data", onData);
243
+ reload();
244
+ const cur = items[selectedIdx];
245
+ if (cur) {
246
+ const newIdx = items.findIndex((c) => c.id === cur.id);
247
+ selectedIdx = newIdx >= 0 ? newIdx : pickFirstActionable(items);
248
+ }
249
+ if (result.ok)
250
+ flashNote(`Saved`);
251
+ else
252
+ draw();
253
+ };
126
254
  const onData = (chunk) => {
127
- // Quit
128
- if (chunk === "\x03" /* Ctrl+C */ || chunk === "q" || chunk === "\x1b") {
255
+ const key = chunk.toString();
256
+ // Esc / Ctrl+C / q quit
257
+ if (key === "\x1b" || key === "\x03" || key === "q") {
129
258
  cleanup();
130
259
  return;
131
260
  }
132
261
  // ↑
133
- if (chunk === "\x1b[A" || chunk === "k") {
134
- if (selectedIdx > 0) {
135
- selectedIdx--;
136
- draw();
137
- }
262
+ if (key === "\x1b[A" && selectedIdx > 0) {
263
+ selectedIdx--;
264
+ draw();
138
265
  return;
139
266
  }
140
267
  // ↓
141
- if (chunk === "\x1b[B" || chunk === "j") {
142
- if (selectedIdx < actionable.length - 1) {
143
- selectedIdx++;
144
- draw();
145
- }
146
- return;
147
- }
148
- // s — skip current item this session (does NOT advance — user can
149
- // navigate with arrows. Skipped items stay in the list, just greyed).
150
- if (chunk === "s") {
151
- const cur = actionable[selectedIdx];
152
- if (cur && cur.status !== "ok") {
153
- skipped.add(cur.id);
154
- setFooterNote(`Skipped ${cur.label}`, "info");
155
- }
268
+ if (key === "\x1b[B" && selectedIdx < items.length - 1) {
269
+ selectedIdx++;
270
+ draw();
156
271
  return;
157
272
  }
158
- // r re-probe everything (e.g. after the user installed something
159
- // outside the doctor)
160
- if (chunk === "r") {
273
+ // r refresh
274
+ if (key === "r") {
161
275
  reload();
162
- setFooterNote("Re-probed", "ok");
276
+ flashNote("Refreshed");
163
277
  return;
164
278
  }
165
- // Enter install / prompt / no-op
166
- if (chunk === "\r" || chunk === "\n") {
167
- const cur = actionable[selectedIdx];
279
+ // Enter install / prompt / nothing
280
+ if (key === "\r" || key === "\n") {
281
+ const cur = items[selectedIdx];
168
282
  if (!cur)
169
283
  return;
170
284
  if (cur.status === "ok") {
171
- setFooterNote("Already done", "ok");
285
+ flashNote("Already done");
172
286
  return;
173
287
  }
174
288
  if (cur.installable) {
289
+ const inst = cur.installable;
175
290
  void runWithSubshell(async () => {
176
- const inst = cur.installable;
177
- process.stdout.write(chalk.dim(`\n Running: `) +
291
+ process.stdout.write(chalk.hex(TEXT_DIM)("Running: ") +
178
292
  chalk.cyan(`${inst.command} ${inst.args.join(" ")}`) +
179
293
  "\n\n");
180
294
  const code = await spawnInstall(inst.command, inst.args);
181
295
  if (code === 0) {
182
- process.stdout.write(chalk.green("\n Installed.\n"));
296
+ process.stdout.write(chalk.green("\n\u2713 Installed.\n"));
183
297
  return { ok: true };
184
298
  }
185
- process.stdout.write(chalk.red(`\n Install failed (exit ${code}).\n`));
186
- if (cur.fix) {
187
- for (const line of cur.fix.split("\n")) {
188
- process.stdout.write(" " + chalk.cyan(line) + "\n");
189
- }
190
- }
299
+ process.stdout.write(chalk.red(`\n\u2717 Install failed (exit ${code}).\n`));
191
300
  return { ok: false };
192
- }).then((result) => {
193
- if (result.ok)
194
- setFooterNote(`Installed ${cur.label}`, "ok");
195
301
  });
196
302
  return;
197
303
  }
198
304
  if (cur.prompt) {
199
- void runWithSubshell(async () => promptForSecret(cur.prompt)).then((result) => {
200
- if (result.ok)
201
- setFooterNote(`Saved ${cur.label}`, "ok");
202
- else
203
- setFooterNote("Cancelled", "info");
204
- });
305
+ const p = cur.prompt;
306
+ void runWithSubshell(async () => promptForSecret(p));
205
307
  return;
206
308
  }
207
- setFooterNote("No automatic fix — see Fix line above", "warn");
208
- return;
309
+ flashNote("No automatic fix");
209
310
  }
210
311
  };
211
- /**
212
- * Tear down alt-screen + raw-mode, run an async block with normal
213
- * stdio (so spawn / readline behave normally), then re-mount the
214
- * screen and re-attach the keypress listener. The async block
215
- * returns { ok } so the caller can flash the right footer note.
216
- */
217
- async function runWithSubshell(block) {
218
- stdout.write(SHOW_CURSOR + EXIT_ALT);
219
- stdin.setRawMode(false);
220
- stdin.pause();
221
- stdin.removeListener("data", onData);
222
- let result;
223
- try {
224
- result = await block();
225
- }
226
- catch (e) {
227
- process.stdout.write(chalk.red(`\n Error: ${e.message}\n`));
228
- result = { ok: false };
229
- }
230
- // Brief pause so the user sees the outcome before the screen
231
- // re-mounts and clears it. 600ms is enough to glance at ✓/✗.
232
- await new Promise((r) => setTimeout(r, 600));
233
- stdout.write(ENTER_ALT + HIDE_CURSOR);
234
- stdin.setRawMode(true);
235
- stdin.resume();
236
- stdin.on("data", onData);
237
- reload();
238
- const cur = actionable[selectedIdx];
239
- if (cur) {
240
- const newIdx = actionable.findIndex((c) => c.id === cur.id);
241
- selectedIdx = newIdx >= 0 ? newIdx : pickFirstActionableIdx(actionable, skipped);
242
- }
243
- draw();
244
- return result;
245
- }
246
312
  stdin.on("data", onData);
247
313
  });
248
314
  }
249
- // ── Render helpers ─────────────────────────────────────────
250
- function renderBanner(report, onboarding) {
251
- const total = report.checks.filter((c) => c.severity !== "info").length;
252
- const done = report.checks.filter((c) => c.severity !== "info" && c.status === "ok").length;
253
- return renderCliBanner({
254
- version: getPackageVersion(),
255
- screen: onboarding ? "Welcome" : "Doctor",
256
- subtitle: `${done} of ${total} ready` + (onboarding ? " · first-run check" : ""),
257
- });
258
- }
259
- function renderItemList(items, selectedIdx, skipped) {
260
- const lines = [];
261
- for (let i = 0; i < items.length; i++) {
262
- const c = items[i];
263
- const isSelected = i === selectedIdx;
264
- const isSkipped = skipped.has(c.id);
265
- const checkbox = renderCheckbox(c, isSkipped);
266
- const label = c.label.padEnd(28);
267
- const detail = chalk.dim(c.detail);
268
- if (isSelected) {
269
- lines.push(" " + chalk.hex("#f97316")("❯ ") + checkbox + " " + chalk.bold(label) + " " + detail);
270
- }
271
- else {
272
- const baseColor = isSkipped ? chalk.hex("#475569") : chalk.reset;
273
- lines.push(" " + checkbox + " " + baseColor(label) + " " + detail);
274
- }
275
- }
276
- return lines.join("\n") + "\n";
277
- }
278
- function renderCheckbox(c, isSkipped) {
279
- if (c.status === "ok")
280
- return chalk.green("[✓]");
281
- if (c.status === "warn")
282
- return chalk.yellow("[!]");
283
- if (isSkipped)
284
- return chalk.dim("[—]");
285
- if (c.severity === "required" || c.severity === "block")
286
- return chalk.red("[✗]");
287
- return chalk.yellow("[○]");
288
- }
289
- /**
290
- * Render the detail block under the list. STRICTLY two lines:
291
- * - Why: <unlocks>
292
- * - Fix: <one-line action>
293
- *
294
- * No multi-line dumps; URLs / longer guidance live on the prompt's hint
295
- * (only shown during the actual prompt screen) or on the structured
296
- * installable's command. The static `--all` path renders the full
297
- * `fix` string; this interactive path is for the next single action.
298
- */
299
- function renderDetail(c, columns) {
300
- if (!c)
301
- return "";
302
- const lines = [];
303
- // Allow at least 60 chars even on a narrow / unknown-size terminal so
304
- // we never truncate the explanation into uselessness.
305
- const safeWidth = Math.max(60, columns) - 8;
306
- lines.push(" " + chalk.dim("Why: ") + truncate(c.unlocks, safeWidth));
307
- const action = nextAction(c);
308
- if (action) {
309
- lines.push(" " + chalk.dim("Fix: ") + action);
310
- }
311
- return lines.join("\n") + "\n";
312
- }
313
- /**
314
- * Single-line, ANSI-aware description of the next action for an item.
315
- * Returns undefined when status === ok.
316
- */
317
- function nextAction(c) {
318
- if (c.status === "ok")
319
- return undefined;
320
- if (c.installable) {
321
- const cmd = `${c.installable.command} ${c.installable.args.join(" ")}`;
322
- return chalk.cyan(cmd) + chalk.dim(" (press Enter)");
323
- }
324
- if (c.prompt) {
325
- return chalk.cyan(c.prompt.label) + chalk.dim(" (press Enter)");
326
- }
327
- // No structured action — fall back to the FIRST line of `fix` only.
328
- // We never render the multi-line tail here.
329
- if (c.fix) {
330
- const firstLine = c.fix.split("\n")[0].trim();
331
- return chalk.cyan(firstLine);
332
- }
333
- return undefined;
334
- }
335
- /**
336
- * Truncate a string to at most `max` columns. Adds an ellipsis when
337
- * truncated. Does NOT respect ANSI escapes — only call on plain text.
338
- */
339
- function truncate(s, max) {
340
- if (s.length <= max)
341
- return s;
342
- return s.slice(0, Math.max(0, max - 1)) + "\u2026";
343
- }
344
- function renderFooter(note) {
345
- const dim = chalk.dim;
346
- const primary = chalk.hex("#f97316");
347
- const keymap = " " +
348
- primary("↑↓") +
349
- dim(" navigate · ") +
350
- primary("Enter") +
351
- dim(" fix · ") +
352
- primary("s") +
353
- dim(" skip · ") +
354
- primary("r") +
355
- dim(" re-probe · ") +
356
- primary("q") +
357
- dim(" quit");
358
- if (!note)
359
- return keymap + "\n";
360
- const noteColor = note.color === "ok" ? chalk.green : note.color === "warn" ? chalk.yellow : chalk.cyan;
361
- return keymap + "\n " + noteColor(note.text) + "\n";
362
- }
363
- function pickFirstActionableIdx(items, skipped) {
315
+ // ── Helpers ───────────────────────────────────────────────
316
+ function pickFirstActionable(items) {
364
317
  // Priority: required-missing/warn → optional-warn → optional-missing → 0.
365
318
  const tiers = [
366
319
  { severity: "block", statuses: ["missing", "warn"] },
@@ -369,7 +322,7 @@ function pickFirstActionableIdx(items, skipped) {
369
322
  { severity: "optional", statuses: ["missing"] },
370
323
  ];
371
324
  for (const tier of tiers) {
372
- const idx = items.findIndex((c) => c.severity === tier.severity && tier.statuses.includes(c.status) && !skipped.has(c.id));
325
+ const idx = items.findIndex((c) => c.severity === tier.severity && tier.statuses.includes(c.status));
373
326
  if (idx >= 0)
374
327
  return idx;
375
328
  }
@@ -383,30 +336,26 @@ function spawnInstall(command, args) {
383
336
  });
384
337
  }
385
338
  /**
386
- * Prompt the user for a secret (API key / token), validate it, and
387
- * persist via setStoredApiKey. The user can hit Esc / blank-Enter to
388
- * cancel without writing anything.
339
+ * Prompt the user for a secret, validate it, persist via setStoredApiKey.
389
340
  *
390
- * Echoes the input as it's typed — these are API keys, not passwords
391
- * exposed to humans peering over the shoulder. Anyone with shell
392
- * access could just `cat ~/.gg/api-keys.json` anyway.
341
+ * Echoes input as it's typed — these are API keys, and node has no
342
+ * built-in masked-input primitive without dragging in a dep. Anyone
343
+ * with shell access could `cat ~/.gg/api-keys.json` anyway.
393
344
  */
394
345
  async function promptForSecret(p) {
395
- const dim = chalk.dim;
396
- const primary = chalk.hex("#f97316");
397
- const accent = chalk.hex("#ec4899");
398
- process.stdout.write("\n " + primary.bold(p.label) + "\n");
399
- if (p.hint) {
346
+ const dim = chalk.hex(TEXT_DIM);
347
+ const primary = chalk.hex(PRIMARY);
348
+ const accent = chalk.hex(ACCENT);
349
+ // Caller (runWithSubshell) has already cleared the screen + printed
350
+ // the banner. We just add the prompt body.
351
+ process.stdout.write(" " + primary.bold(p.label) + "\n");
352
+ if (p.hint)
400
353
  process.stdout.write(" " + dim(p.hint) + "\n");
401
- }
402
354
  process.stdout.write(" " + dim("(blank + Enter to cancel)") + "\n\n");
403
- const rl = createInterface({
404
- input: process.stdin,
405
- output: process.stdout,
406
- });
355
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
407
356
  try {
408
357
  for (let attempt = 0; attempt < 3; attempt++) {
409
- const value = (await rl.question(" " + accent(" "))).trim();
358
+ const value = (await rl.question(" " + accent("\u276f "))).trim();
410
359
  if (value.length === 0) {
411
360
  process.stdout.write(dim(" Cancelled.\n"));
412
361
  return { ok: false };
@@ -420,10 +369,10 @@ async function promptForSecret(p) {
420
369
  setStoredApiKey(p.store, value);
421
370
  }
422
371
  catch (e) {
423
- process.stdout.write(chalk.red(` Failed to save: ${e.message}\n`));
372
+ process.stdout.write(chalk.red(` \u2717 Failed to save: ${e.message}\n`));
424
373
  return { ok: false };
425
374
  }
426
- process.stdout.write(chalk.green(` Saved to ~/.gg/api-keys.json (chmod 600).\n`));
375
+ process.stdout.write(chalk.green(" \u2713 Saved to ~/.gg/api-keys.json (chmod 600).\n"));
427
376
  return { ok: true };
428
377
  }
429
378
  process.stdout.write(dim(" Too many invalid attempts. Cancelled.\n"));
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-runner.js","sourceRoot":"","sources":["../../src/core/doctor-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor-runner.js","sourceRoot":"","sources":["../../src/core/doctor-runner.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,11 @@ import type { AgentTool } from "@kenkaiiii/gg-agent";
3
3
  import type { VideoHost } from "../core/hosts/types.js";
4
4
  declare const OpenPageParams: z.ZodObject<{
5
5
  name: z.ZodEnum<{
6
- color: "color";
7
6
  media: "media";
8
7
  cut: "cut";
9
8
  edit: "edit";
10
9
  fusion: "fusion";
10
+ color: "color";
11
11
  fairlight: "fairlight";
12
12
  deliver: "deliver";
13
13
  }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kenkaiiii/gg-editor",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "type": "module",
5
5
  "description": "CLI video editor agent. Drives DaVinci Resolve and Premiere Pro via API + hotkeys + GUI fallback.",
6
6
  "license": "MIT",
@@ -27,9 +27,9 @@
27
27
  "react": "^19.2.5",
28
28
  "ws": "^8.18.0",
29
29
  "zod": "^4.3.6",
30
- "@kenkaiiii/gg-ai": "4.3.85",
31
30
  "@kenkaiiii/gg-agent": "4.3.85",
32
- "@kenkaiiii/ggcoder": "4.3.85"
31
+ "@kenkaiiii/ggcoder": "4.3.85",
32
+ "@kenkaiiii/gg-ai": "4.3.85"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/node": "^25.6.0",