@kenkaiiii/gg-editor 0.4.0 → 0.5.0

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,15 +1,17 @@
1
1
  export interface DoctorRunOptions {
2
- /** Print the welcome banner instead of the plain doctor banner. */
2
+ /** Welcome banner instead of the plain doctor banner. */
3
3
  onboarding?: boolean;
4
- /** Show the full inventory and exit (no install prompts). */
4
+ /** Show the full inventory and exit (no interactive screen). */
5
5
  all?: boolean;
6
- /** Skip every prompt — print the report and exit. Useful in CI. */
6
+ /** Skip every prompt — print the report once and exit. CI-friendly. */
7
7
  nonInteractive?: boolean;
8
8
  }
9
9
  /**
10
- * Top-level entry. Renders the orange banner, then either
11
- * - prints the inventory (`all` or `nonInteractive`), OR
12
- * - walks the user through fixable items one at a time.
10
+ * Top-level entry called by cli.ts.
11
+ *
12
+ * - `--all` prints the static inventory, no screen.
13
+ * - non-TTY / `nonInteractive` → same.
14
+ * - everything else → mounts the interactive screen.
13
15
  */
14
16
  export declare function runDoctorInteractive(opts?: DoctorRunOptions): Promise<void>;
15
17
  //# sourceMappingURL=doctor-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-runner.d.ts","sourceRoot":"","sources":["../../src/core/doctor-runner.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAarF"}
