@kenkaiiii/ggcoder 4.3.13 → 4.3.15
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.map +1 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -1
- package/dist/config.js.map +1 -1
- package/dist/core/settings-manager.d.ts +4 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +11 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +8 -1
- package/dist/tools/bash.js.map +1 -1
- package/dist/ui/App.d.ts +2 -0
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +69 -57
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/ActivityIndicator.d.ts +3 -1
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +4 -1
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/components/DiffFrame.d.ts +10 -0
- package/dist/ui/components/DiffFrame.d.ts.map +1 -0
- package/dist/ui/components/DiffFrame.js +13 -0
- package/dist/ui/components/DiffFrame.js.map +1 -0
- package/dist/ui/components/Footer.d.ts +2 -1
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +4 -1
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +297 -8
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/Markdown.d.ts +1 -1
- package/dist/ui/components/Markdown.d.ts.map +1 -1
- package/dist/ui/components/Markdown.js +18 -213
- package/dist/ui/components/Markdown.js.map +1 -1
- package/dist/ui/components/Ratchet.d.ts.map +1 -1
- package/dist/ui/components/Ratchet.js +9 -2
- package/dist/ui/components/Ratchet.js.map +1 -1
- package/dist/ui/components/ThemeSelector.d.ts +9 -0
- package/dist/ui/components/ThemeSelector.d.ts.map +1 -0
- package/dist/ui/components/ThemeSelector.js +25 -0
- package/dist/ui/components/ThemeSelector.js.map +1 -0
- package/dist/ui/components/ToolExecution.d.ts +2 -0
- package/dist/ui/components/ToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolExecution.js +34 -15
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/components/ToolGroupExecution.d.ts +3 -2
- package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolGroupExecution.js +68 -51
- package/dist/ui/components/ToolGroupExecution.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +2 -0
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +1 -0
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useDoublePress.d.ts +8 -0
- package/dist/ui/hooks/useDoublePress.d.ts.map +1 -0
- package/dist/ui/hooks/useDoublePress.js +44 -0
- package/dist/ui/hooks/useDoublePress.js.map +1 -0
- package/dist/ui/live-item-flush.d.ts +4 -0
- package/dist/ui/live-item-flush.d.ts.map +1 -1
- package/dist/ui/live-item-flush.js +36 -0
- package/dist/ui/live-item-flush.js.map +1 -1
- package/dist/ui/render.d.ts +2 -1
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +9 -3
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/stores/create-store.d.ts +15 -0
- package/dist/ui/stores/create-store.d.ts.map +1 -0
- package/dist/ui/stores/create-store.js +30 -0
- package/dist/ui/stores/create-store.js.map +1 -0
- package/dist/ui/stores/index.d.ts +3 -0
- package/dist/ui/stores/index.d.ts.map +1 -0
- package/dist/ui/stores/index.js +3 -0
- package/dist/ui/stores/index.js.map +1 -0
- package/dist/ui/stores/taskbar-store.d.ts +19 -0
- package/dist/ui/stores/taskbar-store.d.ts.map +1 -0
- package/dist/ui/stores/taskbar-store.js +59 -0
- package/dist/ui/stores/taskbar-store.js.map +1 -0
- package/dist/ui/theme/dark-ansi.json +48 -0
- package/dist/ui/theme/dark-daltonized.json +48 -0
- package/dist/ui/theme/dark.json +22 -1
- package/dist/ui/theme/detect-theme.d.ts +12 -8
- package/dist/ui/theme/detect-theme.d.ts.map +1 -1
- package/dist/ui/theme/detect-theme.js +43 -18
- package/dist/ui/theme/detect-theme.js.map +1 -1
- package/dist/ui/theme/light-ansi.json +48 -0
- package/dist/ui/theme/light-daltonized.json +48 -0
- package/dist/ui/theme/light.json +44 -23
- package/dist/ui/theme/theme.d.ts +27 -1
- package/dist/ui/theme/theme.d.ts.map +1 -1
- package/dist/ui/theme/theme.js +24 -1
- package/dist/ui/theme/theme.js.map +1 -1
- package/dist/ui/utils/highlight.d.ts +1 -1
- package/dist/ui/utils/highlight.d.ts.map +1 -1
- package/dist/ui/utils/highlight.js +24 -4
- package/dist/ui/utils/highlight.js.map +1 -1
- package/dist/ui/utils/hyperlink.d.ts +11 -0
- package/dist/ui/utils/hyperlink.d.ts.map +1 -0
- package/dist/ui/utils/hyperlink.js +27 -0
- package/dist/ui/utils/hyperlink.js.map +1 -0
- package/dist/ui/utils/markdown-cache.d.ts +5 -6
- package/dist/ui/utils/markdown-cache.d.ts.map +1 -1
- package/dist/ui/utils/markdown-cache.js +5 -5
- package/dist/ui/utils/markdown-cache.js.map +1 -1
- package/dist/ui/utils/signal.d.ts +21 -0
- package/dist/ui/utils/signal.d.ts.map +1 -0
- package/dist/ui/utils/signal.js +30 -0
- package/dist/ui/utils/signal.js.map +1 -0
- package/dist/ui/utils/supports-hyperlinks.d.ts +6 -0
- package/dist/ui/utils/supports-hyperlinks.d.ts.map +1 -0
- package/dist/ui/utils/supports-hyperlinks.js +52 -0
- package/dist/ui/utils/supports-hyperlinks.js.map +1 -0
- package/dist/ui/utils/sync-output.d.ts +16 -0
- package/dist/ui/utils/sync-output.d.ts.map +1 -0
- package/dist/ui/utils/sync-output.js +70 -0
- package/dist/ui/utils/sync-output.js.map +1 -0
- package/dist/ui/utils/token-to-ansi.d.ts +9 -0
- package/dist/ui/utils/token-to-ansi.d.ts.map +1 -0
- package/dist/ui/utils/token-to-ansi.js +305 -0
- package/dist/ui/utils/token-to-ansi.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny listener-set primitive for pure event signals (no stored state).
|
|
3
|
+
*
|
|
4
|
+
* Use this when subscribers only need to know "something happened",
|
|
5
|
+
* not "what is the current value".
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* const changed = createSignal()
|
|
9
|
+
* const unsub = changed.subscribe(() => console.log("changed"))
|
|
10
|
+
* changed.emit()
|
|
11
|
+
*/
|
|
12
|
+
export function createSignal() {
|
|
13
|
+
const listeners = new Set();
|
|
14
|
+
return {
|
|
15
|
+
subscribe(listener) {
|
|
16
|
+
listeners.add(listener);
|
|
17
|
+
return () => {
|
|
18
|
+
listeners.delete(listener);
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
emit(...args) {
|
|
22
|
+
for (const listener of listeners)
|
|
23
|
+
listener(...args);
|
|
24
|
+
},
|
|
25
|
+
clear() {
|
|
26
|
+
listeners.clear();
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=signal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../../../src/ui/utils/signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,MAAM,UAAU,YAAY;IAC1B,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IACrD,OAAO;QACL,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,IAAI;YACV,KAAK,MAAM,QAAQ,IAAI,SAAS;gBAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,KAAK;YACH,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supports-hyperlinks.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/supports-hyperlinks.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAuC5C"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Additional terminals that support OSC 8 hyperlinks but aren't detected by
|
|
2
|
+
// the supports-hyperlinks library. Checked against both TERM_PROGRAM and
|
|
3
|
+
// LC_TERMINAL (the latter is preserved inside tmux).
|
|
4
|
+
const ADDITIONAL_HYPERLINK_TERMINALS = [
|
|
5
|
+
"ghostty",
|
|
6
|
+
"Hyper",
|
|
7
|
+
"kitty",
|
|
8
|
+
"alacritty",
|
|
9
|
+
"iTerm.app",
|
|
10
|
+
"iTerm2",
|
|
11
|
+
];
|
|
12
|
+
let cached;
|
|
13
|
+
/**
|
|
14
|
+
* Returns whether stdout supports OSC 8 hyperlinks.
|
|
15
|
+
* Result is cached after first call since terminal support doesn't change.
|
|
16
|
+
*/
|
|
17
|
+
export function supportsHyperlinks() {
|
|
18
|
+
if (cached !== undefined)
|
|
19
|
+
return cached;
|
|
20
|
+
// Check TERM_PROGRAM
|
|
21
|
+
const termProgram = process.env["TERM_PROGRAM"];
|
|
22
|
+
if (termProgram && ADDITIONAL_HYPERLINK_TERMINALS.includes(termProgram)) {
|
|
23
|
+
cached = true;
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
// LC_TERMINAL is set by some terminals (e.g. iTerm2) and preserved inside tmux,
|
|
27
|
+
// where TERM_PROGRAM is overwritten to 'tmux'.
|
|
28
|
+
const lcTerminal = process.env["LC_TERMINAL"];
|
|
29
|
+
if (lcTerminal && ADDITIONAL_HYPERLINK_TERMINALS.includes(lcTerminal)) {
|
|
30
|
+
cached = true;
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
// Kitty sets TERM=xterm-kitty
|
|
34
|
+
const term = process.env["TERM"];
|
|
35
|
+
if (term?.includes("kitty")) {
|
|
36
|
+
cached = true;
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
// VS Code terminal supports hyperlinks
|
|
40
|
+
if (process.env["TERM_PROGRAM"] === "vscode") {
|
|
41
|
+
cached = true;
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
// WezTerm supports hyperlinks
|
|
45
|
+
if (process.env["TERM_PROGRAM"] === "WezTerm") {
|
|
46
|
+
cached = true;
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
cached = false;
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=supports-hyperlinks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supports-hyperlinks.js","sourceRoot":"","sources":["../../../src/ui/utils/supports-hyperlinks.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,yEAAyE;AACzE,qDAAqD;AACrD,MAAM,8BAA8B,GAAG;IACrC,SAAS;IACT,OAAO;IACP,OAAO;IACP,WAAW;IACX,WAAW;IACX,QAAQ;CACT,CAAC;AAEF,IAAI,MAA2B,CAAC;AAEhC;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,qBAAqB;IACrB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChD,IAAI,WAAW,IAAI,8BAA8B,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACxE,MAAM,GAAG,IAAI,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gFAAgF;IAChF,+CAA+C;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,UAAU,IAAI,8BAA8B,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACtE,MAAM,GAAG,IAAI,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8BAA8B;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,IAAI,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uCAAuC;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,GAAG,IAAI,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8BAA8B;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,GAAG,IAAI,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,KAAK,CAAC;IACf,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DEC Private Mode 2026 — Synchronized Output.
|
|
3
|
+
*
|
|
4
|
+
* Wraps all stdout writes within a single microtask into BSU/ESU markers.
|
|
5
|
+
* The terminal buffers all changes between BSU and ESU, then paints atomically.
|
|
6
|
+
* This eliminates visible tearing/flicker during fast streaming updates.
|
|
7
|
+
*
|
|
8
|
+
* Matches Claude Code's pattern of batching all terminal patches into a single
|
|
9
|
+
* BSU-prefixed, ESU-suffixed write.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Monkey-patch process.stdout.write to coalesce all writes within a microtask
|
|
13
|
+
* into a single BSU/ESU-wrapped write. No-op if the terminal doesn't support it.
|
|
14
|
+
*/
|
|
15
|
+
export declare function enableSyncOutput(): void;
|
|
16
|
+
//# sourceMappingURL=sync-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-output.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/sync-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0BH;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAuCvC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DEC Private Mode 2026 — Synchronized Output.
|
|
3
|
+
*
|
|
4
|
+
* Wraps all stdout writes within a single microtask into BSU/ESU markers.
|
|
5
|
+
* The terminal buffers all changes between BSU and ESU, then paints atomically.
|
|
6
|
+
* This eliminates visible tearing/flicker during fast streaming updates.
|
|
7
|
+
*
|
|
8
|
+
* Matches Claude Code's pattern of batching all terminal patches into a single
|
|
9
|
+
* BSU-prefixed, ESU-suffixed write.
|
|
10
|
+
*/
|
|
11
|
+
const BSU = "\x1b[?2026h"; // Begin Synchronized Update
|
|
12
|
+
const ESU = "\x1b[?2026l"; // End Synchronized Update
|
|
13
|
+
/**
|
|
14
|
+
* Detect whether the terminal supports DEC 2026 synchronized output.
|
|
15
|
+
* tmux is excluded — it passes through BSU/ESU but breaks atomicity by chunking.
|
|
16
|
+
*/
|
|
17
|
+
function isSyncOutputSupported() {
|
|
18
|
+
if (process.env["TMUX"])
|
|
19
|
+
return false;
|
|
20
|
+
const prog = process.env["TERM_PROGRAM"] ?? "";
|
|
21
|
+
const term = process.env["TERM"] ?? "";
|
|
22
|
+
// Known supporting terminals
|
|
23
|
+
if (["iTerm.app", "WezTerm", "ghostty", "vscode", "contour"].includes(prog))
|
|
24
|
+
return true;
|
|
25
|
+
if (term.includes("kitty") || term.includes("ghostty") || term.includes("foot"))
|
|
26
|
+
return true;
|
|
27
|
+
if (term.includes("alacritty"))
|
|
28
|
+
return true;
|
|
29
|
+
if (process.env["WT_SESSION"])
|
|
30
|
+
return true; // Windows Terminal
|
|
31
|
+
if (process.env["KITTY_WINDOW_ID"])
|
|
32
|
+
return true;
|
|
33
|
+
if (process.env["ZED_TERM"])
|
|
34
|
+
return true;
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Monkey-patch process.stdout.write to coalesce all writes within a microtask
|
|
39
|
+
* into a single BSU/ESU-wrapped write. No-op if the terminal doesn't support it.
|
|
40
|
+
*/
|
|
41
|
+
export function enableSyncOutput() {
|
|
42
|
+
if (!isSyncOutputSupported())
|
|
43
|
+
return;
|
|
44
|
+
if (!process.stdout.isTTY)
|
|
45
|
+
return;
|
|
46
|
+
const origWrite = process.stdout.write.bind(process.stdout);
|
|
47
|
+
let buffer = "";
|
|
48
|
+
let flushScheduled = false;
|
|
49
|
+
process.stdout.write = function (chunk, encodingOrCallback, callback) {
|
|
50
|
+
const str = typeof chunk === "string" ? chunk : Buffer.from(chunk).toString();
|
|
51
|
+
buffer += str;
|
|
52
|
+
// Resolve callback immediately — the data is buffered
|
|
53
|
+
const cb = typeof encodingOrCallback === "function" ? encodingOrCallback : callback;
|
|
54
|
+
if (cb)
|
|
55
|
+
cb();
|
|
56
|
+
if (!flushScheduled) {
|
|
57
|
+
flushScheduled = true;
|
|
58
|
+
queueMicrotask(() => {
|
|
59
|
+
flushScheduled = false;
|
|
60
|
+
if (buffer) {
|
|
61
|
+
const data = buffer;
|
|
62
|
+
buffer = "";
|
|
63
|
+
origWrite(BSU + data + ESU);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=sync-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-output.js","sourceRoot":"","sources":["../../../src/ui/utils/sync-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,4BAA4B;AACvD,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,0BAA0B;AAErD;;;GAGG;AACH,SAAS,qBAAqB;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAEtC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAEvC,6BAA6B;IAC7B,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzF,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,mBAAmB;IAC/D,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,qBAAqB,EAAE;QAAE,OAAO;IACrC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO;IAElC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAI9C,CAAC;IAEb,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UACrB,KAA0B,EAC1B,kBAA6D,EAC7D,QAAgC;QAEhC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9E,MAAM,IAAI,GAAG,CAAC;QAEd,sDAAsD;QACtD,MAAM,EAAE,GAAG,OAAO,kBAAkB,KAAK,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpF,IAAI,EAAE;YAAE,EAAE,EAAE,CAAC;QAEb,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,IAAI,CAAC;YACtB,cAAc,CAAC,GAAG,EAAE;gBAClB,cAAc,GAAG,KAAK,CAAC;gBACvB,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,IAAI,GAAG,MAAM,CAAC;oBACpB,MAAM,GAAG,EAAE,CAAC;oBACZ,SAAS,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAgC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Token } from "marked";
|
|
2
|
+
import type { Theme } from "../theme/theme.js";
|
|
3
|
+
/**
|
|
4
|
+
* Convert an array of marked block-level tokens into a single ANSI string.
|
|
5
|
+
* Each block is separated by a blank line. The result can be passed directly
|
|
6
|
+
* to Ink's `<Text>`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function tokensToAnsi(tokens: Token[], theme: Theme, columns: number): string;
|
|
9
|
+
//# sourceMappingURL=token-to-ansi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-to-ansi.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/token-to-ansi.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,KAAK,EAAe,MAAM,QAAQ,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAuF/C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMnF"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { marked } from "marked";
|
|
3
|
+
import { highlightCode } from "./highlight.js";
|
|
4
|
+
import { fitToWidth, centerToWidth, plainTextLength, wrapPlainTextLines } from "./table-text.js";
|
|
5
|
+
import { createHyperlink } from "./hyperlink.js";
|
|
6
|
+
import { supportsHyperlinks } from "./supports-hyperlinks.js";
|
|
7
|
+
// ── Marked configuration ──────────────────────────────────
|
|
8
|
+
// Disable del (strikethrough) tokenizer — `~` is commonly used for
|
|
9
|
+
// "approximate" in LLM output and causes false strikethrough parsing.
|
|
10
|
+
let markedConfigured = false;
|
|
11
|
+
function configureMarked() {
|
|
12
|
+
if (markedConfigured)
|
|
13
|
+
return;
|
|
14
|
+
markedConfigured = true;
|
|
15
|
+
marked.use({
|
|
16
|
+
extensions: [
|
|
17
|
+
{
|
|
18
|
+
name: "del",
|
|
19
|
+
level: "inline",
|
|
20
|
+
start: () => -1, // never matches
|
|
21
|
+
tokenizer: () => undefined,
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
// ── Helpers ───────────────────────────────────────────────
|
|
27
|
+
/** Prepend a prefix to every line in a string. */
|
|
28
|
+
function prefixLines(text, prefix) {
|
|
29
|
+
return text
|
|
30
|
+
.split("\n")
|
|
31
|
+
.map((line) => prefix + line)
|
|
32
|
+
.join("\n");
|
|
33
|
+
}
|
|
34
|
+
/** Convert number to lowercase letter (1→a, 2→b, ..., 27→aa). */
|
|
35
|
+
function numberToLetter(n) {
|
|
36
|
+
let result = "";
|
|
37
|
+
while (n > 0) {
|
|
38
|
+
n--;
|
|
39
|
+
result = String.fromCharCode(97 + (n % 26)) + result;
|
|
40
|
+
n = Math.floor(n / 26);
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
/** Convert number to lowercase roman numeral. */
|
|
45
|
+
function numberToRoman(n) {
|
|
46
|
+
const vals = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
|
|
47
|
+
const syms = ["m", "cm", "d", "cd", "c", "xc", "l", "xl", "x", "ix", "v", "iv", "i"];
|
|
48
|
+
let result = "";
|
|
49
|
+
for (let i = 0; i < vals.length; i++) {
|
|
50
|
+
while (n >= vals[i]) {
|
|
51
|
+
result += syms[i];
|
|
52
|
+
n -= vals[i];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
/** Get formatted list number by depth (numeric → alpha → roman → numeric). */
|
|
58
|
+
function getListNumber(depth, n) {
|
|
59
|
+
switch (depth) {
|
|
60
|
+
case 0:
|
|
61
|
+
case 1:
|
|
62
|
+
return n.toString();
|
|
63
|
+
case 2:
|
|
64
|
+
return numberToLetter(n);
|
|
65
|
+
case 3:
|
|
66
|
+
return numberToRoman(n);
|
|
67
|
+
default:
|
|
68
|
+
return n.toString();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Replace owner/repo#123 with clickable GitHub links (OSC 8 when supported). */
|
|
72
|
+
const ISSUE_REF_PATTERN = /(^|[^\w./-])([A-Za-z0-9][\w-]*\/[A-Za-z0-9][\w.-]*)#(\d+)\b/g;
|
|
73
|
+
function linkifyIssueReferences(text) {
|
|
74
|
+
if (!supportsHyperlinks())
|
|
75
|
+
return text;
|
|
76
|
+
return text.replace(ISSUE_REF_PATTERN, (_match, prefix, repo, num) => {
|
|
77
|
+
return `${prefix}${createHyperlink(`https://github.com/${repo}/issues/${num}`, `${repo}#${num}`)}`;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// ── Main API ──────────────────────────────────────────────
|
|
81
|
+
/**
|
|
82
|
+
* Convert an array of marked block-level tokens into a single ANSI string.
|
|
83
|
+
* Each block is separated by a blank line. The result can be passed directly
|
|
84
|
+
* to Ink's `<Text>`.
|
|
85
|
+
*/
|
|
86
|
+
export function tokensToAnsi(tokens, theme, columns) {
|
|
87
|
+
configureMarked();
|
|
88
|
+
return tokens
|
|
89
|
+
.map((t, i) => tokenToAnsi(t, theme, 0, undefined, undefined, columns, i > 0))
|
|
90
|
+
.join("")
|
|
91
|
+
.trim();
|
|
92
|
+
}
|
|
93
|
+
function tokenToAnsi(token, theme, depth, orderedIndex, parent, columns, addGap) {
|
|
94
|
+
const gap = addGap ? "\n" : "";
|
|
95
|
+
switch (token.type) {
|
|
96
|
+
case "heading": {
|
|
97
|
+
const heading = token;
|
|
98
|
+
const inline = inlineToAnsi(heading.tokens ?? [], theme);
|
|
99
|
+
switch (heading.depth) {
|
|
100
|
+
case 1:
|
|
101
|
+
return gap + chalk.bold.italic.underline(inline) + "\n\n";
|
|
102
|
+
default:
|
|
103
|
+
return gap + chalk.bold(inline) + "\n\n";
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
case "paragraph":
|
|
107
|
+
return gap + inlineToAnsi(token.tokens ?? [], theme) + "\n";
|
|
108
|
+
case "list": {
|
|
109
|
+
const list = token;
|
|
110
|
+
const items = list.items.map((item, idx) => {
|
|
111
|
+
const startNum = Number(list.start ?? 1) + idx;
|
|
112
|
+
const bullet = list.ordered ? `${getListNumber(depth, startNum)}. ` : "- ";
|
|
113
|
+
const indent = " ".repeat(depth);
|
|
114
|
+
const content = item.tokens
|
|
115
|
+
.map((t) => {
|
|
116
|
+
if (t.type === "text" && "tokens" in t && t.tokens) {
|
|
117
|
+
return inlineToAnsi(t.tokens, theme);
|
|
118
|
+
}
|
|
119
|
+
if (t.type === "list") {
|
|
120
|
+
return "\n" + tokenToAnsi(t, theme, depth + 1, undefined, token, columns, false);
|
|
121
|
+
}
|
|
122
|
+
if (t.type === "text") {
|
|
123
|
+
return linkifyIssueReferences(t.raw);
|
|
124
|
+
}
|
|
125
|
+
return tokenToAnsi(t, theme, depth + 1, undefined, token, columns, false);
|
|
126
|
+
})
|
|
127
|
+
.join("");
|
|
128
|
+
return indent + bullet + content;
|
|
129
|
+
});
|
|
130
|
+
return gap + items.join("\n");
|
|
131
|
+
}
|
|
132
|
+
case "code": {
|
|
133
|
+
const code = token;
|
|
134
|
+
const lang = code.lang ?? "";
|
|
135
|
+
const raw = code.text;
|
|
136
|
+
const gutter = chalk.hex(theme.border)("\u258E ");
|
|
137
|
+
if (!lang) {
|
|
138
|
+
return gap + prefixLines(raw, gutter);
|
|
139
|
+
}
|
|
140
|
+
const header = chalk.dim.italic(lang);
|
|
141
|
+
const highlighted = highlightCode(raw, lang);
|
|
142
|
+
return gap + gutter + header + "\n" + prefixLines(highlighted, gutter);
|
|
143
|
+
}
|
|
144
|
+
case "blockquote": {
|
|
145
|
+
const bq = token;
|
|
146
|
+
const inner = (bq.tokens ?? [])
|
|
147
|
+
.map((t) => {
|
|
148
|
+
if (t.type === "paragraph") {
|
|
149
|
+
return chalk.italic.hex(theme.textMuted)(inlineToAnsi(t.tokens ?? [], theme, theme.textMuted));
|
|
150
|
+
}
|
|
151
|
+
return tokenToAnsi(t, theme, depth, undefined, token, columns, false);
|
|
152
|
+
})
|
|
153
|
+
.join("\n");
|
|
154
|
+
const bar = chalk.hex(theme.accent)("\u2502 ");
|
|
155
|
+
return gap + prefixLines(inner, bar);
|
|
156
|
+
}
|
|
157
|
+
case "table": {
|
|
158
|
+
const table = token;
|
|
159
|
+
const numCols = table.header.length;
|
|
160
|
+
// Calculate natural column widths
|
|
161
|
+
const naturalWidths = table.header.map((cell, ci) => {
|
|
162
|
+
const headerLen = plainTextLength(cell.tokens);
|
|
163
|
+
const rowMax = table.rows.reduce((max, row) => Math.max(max, plainTextLength(row[ci]?.tokens ?? [])), 0);
|
|
164
|
+
return Math.max(headerLen, rowMax, 3);
|
|
165
|
+
});
|
|
166
|
+
// Cap to fit terminal
|
|
167
|
+
const overhead = numCols * 3 + 1; // "| " per col + trailing " |"
|
|
168
|
+
const availableForContent = columns - overhead;
|
|
169
|
+
const totalNatural = naturalWidths.reduce((a, b) => a + b, 0);
|
|
170
|
+
let colWidths;
|
|
171
|
+
if (totalNatural <= availableForContent) {
|
|
172
|
+
colWidths = naturalWidths;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
colWidths = [...naturalWidths];
|
|
176
|
+
let remaining = availableForContent;
|
|
177
|
+
const locked = new Set();
|
|
178
|
+
while (locked.size < numCols) {
|
|
179
|
+
const unlocked = colWidths.filter((_, i) => !locked.has(i));
|
|
180
|
+
const fair = Math.floor(remaining / unlocked.length);
|
|
181
|
+
let changed = false;
|
|
182
|
+
for (let i = 0; i < colWidths.length; i++) {
|
|
183
|
+
if (locked.has(i))
|
|
184
|
+
continue;
|
|
185
|
+
if (colWidths[i] <= fair) {
|
|
186
|
+
locked.add(i);
|
|
187
|
+
remaining -= colWidths[i];
|
|
188
|
+
changed = true;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (!changed) {
|
|
192
|
+
const unlockedIdxs = colWidths.map((_, i) => i).filter((i) => !locked.has(i));
|
|
193
|
+
const each = Math.floor(remaining / unlockedIdxs.length);
|
|
194
|
+
let leftover = remaining - each * unlockedIdxs.length;
|
|
195
|
+
for (const i of unlockedIdxs) {
|
|
196
|
+
colWidths[i] = each + (leftover > 0 ? 1 : 0);
|
|
197
|
+
if (leftover > 0)
|
|
198
|
+
leftover--;
|
|
199
|
+
}
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Box-drawing table with multi-line cell wrapping
|
|
205
|
+
const hLine = (left, mid, right) => left + colWidths.map((w) => "\u2501".repeat(w + 2)).join(mid) + right;
|
|
206
|
+
// Pre-wrap cells into lines of exactly colWidths[ci] chars
|
|
207
|
+
const wrapCell = (tokens, ci) => wrapPlainTextLines(tokens, colWidths[ci]).map((l) => fitToWidth(l, colWidths[ci]));
|
|
208
|
+
const wrapCellCenter = (tokens, ci) => wrapPlainTextLines(tokens, colWidths[ci]).map((l) => centerToWidth(l, colWidths[ci]));
|
|
209
|
+
const headerWrapped = table.header.map((cell, ci) => wrapCellCenter(cell.tokens, ci));
|
|
210
|
+
const headerLineCount = Math.max(1, ...headerWrapped.map((lines) => lines.length));
|
|
211
|
+
const bodyWrapped = table.rows.map((row) => row.map((cell, ci) => wrapCell(cell.tokens, ci)));
|
|
212
|
+
const bodyLineCounts = bodyWrapped.map((row) => Math.max(1, ...row.map((lines) => lines.length)));
|
|
213
|
+
const buildRowLine = (wrappedCells, lineIdx) => {
|
|
214
|
+
let row = "";
|
|
215
|
+
for (let ci = 0; ci < wrappedCells.length; ci++) {
|
|
216
|
+
const cell = wrappedCells[ci][lineIdx] ?? fitToWidth("", colWidths[ci]);
|
|
217
|
+
row += "\u2503 " + cell + " ";
|
|
218
|
+
}
|
|
219
|
+
row += "\u2503";
|
|
220
|
+
return row;
|
|
221
|
+
};
|
|
222
|
+
const lines = [];
|
|
223
|
+
// Top border
|
|
224
|
+
lines.push(hLine("\u250F", "\u2533", "\u2513"));
|
|
225
|
+
// Header lines
|
|
226
|
+
for (let li = 0; li < headerLineCount; li++) {
|
|
227
|
+
lines.push(chalk.bold(buildRowLine(headerWrapped, li)));
|
|
228
|
+
}
|
|
229
|
+
// Header/body separator
|
|
230
|
+
lines.push(hLine("\u2523", "\u254B", "\u252B"));
|
|
231
|
+
// Body rows
|
|
232
|
+
for (let ri = 0; ri < bodyWrapped.length; ri++) {
|
|
233
|
+
for (let li = 0; li < bodyLineCounts[ri]; li++) {
|
|
234
|
+
lines.push(buildRowLine(bodyWrapped[ri], li));
|
|
235
|
+
}
|
|
236
|
+
// Row separator (between rows, not after last)
|
|
237
|
+
if (ri < bodyWrapped.length - 1) {
|
|
238
|
+
lines.push(hLine("\u2523", "\u254B", "\u252B"));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Bottom border
|
|
242
|
+
lines.push(hLine("\u2517", "\u253B", "\u251B"));
|
|
243
|
+
return gap + lines.join("\n");
|
|
244
|
+
}
|
|
245
|
+
case "hr":
|
|
246
|
+
return gap + "---";
|
|
247
|
+
case "space":
|
|
248
|
+
return "\n";
|
|
249
|
+
case "html":
|
|
250
|
+
case "def":
|
|
251
|
+
return "";
|
|
252
|
+
default:
|
|
253
|
+
if ("raw" in token && typeof token.raw === "string") {
|
|
254
|
+
return gap + token.raw;
|
|
255
|
+
}
|
|
256
|
+
return "";
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
function inlineToAnsi(tokens, theme, _parentColor) {
|
|
260
|
+
return tokens
|
|
261
|
+
.map((token) => {
|
|
262
|
+
switch (token.type) {
|
|
263
|
+
case "strong":
|
|
264
|
+
return chalk.bold(inlineToAnsi(token.tokens ?? [], theme));
|
|
265
|
+
case "em":
|
|
266
|
+
return chalk.italic(inlineToAnsi(token.tokens ?? [], theme));
|
|
267
|
+
case "codespan":
|
|
268
|
+
return chalk.hex("#e2b553")(token.text);
|
|
269
|
+
case "del":
|
|
270
|
+
return chalk.strikethrough.hex(theme.textDim)(token.text);
|
|
271
|
+
case "link": {
|
|
272
|
+
const link = token;
|
|
273
|
+
if (link.href.startsWith("mailto:")) {
|
|
274
|
+
return link.href.replace(/^mailto:/, "");
|
|
275
|
+
}
|
|
276
|
+
// Use OSC 8 clickable hyperlinks when supported
|
|
277
|
+
const linkText = link.text || link.href;
|
|
278
|
+
if (linkText !== link.href) {
|
|
279
|
+
return createHyperlink(link.href, linkText);
|
|
280
|
+
}
|
|
281
|
+
return createHyperlink(link.href);
|
|
282
|
+
}
|
|
283
|
+
case "image":
|
|
284
|
+
return token.href;
|
|
285
|
+
case "text": {
|
|
286
|
+
const textToken = token;
|
|
287
|
+
if ("tokens" in textToken && textToken.tokens) {
|
|
288
|
+
return inlineToAnsi(textToken.tokens, theme);
|
|
289
|
+
}
|
|
290
|
+
return linkifyIssueReferences(textToken.raw);
|
|
291
|
+
}
|
|
292
|
+
case "escape":
|
|
293
|
+
return token.text;
|
|
294
|
+
case "br":
|
|
295
|
+
return "\n";
|
|
296
|
+
default:
|
|
297
|
+
if ("raw" in token && typeof token.raw === "string") {
|
|
298
|
+
return token.raw;
|
|
299
|
+
}
|
|
300
|
+
return "";
|
|
301
|
+
}
|
|
302
|
+
})
|
|
303
|
+
.join("");
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=token-to-ansi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-to-ansi.js","sourceRoot":"","sources":["../../../src/ui/utils/token-to-ansi.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kenkaiiii/ggcoder",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.15",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI coding agent with OAuth authentication for Anthropic and OpenAI",
|
|
6
6
|
"license": "MIT",
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"wrap-ansi": "^10.0.0",
|
|
40
40
|
"@kenkaiiii/agent-home-sdk": "^0.3.8",
|
|
41
41
|
"zod": "^4.3.6",
|
|
42
|
-
"@kenkaiiii/gg-
|
|
43
|
-
"@kenkaiiii/gg-
|
|
42
|
+
"@kenkaiiii/gg-ai": "4.3.15",
|
|
43
|
+
"@kenkaiiii/gg-agent": "4.3.15"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/node": "^25.5.0",
|