@kenkaiiii/ggcoder 0.0.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 (263) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +220 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/config.d.ts +13 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +25 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/core/agent-session.d.ts +63 -0
  10. package/dist/core/agent-session.d.ts.map +1 -0
  11. package/dist/core/agent-session.js +269 -0
  12. package/dist/core/agent-session.js.map +1 -0
  13. package/dist/core/auth-storage.d.ts +29 -0
  14. package/dist/core/auth-storage.d.ts.map +1 -0
  15. package/dist/core/auth-storage.js +89 -0
  16. package/dist/core/auth-storage.js.map +1 -0
  17. package/dist/core/compaction/compactor.d.ts +26 -0
  18. package/dist/core/compaction/compactor.d.ts.map +1 -0
  19. package/dist/core/compaction/compactor.js +87 -0
  20. package/dist/core/compaction/compactor.js.map +1 -0
  21. package/dist/core/compaction/token-estimator.d.ts +5 -0
  22. package/dist/core/compaction/token-estimator.d.ts.map +1 -0
  23. package/dist/core/compaction/token-estimator.js +36 -0
  24. package/dist/core/compaction/token-estimator.js.map +1 -0
  25. package/dist/core/event-bus.d.ts +71 -0
  26. package/dist/core/event-bus.d.ts.map +1 -0
  27. package/dist/core/event-bus.js +72 -0
  28. package/dist/core/event-bus.js.map +1 -0
  29. package/dist/core/extensions/loader.d.ts +8 -0
  30. package/dist/core/extensions/loader.d.ts.map +1 -0
  31. package/dist/core/extensions/loader.js +48 -0
  32. package/dist/core/extensions/loader.js.map +1 -0
  33. package/dist/core/extensions/types.d.ts +19 -0
  34. package/dist/core/extensions/types.d.ts.map +1 -0
  35. package/dist/core/extensions/types.js +2 -0
  36. package/dist/core/extensions/types.js.map +1 -0
  37. package/dist/core/index.d.ts +13 -0
  38. package/dist/core/index.d.ts.map +1 -0
  39. package/dist/core/index.js +12 -0
  40. package/dist/core/index.js.map +1 -0
  41. package/dist/core/model-registry.d.ts +17 -0
  42. package/dist/core/model-registry.d.ts.map +1 -0
  43. package/dist/core/model-registry.js +86 -0
  44. package/dist/core/model-registry.js.map +1 -0
  45. package/dist/core/oauth/anthropic.d.ts +4 -0
  46. package/dist/core/oauth/anthropic.d.ts.map +1 -0
  47. package/dist/core/oauth/anthropic.js +73 -0
  48. package/dist/core/oauth/anthropic.js.map +1 -0
  49. package/dist/core/oauth/openai.d.ts +4 -0
  50. package/dist/core/oauth/openai.d.ts.map +1 -0
  51. package/dist/core/oauth/openai.js +186 -0
  52. package/dist/core/oauth/openai.js.map +1 -0
  53. package/dist/core/oauth/pkce.d.ts +5 -0
  54. package/dist/core/oauth/pkce.d.ts.map +1 -0
  55. package/dist/core/oauth/pkce.js +17 -0
  56. package/dist/core/oauth/pkce.js.map +1 -0
  57. package/dist/core/oauth/types.d.ts +12 -0
  58. package/dist/core/oauth/types.d.ts.map +1 -0
  59. package/dist/core/oauth/types.js +2 -0
  60. package/dist/core/oauth/types.js.map +1 -0
  61. package/dist/core/session-manager.d.ts +74 -0
  62. package/dist/core/session-manager.d.ts.map +1 -0
  63. package/dist/core/session-manager.js +166 -0
  64. package/dist/core/session-manager.js.map +1 -0
  65. package/dist/core/settings-manager.d.ts +38 -0
  66. package/dist/core/settings-manager.d.ts.map +1 -0
  67. package/dist/core/settings-manager.js +62 -0
  68. package/dist/core/settings-manager.js.map +1 -0
  69. package/dist/core/skills.d.ts +23 -0
  70. package/dist/core/skills.d.ts.map +1 -0
  71. package/dist/core/skills.js +89 -0
  72. package/dist/core/skills.js.map +1 -0
  73. package/dist/core/slash-commands.d.ts +31 -0
  74. package/dist/core/slash-commands.d.ts.map +1 -0
  75. package/dist/core/slash-commands.js +161 -0
  76. package/dist/core/slash-commands.js.map +1 -0
  77. package/dist/index.d.ts +11 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +17 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/interactive.d.ts +3 -0
  82. package/dist/interactive.d.ts.map +1 -0
  83. package/dist/interactive.js +153 -0
  84. package/dist/interactive.js.map +1 -0
  85. package/dist/modes/index.d.ts +2 -0
  86. package/dist/modes/index.d.ts.map +1 -0
  87. package/dist/modes/index.js +2 -0
  88. package/dist/modes/index.js.map +1 -0
  89. package/dist/modes/print-mode.d.ts +12 -0
  90. package/dist/modes/print-mode.d.ts.map +1 -0
  91. package/dist/modes/print-mode.js +42 -0
  92. package/dist/modes/print-mode.js.map +1 -0
  93. package/dist/session.d.ts +16 -0
  94. package/dist/session.d.ts.map +1 -0
  95. package/dist/session.js +122 -0
  96. package/dist/session.js.map +1 -0
  97. package/dist/system-prompt.d.ts +6 -0
  98. package/dist/system-prompt.d.ts.map +1 -0
  99. package/dist/system-prompt.js +70 -0
  100. package/dist/system-prompt.js.map +1 -0
  101. package/dist/tools/bash.d.ts +9 -0
  102. package/dist/tools/bash.d.ts.map +1 -0
  103. package/dist/tools/bash.js +81 -0
  104. package/dist/tools/bash.js.map +1 -0
  105. package/dist/tools/edit-diff.d.ts +18 -0
  106. package/dist/tools/edit-diff.d.ts.map +1 -0
  107. package/dist/tools/edit-diff.js +92 -0
  108. package/dist/tools/edit-diff.js.map +1 -0
  109. package/dist/tools/edit.d.ts +10 -0
  110. package/dist/tools/edit.d.ts.map +1 -0
  111. package/dist/tools/edit.js +53 -0
  112. package/dist/tools/edit.js.map +1 -0
  113. package/dist/tools/find.d.ts +9 -0
  114. package/dist/tools/find.d.ts.map +1 -0
  115. package/dist/tools/find.js +59 -0
  116. package/dist/tools/find.js.map +1 -0
  117. package/dist/tools/grep.d.ts +12 -0
  118. package/dist/tools/grep.d.ts.map +1 -0
  119. package/dist/tools/grep.js +107 -0
  120. package/dist/tools/grep.js.map +1 -0
  121. package/dist/tools/index.d.ts +10 -0
  122. package/dist/tools/index.d.ts.map +1 -0
  123. package/dist/tools/index.js +26 -0
  124. package/dist/tools/index.js.map +1 -0
  125. package/dist/tools/ls.d.ts +9 -0
  126. package/dist/tools/ls.d.ts.map +1 -0
  127. package/dist/tools/ls.js +56 -0
  128. package/dist/tools/ls.js.map +1 -0
  129. package/dist/tools/path-utils.d.ts +2 -0
  130. package/dist/tools/path-utils.d.ts.map +1 -0
  131. package/dist/tools/path-utils.js +9 -0
  132. package/dist/tools/path-utils.js.map +1 -0
  133. package/dist/tools/read.d.ts +11 -0
  134. package/dist/tools/read.d.ts.map +1 -0
  135. package/dist/tools/read.js +98 -0
  136. package/dist/tools/read.js.map +1 -0
  137. package/dist/tools/truncate.d.ts +19 -0
  138. package/dist/tools/truncate.d.ts.map +1 -0
  139. package/dist/tools/truncate.js +59 -0
  140. package/dist/tools/truncate.js.map +1 -0
  141. package/dist/tools/write.d.ts +9 -0
  142. package/dist/tools/write.d.ts.map +1 -0
  143. package/dist/tools/write.js +23 -0
  144. package/dist/tools/write.js.map +1 -0
  145. package/dist/types.d.ts +36 -0
  146. package/dist/types.d.ts.map +1 -0
  147. package/dist/types.js +2 -0
  148. package/dist/types.js.map +1 -0
  149. package/dist/ui/App.d.ts +19 -0
  150. package/dist/ui/App.d.ts.map +1 -0
  151. package/dist/ui/App.js +209 -0
  152. package/dist/ui/App.js.map +1 -0
  153. package/dist/ui/components/AssistantMessage.d.ts +8 -0
  154. package/dist/ui/components/AssistantMessage.d.ts.map +1 -0
  155. package/dist/ui/components/AssistantMessage.js +10 -0
  156. package/dist/ui/components/AssistantMessage.js.map +1 -0
  157. package/dist/ui/components/DiffView.d.ts +4 -0
  158. package/dist/ui/components/DiffView.d.ts.map +1 -0
  159. package/dist/ui/components/DiffView.js +20 -0
  160. package/dist/ui/components/DiffView.js.map +1 -0
  161. package/dist/ui/components/Footer.d.ts +9 -0
  162. package/dist/ui/components/Footer.d.ts.map +1 -0
  163. package/dist/ui/components/Footer.js +79 -0
  164. package/dist/ui/components/Footer.js.map +1 -0
  165. package/dist/ui/components/InputArea.d.ts +8 -0
  166. package/dist/ui/components/InputArea.d.ts.map +1 -0
  167. package/dist/ui/components/InputArea.js +143 -0
  168. package/dist/ui/components/InputArea.js.map +1 -0
  169. package/dist/ui/components/Markdown.d.ts +7 -0
  170. package/dist/ui/components/Markdown.d.ts.map +1 -0
  171. package/dist/ui/components/Markdown.js +215 -0
  172. package/dist/ui/components/Markdown.js.map +1 -0
  173. package/dist/ui/components/ModelSelector.d.ts +7 -0
  174. package/dist/ui/components/ModelSelector.d.ts.map +1 -0
  175. package/dist/ui/components/ModelSelector.js +14 -0
  176. package/dist/ui/components/ModelSelector.js.map +1 -0
  177. package/dist/ui/components/Overlay.d.ts +8 -0
  178. package/dist/ui/components/Overlay.d.ts.map +1 -0
  179. package/dist/ui/components/Overlay.js +9 -0
  180. package/dist/ui/components/Overlay.js.map +1 -0
  181. package/dist/ui/components/SelectList.d.ts +13 -0
  182. package/dist/ui/components/SelectList.d.ts.map +1 -0
  183. package/dist/ui/components/SelectList.js +46 -0
  184. package/dist/ui/components/SelectList.js.map +1 -0
  185. package/dist/ui/components/SessionSelector.d.ts +9 -0
  186. package/dist/ui/components/SessionSelector.d.ts.map +1 -0
  187. package/dist/ui/components/SessionSelector.js +13 -0
  188. package/dist/ui/components/SessionSelector.js.map +1 -0
  189. package/dist/ui/components/SettingsSelector.d.ts +9 -0
  190. package/dist/ui/components/SettingsSelector.d.ts.map +1 -0
  191. package/dist/ui/components/SettingsSelector.js +13 -0
  192. package/dist/ui/components/SettingsSelector.js.map +1 -0
  193. package/dist/ui/components/Spinner.d.ts +4 -0
  194. package/dist/ui/components/Spinner.d.ts.map +1 -0
  195. package/dist/ui/components/Spinner.js +17 -0
  196. package/dist/ui/components/Spinner.js.map +1 -0
  197. package/dist/ui/components/StreamingArea.d.ts +12 -0
  198. package/dist/ui/components/StreamingArea.d.ts.map +1 -0
  199. package/dist/ui/components/StreamingArea.js +47 -0
  200. package/dist/ui/components/StreamingArea.js.map +1 -0
  201. package/dist/ui/components/ThinkingIndicator.d.ts +6 -0
  202. package/dist/ui/components/ThinkingIndicator.d.ts.map +1 -0
  203. package/dist/ui/components/ThinkingIndicator.js +171 -0
  204. package/dist/ui/components/ThinkingIndicator.js.map +1 -0
  205. package/dist/ui/components/ToolExecution.d.ts +16 -0
  206. package/dist/ui/components/ToolExecution.d.ts.map +1 -0
  207. package/dist/ui/components/ToolExecution.js +262 -0
  208. package/dist/ui/components/ToolExecution.js.map +1 -0
  209. package/dist/ui/components/UserMessage.d.ts +4 -0
  210. package/dist/ui/components/UserMessage.d.ts.map +1 -0
  211. package/dist/ui/components/UserMessage.js +9 -0
  212. package/dist/ui/components/UserMessage.js.map +1 -0
  213. package/dist/ui/components/index.d.ts +14 -0
  214. package/dist/ui/components/index.d.ts.map +1 -0
  215. package/dist/ui/components/index.js +14 -0
  216. package/dist/ui/components/index.js.map +1 -0
  217. package/dist/ui/hooks/useAgentLoop.d.ts +40 -0
  218. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -0
  219. package/dist/ui/hooks/useAgentLoop.js +195 -0
  220. package/dist/ui/hooks/useAgentLoop.js.map +1 -0
  221. package/dist/ui/hooks/useSessionManager.d.ts +13 -0
  222. package/dist/ui/hooks/useSessionManager.d.ts.map +1 -0
  223. package/dist/ui/hooks/useSessionManager.js +43 -0
  224. package/dist/ui/hooks/useSessionManager.js.map +1 -0
  225. package/dist/ui/hooks/useSlashCommands.d.ts +7 -0
  226. package/dist/ui/hooks/useSlashCommands.d.ts.map +1 -0
  227. package/dist/ui/hooks/useSlashCommands.js +11 -0
  228. package/dist/ui/hooks/useSlashCommands.js.map +1 -0
  229. package/dist/ui/render.d.ts +20 -0
  230. package/dist/ui/render.d.ts.map +1 -0
  231. package/dist/ui/render.js +24 -0
  232. package/dist/ui/render.js.map +1 -0
  233. package/dist/ui/theme/dark.json +23 -0
  234. package/dist/ui/theme/light.json +23 -0
  235. package/dist/ui/theme/theme.d.ts +28 -0
  236. package/dist/ui/theme/theme.d.ts.map +1 -0
  237. package/dist/ui/theme/theme.js +11 -0
  238. package/dist/ui/theme/theme.js.map +1 -0
  239. package/dist/utils/error-handler.d.ts +5 -0
  240. package/dist/utils/error-handler.d.ts.map +1 -0
  241. package/dist/utils/error-handler.js +97 -0
  242. package/dist/utils/error-handler.js.map +1 -0
  243. package/dist/utils/format.d.ts +21 -0
  244. package/dist/utils/format.d.ts.map +1 -0
  245. package/dist/utils/format.js +120 -0
  246. package/dist/utils/format.js.map +1 -0
  247. package/dist/utils/git.d.ts +2 -0
  248. package/dist/utils/git.d.ts.map +1 -0
  249. package/dist/utils/git.js +13 -0
  250. package/dist/utils/git.js.map +1 -0
  251. package/dist/utils/markdown.d.ts +6 -0
  252. package/dist/utils/markdown.d.ts.map +1 -0
  253. package/dist/utils/markdown.js +25 -0
  254. package/dist/utils/markdown.js.map +1 -0
  255. package/dist/utils/process.d.ts +6 -0
  256. package/dist/utils/process.d.ts.map +1 -0
  257. package/dist/utils/process.js +19 -0
  258. package/dist/utils/process.js.map +1 -0
  259. package/dist/utils/shell.d.ts +3 -0
  260. package/dist/utils/shell.d.ts.map +1 -0
  261. package/dist/utils/shell.js +8 -0
  262. package/dist/utils/shell.js.map +1 -0
  263. package/package.json +51 -0