1
+ {"version":3,"file":"doctor-runner.d.ts","sourceRoot":"","sources":["../../src/core/doctor-runner.ts"],"names":[],"mappings":"AA6BA,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,197 +1,302 @@
1
1
  /**
2
- * Interactive doctor runner.
2
+ * Interactive doctor screen.
3
3
  *
4
- * Used by `ggeditor doctor` and the first-run onboarding flow. Walks
5
- * through actionable items one at a time:
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.
6
8
  *
7
- * - If the item carries an `installable` hint → ask "Install X? [Y/n]".
8
- * Yes spawn the package manager, stream output live, re-run the
9
- * doctor, move on. No → print the manual `fix` text, move on.
10
- * - If the item only has a `fix` string (manual setup, env var, etc.)
11
- * → print it and move on.
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
12
14
  *
13
- * The banner matches `runStatus`'s look ("GG Editor Doctor", orange-
14
- * bold, two-space indent, dim subline) so the three CLI commands
15
- * (auth/login/doctor) feel like one product.
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.
18
+ *
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.
16
22
  */
17
23
  import { spawn } from "node:child_process";
18
- import { createInterface } from "node:readline/promises";
19
24
  import chalk from "chalk";
20
25
  import { renderCliBanner } from "./cli-banner.js";
21
26
  import { runDoctor } from "./doctor.js";
22
27
  import { renderDoctorReport } from "./doctor-render.js";
23
28
  import { getPackageVersion } from "./version.js";
24
- const EDITOR_ACCENT = "#ec4899";
25
- const pink = chalk.hex(EDITOR_ACCENT);
26
29
  /**
27
- * Top-level entry. Renders the orange banner, then either
28
- * - prints the inventory (`all` or `nonInteractive`), OR
29
- * - walks the user through fixable items one at a time.
30
+ * Top-level entry called by cli.ts.
31
+ *
32
+ * - `--all` prints the static inventory, no screen.
33
+ * - non-TTY / `nonInteractive` → same.
34
+ * - everything else → mounts the interactive screen.
30
35
  */
31
36
  export async function runDoctorInteractive(opts = {}) {
32
- printBanner(opts.onboarding === true);
33
- // Non-interactive paths: just print and exit.
34
37
  if (opts.all || opts.nonInteractive || !process.stdin.isTTY) {
38
+ process.stdout.write(renderCliBanner({
39
+ version: getPackageVersion(),
40
+ screen: opts.onboarding ? "Welcome" : "Doctor",
41
+ subtitle: opts.onboarding
42
+ ? "One-time environment check. Re-run any time."
43
+ : "Environment check. Re-run any time.",
44
+ }));
35
45
  const report = runDoctor();
36
46
  process.stdout.write(renderDoctorReport(report, { all: opts.all, onboarding: opts.onboarding }));
37
47
  return;
38
48
  }
39
- await walkActionableItems(opts.onboarding === true);
49
+ await mountInteractiveScreen(opts.onboarding === true);
40
50
  }
41
- // ── Internals ──────────────────────────────────────────────
42
- function printBanner(onboarding) {
43
- process.stdout.write(renderCliBanner({
44
- version: getPackageVersion(),
45
- screen: onboarding ? "Welcome" : "Doctor",
46
- subtitle: onboarding
47
- ? "One-time environment check. Re-run any time."
48
- : "Environment check. Re-run any time.",
49
- }));
50
- }
51
- /**
52
- * Walk through actionable items in priority order. After each step we
53
- * re-run the doctor so that successful installs unblock follow-on
54
- * checks (e.g. installing ffmpeg flips both ffmpeg + ffprobe to OK).
55
- */
56
- async function walkActionableItems(onboarding) {
57
- const rl = createInterface({ input: process.stdin, output: process.stdout });
58
- // Track items the user has explicitly skipped this session so we
59
- // don't re-ask about them after every successful install.
51
+ // ── ANSI screen primitives ─────────────────────────────────
52
+ const ENTER_ALT = "\x1b[?1049h"; // switch to alternate screen buffer
53
+ const EXIT_ALT = "\x1b[?1049l"; // back to main buffer
54
+ const HIDE_CURSOR = "\x1b[?25l";
55
+ const SHOW_CURSOR = "\x1b[?25h";
56
+ const HOME = "\x1b[H"; // cursor → top-left
57
+ const CLEAR_BELOW = "\x1b[J"; // clear from cursor to end of screen
58
+ // ── Interactive screen ─────────────────────────────────────
59
+ async function mountInteractiveScreen(onboarding) {
60
+ const stdout = process.stdout;
61
+ const stdin = process.stdin;
62
+ // Enter alternate buffer so we don't bury existing scrollback. On exit
63
+ // we restore it cleanly. `runLogin` does its own variant — we use
64
+ // alt-screen here because the doctor list can be tall.
65
+ stdout.write(ENTER_ALT + HIDE_CURSOR);
60
66
  const skipped = new Set();
61
- try {
62
- for (let step = 0; step < 20; step++) {
63
- const report = runDoctor();
64
- const next = pickNextActionable(report, skipped);
65
- const total = countActionable(report);
66
- const done = countDone(report);
67
- if (!next) {
68
- // Either everything's clean or we've skipped everything we can.
69
- const cleanEverything = total === done;
70
- if (cleanEverything) {
71
- process.stdout.write(" " +
72
- chalk.green("✓ Nothing to fix. You're all good.") +
73
- chalk.dim(" Run `ggeditor` to start.\n\n"));
67
+ let report = runDoctor();
68
+ let actionable = report.checks.filter((c) => c.severity !== "info");
69
+ let selectedIdx = pickFirstActionableIdx(actionable, skipped);
70
+ let banner = renderBanner(report, onboarding);
71
+ let footerNote = null;
72
+ let footerNoteTimer = null;
73
+ const setFooterNote = (text, color) => {
74
+ if (footerNoteTimer)
75
+ clearTimeout(footerNoteTimer);
76
+ footerNote = { text, color };
77
+ draw();
78
+ footerNoteTimer = setTimeout(() => {
79
+ footerNote = null;
80
+ draw();
81
+ }, 2500);
82
+ };
83
+ const reload = () => {
84
+ report = runDoctor();
85
+ actionable = report.checks.filter((c) => c.severity !== "info");
86
+ banner = renderBanner(report, onboarding);
87
+ if (selectedIdx >= actionable.length)
88
+ selectedIdx = Math.max(0, actionable.length - 1);
89
+ };
90
+ const draw = () => {
91
+ stdout.write(HOME + CLEAR_BELOW);
92
+ stdout.write(banner);
93
+ stdout.write(renderItemList(actionable, selectedIdx, skipped));
94
+ stdout.write("\n");
95
+ stdout.write(renderDetail(actionable[selectedIdx]));
96
+ stdout.write("\n");
97
+ stdout.write(renderFooter(footerNote));
98
+ };
99
+ draw();
100
+ stdin.setRawMode(true);
101
+ stdin.resume();
102
+ stdin.setEncoding("utf8");
103
+ return new Promise((resolve) => {
104
+ const cleanup = () => {
105
+ if (footerNoteTimer)
106
+ clearTimeout(footerNoteTimer);
107
+ stdin.removeListener("data", onData);
108
+ stdin.setRawMode(false);
109
+ stdin.pause();
110
+ stdout.write(SHOW_CURSOR + EXIT_ALT);
111
+ // After leaving alt-screen, print a one-line summary in the main
112
+ // buffer so the user has something in scrollback.
113
+ const totalActionable = actionable.length;
114
+ const ok = actionable.filter((c) => c.status === "ok").length;
115
+ if (ok === totalActionable) {
116
+ process.stdout.write(chalk.green("✓ Nothing to fix. You're all good.") +
117
+ chalk.dim(" Run `ggeditor` to start.\n"));
118
+ }
119
+ else {
120
+ process.stdout.write(chalk.dim(`Doctor closed. ${ok}/${totalActionable} ready. Re-run \`ggeditor doctor\` any time.\n`));
121
+ }
122
+ resolve();
123
+ };
124
+ const onData = (chunk) => {
125
+ // Quit
126
+ if (chunk === "\x03" /* Ctrl+C */ || chunk === "q" || chunk === "\x1b") {
127
+ cleanup();
128
+ return;
129
+ }
130
+ // ↑
131
+ if (chunk === "\x1b[A" || chunk === "k") {
132
+ if (selectedIdx > 0) {
133
+ selectedIdx--;
134
+ draw();
74
135
  }
75
- else {
76
- process.stdout.write(" " +
77
- chalk.dim(`Skipped the rest. ${done}/${total} ready. Re-run \`ggeditor doctor\` any time.\n\n`));
136
+ return;
137
+ }
138
+ //
139
+ if (chunk === "\x1b[B" || chunk === "j") {
140
+ if (selectedIdx < actionable.length - 1) {
141
+ selectedIdx++;
142
+ draw();
78
143
  }
79
144
  return;
80
145
  }
81
- const proceed = await handleItem(next, rl, onboarding);
82
- if (proceed === "skip")
83
- skipped.add(next.id);
84
- if (proceed === "quit") {
85
- process.stdout.write(chalk.dim(" Done. Re-run `ggeditor doctor` any time.\n\n"));
146
+ // s skip current item this session (does NOT advance — user can
147
+ // navigate with arrows. Skipped items stay in the list, just greyed).
148
+ if (chunk === "s") {
149
+ const cur = actionable[selectedIdx];
150
+ if (cur && cur.status !== "ok") {
151
+ skipped.add(cur.id);
152
+ setFooterNote(`Skipped ${cur.label}`, "info");
153
+ }
86
154
  return;
87
155
  }
88
- }
89
- // Safety bound — should never hit this.
90
- process.stdout.write(chalk.dim(" Reached step limit. Re-run `ggeditor doctor` to continue.\n\n"));
91
- }
92
- finally {
93
- rl.close();
94
- }
156
+ // r — re-probe everything (e.g. after the user installed something
157
+ // outside the doctor)
158
+ if (chunk === "r") {
159
+ reload();
160
+ setFooterNote("Re-probed", "ok");
161
+ return;
162
+ }
163
+ // Enter — install or show fix instructions
164
+ if (chunk === "\r" || chunk === "\n") {
165
+ const cur = actionable[selectedIdx];
166
+ if (!cur)
167
+ return;
168
+ if (cur.status === "ok") {
169
+ setFooterNote("Already done", "ok");
170
+ return;
171
+ }
172
+ if (cur.installable) {
173
+ // Tear down the screen, run the manager with full stdio so the
174
+ // user sees + interacts with it directly, then re-mount.
175
+ stdout.write(SHOW_CURSOR + EXIT_ALT);
176
+ stdin.setRawMode(false);
177
+ stdin.pause();
178
+ stdin.removeListener("data", onData);
179
+ process.stdout.write(chalk.dim(`\n Running: `) +
180
+ chalk.cyan(`${cur.installable.command} ${cur.installable.args.join(" ")}`) +
181
+ "\n\n");
182
+ spawnInstall(cur.installable.command, cur.installable.args).then((code) => {
183
+ if (code === 0) {
184
+ process.stdout.write(chalk.green("\n ✓ Installed. Re-probing…\n"));
185
+ }
186
+ else {
187
+ process.stdout.write(chalk.red(`\n ✗ Install failed (exit ${code}). You can fix it manually:\n`));
188
+ if (cur.fix) {
189
+ for (const line of cur.fix.split("\n")) {
190
+ process.stdout.write(" " + chalk.cyan(line) + "\n");
191
+ }
192
+ }
193
+ process.stdout.write("\n");
194
+ }
195
+ // Re-mount the screen.
196
+ stdout.write(ENTER_ALT + HIDE_CURSOR);
197
+ stdin.setRawMode(true);
198
+ stdin.resume();
199
+ stdin.on("data", onData);
200
+ reload();
201
+ // Reposition selection to the same id if it still exists.
202
+ const newIdx = actionable.findIndex((c) => c.id === cur.id);
203
+ if (newIdx >= 0)
204
+ selectedIdx = newIdx;
205
+ else
206
+ selectedIdx = pickFirstActionableIdx(actionable, skipped);
207
+ if (code === 0)
208
+ setFooterNote(`Installed ${cur.label}`, "ok");
209
+ draw();
210
+ });
211
+ return;
212
+ }
213
+ // No installer — flash a hint that the fix is shown below.
214
+ setFooterNote("See fix instructions below — run them in another terminal", "warn");
215
+ return;
216
+ }
217
+ };
218
+ stdin.on("data", onData);
219
+ });
95
220
  }
96
- async function handleItem(item, rl, onboarding) {
97
- // Header: severity + label + detail.
98
- const tag = item.severity === "required" || item.severity === "block"
99
- ? chalk.red("required")
100
- : item.status === "warn"
101
- ? chalk.yellow("needs attention")
102
- : chalk.yellow("optional");
103
- process.stdout.write(` ${tag} · ${chalk.bold(item.label)} ${chalk.dim(" " + item.detail)}\n`);
104
- process.stdout.write(" " + chalk.dim(item.unlocks) + "\n\n");
105
- if (item.installable) {
106
- return await offerInstall(item, item.installable, rl);
107
- }
108
- // No structured installer — print the manual fix and move on.
109
- if (item.fix) {
110
- process.stdout.write(chalk.dim(" Fix:\n"));
111
- for (const line of item.fix.split("\n")) {
112
- process.stdout.write(" " + chalk.cyan(line) + "\n");
113
- }
114
- process.stdout.write("\n");
115
- }
116
- // For required items without a structured installer (e.g. auth →
117
- // `ggeditor login`) we ask whether to keep going. For optional ones
118
- // we just move on.
119
- if (item.severity === "required" || item.severity === "block") {
120
- const ans = await askYN(rl, " Continue to the next item?", "y");
121
- return ans ? "next" : "quit";
122
- }
123
- // Onboarding mode: pause briefly so the user reads the fix.
124
- if (onboarding) {
125
- const ans = await askYN(rl, " Continue?", "y");
126
- return ans ? "next" : "quit";
127
- }
128
- return "next";
221
+ // ── Render helpers ─────────────────────────────────────────
222
+ function renderBanner(report, onboarding) {
223
+ const total = report.checks.filter((c) => c.severity !== "info").length;
224
+ const done = report.checks.filter((c) => c.severity !== "info" && c.status === "ok").length;
225
+ return renderCliBanner({
226
+ version: getPackageVersion(),
227
+ screen: onboarding ? "Welcome" : "Doctor",
228
+ subtitle: `${done} of ${total} ready` + (onboarding ? " · first-run check" : ""),
229
+ });
129
230
  }
130
- async function offerInstall(item, hint, rl) {
131
- const cmdline = `${hint.command} ${hint.args.join(" ")}`;
132
- process.stdout.write(` ${chalk.bold(hint.label)}\n`);
133
- process.stdout.write(` ${pink(cmdline)}\n`);
134
- if (hint.needsSudo) {
135
- process.stdout.write(chalk.dim(" (will prompt for your sudo password)\n"));
136
- }
137
- process.stdout.write("\n");
138
- const yes = await askYN(rl, " Install now?", "y");
139
- if (!yes) {
140
- if (item.fix) {
141
- process.stdout.write(chalk.dim(" Skipping. To install later:\n"));
142
- for (const line of item.fix.split("\n")) {
143
- process.stdout.write(" " + chalk.cyan(line) + "\n");
144
- }
145
- process.stdout.write("\n");
231
+ function renderItemList(items, selectedIdx, skipped) {
232
+ const lines = [];
233
+ for (let i = 0; i < items.length; i++) {
234
+ const c = items[i];
235
+ const isSelected = i === selectedIdx;
236
+ const isSkipped = skipped.has(c.id);
237
+ const checkbox = renderCheckbox(c, isSkipped);
238
+ const label = c.label.padEnd(28);
239
+ const detail = chalk.dim(c.detail);
240
+ if (isSelected) {
241
+ lines.push(" " + chalk.hex("#f97316")("❯ ") + checkbox + " " + chalk.bold(label) + " " + detail);
242
+ }
243
+ else {
244
+ const baseColor = isSkipped ? chalk.hex("#475569") : chalk.reset;
245
+ lines.push(" " + checkbox + " " + baseColor(label) + " " + detail);
146
246
  }
147
- return "skip";
148
247
  }
149
- const exitCode = await spawnInstall(hint);
150
- if (exitCode === 0) {
151
- process.stdout.write(chalk.green(" ✓ Installed.\n\n"));
152
- return "next";
248
+ return lines.join("\n") + "\n";
249
+ }
250
+ function renderCheckbox(c, isSkipped) {
251
+ if (c.status === "ok")
252
+ return chalk.green("[✓]");
253
+ if (c.status === "warn")
254
+ return chalk.yellow("[!]");
255
+ if (isSkipped)
256
+ return chalk.dim("[—]");
257
+ if (c.severity === "required" || c.severity === "block")
258
+ return chalk.red("[✗]");
259
+ return chalk.yellow("[○]");
260
+ }
261
+ function renderDetail(c) {
262
+ if (!c)
263
+ return "";
264
+ const lines = [];
265
+ lines.push(" " + chalk.dim("Why: ") + c.unlocks);
266
+ if (c.status !== "ok" && c.installable) {
267
+ const cmdline = `${c.installable.command} ${c.installable.args.join(" ")}`;
268
+ lines.push(" " + chalk.dim("Fix: ") + chalk.cyan(cmdline) + chalk.dim(" (press Enter)"));
153
269
  }
154
- process.stdout.write(chalk.red(` ✗ Install failed (exit ${exitCode}).`) + chalk.dim(" You can fix it manually:\n"));
155
- if (item.fix) {
156
- for (const line of item.fix.split("\n")) {
157
- process.stdout.write(" " + chalk.cyan(line) + "\n");
270
+ else if (c.status !== "ok" && c.fix) {
271
+ const firstLine = c.fix.split("\n")[0];
272
+ lines.push(" " + chalk.dim("Fix: ") + chalk.cyan(firstLine));
273
+ for (const line of c.fix.split("\n").slice(1)) {
274
+ lines.push(" " + chalk.cyan(line));
158
275
  }
159
276
  }
160
- process.stdout.write("\n");
161
- return "skip";
277
+ return lines.join("\n") + "\n";
162
278
  }
163
- function spawnInstall(hint) {
164
- return new Promise((resolve) => {
165
- const child = spawn(hint.command, hint.args, {
166
- stdio: "inherit", // user sees + interacts with the manager directly
167
- });
168
- child.on("close", (code) => resolve(code ?? 1));
169
- child.on("error", () => resolve(1));
170
- });
171
- }
172
- async function askYN(rl, prompt, defaultAns) {
173
- const suffix = defaultAns === "y" ? chalk.dim(" [Y/n] ") : chalk.dim(" [y/N] ");
174
- const raw = (await rl.question(prompt + suffix)).trim().toLowerCase();
175
- if (raw === "")
176
- return defaultAns === "y";
177
- if (raw === "y" || raw === "yes")
178
- return true;
179
- if (raw === "n" || raw === "no")
180
- return false;
181
- // Anything else: re-ask once, then fall through to default.
182
- const retry = (await rl.question(chalk.dim(' Please answer "y" or "n": '))).trim().toLowerCase();
183
- if (retry === "y" || retry === "yes")
184
- return true;
185
- if (retry === "n" || retry === "no")
186
- return false;
187
- return defaultAns === "y";
279
+ function renderFooter(note) {
280
+ const dim = chalk.dim;
281
+ const primary = chalk.hex("#f97316");
282
+ const keymap = " " +
283
+ primary("↑↓") +
284
+ dim(" navigate · ") +
285
+ primary("Enter") +
286
+ dim(" fix · ") +
287
+ primary("s") +
288
+ dim(" skip · ") +
289
+ primary("r") +
290
+ dim(" re-probe · ") +
291
+ primary("q") +
292
+ dim(" quit");
293
+ if (!note)
294
+ return keymap + "\n";
295
+ const noteColor = note.color === "ok" ? chalk.green : note.color === "warn" ? chalk.yellow : chalk.cyan;
296
+ return keymap + "\n " + noteColor(note.text) + "\n";
188
297
  }
189
- /**
190
- * Pick the next actionable item (block > required > optional-warn >
191
- * optional-missing) that the user hasn't already skipped this session.
192
- * Info-severity items are never returned.
193
- */
194
- function pickNextActionable(report, skipped) {
298
+ function pickFirstActionableIdx(items, skipped) {
299
+ // Priority: required-missing/warn optional-warn → optional-missing → 0.
195
300
  const tiers = [
196
301
  { severity: "block", statuses: ["missing", "warn"] },
197
302
  { severity: "required", statuses: ["missing", "warn"] },
@@ -199,16 +304,17 @@ function pickNextActionable(report, skipped) {
199
304
  { severity: "optional", statuses: ["missing"] },
200
305
  ];
201
306
  for (const tier of tiers) {
202
- const hit = report.checks.find((c) => c.severity === tier.severity && tier.statuses.includes(c.status) && !skipped.has(c.id));
203
- if (hit)
204
- return hit;
307
+ const idx = items.findIndex((c) => c.severity === tier.severity && tier.statuses.includes(c.status) && !skipped.has(c.id));
308
+ if (idx >= 0)
309
+ return idx;
205
310
  }
206
- return undefined;
207
- }
208
- function countActionable(report) {
209
- return report.checks.filter((c) => c.severity !== "info").length;
311
+ return 0;
210
312
  }
211
- function countDone(report) {
212
- return report.checks.filter((c) => c.severity !== "info" && c.status === "ok").length;
313
+ function spawnInstall(command, args) {
314
+ return new Promise((resolve) => {
315
+ const child = spawn(command, args, { stdio: "inherit" });
316
+ child.on("close", (code) => resolve(code ?? 1));
317
+ child.on("error", () => resolve(1));
318
+ });
213
319
  }
214
320
  //# sourceMappingURL=doctor-runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-runner.js","sourceRoot":"","sources":["../../src/core/doctor-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAA6D,SAAS,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,aAAa,GAAG,SAAS,CAAC;AAChC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAWtC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAyB,EAAE;IACpE,WAAW,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;IAEtC,8CAA8C;IAC9C,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kBAAkB,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAC3E,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,mBAAmB,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,8DAA8D;AAE9D,SAAS,WAAW,CAAC,UAAmB;IACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,eAAe,CAAC;QACd,OAAO,EAAE,iBAAiB,EAAE;QAC5B,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QACzC,QAAQ,EAAE,UAAU;YAClB,CAAC,CAAC,8CAA8C;YAChD,CAAC,CAAC,qCAAqC;KAC1C,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,mBAAmB,CAAC,UAAmB;IACpD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,iEAAiE;IACjE,0DAA0D;IAC1D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,IAAI,CAAC;QACH,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAE/B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,gEAAgE;gBAChE,MAAM,eAAe,GAAG,KAAK,KAAK,IAAI,CAAC;gBACvC,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI;wBACF,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC;wBACjD,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAC7C,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI;wBACF,KAAK,CAAC,GAAG,CACP,qBAAqB,IAAI,IAAI,KAAK,kDAAkD,CACrF,CACJ,CAAC;gBACJ,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;YACvD,IAAI,OAAO,KAAK,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;gBACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;gBAClF,OAAO;YACT,CAAC;QACH,CAAC;QACD,wCAAwC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAC7E,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAID,KAAK,UAAU,UAAU,CACvB,IAAiB,EACjB,EAAsC,EACtC,UAAmB;IAEnB,qCAAqC;IACrC,MAAM,GAAG,GACP,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;QACvD,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QACvB,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;YACtB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC;YACjC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IAE9D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,8DAA8D;IAC9D,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,iEAAiE;IACjE,oEAAoE;IACpE,mBAAmB;IACnB,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,EAAE,EAAE,8BAA8B,EAAE,GAAG,CAAC,CAAC;QACjE,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/B,CAAC;IACD,4DAA4D;IAC5D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,EAAE,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,IAAiB,EACjB,IAAqB,EACrB,EAAsC;IAEtC,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;YACnE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,CAAC,GAAG,CAAC,4BAA4B,QAAQ,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAC/F,CAAC;IACF,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAAqB;IACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;YAC3C,KAAK,EAAE,SAAS,EAAE,kDAAkD;SACrE,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,KAAK,CAClB,EAAsC,EACtC,MAAc,EACd,UAAqB;IAErB,MAAM,MAAM,GAAG,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtE,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,UAAU,KAAK,GAAG,CAAC;IAC1C,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9C,4DAA4D;IAC5D,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClG,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,UAAU,KAAK,GAAG,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,MAAoB,EAAE,OAAoB;IACpE,MAAM,KAAK,GAGN;QACH,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE;QACpD,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE;QACvD,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;QAC5C,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;KAChD,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9F,CAAC;QACF,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,MAAoB;IAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;AACnE,CAAC;AAED,SAAS,SAAS,CAAC,MAAoB;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;AACxF,CAAC"}
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";
6
7
  media: "media";
7
8
  cut: "cut";
8
9
  edit: "edit";
9
10
  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.4.0",
3
+ "version": "0.5.0",
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",