@kenkaiiii/ggcoder 3.4.0 → 3.6.1

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 (51) hide show
  1. package/dist/tools/subagent.js +4 -4
  2. package/dist/tools/subagent.js.map +1 -1
  3. package/dist/ui/App.d.ts.map +1 -1
  4. package/dist/ui/App.js +3 -1
  5. package/dist/ui/App.js.map +1 -1
  6. package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
  7. package/dist/ui/components/ActivityIndicator.js +2 -4
  8. package/dist/ui/components/ActivityIndicator.js.map +1 -1
  9. package/dist/ui/components/CompactionNotice.d.ts.map +1 -1
  10. package/dist/ui/components/CompactionNotice.js +2 -2
  11. package/dist/ui/components/CompactionNotice.js.map +1 -1
  12. package/dist/ui/components/Footer.d.ts.map +1 -1
  13. package/dist/ui/components/Footer.js +3 -3
  14. package/dist/ui/components/Footer.js.map +1 -1
  15. package/dist/ui/components/InputArea.d.ts.map +1 -1
  16. package/dist/ui/components/InputArea.js +3 -3
  17. package/dist/ui/components/InputArea.js.map +1 -1
  18. package/dist/ui/components/Markdown.d.ts.map +1 -1
  19. package/dist/ui/components/Markdown.js +3 -3
  20. package/dist/ui/components/Markdown.js.map +1 -1
  21. package/dist/ui/components/Spinner.d.ts.map +1 -1
  22. package/dist/ui/components/Spinner.js +4 -4
  23. package/dist/ui/components/Spinner.js.map +1 -1
  24. package/dist/ui/components/SplashScreen.d.ts +7 -0
  25. package/dist/ui/components/SplashScreen.d.ts.map +1 -0
  26. package/dist/ui/components/SplashScreen.js +113 -0
  27. package/dist/ui/components/SplashScreen.js.map +1 -0
  28. package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
  29. package/dist/ui/components/SubAgentPanel.js +1 -14
  30. package/dist/ui/components/SubAgentPanel.js.map +1 -1
  31. package/dist/ui/components/ThinkingIndicator.d.ts.map +1 -1
  32. package/dist/ui/components/ThinkingIndicator.js +1 -3
  33. package/dist/ui/components/ThinkingIndicator.js.map +1 -1
  34. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  35. package/dist/ui/hooks/useAgentLoop.js +5 -1
  36. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  37. package/dist/ui/hooks/useTerminalSize.d.ts +22 -0
  38. package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -0
  39. package/dist/ui/hooks/useTerminalSize.js +60 -0
  40. package/dist/ui/hooks/useTerminalSize.js.map +1 -0
  41. package/dist/ui/hooks/useTerminalTitle.d.ts.map +1 -1
  42. package/dist/ui/hooks/useTerminalTitle.js +1 -13
  43. package/dist/ui/hooks/useTerminalTitle.js.map +1 -1
  44. package/dist/ui/render.d.ts.map +1 -1
  45. package/dist/ui/render.js +21 -6
  46. package/dist/ui/render.js.map +1 -1
  47. package/dist/ui/spinner-frames.d.ts +3 -0
  48. package/dist/ui/spinner-frames.d.ts.map +1 -0
  49. package/dist/ui/spinner-frames.js +7 -0
  50. package/dist/ui/spinner-frames.js.map +1 -0
  51. package/package.json +3 -3
package/dist/ui/render.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { render } from "ink";
3
3
  import { App } from "./App.js";
4
+ import { SplashScreen } from "./components/SplashScreen.js";
4
5
  import { ThemeContext, loadTheme } from "./theme/theme.js";