@@ -0,0 +1,262 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { Text, Box } from "ink";
4
+ import { useTheme } from "../theme/theme.js";
5
+ import { Spinner } from "./Spinner.js";
6
+ const MAX_OUTPUT_LINES = 8;
7
+ export function ToolExecution(props) {
8
+ const theme = useTheme();
9
+ if (props.status === "running") {
10
+ const { label, detail } = getToolHeaderParts(props.name, props.args);
11
+ return (_jsx(Box, { marginTop: 1, children: _jsx(Spinner, { label: detail ? `${label}(${detail})` : label }) }));
12
+ }
13
+ const { name, args, result, isError } = props;
14
+ const isDiff = name === "edit" && !isError && result.includes("---");
15
+ const { label, detail } = getToolHeaderParts(name, args);
16
+ const body = isDiff
17
+ ? buildDiffBody(result)
18
+ : buildResultBody(name, result, isError);
19
+ const headerColor = isError ? theme.toolError : theme.toolName;
20
+ // Compact display — no body to show, but show inline summary
21
+ if (!body) {
22
+ const inline = getInlineSummary(name, result, isError);
23
+ return (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { children: [_jsx(Text, { color: theme.primary, children: "⏺ " }), _jsx(Text, { bold: true, color: headerColor, children: label }), detail && _jsxs(Text, { color: theme.text, children: ["(", detail, ")"] }), inline && _jsxs(Text, { color: theme.textDim, children: [" ", inline] })] }) }));
24
+ }
25
+ const { lines, totalLines } = body;
26
+ const hiddenCount = totalLines - lines.length;
27
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Box, { children: _jsxs(Text, { children: [_jsx(Text, { color: theme.primary, children: "⏺ " }), _jsx(Text, { bold: true, color: headerColor, children: label }), detail && _jsxs(Text, { color: theme.text, children: ["(", detail, ")"] })] }) }), _jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [lines.map((line, i) => (_jsxs(Box, { children: [_jsx(Text, { color: theme.textDim, children: i === 0 ? "⎿ " : " " }), _jsx(Box, { flexShrink: 1, children: line })] }, i))), hiddenCount > 0 && (_jsx(Box, { children: _jsxs(Text, { color: theme.textDim, children: [" … +", hiddenCount, " lines"] }) }))] })] }));
28
+ }
29
+ // ── Header formatting ──────────────────────────────────────
30
+ function shortenPath(filePath) {
31
+ // Show last 2 path segments max, e.g. "src/components/App.tsx"
32
+ const parts = filePath.split("/");
33
+ if (parts.length <= 3)
34
+ return filePath;
35
+ return "…/" + parts.slice(-2).join("/");
36
+ }
37
+ function getToolHeaderParts(name, args) {
38
+ const displayName = toolDisplayName(name);
39
+ switch (name) {
40
+ case "bash": {
41
+ const cmd = String(args.command ?? "");
42
+ const firstLine = cmd.split("\n")[0];
43
+ const truncCmd = firstLine.length > 60 ? firstLine.slice(0, 57) + "…" : firstLine;
44
+ const multiline = cmd.includes("\n");
45
+ return { label: displayName, detail: `${truncCmd}${multiline ? " …" : ""}` };
46
+ }
47
+ case "edit":
48
+ return { label: displayName, detail: shortenPath(String(args.file_path ?? "")) };
49
+ case "write":
50
+ return { label: displayName, detail: shortenPath(String(args.file_path ?? "")) };
51
+ case "read":
52
+ return { label: "Read", detail: shortenPath(String(args.file_path ?? "")) };
53
+ case "grep": {
54
+ const pat = String(args.pattern ?? "");
55
+ return { label: displayName, detail: pat.length > 40 ? pat.slice(0, 37) + "…" : pat };
56
+ }
57
+ case "find": {
58
+ const pat = String(args.pattern ?? "");
59
+ return { label: displayName, detail: pat.length > 40 ? pat.slice(0, 37) + "…" : pat };
60
+ }
61
+ case "ls":
62
+ return { label: displayName, detail: shortenPath(String(args.path ?? ".")) };
63
+ default:
64
+ return { label: displayName, detail: "" };
65
+ }
66
+ }
67
+ function toolDisplayName(name) {
68
+ switch (name) {
69
+ case "bash": return "Bash";
70
+ case "read": return "Read";
71
+ case "write": return "Write";
72
+ case "edit": return "Update";
73
+ case "grep": return "Search";
74
+ case "find": return "Find";
75
+ case "ls": return "List";
76
+ default: return name.charAt(0).toUpperCase() + name.slice(1);
77
+ }
78
+ }
79
+ // ── Inline summary for compact tools ───────────────────────
80
+ function getInlineSummary(name, result, isError) {
81
+ if (isError) {
82
+ const firstLine = result.split("\n")[0];
83
+ return firstLine.length > 60 ? firstLine.slice(0, 57) + "…" : firstLine;
84
+ }
85
+ switch (name) {
86
+ case "read": {
87
+ const lines = result.split("\n").filter((l) => l.length > 0);
88
+ return `${lines.length} line${lines.length !== 1 ? "s" : ""}`;
89
+ }
90
+ case "write": {
91
+ const m = result.match(/Wrote (\d+) bytes/);
92
+ return m ? `${m[1]} bytes` : "done";
93
+ }
94
+ case "bash": {
95
+ const match = result.match(/^Exit code: (.+)/);
96
+ return match ? `exit ${match[1]}` : "done";
97
+ }
98
+ default:
99
+ return "";
100
+ }
101
+ }
102
+ function parseDiffWithLineNumbers(result) {
103
+ const allLines = result.split("\n");
104
+ const diffLines = allLines.filter((l) => !l.startsWith("---") && !l.startsWith("+++") && !l.startsWith("@@"));
105
+ const numbered = [];
106
+ let oldLine = 1;
107
+ let newLine = 1;
108
+ for (const line of diffLines) {
109
+ const prefix = line[0];
110
+ const content = line.slice(1);
111
+ if (prefix === "+") {
112
+ numbered.push({ type: "add", lineNo: newLine, content });
113
+ newLine++;
114
+ }
115
+ else if (prefix === "-") {
116
+ numbered.push({ type: "remove", lineNo: oldLine, content });
117
+ oldLine++;
118
+ }
119
+ else {
120
+ numbered.push({ type: "context", lineNo: newLine, content });
121
+ oldLine++;
122
+ newLine++;
123
+ }
124
+ }
125
+ return numbered;
126
+ }
127
+ function buildDiffBody(result) {
128
+ const added = (result.match(/^\+[^+]/gm) ?? []).length;
129
+ const removed = (result.match(/^-[^-]/gm) ?? []).length;
130
+ const summaryText = `Added ${added} line${added !== 1 ? "s" : ""}, removed ${removed} line${removed !== 1 ? "s" : ""}`;
131
+ const numbered = parseDiffWithLineNumbers(result);
132
+ const firstChangeIdx = numbered.findIndex((l) => l.type !== "context");
133
+ const lastChangeIdx = numbered.length - 1 - [...numbered].reverse().findIndex((l) => l.type !== "context");
134
+ const startIdx = Math.max(0, firstChangeIdx - 2);
135
+ const endIdx = Math.min(numbered.length, lastChangeIdx + 3);
136
+ const focused = numbered.slice(startIdx, endIdx);
137
+ const maxLineNo = focused.reduce((m, l) => Math.max(m, l.lineNo), 0);
138
+ const padWidth = String(maxLineNo).length;
139
+ const displayLines = focused.slice(0, MAX_OUTPUT_LINES);
140
+ const rendered = displayLines.map((line, i) => (_jsx(DiffLine, { line: line, padWidth: padWidth }, i)));
141
+ return {
142
+ lines: [
143
+ _jsx(Text, { color: "#9ca3af", children: summaryText }, "summary"),
144
+ ...rendered,
145
+ ],
146
+ totalLines: focused.length + 1,
147
+ };
148
+ }
149
+ function buildResultBody(name, result, isError) {
150
+ if (isError) {
151
+ const lines = result.split("\n");
152
+ const display = lines.slice(0, MAX_OUTPUT_LINES);
153
+ return {
154
+ lines: display.map((l, i) => (_jsx(Text, { color: "#f87171", children: l }, i))),
155
+ totalLines: lines.length,
156
+ };
157
+ }
158
+ switch (name) {
159
+ case "bash": {
160
+ const allLines = result.split("\n");
161
+ // Check exit code
162
+ const exitMatch = allLines[0]?.match(/^Exit code: (.+)/);
163
+ const exitCode = exitMatch ? exitMatch[1].trim() : "0";
164
+ const outputLines = allLines.slice(1).filter((l) => l.length > 0);
165
+ if (outputLines.length === 0)
166
+ return null;
167
+ const display = outputLines.slice(0, MAX_OUTPUT_LINES);
168
+ return {
169
+ lines: display.map((l, i) => (_jsx(Text, { color: exitCode !== "0" ? "#fbbf24" : "#9ca3af", children: l }, i))),
170
+ totalLines: outputLines.length,
171
+ };
172
+ }
173
+ case "read":
174
+ return null;
175
+ case "write":
176
+ return null;
177
+ case "grep": {
178
+ const lines = result.split("\n").filter((l) => l.length > 0);
179
+ if (lines.length === 0 || result === "No matches found.")
180
+ return null;
181
+ const display = lines.slice(0, MAX_OUTPUT_LINES);
182
+ return {
183
+ lines: display.map((l, i) => _jsx(GrepLine, { line: l }, i)),
184
+ totalLines: lines.length,
185
+ };
186
+ }
187
+ case "find": {
188
+ const lines = result.split("\n").filter((l) => l.length > 0);
189
+ if (lines.length === 0)
190
+ return null;
191
+ const display = lines.slice(0, MAX_OUTPUT_LINES);
192
+ return {
193
+ lines: display.map((l, i) => _jsx(FindLine, { line: l }, i)),
194
+ totalLines: lines.length,
195
+ };
196
+ }
197
+ case "ls": {
198
+ const lines = result.split("\n").filter((l) => l.length > 0);
199
+ if (lines.length === 0)
200
+ return null;
201
+ const display = lines.slice(0, MAX_OUTPUT_LINES);
202
+ return {
203
+ lines: display.map((l, i) => _jsx(LsLine, { line: l }, i)),
204
+ totalLines: lines.length,
205
+ };
206
+ }
207
+ default:
208
+ return null;
209
+ }
210
+ }
211
+ // ── Diff line component ────────────────────────────────────
212
+ function DiffLine({ line, padWidth }) {
213
+ const lineNo = String(line.lineNo).padStart(padWidth, " ");
214
+ if (line.type === "add") {
215
+ return (_jsxs(Text, { backgroundColor: "#16a34a", color: "#ffffff", children: [lineNo, " ", line.content] }));
216
+ }
217
+ if (line.type === "remove") {
218
+ return (_jsxs(Text, { backgroundColor: "#dc2626", color: "#ffffff", children: [lineNo, " ", line.content] }));
219
+ }
220
+ return (_jsxs(Text, { color: "#4b5563", children: [lineNo, " ", line.content] }));
221
+ }
222
+ // ── Grep result line ───────────────────────────────────────
223
+ function GrepLine({ line }) {
224
+ // Format: filepath:lineNo:content
225
+ const firstColon = line.indexOf(":");
226
+ if (firstColon === -1)
227
+ return _jsx(Text, { color: "#9ca3af", children: line });
228
+ const secondColon = line.indexOf(":", firstColon + 1);
229
+ if (secondColon === -1)
230
+ return _jsx(Text, { color: "#9ca3af", children: line });
231
+ const file = line.slice(0, firstColon);
232
+ const lineNo = line.slice(firstColon + 1, secondColon);
233
+ const content = line.slice(secondColon + 1);
234
+ return (_jsxs(Text, { children: [_jsx(Text, { color: "#60a5fa", children: file }), _jsx(Text, { color: "#6b7280", children: ":" }), _jsx(Text, { color: "#fbbf24", children: lineNo }), _jsx(Text, { color: "#6b7280", children: ":" }), _jsx(Text, { color: "#9ca3af", children: content })] }));
235
+ }
236
+ // ── Find result line ───────────────────────────────────────
237
+ function FindLine({ line }) {
238
+ const trimmed = line.trim();
239
+ if (trimmed.endsWith("/")) {
240
+ return _jsx(Text, { color: "#60a5fa", children: trimmed });
241
+ }
242
+ // Highlight the filename, dim the path
243
+ const lastSlash = trimmed.lastIndexOf("/");
244
+ if (lastSlash === -1) {
245
+ return _jsx(Text, { color: "#e5e7eb", children: trimmed });
246
+ }
247
+ return (_jsxs(Text, { children: [_jsx(Text, { color: "#6b7280", children: trimmed.slice(0, lastSlash + 1) }), _jsx(Text, { color: "#e5e7eb", children: trimmed.slice(lastSlash + 1) })] }));
248
+ }
249
+ // ── Ls result line ─────────────────────────────────────────
250
+ function LsLine({ line }) {
251
+ // Format: "d - dirname/" or "f 1.2K filename"
252
+ const parts = line.match(/^([dfl])\s+(\S+)\s+(.+)$/);
253
+ if (!parts)
254
+ return _jsx(Text, { color: "#9ca3af", children: line });
255
+ const [, type, size, name] = parts;
256
+ if (type === "d") {
257
+ return (_jsxs(Text, { children: [_jsx(Text, { color: "#60a5fa", bold: true, children: name }), _jsxs(Text, { color: "#6b7280", children: [" ", size === "-" ? "" : size] })] }));
258
+ }
259
+ // File or symlink
260
+ return (_jsxs(Text, { children: [_jsx(Text, { color: "#e5e7eb", children: name }), _jsxs(Text, { color: "#6b7280", children: [" ", size] })] }));
261
+ }
262
+ //# sourceMappingURL=ToolExecution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolExecution.js","sourceRoot":"","sources":["../../../src/ui/components/ToolExecution.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function UserMessage({ text }: {
2
+ text: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=UserMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/components/UserMessage.tsx"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,2CAWrD"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { Text, Box } from "ink";
4
+ import { useTheme } from "../theme/theme.js";
5
+ export function UserMessage({ text }) {
6
+ const theme = useTheme();
7
+ return (_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: theme.inputPrompt, children: "❯ " }), _jsx(Box, { flexShrink: 1, children: _jsx(Text, { color: theme.textMuted, children: text }) })] }));
8
+ }
9
+ //# sourceMappingURL=UserMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMessage.js","sourceRoot":"","sources":["../../../src/ui/components/UserMessage.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAoB;IACpD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,OAAO,CACL,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,YAAG,IAAI,GAAQ,EAC7C,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,YAAG,IAAI,GAAQ,GACvC,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { Spinner } from "./Spinner.js";
2
+ export { UserMessage } from "./UserMessage.js";
3
+ export { AssistantMessage } from "./AssistantMessage.js";
4
+ export { DiffView } from "./DiffView.js";
5
+ export { ToolExecution } from "./ToolExecution.js";
6
+ export { Footer } from "./Footer.js";
7
+ export { StreamingArea } from "./StreamingArea.js";
8
+ export { InputArea } from "./InputArea.js";
9
+ export { Overlay } from "./Overlay.js";
10
+ export { SelectList } from "./SelectList.js";
11
+ export { ModelSelector } from "./ModelSelector.js";
12
+ export { SessionSelector } from "./SessionSelector.js";
13
+ export { SettingsSelector } from "./SettingsSelector.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { Spinner } from "./Spinner.js";
2
+ export { UserMessage } from "./UserMessage.js";
3
+ export { AssistantMessage } from "./AssistantMessage.js";
4
+ export { DiffView } from "./DiffView.js";
5
+ export { ToolExecution } from "./ToolExecution.js";
6
+ export { Footer } from "./Footer.js";
7
+ export { StreamingArea } from "./StreamingArea.js";
8
+ export { InputArea } from "./InputArea.js";
9
+ export { Overlay } from "./Overlay.js";
10
+ export { SelectList } from "./SelectList.js";
11
+ export { ModelSelector } from "./ModelSelector.js";
12
+ export { SessionSelector } from "./SessionSelector.js";
13
+ export { SettingsSelector } from "./SettingsSelector.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type AgentTool } from "@kenkaiiii/gg-agent";
2
+ import type { Message, Provider, ThinkingLevel } from "@kenkaiiii/gg-ai";
3
+ export interface ActiveToolCall {
4
+ toolCallId: string;
5
+ name: string;
6
+ args: Record<string, unknown>;
7
+ startTime: number;
8
+ }
9
+ export interface AgentLoopOptions {
10
+ provider: Provider;
11
+ model: string;
12
+ tools: AgentTool[];
13
+ maxTokens: number;
14
+ thinking?: ThinkingLevel;
15
+ apiKey?: string;
16
+ baseUrl?: string;
17
+ accountId?: string;
18
+ }
19
+ export interface UseAgentLoopReturn {
20
+ run: (userContent: string) => Promise<void>;
21
+ abort: () => void;
22
+ isRunning: boolean;
23
+ streamingText: string;
24
+ streamingThinking: string;
25
+ activeToolCalls: ActiveToolCall[];
26
+ currentTurn: number;
27
+ totalTokens: {
28
+ input: number;
29
+ output: number;
30
+ };
31
+ }
32
+ export declare function useAgentLoop(messages: React.MutableRefObject<Message[]>, options: AgentLoopOptions, callbacks?: {
33
+ onComplete?: (newMessages: Message[]) => void;
34
+ onTurnText?: (text: string, thinking: string) => void;
35
+ onToolStart?: (toolCallId: string, name: string, args: Record<string, unknown>) => void;
36
+ onToolEnd?: (toolCallId: string, name: string, result: string, isError: boolean, durationMs: number) => void;
37
+ onDone?: (durationMs: number, toolsUsed: string[]) => void;
38
+ onAborted?: () => void;
39
+ }): UseAgentLoopReturn;
40
+ //# sourceMappingURL=useAgentLoop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAgentLoop.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useAgentLoop.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAC3C,OAAO,EAAE,gBAAgB,EACzB,SAAS,CAAC,EAAE;IACV,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC9C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACxF,SAAS,CAAC,EAAE,CACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,KACf,IAAI,CAAC;IACV,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,GACA,kBAAkB,CAiNpB"}
@@ -0,0 +1,195 @@
1
+ import { useState, useRef, useCallback, useEffect } from "react";
2
+ import { agentLoop } from "@kenkaiiii/gg-agent";
3
+ export function useAgentLoop(messages, options, callbacks) {
4
+ const onComplete = callbacks?.onComplete;
5
+ const onTurnText = callbacks?.onTurnText;
6
+ const onToolStart = callbacks?.onToolStart;
7
+ const onToolEnd = callbacks?.onToolEnd;
8
+ const onDone = callbacks?.onDone;
9
+ const onAborted = callbacks?.onAborted;
10
+ const [isRunning, setIsRunning] = useState(false);
11
+ const [streamingText, setStreamingText] = useState("");
12
+ const [streamingThinking, setStreamingThinking] = useState("");
13
+ const [activeToolCalls, setActiveToolCalls] = useState([]);
14
+ const [currentTurn, setCurrentTurn] = useState(0);
15
+ const [totalTokens, setTotalTokens] = useState({ input: 0, output: 0 });
16
+ const abortRef = useRef(null);
17
+ const activeToolCallsRef = useRef([]);
18
+ const textPendingRef = useRef("");
19
+ const textVisibleRef = useRef("");
20
+ const thinkingBufferRef = useRef("");
21
+ const runStartRef = useRef(0);
22
+ const toolsUsedRef = useRef(new Set());
23
+ const revealTimerRef = useRef(null);
24
+ const stopReveal = useCallback(() => {
25
+ if (revealTimerRef.current) {
26
+ clearInterval(revealTimerRef.current);
27
+ revealTimerRef.current = null;
28
+ }
29
+ }, []);
30
+ const startReveal = useCallback(() => {
31
+ if (revealTimerRef.current)
32
+ return;
33
+ revealTimerRef.current = setInterval(() => {
34
+ const pending = textPendingRef.current;
35
+ if (pending.length === 0)
36
+ return;
37
+ // Adaptive speed: reveal more chars when buffer is large
38
+ const buffered = pending.length;
39
+ let charsPerTick;
40
+ if (buffered > 500)
41
+ charsPerTick = 20;
42
+ else if (buffered > 200)
43
+ charsPerTick = 10;
44
+ else if (buffered > 50)
45
+ charsPerTick = 4;
46
+ else
47
+ charsPerTick = 2;
48
+ const reveal = pending.slice(0, charsPerTick);
49
+ textPendingRef.current = pending.slice(charsPerTick);
50
+ textVisibleRef.current += reveal;
51
+ setStreamingText(textVisibleRef.current);
52
+ }, 12);
53
+ }, []);
54
+ const flushAllText = useCallback(() => {
55
+ stopReveal();
56
+ if (textPendingRef.current.length > 0) {
57
+ textVisibleRef.current += textPendingRef.current;
58
+ textPendingRef.current = "";
59
+ }
60
+ setStreamingText(textVisibleRef.current);
61
+ setStreamingThinking(thinkingBufferRef.current);
62
+ }, [stopReveal]);
63
+ const abort = useCallback(() => {
64
+ abortRef.current?.abort();
65
+ }, []);
66
+ const run = useCallback(async (userContent) => {
67
+ const ac = new AbortController();
68
+ abortRef.current = ac;
69
+ let wasAborted = false;
70
+ // Reset state
71
+ textPendingRef.current = "";
72
+ textVisibleRef.current = "";
73
+ thinkingBufferRef.current = "";
74
+ runStartRef.current = Date.now();
75
+ toolsUsedRef.current = new Set();
76
+ setStreamingText("");
77
+ setStreamingThinking("");
78
+ setActiveToolCalls([]);
79
+ setIsRunning(true);
80
+ // Push user message
81
+ const userMsg = { role: "user", content: userContent };
82
+ messages.current.push(userMsg);
83
+ const startIndex = messages.current.length;
84
+ try {
85
+ const generator = agentLoop(messages.current, {
86
+ provider: options.provider,
87
+ model: options.model,
88
+ tools: options.tools,
89
+ maxTokens: options.maxTokens,
90
+ thinking: options.thinking,
91
+ apiKey: options.apiKey,
92
+ baseUrl: options.baseUrl,
93
+ accountId: options.accountId,
94
+ signal: ac.signal,
95
+ });
96
+ for await (const event of generator) {
97
+ switch (event.type) {
98
+ case "text_delta":
99
+ textPendingRef.current += event.text;
100
+ startReveal();
101
+ break;
102
+ case "thinking_delta":
103
+ thinkingBufferRef.current += event.text;
104
+ setStreamingThinking(thinkingBufferRef.current);
105
+ break;
106
+ case "tool_call_start": {
107
+ const newTc = {
108
+ toolCallId: event.toolCallId,
109
+ name: event.name,
110
+ args: event.args,
111
+ startTime: Date.now(),
112
+ };
113
+ onToolStart?.(event.toolCallId, event.name, event.args);
114
+ toolsUsedRef.current.add(event.name);
115
+ activeToolCallsRef.current = [...activeToolCallsRef.current, newTc];
116
+ setActiveToolCalls(activeToolCallsRef.current);
117
+ break;
118
+ }
119
+ case "tool_call_end": {
120
+ const tc = activeToolCallsRef.current.find((t) => t.toolCallId === event.toolCallId);
121
+ const toolName = tc?.name ?? "unknown";
122
+ const durationMs = tc ? Date.now() - tc.startTime : 0;
123
+ onToolEnd?.(event.toolCallId, toolName, event.result, event.isError, durationMs);
124
+ activeToolCallsRef.current = activeToolCallsRef.current.filter((t) => t.toolCallId !== event.toolCallId);
125
+ setActiveToolCalls(activeToolCallsRef.current);
126
+ break;
127
+ }
128
+ case "turn_end":
129
+ setCurrentTurn(event.turn);
130
+ setTotalTokens((prev) => ({
131
+ input: prev.input + event.usage.inputTokens,
132
+ output: prev.output + event.usage.outputTokens,
133
+ }));
134
+ // Flush all pending text before completing turn
135
+ flushAllText();
136
+ if (textVisibleRef.current) {
137
+ onTurnText?.(textVisibleRef.current, thinkingBufferRef.current);
138
+ }
139
+ // Reset streaming buffers for next turn
140
+ textPendingRef.current = "";
141
+ textVisibleRef.current = "";
142
+ thinkingBufferRef.current = "";
143
+ setStreamingText("");
144
+ setStreamingThinking("");
145
+ break;
146
+ case "agent_done":
147
+ flushAllText();
148
+ break;
149
+ }
150
+ }
151
+ }
152
+ catch (err) {
153
+ const isAbort = err instanceof Error &&
154
+ (err.name === "AbortError" || err.message.includes("aborted"));
155
+ if (!isAbort) {
156
+ throw err;
157
+ }
158
+ wasAborted = true;
159
+ }
160
+ finally {
161
+ setIsRunning(false);
162
+ abortRef.current = null;
163
+ stopReveal();
164
+ if (wasAborted) {
165
+ onAborted?.();
166
+ }
167
+ else {
168
+ // Notify parent of duration + tools used
169
+ const durationMs = Date.now() - runStartRef.current;
170
+ onDone?.(durationMs, [...toolsUsedRef.current]);
171
+ }
172
+ // Notify parent of new messages
173
+ const newMsgs = messages.current.slice(startIndex);
174
+ onComplete?.(newMsgs);
175
+ }
176
+ }, [messages, options, onComplete, onTurnText, onToolStart, onToolEnd, onDone, onAborted, startReveal, stopReveal, flushAllText]);
177
+ // Cleanup on unmount
178
+ useEffect(() => {
179
+ return () => {
180
+ stopReveal();
181
+ abortRef.current?.abort();
182
+ };
183
+ }, [stopReveal]);
184
+ return {
185
+ run,
186
+ abort,
187
+ isRunning,
188
+ streamingText,
189
+ streamingThinking,
190
+ activeToolCalls,
191
+ currentTurn,
192
+ totalTokens,
193
+ };
194
+ }
195
+ //# sourceMappingURL=useAgentLoop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAgentLoop.js","sourceRoot":"","sources":["../../../src/ui/hooks/useAgentLoop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Message } from "@kenkaiiii/gg-ai";
2
+ import { type SessionInfo } from "../../core/session-manager.js";
3
+ import type { Provider } from "@kenkaiiii/gg-ai";
4
+ export interface UseSessionManagerReturn {
5
+ sessionId: string;
6
+ sessionPath: string;
7
+ create: (cwd: string, provider: Provider, model: string) => Promise<void>;
8
+ load: (sessionPath: string) => Promise<Message[]>;
9
+ persistMessages: (messages: Message[], fromIndex: number) => Promise<void>;
10
+ listSessions: (cwd: string) => Promise<SessionInfo[]>;
11
+ }
12
+ export declare function useSessionManager(sessionsDir: string): UseSessionManagerReturn;
13
+ //# sourceMappingURL=useSessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionManager.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useSessionManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAqC,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEpG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,eAAe,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACvD;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,uBAAuB,CA6C9E"}