@kenkaiiii/gg-editor 0.1.0 → 0.3.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.
package/dist/cli.js CHANGED
@@ -1,7 +1,11 @@
1
1
  #!/usr/bin/env node
2
+ import { mkdirSync, writeFileSync } from "node:fs";
3
+ import { dirname } from "node:path";
2
4
  import chalk from "chalk";
3
5
  import { getDefaultModel } from "@kenkaiiii/ggcoder/models";
4
6
  import { AuthStorage, NotLoggedInError, runLogin, runLogout, runStatus, } from "./core/auth/index.js";
7
+ import { isOnboarded, onboardedMarkerPath } from "./core/doctor.js";
8
+ import { runDoctorInteractive } from "./core/doctor-runner.js";
5
9
  import { discoverSkills } from "./core/skills-loader.js";
6
10
  import { discoverStyles } from "./core/styles-loader.js";
7
11
  import { SKILLS } from "./skills.js";
@@ -34,16 +38,31 @@ function printHelp() {
34
38
  process.stdout.write(`ggeditor — video editor agent for DaVinci Resolve and Premiere Pro
35
39
 
36
40
  USAGE
37
- ggeditor Launch the editor (auto-detects open NLE)
38
- ggeditor continue Resume the most recent session
39
- ggeditor login Authenticate
40
- ggeditor logout Clear credentials
41
- ggeditor auth Show stored credentials
41
+ ggeditor Launch the editor (auto-detects open NLE)
42
+ ggeditor continue Resume the most recent session
43
+ ggeditor login Authenticate
44
+ ggeditor logout Clear credentials
45
+ ggeditor auth Show stored credentials
46
+ ggeditor doctor Walk through environment fixes (--all to view inventory)
42
47
 
43
48
  Auth lives in ~/.gg/auth.json — the SAME file ggcoder uses, so logging into
44
49
  either CLI works for both.
45
50
  `);
46
51
  }
