@kenkaiiii/gg-editor 0.4.1 → 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
|
-
/**
|
|
2
|
+
/** Welcome banner instead of the plain doctor banner. */
|
|
3
3
|
onboarding?: boolean;
|
|
4
|
-
/** Show the full inventory and exit (no
|
|
4
|
+
/** Show the full inventory and exit (no interactive screen). */
|
|
5
5
|
all?: boolean;
|
|
6
|
-
/** Skip every prompt — print the report and exit.
|
|
6
|
+
/** Skip every prompt — print the report once and exit. CI-friendly. */
|
|
7
7
|
nonInteractive?: boolean;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* Top-level entry
|
|
11
|
-
*
|
|
12
|
-
* -
|
|
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":"
|
|
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,208 +1,302 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Interactive doctor
|
|
2
|
+
* Interactive doctor screen.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
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
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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
|
|
28
|
-
*
|
|
29
|
-
* -
|
|
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
|
|
40
|
-
}
|
|
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
|
-
}));
|
|
49
|
+
await mountInteractiveScreen(opts.onboarding === true);
|
|
50
50
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
+
}
|
|
89
154
|
return;
|
|
90
155
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
+
});
|
|
98
220
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
+
});
|
|
230
|
+
}
|
|
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);
|
|
116
246
|
}
|
|
117
|
-
process.stdout.write("\n");
|
|
118
247
|
}
|
|
119
|
-
|
|
120
|
-
// no installer to confirm. "y" continues, "n" stops the walkthrough,
|
|
121
|
-
// "s" skips this item permanently for the session.
|
|
122
|
-
const ans = await askContinue(rl);
|
|
123
|
-
if (ans === "quit")
|
|
124
|
-
return "quit";
|
|
125
|
-
if (ans === "skip")
|
|
126
|
-
return "skip";
|
|
127
|
-
return "next";
|
|
248
|
+
return lines.join("\n") + "\n";
|
|
128
249
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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("[○]");
|
|
138
260
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const yes = await askYN(rl, " Install now?", "y");
|
|
148
|
-
if (!yes) {
|
|
149
|
-
if (item.fix) {
|
|
150
|
-
process.stdout.write(chalk.dim(" Skipping. To install later:\n"));
|
|
151
|
-
for (const line of item.fix.split("\n")) {
|
|
152
|
-
process.stdout.write(" " + chalk.cyan(line) + "\n");
|
|
153
|
-
}
|
|
154
|
-
process.stdout.write("\n");
|
|
155
|
-
}
|
|
156
|
-
return "skip";
|
|
157
|
-
}
|
|
158
|
-
const exitCode = await spawnInstall(hint);
|
|
159
|
-
if (exitCode === 0) {
|
|
160
|
-
process.stdout.write(chalk.green(" ✓ Installed.\n\n"));
|
|
161
|
-
// Don't add to `skipped`: a successful install should make the
|
|
162
|
-
// re-probe pass, removing the item from the priority list naturally.
|
|
163
|
-
return "installed";
|
|
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)"));
|
|
164
269
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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));
|
|
169
275
|
}
|
|
170
276
|
}
|
|
171
|
-
|
|
172
|
-
return "skip";
|
|
277
|
+
return lines.join("\n") + "\n";
|
|
173
278
|
}
|
|
174
|
-
function
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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";
|
|
182
297
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
const raw = (await rl.question(prompt + suffix)).trim().toLowerCase();
|
|
186
|
-
if (raw === "")
|
|
187
|
-
return defaultAns === "y";
|
|
188
|
-
if (raw === "y" || raw === "yes")
|
|
189
|
-
return true;
|
|
190
|
-
if (raw === "n" || raw === "no")
|
|
191
|
-
return false;
|
|
192
|
-
// Anything else: re-ask once, then fall through to default.
|
|
193
|
-
const retry = (await rl.question(chalk.dim(' Please answer "y" or "n": '))).trim().toLowerCase();
|
|
194
|
-
if (retry === "y" || retry === "yes")
|
|
195
|
-
return true;
|
|
196
|
-
if (retry === "n" || retry === "no")
|
|
197
|
-
return false;
|
|
198
|
-
return defaultAns === "y";
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Pick the next actionable item (block > required > optional-warn >
|
|
202
|
-
* optional-missing) that the user hasn't already skipped this session.
|
|
203
|
-
* Info-severity items are never returned.
|
|
204
|
-
*/
|
|
205
|
-
function pickNextActionable(report, skipped) {
|
|
298
|
+
function pickFirstActionableIdx(items, skipped) {
|
|
299
|
+
// Priority: required-missing/warn → optional-warn → optional-missing → 0.
|
|
206
300
|
const tiers = [
|
|
207
301
|
{ severity: "block", statuses: ["missing", "warn"] },
|
|
208
302
|
{ severity: "required", statuses: ["missing", "warn"] },
|
|
@@ -210,16 +304,17 @@ function pickNextActionable(report, skipped) {
|
|
|
210
304
|
{ severity: "optional", statuses: ["missing"] },
|
|
211
305
|
];
|
|
212
306
|
for (const tier of tiers) {
|
|
213
|
-
const
|
|
214
|
-
if (
|
|
215
|
-
return
|
|
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;
|
|
216
310
|
}
|
|
217
|
-
return
|
|
311
|
+
return 0;
|
|
218
312
|
}
|
|
219
|
-
function
|
|
220
|
-
return
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
|
|
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
|
+
});
|
|
224
319
|
}
|
|
225
320
|
//# sourceMappingURL=doctor-runner.js.map
|
|
@@ -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";
|
|
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.
|
|
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",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"ws": "^8.18.0",
|
|
29
29
|
"zod": "^4.3.6",
|
|
30
30
|
"@kenkaiiii/gg-agent": "4.3.84",
|
|
31
|
-
"@kenkaiiii/
|
|
32
|
-
"@kenkaiiii/
|
|
31
|
+
"@kenkaiiii/ggcoder": "4.3.84",
|
|
32
|
+
"@kenkaiiii/gg-ai": "4.3.84"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "^25.6.0",
|