@kenkaiiii/ggcoder 4.3.223 → 4.3.225

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.
Files changed (93) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/auth.d.ts +4 -0
  3. package/dist/cli/auth.d.ts.map +1 -0
  4. package/dist/cli/auth.js +344 -0
  5. package/dist/cli/auth.js.map +1 -0
  6. package/dist/cli/pixel.d.ts +27 -0
  7. package/dist/cli/pixel.d.ts.map +1 -0
  8. package/dist/cli/pixel.js +103 -0
  9. package/dist/cli/pixel.js.map +1 -0
  10. package/dist/cli/shared.d.ts +13 -0
  11. package/dist/cli/shared.d.ts.map +1 -0
  12. package/dist/cli/shared.js +82 -0
  13. package/dist/cli/shared.js.map +1 -0
  14. package/dist/cli.d.ts.map +1 -1
  15. package/dist/cli.js +15 -544
  16. package/dist/cli.js.map +1 -1
  17. package/dist/config.js +1 -1
  18. package/dist/config.js.map +1 -1
  19. package/dist/core/compaction/compactor.test.js +2 -2
  20. package/dist/core/compaction/token-estimator.test.js +1 -1
  21. package/dist/core/model-registry.d.ts +2 -2
  22. package/dist/core/model-registry.js +4 -4
  23. package/dist/core/model-registry.js.map +1 -1
  24. package/dist/core/model-registry.test.js +1 -1
  25. package/dist/core/model-registry.test.js.map +1 -1
  26. package/dist/core/runtime-mode.js +1 -1
  27. package/dist/core/runtime-mode.js.map +1 -1
  28. package/dist/core/settings-manager.d.ts +3 -2
  29. package/dist/core/settings-manager.d.ts.map +1 -1
  30. package/dist/core/settings-manager.js +1 -6
  31. package/dist/core/settings-manager.js.map +1 -1
  32. package/dist/system-prompt.js +2 -2
  33. package/dist/system-prompt.js.map +1 -1
  34. package/dist/tools/bash.d.ts.map +1 -1
  35. package/dist/tools/bash.js +2 -1
  36. package/dist/tools/bash.js.map +1 -1
  37. package/dist/tools/plan-mode.test.js +13 -1
  38. package/dist/tools/plan-mode.test.js.map +1 -1
  39. package/dist/tools/read-only-bash.d.ts +13 -0
  40. package/dist/tools/read-only-bash.d.ts.map +1 -0
  41. package/dist/tools/read-only-bash.js +155 -0
  42. package/dist/tools/read-only-bash.js.map +1 -0
  43. package/dist/tools/read-only-bash.test.d.ts +2 -0
  44. package/dist/tools/read-only-bash.test.d.ts.map +1 -0
  45. package/dist/tools/read-only-bash.test.js +47 -0
  46. package/dist/tools/read-only-bash.test.js.map +1 -0
  47. package/dist/ui/App.d.ts.map +1 -1
  48. package/dist/ui/App.js +105 -1034
  49. package/dist/ui/App.js.map +1 -1
  50. package/dist/ui/components/Footer.d.ts +2 -2
  51. package/dist/ui/components/Footer.js +8 -8
  52. package/dist/ui/components/Footer.js.map +1 -1
  53. package/dist/ui/components/index.d.ts +3 -0
  54. package/dist/ui/components/index.d.ts.map +1 -1
  55. package/dist/ui/components/index.js +3 -0
  56. package/dist/ui/components/index.js.map +1 -1
  57. package/dist/ui/hooks/useContextCompaction.d.ts +41 -0
  58. package/dist/ui/hooks/useContextCompaction.d.ts.map +1 -0
  59. package/dist/ui/hooks/useContextCompaction.js +149 -0
  60. package/dist/ui/hooks/useContextCompaction.js.map +1 -0
  61. package/dist/ui/hooks/useGoalOrchestration.d.ts +81 -0
  62. package/dist/ui/hooks/useGoalOrchestration.d.ts.map +1 -0
  63. package/dist/ui/hooks/useGoalOrchestration.js +745 -0
  64. package/dist/ui/hooks/useGoalOrchestration.js.map +1 -0
  65. package/dist/ui/hooks/useModeState.d.ts +61 -0
  66. package/dist/ui/hooks/useModeState.d.ts.map +1 -0
  67. package/dist/ui/hooks/useModeState.js +86 -0
  68. package/dist/ui/hooks/useModeState.js.map +1 -0
  69. package/dist/ui/hooks/usePixelFixFlow.d.ts +57 -0
  70. package/dist/ui/hooks/usePixelFixFlow.d.ts.map +1 -0
  71. package/dist/ui/hooks/usePixelFixFlow.js +102 -0
  72. package/dist/ui/hooks/usePixelFixFlow.js.map +1 -0
  73. package/dist/ui/hooks/useSessionPersistence.d.ts +34 -0
  74. package/dist/ui/hooks/useSessionPersistence.d.ts.map +1 -0
  75. package/dist/ui/hooks/useSessionPersistence.js +67 -0
  76. package/dist/ui/hooks/useSessionPersistence.js.map +1 -0
  77. package/dist/ui/hooks/useTranscriptHistory.d.ts +30 -16
  78. package/dist/ui/hooks/useTranscriptHistory.d.ts.map +1 -1
  79. package/dist/ui/hooks/useTranscriptHistory.js +13 -15
  80. package/dist/ui/hooks/useTranscriptHistory.js.map +1 -1
  81. package/dist/ui/login.js +1 -1
  82. package/dist/ui/terminal-history.test.js +60 -0
  83. package/dist/ui/terminal-history.test.js.map +1 -1
  84. package/dist/ui/thinking-level-cycle.test.js +23 -3
  85. package/dist/ui/thinking-level-cycle.test.js.map +1 -1
  86. package/dist/ui/thinking-level.d.ts.map +1 -1
  87. package/dist/ui/thinking-level.js +30 -1
  88. package/dist/ui/thinking-level.js.map +1 -1
  89. package/dist/ui/transcript/spacing.d.ts +31 -19
  90. package/dist/ui/transcript/spacing.d.ts.map +1 -1
  91. package/dist/ui/transcript/spacing.js +16 -3
  92. package/dist/ui/transcript/spacing.js.map +1 -1
  93. package/package.json +24 -4