52
+ /**
53
+ * Mark the current home as onboarded so we don't re-run the doctor on
54
+ * subsequent launches. Called after a first-run doctor pass succeeds.
55
+ */
56
+ function markOnboarded() {
57
+ const path = onboardedMarkerPath();
58
+ try {
59
+ mkdirSync(dirname(path), { recursive: true });
60
+ writeFileSync(path, new Date().toISOString() + "\n", "utf8");
61
+ }
62
+ catch {
63
+ // Non-fatal — we'll just re-run onboarding next time.
64
+ }
65
+ }
47
66
  async function pickProvider(auth) {
48
67
  for (const p of PROVIDER_ORDER) {
49
68
  if (await auth.hasCredentials(p))
@@ -70,6 +89,12 @@ async function main() {
70
89
  await runStatus();
71
90
  return;
72
91
  }
92
+ if (sub === "doctor") {
93
+ const all = args.includes("--all") || args.includes("-a");
94
+ const yes = args.includes("--yes") || args.includes("-y");
95
+ await runDoctorInteractive({ all, nonInteractive: yes });
96
+ return;
97
+ }
73
98
  const isContinue = sub === "continue";
74
99
  if (sub && !isContinue) {
75
100
  fail(`unknown command: ${sub}\nrun: ggeditor --help`);
@@ -78,6 +103,13 @@ async function main() {
78
103
  if (!process.stdin.isTTY) {
79
104
  fail("ggeditor requires an interactive terminal");
80
105
  }
106
+ // First-run onboarding — only when the marker doesn't exist. Walks
107
+ // the user through every actionable item, offering Y/N confirms for
108
+ // anything we know how to install via a package manager.
109
+ if (!isOnboarded()) {
110
+ await runDoctorInteractive({ onboarding: true });
111
+ markOnboarded();
112
+ }
81
113
  const auth = new AuthStorage();
82
114
  await auth.load();
83
115
  const provider = await pickProvider(auth);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { DoctorReport } from "./doctor.js";
2
+ export interface RenderOptions {
3
+ /** Show the welcome banner instead of the plain header. */
4
+ onboarding?: boolean;
5
+ /** Show every check, not just the next thing to fix. */
6
+ all?: boolean;
7
+ }
8
+ export declare function renderDoctorReport(report: DoctorReport, opts?: RenderOptions): string;
9
+ //# sourceMappingURL=doctor-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-render.d.ts","sourceRoot":"","sources":["../../src/core/doctor-render.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wDAAwD;IACxD,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CAEzF"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Pretty-printer for DoctorReport.
3
+ *
4
+ * Two modes:
5
+ *
6
+ * 1. focused (default) — show ONE thing to fix at a time, highest
7
+ * priority first. After the user fixes it and re-runs, the next
8
+ * one surfaces. When everything's clear: "Nothing to fix."
9
+ * This is the daily-driver mode and what onboarding uses.
10
+ *
11
+ * 2. all — full inventory, grouped by severity. Useful when the user
12
+ * wants to see what's optional / unlocks what. Triggered by
13
+ * `ggeditor doctor --all`.
14
+ *
15
+ * Priority order for the focused mode:
16
+ * required-missing > optional-warn > optional-missing > done
17
+ * Within a tier we keep the source order from runDoctor() so the most
18
+ * impactful tools (ffmpeg, then auth) come first.
19
+ */
20
+ import chalk from "chalk";
21
+ export function renderDoctorReport(report, opts = {}) {
22
+ return opts.all ? renderAll(report, opts) : renderFocused(report, opts);
23
+ }
24
+ // ── Focused mode (default) ──────────────────────────────────
25
+ function renderFocused(report, opts) {
26
+ const out = [];
27
+ const next = pickNextToFix(report);
28
+ const done = countDone(report);
29
+ const total = countActionable(report);
30
+ if (!next) {
31
+ // Nothing left to fix.
32
+ out.push(" " +
33
+ chalk.green("✓ Nothing to fix. You're all good.") +
34
+ chalk.dim(" Run `ggeditor` to start."));
35
+ out.push(" " + progressBar(done, total));
36
+ out.push(chalk.dim(" Re-run with `ggeditor doctor --all` to see the full inventory."));
37
+ out.push("");
38
+ return out.join("\n");
39
+ }
40
+ // One focused item.
41
+ out.push(" " + chalk.dim(progressBar(done, total)));
42
+ out.push("");
43
+ out.push(" " + severityHeading(next));
44
+ out.push(" " + chalk.bold(next.label) + chalk.dim(" — " + next.detail));
45
+ out.push("");
46
+ out.push(" " + chalk.dim("Why it matters"));
47
+ out.push(" " + next.unlocks);
48
+ if (next.fix) {
49
+ out.push("");
50
+ out.push(" " + chalk.dim("Fix"));
51
+ for (const line of next.fix.split("\n")) {
52
+ out.push(" " + chalk.cyan(line));
53
+ }
54
+ }
55
+ out.push("");
56
+ out.push(chalk.dim(" Re-run `ggeditor doctor` after fixing to see the next item."));
57
+ if (!opts.all) {
58
+ out.push(chalk.dim(" Or `ggeditor doctor --all` to see the full inventory."));
59
+ }
60
+ out.push("");
61
+ return out.join("\n");
62
+ }
63
+ // ── All mode (--all) ────────────────────────────────────────
64
+ function renderAll(report, _opts) {
65
+ const out = [];
66
+ const groups = [
67
+ { title: "Required", severities: ["block", "required"] },
68
+ { title: "Optional", severities: ["optional"] },
69
+ { title: "Info", severities: ["info"] },
70
+ ];
71
+ for (const group of groups) {
72
+ const items = report.checks.filter((c) => group.severities.includes(c.severity));
73
+ if (items.length === 0)
74
+ continue;
75
+ out.push(" " + chalk.dim(group.title));
76
+ for (const c of items)
77
+ out.push(renderInventoryLine(c));
78
+ out.push("");
79
+ }
80
+ // Summary
81
+ const next = pickNextToFix(report);
82
+ if (!next) {
83
+ out.push(" " +
84
+ chalk.green("✓ Nothing to fix. You're all good.") +
85
+ chalk.dim(" Run `ggeditor` to start."));
86
+ }
87
+ else {
88
+ out.push(" " + chalk.dim("Next: ") + chalk.bold(next.label) + chalk.dim(" — see `ggeditor doctor`"));
89
+ }
90
+ out.push("");
91
+ return out.join("\n");
92
+ }
93
+ function renderInventoryLine(c) {
94
+ const glyph = c.status === "ok"
95
+ ? chalk.green("✓")
96
+ : c.status === "warn"
97
+ ? chalk.yellow("!")
98
+ : c.severity === "required" || c.severity === "block"
99
+ ? chalk.red("✗")
100
+ : chalk.yellow("○");
101
+ return ` ${glyph} ${c.label.padEnd(28)} ${chalk.dim(c.detail)}`;
102
+ }
103
+ // ── Helpers ────────────────────────────────────────────────
104
+ /**
105
+ * Pick the next thing to fix in priority order. `info` checks are
106
+ * never returned (they're informational, not actionable).
107
+ */
108
+ function pickNextToFix(report) {
109
+ const tiers = [
110
+ { severity: "block", statuses: ["missing", "warn"] },
111
+ { severity: "required", statuses: ["missing", "warn"] },
112
+ { severity: "optional", statuses: ["warn"] }, // warn before plain missing
113
+ { severity: "optional", statuses: ["missing"] },
114
+ ];
115
+ for (const tier of tiers) {
116
+ const hit = report.checks.find((c) => c.severity === tier.severity && tier.statuses.includes(c.status));
117
+ if (hit)
118
+ return hit;
119
+ }
120
+ return undefined;
121
+ }
122
+ /** Pretty heading above the focused item. */
123
+ function severityHeading(c) {
124
+ if (c.severity === "required" || c.severity === "block") {
125
+ return chalk.red.bold("Next up — required");
126
+ }
127
+ if (c.status === "warn")
128
+ return chalk.yellow.bold("Next up — needs attention");
129
+ return chalk.yellow.bold("Next up — optional");
130
+ }
131
+ /** Count actionable items (everything except `info`). */
132
+ function countActionable(report) {
133
+ return report.checks.filter((c) => c.severity !== "info").length;
134
+ }
135
+ function countDone(report) {
136
+ return report.checks.filter((c) => c.severity !== "info" && c.status === "ok").length;
137
+ }
138
+ /** "[██████░░░] 6 of 9" — at-a-glance progress. */
139
+ function progressBar(done, total) {
140
+ const width = 12;
141
+ const filled = total === 0 ? 0 : Math.round((done / total) * width);
142
+ const bar = chalk.green("█".repeat(filled)) + chalk.dim("░".repeat(width - filled));
143
+ return `${bar} ${done} of ${total} ready`;
144
+ }
145
+ //# sourceMappingURL=doctor-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-render.js","sourceRoot":"","sources":["../../src/core/doctor-render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doctor-render.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-render.test.d.ts","sourceRoot":"","sources":["../../src/core/doctor-render.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,151 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { renderDoctorReport } from "./doctor-render.js";
3
+ /**
4
+ * Strip ANSI escape sequences so assertions don't depend on chalk's
5
+ * runtime behavior (it auto-disables colors when stdout isn't a TTY).
6
+ * The pattern matches CSI sequences like \x1b[31m, \x1b[0m, etc.
7
+ */
8
+ // eslint-disable-next-line no-control-regex
9
+ const ANSI_RE = /\x1b\[[0-9;]*m/g;
10
+ const strip = (s) => s.replace(ANSI_RE, "");
11
+ function check(id, severity, status, fix) {
12
+ return {
13
+ id,
14
+ label: id,
15
+ severity,
16
+ status,
17
+ detail: status === "ok" ? "found" : "missing",
18
+ unlocks: `What ${id} unlocks.`,
19
+ fix,
20
+ };
21
+ }
22
+ function report(checks) {
23
+ return {
24
+ checks,
25
+ ready: checks.every((c) => c.severity !== "required" || c.status === "ok"),
26
+ markerPath: "/tmp/.gg/onboarded-ggeditor",
27
+ onboarded: false,
28
+ };
29
+ }
30
+ describe("renderDoctorReport — focused mode (default)", () => {
31
+ it("shows 'Nothing to fix' when every actionable check passes", () => {
32
+ const r = report([
33
+ check("ffmpeg", "required", "ok"),
34
+ check("auth", "required", "ok"),
35
+ check("openai", "optional", "ok"),
36
+ check("info-only", "info", "missing"), // info doesn't count
37
+ ]);
38
+ const out = strip(renderDoctorReport(r));
39
+ expect(out).toContain("Nothing to fix");
40
+ expect(out).toContain("ggeditor");
41
+ // Should NOT show any individual check details when everything's ok.
42
+ expect(out).not.toContain("Why it matters");
43
+ expect(out).not.toContain("Fix");
44
+ });
45
+ it("surfaces a missing required item before any optional one", () => {
46
+ const r = report([
47
+ check("openai", "optional", "missing", "set OPENAI_API_KEY"),
48
+ check("ffmpeg", "required", "missing", "brew install ffmpeg"),
49
+ ]);
50
+ const out = strip(renderDoctorReport(r));
51
+ // Required headings should mention 'required'.
52
+ expect(out).toContain("required");
53
+ // The missing required item should be the focal point — its
54
+ // label appears as the heading-bold thing.
55
+ expect(out).toContain("ffmpeg");
56
+ expect(out).toContain("brew install ffmpeg");
57
+ // The optional item should NOT be rendered as the focal point.
58
+ expect(out).not.toContain("set OPENAI_API_KEY");
59
+ });
60
+ it("falls back to optional items only when no required is missing", () => {
61
+ const r = report([
62
+ check("ffmpeg", "required", "ok"),
63
+ check("ffprobe", "required", "ok"),
64
+ check("openai", "optional", "missing", "set OPENAI_API_KEY"),
65
+ ]);
66
+ const out = strip(renderDoctorReport(r));
67
+ expect(out).toContain("optional");
68
+ expect(out).toContain("openai");
69
+ expect(out).toContain("set OPENAI_API_KEY");
70
+ });
71
+ it("never picks an info-severity item as the focal point", () => {
72
+ const r = report([
73
+ check("ffmpeg", "required", "ok"),
74
+ check("auth", "required", "ok"),
75
+ check("anthropic-key", "info", "missing", "should not surface"),
76
+ ]);
77
+ const out = strip(renderDoctorReport(r));
78
+ expect(out).toContain("Nothing to fix");
79
+ expect(out).not.toContain("should not surface");
80
+ });
81
+ it("prefers warn over plain missing within the optional tier", () => {
82
+ const r = report([
83
+ check("ffmpeg", "required", "ok"),
84
+ check("openai", "optional", "missing", "set OPENAI_API_KEY"),
85
+ check("whisperx", "optional", "warn", "set HF_TOKEN"),
86
+ ]);
87
+ const out = strip(renderDoctorReport(r));
88
+ // The warn item should be the focal point.
89
+ expect(out).toContain("set HF_TOKEN");
90
+ expect(out).not.toContain("set OPENAI_API_KEY");
91
+ });
92
+ it("renders a progress bar showing how many items are ready", () => {
93
+ const r = report([
94
+ check("ffmpeg", "required", "ok"),
95
+ check("ffprobe", "required", "ok"),
96
+ check("auth", "required", "missing", "ggeditor login"),
97
+ check("openai", "optional", "missing", "set OPENAI_API_KEY"),
98
+ ]);
99
+ const out = strip(renderDoctorReport(r));
100
+ // 2 of 4 actionable items pass.
101
+ expect(out).toContain("2 of 4 ready");
102
+ });
103
+ it("does not output multiple checks at once in focused mode", () => {
104
+ const r = report([
105
+ check("ffmpeg", "required", "missing", "brew install ffmpeg"),
106
+ check("ffprobe", "required", "missing", "brew install ffmpeg"),
107
+ check("auth", "required", "missing", "ggeditor login"),
108
+ ]);
109
+ const out = strip(renderDoctorReport(r));
110
+ // Exactly ONE 'Why it matters' block — one focal item at a time.
111
+ const matters = out.match(/Why it matters/g) ?? [];
112
+ expect(matters.length).toBe(1);
113
+ });
114
+ });
115
+ describe("renderDoctorReport — all mode (--all)", () => {
116
+ it("lists every actionable check grouped by severity", () => {
117
+ const r = report([
118
+ check("ffmpeg", "required", "ok"),
119
+ check("ffprobe", "required", "missing", "brew install ffmpeg"),
120
+ check("openai", "optional", "missing", "set OPENAI_API_KEY"),
121
+ check("anthropic-key", "info", "missing"),
122
+ ]);
123
+ const out = strip(renderDoctorReport(r, { all: true }));
124
+ expect(out).toContain("Required");
125
+ expect(out).toContain("Optional");
126
+ expect(out).toContain("Info");
127
+ expect(out).toContain("ffmpeg");
128
+ expect(out).toContain("ffprobe");
129
+ expect(out).toContain("openai");
130
+ expect(out).toContain("anthropic-key");
131
+ });
132
+ it("ends with 'Nothing to fix' summary when everything is ok", () => {
133
+ const r = report([
134
+ check("ffmpeg", "required", "ok"),
135
+ check("auth", "required", "ok"),
136
+ check("openai", "optional", "ok"),
137
+ ]);
138
+ const out = strip(renderDoctorReport(r, { all: true }));
139
+ expect(out).toContain("Nothing to fix");
140
+ });
141
+ it("ends with a 'Next: <label>' summary when there's something to fix", () => {
142
+ const r = report([
143
+ check("ffmpeg", "required", "ok"),
144
+ check("auth", "required", "missing", "ggeditor login"),
145
+ ]);
146
+ const out = strip(renderDoctorReport(r, { all: true }));
147
+ expect(out).toContain("Next:");
148
+ expect(out).toContain("auth");
149
+ });
150
+ });
151
+ //# sourceMappingURL=doctor-render.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-render.test.js","sourceRoot":"","sources":["../../src/core/doctor-render.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface DoctorRunOptions {
2
+ /** Print the welcome banner instead of the plain doctor banner. */
3
+ onboarding?: boolean;
4
+ /** Show the full inventory and exit (no install prompts). */
5
+ all?: boolean;
6
+ /** Skip every prompt — print the report and exit. Useful in CI. */
7
+ nonInteractive?: boolean;
8
+ }
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.
13
+ */
14
+ export declare function runDoctorInteractive(opts?: DoctorRunOptions): Promise<void>;
15
+ //# sourceMappingURL=doctor-runner.d.ts.map
@@ -0,0 +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"}