5
6
  export async function renderApp(config) {
6
7
  const theme = loadTheme(config.theme ?? "dark");
@@ -8,6 +9,21 @@ export async function renderApp(config) {
8
9
  // Clear screen and reserve row 1 for the shimmer line.
9
10
  // Set a scroll margin (DECSTBM) so Ink's output stays in rows 2+
10
11
  // while row 1 remains pinned — same technique tmux uses for its status bar.
12
+ process.stdout.write("\x1b[2J" + // clear screen
13
+ "\x1b[H" + // cursor to row 1, col 1
14
+ `\x1b[2;${rows}r` + // scroll region: row 2 to bottom
15
+ "\x1b[2;1H");
16
+ // Show animated splash screen before the main app
17
+ await new Promise((resolve) => {
18
+ const { unmount } = render(React.createElement(ThemeContext.Provider, { value: theme }, React.createElement(SplashScreen, {
19
+ version: config.version,
20
+ onDone: () => {
21
+ unmount();
22
+ resolve();
23
+ },
24
+ })));
25
+ });
26
+ // Clear screen again for the main app
11
27
  process.stdout.write("\x1b[2J" + // clear screen
12
28
  "\x1b[H" + // cursor to row 1, col 1
13
29
  `\x1b[2;${rows}r` + // scroll region: row 2 to bottom
@@ -49,13 +65,12 @@ export async function renderApp(config) {
49
65
  // exitOnCtrlC is true. Disable it so our InputArea handles Ctrl+C.
50
66
  exitOnCtrlC: false,
51
67
  });
52
- // Ink's built-in resize handler only clears the live area on terminal
53
- // shrink, not grow. After any resize, terminal text reflow makes Ink's
54
- // line-count-based erasing miss old content, leaving ghost duplicates.
55
- // Also update the scroll margin so the pinned row 1 survives resizes.
68
+ // Resize handling (terminal clear + scroll region reset + Static remount)
69
+ // is done inside the React tree via the useTerminalSize hook, which
70
+ // debounces 300ms then clears screen+scrollback and bumps a resizeKey
71
+ // to force Ink to re-render <Static> content. The render.ts layer only
72
+ // needs to call clear() so Ink forgets its stale line-count tracking.
56
73
  const onResize = () => {
57
- const newRows = process.stdout.rows ?? 24;
58
- process.stdout.write(`\x1b[2;${newRows}r`);
59
74
  clear();
60
75
  };
61
76
  process.stdout.on("resize", onResize);
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/ui/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/ui/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const SPINNER_FRAMES: string[];
2
+ export declare const SPINNER_INTERVAL = 120;
3
+ //# sourceMappingURL=spinner-frames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-frames.d.ts","sourceRoot":"","sources":["../../src/ui/spinner-frames.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,UAGkC,CAAC;AAE9D,eAAO,MAAM,gBAAgB,MAAM,CAAC"}
@@ -0,0 +1,7 @@
1
+ // Sparkle character set — gives a more distinctive, playful feel
2
+ // compared to the standard braille dots every other CLI uses.
3
+ export const SPINNER_FRAMES = process.platform === "darwin"
4
+ ? ["\u00B7", "\u2726", "\u2733", "\u2217", "\u273B", "\u273D"]
5
+ : ["\u00B7", "\u2726", "*", "\u2217", "\u273B", "\u273D"];
6
+ export const SPINNER_INTERVAL = 120;
7
+ //# sourceMappingURL=spinner-frames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-frames.js","sourceRoot":"","sources":["../../src/ui/spinner-frames.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GACzB,OAAO,CAAC,QAAQ,KAAK,QAAQ;IAC3B,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC9D,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kenkaiiii/ggcoder",
3
- "version": "3.4.0",
3
+ "version": "3.6.1",
4
4
  "type": "module",
5
5
  "description": "CLI coding agent with OAuth authentication for Anthropic and OpenAI",
6
6
  "license": "MIT",
@@ -33,8 +33,8 @@
33
33
  "marked-terminal": "^7.3.0",
34
34
  "react": "^19.2.4",
35
35
  "zod": "^4.3.6",
36
- "@kenkaiiii/gg-agent": "3.4.0",
37
- "@kenkaiiii/gg-ai": "3.4.0"
36
+ "@kenkaiiii/gg-agent": "3.6.1",
37
+ "@kenkaiiii/gg-ai": "3.6.1"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^25.3.3",