package/README.md CHANGED
@@ -69,7 +69,7 @@ Switch mid-conversation with `/model`. Not locked to anyone.
69
69
 
70
70
  | Provider | Models | Auth |
71
71
  |---|---|---|
72
- | **Anthropic** | Claude Opus 4.7, Sonnet 4.6, Haiku 4.5 | OAuth |
72
+ | **Anthropic** | Claude Opus 4.8, Sonnet 4.6, Haiku 4.5 | OAuth |
73
73
  | **OpenAI** | GPT-5.5, GPT-5.5 Pro, GPT-5.4, GPT-5.3 Codex | OAuth |
74
74
  | **Moonshot** | Kimi K2.6 | API key |
75
75
  | **Z.AI (GLM)** | GLM-5.1, GLM-4.7, GLM-4.7 Flash | API key |
@@ -0,0 +1,4 @@
1
+ export declare function runLogin(): Promise<void>;
2
+ export declare function runDoctor(): Promise<void>;
3
+ export declare function runLogout(): Promise<void>;
4
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AAqBA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA6F9C;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA8P/C;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAW/C"}
@@ -0,0 +1,344 @@
1
+ import readline from "node:readline/promises";
2
+ import path from "node:path";
3
+ import chalk from "chalk";
4
+ import { renderLoginSelector } from "../ui/login.js";
5
+ import { ensureAppDirs } from "../config.js";
6
+ import { initLogger, log, closeLogger } from "../core/logger.js";
7
+ import { AuthStorage } from "../core/auth-storage.js";
8
+ import { loginAnthropic } from "../core/oauth/anthropic.js";
9
+ import { loginOpenAI } from "../core/oauth/openai.js";
10
+ import { loginGemini } from "../core/oauth/gemini.js";
11
+ import { CLI_VERSION, LOGO_LINES, clearVisibleScreen, displayName, gradientLine, openBrowser, requireInteractiveTTY, } from "./shared.js";
12
+ export async function runLogin() {
13
+ requireInteractiveTTY();
14
+ clearVisibleScreen();
15
+ const paths = await ensureAppDirs();
16
+ initLogger(paths.logFile, { version: CLI_VERSION });
17
+ log("INFO", "auth", "Login flow started");
18
+ const authStorage = new AuthStorage();
19
+ await authStorage.load();
20
+ // Phase 1: Ink-based provider selector
21
+ const provider = await renderLoginSelector(CLI_VERSION);
22
+ if (!provider) {
23
+ console.log(chalk.hex("#6b7280")("Login cancelled."));
24
+ return;
25
+ }
26
+ console.log(chalk.hex("#60a5fa").bold("\nLogging in to ") +
27
+ chalk.hex("#a78bfa")(displayName(provider)) +
28
+ chalk.hex("#60a5fa").bold("...\n"));
29
+ // Phase 2: OAuth flow (readline needed for Anthropic code paste)
30
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
31
+ try {
32
+ const callbacks = {
33
+ onOpenUrl: (url) => {
34
+ console.log(chalk.hex("#60a5fa").bold("Opening browser..."));
35
+ openBrowser(url);
36
+ console.log(chalk.hex("#6b7280")("\nIf the browser didn't open, visit:\n") +
37
+ chalk.hex("#6b7280")(url) +
38
+ "\n");
39
+ },
40
+ onPromptCode: async (message) => {
41
+ return rl.question(message + " ");
42
+ },
43
+ onStatus: (message) => {
44
+ console.log(chalk.hex("#6b7280")(message));
45
+ },
46
+ };
47
+ let creds;
48
+ if (provider === "glm" ||
49
+ provider === "moonshot" ||
50
+ provider === "xiaomi" ||
51
+ provider === "minimax" ||
52
+ provider === "deepseek" ||
53
+ provider === "openrouter") {
54
+ const keyLabel = provider === "glm"
55
+ ? "Z.AI"
56
+ : provider === "xiaomi"
57
+ ? "Xiaomi MiMo"
58
+ : provider === "minimax"
59
+ ? "MiniMax"
60
+ : provider === "deepseek"
61
+ ? "DeepSeek"
62
+ : provider === "openrouter"
63
+ ? "OpenRouter"
64
+ : "Moonshot";
65
+ const apiKey = await rl.question(chalk.hex("#60a5fa")(`Paste your ${keyLabel} API key: `));
66
+ if (!apiKey.trim()) {
67
+ console.log(chalk.hex("#ef4444")("No API key provided. Login cancelled."));
68
+ return;
69
+ }
70
+ creds = {
71
+ accessToken: apiKey.trim(),
72
+ refreshToken: "",
73
+ expiresAt: Date.now() + 365 * 24 * 60 * 60 * 1000 * 100, // ~100 years
74
+ ...(provider === "xiaomi" ? { baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1" } : {}),
75
+ };
76
+ }
77
+ else {
78
+ creds =
79
+ provider === "anthropic"
80
+ ? await loginAnthropic(callbacks)
81
+ : provider === "gemini"
82
+ ? await loginGemini(callbacks)
83
+ : await loginOpenAI(callbacks);
84
+ }
85
+ await authStorage.setCredentials(provider, creds);
86
+ log("INFO", "auth", `Login succeeded for ${displayName(provider)}`);
87
+ console.log(chalk.hex("#4ade80")(`\n✓ Logged in to ${displayName(provider)} successfully!`));
88
+ }
89
+ finally {
90
+ rl.close();
91
+ closeLogger();
92
+ }
93
+ }
94
+ export async function runDoctor() {
95
+ clearVisibleScreen();
96
+ const os = await import("node:os");
97
+ const fsP = await import("node:fs/promises");
98
+ const dim = chalk.hex("#6b7280");
99
+ const primary = chalk.hex("#60a5fa");
100
+ const accent = chalk.hex("#a78bfa");
101
+ const good = chalk.hex("#4ade80");
102
+ const warn = chalk.hex("#fbbf24");
103
+ const bad = chalk.hex("#ef4444");
104
+ // ── Banner ──────────────────────────────────────────────────
105
+ const LOGO = LOGO_LINES;
106
+ const GAP = " ";
107
+ console.log();
108
+ console.log(` ${gradientLine(LOGO[0])}${GAP}` +
109
+ primary.bold("GG Coder") +
110
+ dim(` v${CLI_VERSION}`) +
111
+ dim(" · By ") +
112
+ chalk.white.bold("Ken Kai"));
113
+ console.log(` ${gradientLine(LOGO[1])}${GAP}` + accent("Doctor"));
114
+ console.log(` ${gradientLine(LOGO[2])}${GAP}` + dim("Diagnose & Fix"));
115
+ console.log();
116
+ const home = os.homedir();
117
+ const ggDir = path.join(home, ".gg");
118
+ const authFile = path.join(ggDir, "auth.json");
119
+ const lockFile = authFile + ".lock";
120
+ const myUid = process.getuid();
121
+ let fixed = 0;
122
+ // ── Environment ─────────────────────────────────────────────
123
+ console.log(accent(" Environment\n"));
124
+ console.log(dim(` Home: ${home}`));
125
+ console.log(dim(` $HOME: ${process.env.HOME ?? "(not set)"}`));
126
+ console.log(dim(` Node.js: ${process.version}`));
127
+ console.log(dim(` Platform: ${process.platform} ${process.arch}`));
128
+ console.log(dim(` UID: ${myUid} EUID: ${process.geteuid()}`));
129
+ if (process.env.HOME && process.env.HOME !== home) {
130
+ console.log(warn("\n ⚠ $HOME differs from os.homedir() — this can cause auth mismatches"));
131
+ }
132
+ if (myUid !== process.geteuid()) {
133
+ console.log(warn(" ⚠ uid ≠ euid — running with elevated privileges (sudo?)"));
134
+ console.log(dim(" Running ggcoder with sudo can cause ownership issues."));
135
+ console.log(dim(" Use without sudo, or fix after: sudo chown -R $(whoami) ~/.gg"));
136
+ }
137
+ console.log();
138
+ // ── Config Directory ────────────────────────────────────────
139
+ console.log(accent(" Config Directory\n"));
140
+ try {
141
+ const stat = await fsP.stat(ggDir);
142
+ const mode = stat.mode & 0o777;
143
+ console.log(dim(` Path: ${ggDir}`));
144
+ console.log(dim(` Mode: 0o${mode.toString(8)} UID: ${stat.uid}`));
145
+ // Fix ownership
146
+ if (stat.uid !== myUid) {
147
+ console.log(warn(` ⚠ Owned by uid ${stat.uid}, expected ${myUid}`));
148
+ try {
149
+ await fsP.chown(ggDir, myUid, process.getgid());
150
+ console.log(good(" ✓ Fixed directory ownership"));
151
+ fixed++;
152
+ }
153
+ catch {
154
+ console.log(bad(` ✗ Cannot fix — try: sudo chown -R $(whoami) ${ggDir}`));
155
+ }
156
+ }
157
+ // Fix permissions (should be 0o700)
158
+ if (mode !== 0o700) {
159
+ try {
160
+ await fsP.chmod(ggDir, 0o700);
161
+ console.log(good(" ✓ Fixed directory permissions → 0o700"));
162
+ fixed++;
163
+ }
164
+ catch {
165
+ console.log(bad(` ✗ Cannot fix — try: chmod 700 ${ggDir}`));
166
+ }
167
+ }
168
+ }
169
+ catch {
170
+ console.log(warn(` ${ggDir} missing — creating...`));
171
+ try {
172
+ await fsP.mkdir(ggDir, { recursive: true, mode: 0o700 });
173
+ console.log(good(` ✓ Created ${ggDir}`));
174
+ fixed++;
175
+ }
176
+ catch (mkErr) {
177
+ console.log(bad(` ✗ Cannot create: ${mkErr instanceof Error ? mkErr.message : String(mkErr)}`));
178
+ console.log();
179
+ return;
180
+ }
181
+ }
182
+ console.log();
183
+ // ── Lock File ───────────────────────────────────────────────
184
+ try {
185
+ const lockStat = await fsP.stat(lockFile);
186
+ const ageMs = Date.now() - lockStat.mtimeMs;
187
+ console.log(accent(" Lock File\n"));
188
+ console.log(warn(` ⚠ Stale lock found (age: ${Math.round(ageMs / 1000)}s)`));
189
+ await fsP.unlink(lockFile);
190
+ console.log(good(" ✓ Removed"));
191
+ fixed++;
192
+ console.log();
193
+ }
194
+ catch {
195
+ // No lock file — good, skip section entirely
196
+ }
197
+ // ── Auth File ───────────────────────────────────────────────
198
+ console.log(accent(" Auth File\n"));
199
+ let authData = null;
200
+ let authNeedsRewrite = false;
201
+ try {
202
+ const stat = await fsP.stat(authFile);
203
+ const mode = stat.mode & 0o777;
204
+ console.log(dim(` Path: ${authFile}`));
205
+ console.log(dim(` Size: ${stat.size} bytes Mode: 0o${mode.toString(8)} UID: ${stat.uid}`));
206
+ // Fix ownership
207
+ if (stat.uid !== myUid) {
208
+ console.log(warn(` ⚠ Owned by uid ${stat.uid}, expected ${myUid}`));
209
+ try {
210
+ await fsP.chown(authFile, myUid, process.getgid());
211
+ console.log(good(" ✓ Fixed file ownership"));
212
+ fixed++;
213
+ }
214
+ catch {
215
+ console.log(bad(` ✗ Cannot fix — try: sudo chown $(whoami) ${authFile}`));
216
+ }
217
+ }
218
+ // Fix permissions (should be 0o600)
219
+ if (mode !== 0o600) {
220
+ try {
221
+ await fsP.chmod(authFile, 0o600);
222
+ console.log(good(" ✓ Fixed file permissions → 0o600"));
223
+ fixed++;
224
+ }
225
+ catch {
226
+ console.log(bad(` ✗ Cannot fix — try: chmod 600 ${authFile}`));
227
+ }
228
+ }
229
+ // Try to read and parse
230
+ try {
231
+ const content = await fsP.readFile(authFile, "utf-8");
232
+ try {
233
+ authData = JSON.parse(content);
234
+ }
235
+ catch {
236
+ console.log(bad(" ✗ Invalid JSON — backing up and resetting"));
237
+ const backupName = `auth.json.corrupt.${Date.now()}`;
238
+ await fsP.copyFile(authFile, path.join(ggDir, backupName));
239
+ await fsP.writeFile(authFile, "{}", { encoding: "utf-8", mode: 0o600 });
240
+ console.log(good(` ✓ Corrupt file backed up as ${backupName}`));
241
+ console.log(dim(' Run "ggcoder login" to re-authenticate'));
242
+ authData = {};
243
+ fixed++;
244
+ }
245
+ }
246
+ catch (readErr) {
247
+ const code = readErr.code;
248
+ if (code === "EACCES") {
249
+ console.log(bad(" ✗ Permission denied reading auth.json"));
250
+ console.log(dim(` Try: sudo chown $(whoami) ${authFile} && chmod 600 ${authFile}`));
251
+ }
252
+ else {
253
+ console.log(bad(` ✗ Read error: ${readErr instanceof Error ? readErr.message : String(readErr)}`));
254
+ }
255
+ }
256
+ }
257
+ catch {
258
+ console.log(dim(` Path: ${authFile}`));
259
+ console.log(warn(' Not found — run "ggcoder login" to authenticate'));
260
+ }
261
+ console.log();
262
+ // ── Credentials ─────────────────────────────────────────────
263
+ if (authData && Object.keys(authData).length > 0) {
264
+ console.log(accent(" Credentials\n"));
265
+ for (const p of Object.keys(authData)) {
266
+ const cred = authData[p];
267
+ if (!cred || typeof cred !== "object") {
268
+ console.log(bad(` ✗ ${p}: invalid entry — removing`));
269
+ delete authData[p];
270
+ authNeedsRewrite = true;
271
+ fixed++;
272
+ continue;
273
+ }
274
+ if (!cred.accessToken || typeof cred.accessToken !== "string") {
275
+ console.log(bad(` ✗ ${p}: missing accessToken — removing`));
276
+ delete authData[p];
277
+ authNeedsRewrite = true;
278
+ fixed++;
279
+ continue;
280
+ }
281
+ const token = String(cred.accessToken);
282
+ const masked = token.slice(0, 8) + "..." + token.slice(-4);
283
+ const expires = typeof cred.expiresAt === "number" ? new Date(cred.expiresAt).toISOString() : "unknown";
284
+ const expired = typeof cred.expiresAt === "number" && Date.now() > cred.expiresAt;
285
+ if (expired) {
286
+ console.log(warn(` ⚠ ${p}: ${masked} expired ${expires}`));
287
+ }
288
+ else {
289
+ console.log(good(` ✓ ${p}: ${masked} expires ${expires}`));
290
+ }
291
+ }
292
+ if (authNeedsRewrite) {
293
+ try {
294
+ await fsP.writeFile(authFile, JSON.stringify(authData, null, 2), {
295
+ encoding: "utf-8",
296
+ mode: 0o600,
297
+ });
298
+ console.log(good(" ✓ Cleaned up auth.json"));
299
+ }
300
+ catch {
301
+ console.log(bad(" ✗ Failed to write cleaned auth.json"));
302
+ }
303
+ }
304
+ console.log();
305
+ }
306
+ // ── Temp Files ──────────────────────────────────────────────
307
+ try {
308
+ const entries = await fsP.readdir(ggDir);
309
+ const tmpFiles = entries.filter((e) => e.startsWith("auth.json.") && e.endsWith(".tmp"));
310
+ if (tmpFiles.length > 0) {
311
+ console.log(accent(" Temp Files\n"));
312
+ console.log(warn(` ⚠ ${tmpFiles.length} orphaned temp file(s) from interrupted writes`));
313
+ for (const tmp of tmpFiles) {
314
+ await fsP.unlink(path.join(ggDir, tmp)).catch(() => { });
315
+ }
316
+ console.log(good(` ✓ Removed ${tmpFiles.length} file(s)`));
317
+ fixed++;
318
+ console.log();
319
+ }
320
+ }
321
+ catch {
322
+ // Can't read directory — already flagged above
323
+ }
324
+ // ── Summary ─────────────────────────────────────────────────
325
+ if (fixed > 0) {
326
+ console.log(good(` ✓ Fixed ${fixed} issue${fixed > 1 ? "s" : ""}.`));
327
+ }
328
+ else {
329
+ console.log(good(" ✓ Everything looks good."));
330
+ }
331
+ console.log();
332
+ }
333
+ export async function runLogout() {
334
+ const paths = await ensureAppDirs();
335
+ initLogger(paths.logFile, { version: CLI_VERSION });
336
+ log("INFO", "auth", "Logout requested");
337
+ const authStorage = new AuthStorage();
338
+ await authStorage.load();
339
+ await authStorage.clearAll();
340
+ log("INFO", "auth", "Logout succeeded");
341
+ closeLogger();
342
+ console.log(chalk.green("Logged out successfully."));
343
+ }
344
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Provider, ThinkingLevel } from "@kenkaiiii/gg-ai";
2
+ import type { ThemeName } from "../ui/theme/theme.js";
3
+ /** Options accepted by the Ink TUI launcher injected into the pixel command. */
4
+ export interface RunInkTUIOptions {
5
+ provider: Provider;
6
+ model: string;
7
+ cwd: string;
8
+ thinkingLevel?: ThinkingLevel;
9
+ continueRecent?: boolean;
10
+ resumeSessionPath?: string;
11
+ theme?: "auto" | ThemeName;
12
+ initialOverlay?: "pixel";
13
+ }
14
+ /** Dependencies the pixel command needs from the CLI entry point. */
15
+ export interface PixelCommandDeps {
16
+ runInkTUI: (opts: RunInkTUIOptions) => Promise<void>;
17
+ }
18
+ interface ParsedInstall {
19
+ ingestUrl?: string;
20
+ name?: string;
21
+ skipPackageInstall: boolean;
22
+ }
23
+ export declare function parsePixelInstallArgs(args: string[]): ParsedInstall;
24
+ export declare function printPixelHelp(): void;
25
+ export declare function runPixel(deps: PixelCommandDeps): Promise<void>;
26
+ export {};
27
+ //# sourceMappingURL=pixel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixel.d.ts","sourceRoot":"","sources":["../../src/cli/pixel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qEAAqE;AACrE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAMD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CASnE;AAED,wBAAgB,cAAc,IAAI,IAAI,CAarC;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EpE"}
@@ -0,0 +1,103 @@
1
+ import chalk from "chalk";
2
+ import { loadSavedSettings } from "../config.js";
3
+ import { getDefaultModel } from "../core/model-registry.js";
4
+ function defaultModelFor(p) {
5
+ return getDefaultModel(p).id;
6
+ }
7
+ export function parsePixelInstallArgs(args) {
8
+ const out = { skipPackageInstall: false };
9
+ for (let i = 0; i < args.length; i++) {
10
+ const a = args[i];
11
+ if (a === "--ingest-url")
12
+ out.ingestUrl = args[++i];
13
+ else if (a === "--name")
14
+ out.name = args[++i];
15
+ else if (a === "--skip-install")
16
+ out.skipPackageInstall = true;
17
+ }
18
+ return out;
19
+ }
20
+ export function printPixelHelp() {
21
+ console.log(`ggcoder pixel — error tracking + auto-fix queue
22
+
23
+ Usage:
24
+ ggcoder pixel List open errors across every registered project
25
+ ggcoder pixel install Register the current project and wire up the SDK
26
+ ggcoder pixel fix <error_id> Fix one specific error end-to-end
27
+ ggcoder pixel run Auto-fix every open error across all projects
28
+
29
+ ggcoder pixel install --name <name> Override the project name
30
+ ggcoder pixel install --ingest-url <url> Use a custom backend URL
31
+ ggcoder pixel install --skip-install Don't run the package manager
32
+ `);
33
+ }
34
+ export async function runPixel(deps) {
35
+ const sub = process.argv[3];
36
+ const rest = process.argv.slice(4);
37
+ if (sub === "install") {
38
+ const { runPixelInstall } = await import("../core/pixel.js");
39
+ const opts = parsePixelInstallArgs(rest);
40
+ await runPixelInstall(opts);
41
+ return;
42
+ }
43
+ if (sub === "fix") {
44
+ const errorId = rest[0];
45
+ if (!errorId) {
46
+ process.stderr.write("Usage: ggcoder pixel fix <error_id>\n");
47
+ process.exit(1);
48
+ }
49
+ const { fixError } = await import("../core/pixel-fix.js");
50
+ const result = await fixError(errorId);
51
+ if (result.outcome === "awaiting_review") {
52
+ console.log(chalk.hex("#4ade80")(`✓ ${result.reason}`));
53
+ }
54
+ else {
55
+ console.log(chalk.hex("#ef4444")(`✗ ${result.reason}`));
56
+ process.exit(1);
57
+ }
58
+ return;
59
+ }
60
+ if (sub === "run") {
61
+ const { runQueue } = await import("../core/pixel-fix.js");
62
+ const result = await runQueue();
63
+ console.log(chalk.bold(`${result.fixed} fixed · ${result.failed} failed · ${result.total} total`));
64
+ if (result.failed > 0)
65
+ process.exit(1);
66
+ return;
67
+ }
68
+ if (sub === "--help" || sub === "-h") {
69
+ printPixelHelp();
70
+ return;
71
+ }
72
+ if (sub === "list") {
73
+ const { listAllErrors } = await import("../core/pixel.js");
74
+ await listAllErrors();
75
+ return;
76
+ }
77
+ if (sub) {
78
+ process.stderr.write(`Unknown pixel subcommand: ${sub}\n`);
79
+ printPixelHelp();
80
+ process.exit(1);
81
+ }
82
+ // No subcommand → launch the Ink TUI with the pixel overlay open. The fix
83
+ // flow runs through the same agent loop, streaming live in the chat instead
84
+ // of spawning a subprocess.
85
+ // Non-TTY (CI, piped) → fall back to text list.
86
+ if (!process.stdin.isTTY) {
87
+ const { listAllErrors } = await import("../core/pixel.js");
88
+ await listAllErrors();
89
+ return;
90
+ }
91
+ const saved = loadSavedSettings();
92
+ const provider = saved.provider ?? "anthropic";
93
+ const model = saved.model ?? defaultModelFor(provider);
94
+ await deps.runInkTUI({
95
+ provider,
96
+ model,
97
+ cwd: process.cwd(),
98
+ thinkingLevel: saved.thinkingEnabled ? (saved.thinkingLevel ?? "medium") : undefined,
99
+ theme: saved.theme,
100
+ initialOverlay: "pixel",
101
+ });
102
+ }
103
+ //# sourceMappingURL=pixel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixel.js","sourceRoot":"","sources":["../../src/cli/pixel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Provider } from "@kenkaiiii/gg-ai";
2
+ export declare const CLI_VERSION: string;
3
+ export declare const LOGO_LINES: string[];
4
+ export declare function gradientLine(text: string): string;
5
+ export declare function clearVisibleScreen(): void;
6
+ /**
7
+ * Bail with a friendly message if stdin isn't a TTY. Ink's raw-mode crash is
8
+ * cryptic; this catches the common case (piped stdin, API shells, CI).
9
+ */
10
+ export declare function requireInteractiveTTY(): void;
11
+ export declare function displayName(provider: Provider): string;
12
+ export declare function openBrowser(url: string): void;
13
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/cli/shared.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKjD,eAAO,MAAM,WAAW,QAAkE,CAAC;AAG3F,eAAO,MAAM,UAAU,UAItB,CAAC;AAiBF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYjD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAU5C;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAUtD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAO7C"}
@@ -0,0 +1,82 @@
1
+ import { createRequire } from "node:module";
2
+ import { execFile } from "node:child_process";
3
+ import chalk from "chalk";
4
+ const _require = createRequire(import.meta.url);
5
+ // This module lives one directory deeper than cli.ts (src/cli/ → dist/cli/),
6
+ // so the package manifest is two levels up rather than one.
7
+ export const CLI_VERSION = _require("../../package.json").version;
8
+ // ── Logo + gradient (mirrors Banner.tsx) ────────────────────────────
9
+ export const LOGO_LINES = [
10
+ " \u2584\u2580\u2580\u2580 \u2584\u2580\u2580\u2580",
11
+ " \u2588 \u2580\u2588 \u2588 \u2580\u2588",
12
+ " \u2580\u2584\u2584\u2580 \u2580\u2584\u2584\u2580",
13
+ ];
14
+ const GRADIENT = [
15
+ "#60a5fa",
16
+ "#6da1f9",
17
+ "#7a9df7",
18
+ "#8799f5",
19
+ "#9495f3",
20
+ "#a18ff1",
21
+ "#a78bfa",
22
+ "#a18ff1",
23
+ "#9495f3",
24
+ "#8799f5",
25
+ "#7a9df7",
26
+ "#6da1f9",
27
+ ];
28
+ export function gradientLine(text) {
29
+ let result = "";
30
+ let colorIdx = 0;
31
+ for (const ch of text) {
32
+ if (ch === " ") {
33
+ result += ch;
34
+ }
35
+ else {
36
+ result += chalk.hex(GRADIENT[colorIdx % GRADIENT.length])(ch);
37
+ colorIdx++;
38
+ }
39
+ }
40
+ return result;
41
+ }
42
+ export function clearVisibleScreen() {
43
+ process.stdout.write("\x1b[2J\x1b[H");
44
+ }
45
+ /**
46
+ * Bail with a friendly message if stdin isn't a TTY. Ink's raw-mode crash is
47
+ * cryptic; this catches the common case (piped stdin, API shells, CI).
48
+ */
49
+ export function requireInteractiveTTY() {
50
+ if (process.stdin.isTTY)
51
+ return;
52
+ process.stderr.write(chalk.red("ggcoder needs an interactive terminal — your stdin isn't a TTY.\n") +
53
+ chalk.hex("#6b7280")("Run ggcoder directly in your terminal (not piped or through an API shell). " +
54
+ 'For headless use try "ggcoder --json \'<prompt>\'" or "ggcoder --rpc".\n'));
55
+ process.exit(1);
56
+ }
57
+ export function displayName(provider) {
58
+ if (provider === "anthropic")
59
+ return "Anthropic";
60
+ if (provider === "xiaomi")
61
+ return "Xiaomi (MiMo)";
62
+ if (provider === "gemini")
63
+ return "Gemini";
64
+ if (provider === "glm")
65
+ return "Z.AI (GLM)";
66
+ if (provider === "moonshot")
67
+ return "Moonshot";
68
+ if (provider === "minimax")
69
+ return "MiniMax";
70
+ if (provider === "deepseek")
71
+ return "DeepSeek";
72
+ if (provider === "openrouter")
73
+ return "OpenRouter";
74
+ return "OpenAI";
75
+ }
76
+ export function openBrowser(url) {
77
+ const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
78
+ execFile(cmd, [url], () => {
79
+ // Ignore errors — user can copy URL manually
80
+ });
81
+ }
82
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/cli/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,6EAA6E;AAC7E,4DAA4D;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAI,QAAQ,CAAC,oBAAoB,CAAyB,CAAC,OAAO,CAAC;AAE3F,uEAAuE;AACvE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,oDAAoD;IACpD,0CAA0C;IAC1C,oDAAoD;CACrD,CAAC;AAEF,MAAM,QAAQ,GAAG;IACf,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9D,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,CAAC,GAAG,CAAC,mEAAmE,CAAC;QAC5E,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAClB,6EAA6E;YAC3E,0EAA0E,CAC7E,CACJ,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,IAAI,QAAQ,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IACjD,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC;IAClD,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,YAAY,CAAC;IAC5C,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC/C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC/C,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IACnD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;IAE/F,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE;QACxB,6CAA6C;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA6DA,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,mBAAmB,CAAC;AAI1E,OAAO,KAAK,EAAE,OAAO,EAAY,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA2CzE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAIvF;AAkvDD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAoJvE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA0DA,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,mBAAmB,CAAC;AAI1E,OAAO,KAAK,EAAE,OAAO,EAAY,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA+CzE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAMvF;AA0rCD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAoJvE"}