@kenkaiiii/ggcoder 0.0.3 → 1.0.4

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 (124) hide show
  1. package/dist/cli.js +153 -31
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.d.ts +1 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +1 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/core/agent-session.d.ts.map +1 -1
  8. package/dist/core/agent-session.js +5 -0
  9. package/dist/core/agent-session.js.map +1 -1
  10. package/dist/core/agents.d.ts +32 -0
  11. package/dist/core/agents.d.ts.map +1 -0
  12. package/dist/core/agents.js +95 -0
  13. package/dist/core/agents.js.map +1 -0
  14. package/dist/core/compaction/compactor.d.ts +7 -0
  15. package/dist/core/compaction/compactor.d.ts.map +1 -1
  16. package/dist/core/compaction/compactor.js +32 -1
  17. package/dist/core/compaction/compactor.js.map +1 -1
  18. package/dist/core/compaction/compactor.test.d.ts +2 -0
  19. package/dist/core/compaction/compactor.test.d.ts.map +1 -0
  20. package/dist/core/compaction/compactor.test.js +116 -0
  21. package/dist/core/compaction/compactor.test.js.map +1 -0
  22. package/dist/core/compaction/token-estimator.test.d.ts +2 -0
  23. package/dist/core/compaction/token-estimator.test.d.ts.map +1 -0
  24. package/dist/core/compaction/token-estimator.test.js +115 -0
  25. package/dist/core/compaction/token-estimator.test.js.map +1 -0
  26. package/dist/core/event-bus.d.ts +14 -0
  27. package/dist/core/event-bus.d.ts.map +1 -1
  28. package/dist/core/event-bus.js +20 -0
  29. package/dist/core/event-bus.js.map +1 -1
  30. package/dist/modes/json-mode.d.ts +13 -0
  31. package/dist/modes/json-mode.d.ts.map +1 -0
  32. package/dist/modes/json-mode.js +70 -0
  33. package/dist/modes/json-mode.js.map +1 -0
  34. package/dist/tools/index.d.ts +8 -1
  35. package/dist/tools/index.d.ts.map +1 -1
  36. package/dist/tools/index.js +10 -2
  37. package/dist/tools/index.js.map +1 -1
  38. package/dist/tools/subagent.d.ts +26 -0
  39. package/dist/tools/subagent.d.ts.map +1 -0
  40. package/dist/tools/subagent.js +163 -0
  41. package/dist/tools/subagent.js.map +1 -0
  42. package/dist/tools/truncate.test.d.ts +2 -0
  43. package/dist/tools/truncate.test.d.ts.map +1 -0
  44. package/dist/tools/truncate.test.js +100 -0
  45. package/dist/tools/truncate.test.js.map +1 -0
  46. package/dist/tools/web-fetch.d.ts +9 -0
  47. package/dist/tools/web-fetch.d.ts.map +1 -0
  48. package/dist/tools/web-fetch.js +50 -0
  49. package/dist/tools/web-fetch.js.map +1 -0
  50. package/dist/tools/write.test.d.ts +2 -0
  51. package/dist/tools/write.test.d.ts.map +1 -0
  52. package/dist/tools/write.test.js +84 -0
  53. package/dist/tools/write.test.js.map +1 -0
  54. package/dist/ui/App.d.ts +82 -1
  55. package/dist/ui/App.d.ts.map +1 -1
  56. package/dist/ui/App.js +209 -28
  57. package/dist/ui/App.js.map +1 -1
  58. package/dist/ui/components/ActivityIndicator.d.ts +12 -0
  59. package/dist/ui/components/ActivityIndicator.d.ts.map +1 -0
  60. package/dist/ui/components/ActivityIndicator.js +243 -0
  61. package/dist/ui/components/ActivityIndicator.js.map +1 -0
  62. package/dist/ui/components/AssistantMessage.js +1 -1
  63. package/dist/ui/components/AssistantMessage.js.map +1 -1
  64. package/dist/ui/components/Banner.d.ts +10 -0
  65. package/dist/ui/components/Banner.d.ts.map +1 -0
  66. package/dist/ui/components/Banner.js +34 -0
  67. package/dist/ui/components/Banner.js.map +1 -0
  68. package/dist/ui/components/Markdown.d.ts.map +1 -1
  69. package/dist/ui/components/Markdown.js +14 -9
  70. package/dist/ui/components/Markdown.js.map +1 -1
  71. package/dist/ui/components/ModelSelector.d.ts +5 -1
  72. package/dist/ui/components/ModelSelector.d.ts.map +1 -1
  73. package/dist/ui/components/ModelSelector.js +14 -8
  74. package/dist/ui/components/ModelSelector.js.map +1 -1
  75. package/dist/ui/components/ScrollableContent.d.ts +22 -0
  76. package/dist/ui/components/ScrollableContent.d.ts.map +1 -0
  77. package/dist/ui/components/ScrollableContent.js +44 -0
  78. package/dist/ui/components/ScrollableContent.js.map +1 -0
  79. package/dist/ui/components/SelectList.d.ts +2 -1
  80. package/dist/ui/components/SelectList.d.ts.map +1 -1
  81. package/dist/ui/components/SelectList.js +2 -2
  82. package/dist/ui/components/SelectList.js.map +1 -1
  83. package/dist/ui/components/ServerToolExecution.d.ts +16 -0
  84. package/dist/ui/components/ServerToolExecution.d.ts.map +1 -0
  85. package/dist/ui/components/ServerToolExecution.js +51 -0
  86. package/dist/ui/components/ServerToolExecution.js.map +1 -0
  87. package/dist/ui/components/StreamingArea.d.ts +1 -4
  88. package/dist/ui/components/StreamingArea.d.ts.map +1 -1
  89. package/dist/ui/components/StreamingArea.js +2 -42
  90. package/dist/ui/components/StreamingArea.js.map +1 -1
  91. package/dist/ui/components/SubAgentPanel.d.ts +22 -0
  92. package/dist/ui/components/SubAgentPanel.d.ts.map +1 -0
  93. package/dist/ui/components/SubAgentPanel.js +47 -0
  94. package/dist/ui/components/SubAgentPanel.js.map +1 -0
  95. package/dist/ui/components/ToolExecution.d.ts.map +1 -1
  96. package/dist/ui/components/ToolExecution.js +88 -11
  97. package/dist/ui/components/ToolExecution.js.map +1 -1
  98. package/dist/ui/hooks/useAgentLoop.d.ts +17 -2
  99. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  100. package/dist/ui/hooks/useAgentLoop.js +133 -7
  101. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  102. package/dist/ui/hooks/useMouseScroll.d.ts.map +1 -0
  103. package/dist/ui/hooks/useMouseScroll.js.map +1 -0
  104. package/dist/ui/hooks/useScrollViewport.d.ts +25 -0
  105. package/dist/ui/hooks/useScrollViewport.d.ts.map +1 -0
  106. package/dist/ui/hooks/useScrollViewport.js +32 -0
  107. package/dist/ui/hooks/useScrollViewport.js.map +1 -0
  108. package/dist/ui/login.d.ts +3 -0
  109. package/dist/ui/login.d.ts.map +1 -0
  110. package/dist/ui/login.js +90 -0
  111. package/dist/ui/login.js.map +1 -0
  112. package/dist/ui/render.d.ts +12 -1
  113. package/dist/ui/render.d.ts.map +1 -1
  114. package/dist/ui/render.js +7 -0
  115. package/dist/ui/render.js.map +1 -1
  116. package/dist/ui/utils/highlight.d.ts +8 -0
  117. package/dist/ui/utils/highlight.d.ts.map +1 -0
  118. package/dist/ui/utils/highlight.js +49 -0
  119. package/dist/ui/utils/highlight.js.map +1 -0
  120. package/dist/ui/utils/item-heights.d.ts +17 -0
  121. package/dist/ui/utils/item-heights.d.ts.map +1 -0
  122. package/dist/ui/utils/item-heights.js +73 -0
  123. package/dist/ui/utils/item-heights.js.map +1 -0
  124. package/package.json +6 -4
@@ -4,7 +4,10 @@ export function useAgentLoop(messages, options, callbacks) {
4
4
  const onComplete = callbacks?.onComplete;
5
5
  const onTurnText = callbacks?.onTurnText;
6
6
  const onToolStart = callbacks?.onToolStart;
7
+ const onToolUpdate = callbacks?.onToolUpdate;
7
8
  const onToolEnd = callbacks?.onToolEnd;
9
+ const onServerToolCall = callbacks?.onServerToolCall;
10
+ const onServerToolResult = callbacks?.onServerToolResult;
8
11
  const onDone = callbacks?.onDone;
9
12
  const onAborted = callbacks?.onAborted;
10
13
  const [isRunning, setIsRunning] = useState(false);
@@ -13,6 +16,12 @@ export function useAgentLoop(messages, options, callbacks) {
13
16
  const [activeToolCalls, setActiveToolCalls] = useState([]);
14
17
  const [currentTurn, setCurrentTurn] = useState(0);
15
18
  const [totalTokens, setTotalTokens] = useState({ input: 0, output: 0 });
19
+ const [contextUsed, setContextUsed] = useState(0);
20
+ const [activityPhase, setActivityPhase] = useState("idle");
21
+ const [elapsedMs, setElapsedMs] = useState(0);
22
+ const [thinkingMs, setThinkingMs] = useState(0);
23
+ const [isThinking, setIsThinking] = useState(false);
24
+ const [streamedTokenEstimate, setStreamedTokenEstimate] = useState(0);
16
25
  const abortRef = useRef(null);
17
26
  const activeToolCallsRef = useRef([]);
18
27
  const textPendingRef = useRef("");
@@ -21,6 +30,12 @@ export function useAgentLoop(messages, options, callbacks) {
21
30
  const runStartRef = useRef(0);
22
31
  const toolsUsedRef = useRef(new Set());
23
32
  const revealTimerRef = useRef(null);
33
+ const phaseRef = useRef("idle");
34
+ const thinkingStartRef = useRef(null);
35
+ const thinkingAccumRef = useRef(0);
36
+ const charCountRef = useRef(0);
37
+ const realTokensAccumRef = useRef(0);
38
+ const elapsedTimerRef = useRef(null);
24
39
  const stopReveal = useCallback(() => {
25
40
  if (revealTimerRef.current) {
26
41
  clearInterval(revealTimerRef.current);
@@ -34,22 +49,23 @@ export function useAgentLoop(messages, options, callbacks) {
34
49
  const pending = textPendingRef.current;
35
50
  if (pending.length === 0)
36
51
  return;
37
- // Adaptive speed: reveal more chars when buffer is large
52
+ // Adaptive speed: reveal more chars when buffer is large.
53
+ // Aggressive catch-up prevents text from lagging behind the LLM.
38
54
  const buffered = pending.length;
39
55
  let charsPerTick;
40
56
  if (buffered > 500)
41
- charsPerTick = 20;
57
+ charsPerTick = 60;
42
58
  else if (buffered > 200)
43
- charsPerTick = 10;
59
+ charsPerTick = 30;
44
60
  else if (buffered > 50)
45
- charsPerTick = 4;
61
+ charsPerTick = 12;
46
62
  else
47
- charsPerTick = 2;
63
+ charsPerTick = 4;
48
64
  const reveal = pending.slice(0, charsPerTick);
49
65
  textPendingRef.current = pending.slice(charsPerTick);
50
66
  textVisibleRef.current += reveal;
51
67
  setStreamingText(textVisibleRef.current);
52
- }, 12);
68
+ }, 10);
53
69
  }, []);
54
70
  const flushAllText = useCallback(() => {
55
71
  stopReveal();
@@ -63,6 +79,19 @@ export function useAgentLoop(messages, options, callbacks) {
63
79
  const abort = useCallback(() => {
64
80
  abortRef.current?.abort();
65
81
  }, []);
82
+ const reset = useCallback(() => {
83
+ setCurrentTurn(0);
84
+ setTotalTokens({ input: 0, output: 0 });
85
+ setContextUsed(0);
86
+ setStreamingText("");
87
+ setStreamingThinking("");
88
+ setActiveToolCalls([]);
89
+ setActivityPhase("idle");
90
+ setElapsedMs(0);
91
+ setThinkingMs(0);
92
+ setIsThinking(false);
93
+ setStreamedTokenEstimate(0);
94
+ }, []);
66
95
  const run = useCallback(async (userContent) => {
67
96
  const ac = new AbortController();
68
97
  abortRef.current = ac;
@@ -73,10 +102,43 @@ export function useAgentLoop(messages, options, callbacks) {
73
102
  thinkingBufferRef.current = "";
74
103
  runStartRef.current = Date.now();
75
104
  toolsUsedRef.current = new Set();
105
+ charCountRef.current = 0;
106
+ realTokensAccumRef.current = 0;
107
+ thinkingAccumRef.current = 0;
108
+ thinkingStartRef.current = null;
109
+ phaseRef.current = "waiting";
76
110
  setStreamingText("");
77
111
  setStreamingThinking("");
78
112
  setActiveToolCalls([]);
113
+ setActivityPhase("waiting");
114
+ setElapsedMs(0);
115
+ setThinkingMs(0);
116
+ setIsThinking(false);
117
+ setStreamedTokenEstimate(0);
79
118
  setIsRunning(true);
119
+ // Start elapsed timer (ticks every 250ms for smooth updates)
120
+ if (elapsedTimerRef.current)
121
+ clearInterval(elapsedTimerRef.current);
122
+ const timerStart = Date.now();
123
+ elapsedTimerRef.current = setInterval(() => {
124
+ const now = Date.now();
125
+ setElapsedMs(now - timerStart);
126
+ // Update live thinking time if currently thinking
127
+ if (thinkingStartRef.current !== null) {
128
+ setThinkingMs(thinkingAccumRef.current + (now - thinkingStartRef.current));
129
+ }
130
+ // Update token estimate
131
+ setStreamedTokenEstimate(realTokensAccumRef.current + Math.ceil(charCountRef.current / 4));
132
+ }, 250);
133
+ /** Freeze thinking time if currently in thinking phase */
134
+ const freezeThinking = () => {
135
+ if (thinkingStartRef.current !== null) {
136
+ thinkingAccumRef.current += Date.now() - thinkingStartRef.current;
137
+ thinkingStartRef.current = null;
138
+ setThinkingMs(thinkingAccumRef.current);
139
+ setIsThinking(false);
140
+ }
141
+ };
80
142
  // Push user message
81
143
  const userMsg = { role: "user", content: userContent };
82
144
  messages.current.push(userMsg);
@@ -86,29 +148,50 @@ export function useAgentLoop(messages, options, callbacks) {
86
148
  provider: options.provider,
87
149
  model: options.model,
88
150
  tools: options.tools,
151
+ serverTools: options.serverTools,
89
152
  maxTokens: options.maxTokens,
90
153
  thinking: options.thinking,
91
154
  apiKey: options.apiKey,
92
155
  baseUrl: options.baseUrl,
93
156
  accountId: options.accountId,
94
157
  signal: ac.signal,
158
+ transformContext: options.transformContext,
95
159
  });
96
160
  for await (const event of generator) {
97
161
  switch (event.type) {
98
162
  case "text_delta":
99
163
  textPendingRef.current += event.text;
164
+ charCountRef.current += event.text.length;
100
165
  startReveal();
166
+ if (phaseRef.current !== "generating") {
167
+ freezeThinking();
168
+ phaseRef.current = "generating";
169
+ setActivityPhase("generating");
170
+ }
101
171
  break;
102
172
  case "thinking_delta":
103
173
  thinkingBufferRef.current += event.text;
174
+ charCountRef.current += event.text.length;
104
175
  setStreamingThinking(thinkingBufferRef.current);
176
+ if (phaseRef.current !== "thinking") {
177
+ thinkingStartRef.current = Date.now();
178
+ setIsThinking(true);
179
+ phaseRef.current = "thinking";
180
+ setActivityPhase("thinking");
181
+ }
105
182
  break;
106
183
  case "tool_call_start": {
184
+ freezeThinking();
185
+ if (phaseRef.current !== "tools") {
186
+ phaseRef.current = "tools";
187
+ setActivityPhase("tools");
188
+ }
107
189
  const newTc = {
108
190
  toolCallId: event.toolCallId,
109
191
  name: event.name,
110
192
  args: event.args,
111
193
  startTime: Date.now(),
194
+ updates: [],
112
195
  };
113
196
  onToolStart?.(event.toolCallId, event.name, event.args);
114
197
  toolsUsedRef.current.add(event.name);
@@ -116,21 +199,44 @@ export function useAgentLoop(messages, options, callbacks) {
116
199
  setActiveToolCalls(activeToolCallsRef.current);
117
200
  break;
118
201
  }
202
+ case "tool_call_update": {
203
+ onToolUpdate?.(event.toolCallId, event.update);
204
+ activeToolCallsRef.current = activeToolCallsRef.current.map((tc) => tc.toolCallId === event.toolCallId
205
+ ? { ...tc, updates: [...tc.updates, event.update] }
206
+ : tc);
207
+ setActiveToolCalls(activeToolCallsRef.current);
208
+ break;
209
+ }
119
210
  case "tool_call_end": {
120
211
  const tc = activeToolCallsRef.current.find((t) => t.toolCallId === event.toolCallId);
121
212
  const toolName = tc?.name ?? "unknown";
122
213
  const durationMs = tc ? Date.now() - tc.startTime : 0;
123
- onToolEnd?.(event.toolCallId, toolName, event.result, event.isError, durationMs);
214
+ onToolEnd?.(event.toolCallId, toolName, event.result, event.isError, durationMs, event.details);
124
215
  activeToolCallsRef.current = activeToolCallsRef.current.filter((t) => t.toolCallId !== event.toolCallId);
125
216
  setActiveToolCalls(activeToolCallsRef.current);
126
217
  break;
127
218
  }
219
+ case "server_tool_call":
220
+ onServerToolCall?.(event.id, event.name, event.input);
221
+ break;
222
+ case "server_tool_result":
223
+ onServerToolResult?.(event.toolUseId, event.resultType, event.data);
224
+ break;
128
225
  case "turn_end":
129
226
  setCurrentTurn(event.turn);
130
227
  setTotalTokens((prev) => ({
131
228
  input: prev.input + event.usage.inputTokens,
132
229
  output: prev.output + event.usage.outputTokens,
133
230
  }));
231
+ // Latest turn's input tokens = current context window fill
232
+ setContextUsed(event.usage.inputTokens);
233
+ // Replace char-based estimate with real output tokens
234
+ realTokensAccumRef.current += event.usage.outputTokens;
235
+ charCountRef.current = 0;
236
+ setStreamedTokenEstimate(realTokensAccumRef.current);
237
+ // Reset phase for next turn
238
+ phaseRef.current = "waiting";
239
+ setActivityPhase("waiting");
134
240
  // Flush all pending text before completing turn
135
241
  flushAllText();
136
242
  if (textVisibleRef.current) {
@@ -160,6 +266,12 @@ export function useAgentLoop(messages, options, callbacks) {
160
266
  setIsRunning(false);
161
267
  abortRef.current = null;
162
268
  stopReveal();
269
+ if (elapsedTimerRef.current) {
270
+ clearInterval(elapsedTimerRef.current);
271
+ elapsedTimerRef.current = null;
272
+ }
273
+ phaseRef.current = "idle";
274
+ setActivityPhase("idle");
163
275
  if (wasAborted) {
164
276
  onAborted?.();
165
277
  }
@@ -178,7 +290,10 @@ export function useAgentLoop(messages, options, callbacks) {
178
290
  onComplete,
179
291
  onTurnText,
180
292
  onToolStart,
293
+ onToolUpdate,
181
294
  onToolEnd,
295
+ onServerToolCall,
296
+ onServerToolResult,
182
297
  onDone,
183
298
  onAborted,
184
299
  startReveal,
@@ -190,17 +305,28 @@ export function useAgentLoop(messages, options, callbacks) {
190
305
  return () => {
191
306
  stopReveal();
192
307
  abortRef.current?.abort();
308
+ if (elapsedTimerRef.current) {
309
+ clearInterval(elapsedTimerRef.current);
310
+ elapsedTimerRef.current = null;
311
+ }
193
312
  };
194
313
  }, [stopReveal]);
195
314
  return {
196
315
  run,
197
316
  abort,
317
+ reset,
198
318
  isRunning,
199
319
  streamingText,
200
320
  streamingThinking,
201
321
  activeToolCalls,
202
322
  currentTurn,
203
323
  totalTokens,
324
+ contextUsed,
325
+ activityPhase,
326
+ elapsedMs,
327
+ thinkingMs,
328
+ isThinking,
329
+ streamedTokenEstimate,
204
330
  };
205
331
  }
206
332
  //# sourceMappingURL=useAgentLoop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAgentLoop.js","sourceRoot":"","sources":["../../../src/ui/hooks/useAgentLoop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAgentLoop.js","sourceRoot":"","sources":["../../../src/ui/hooks/useAgentLoop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMouseScroll.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useMouseScroll.ts"],"names":[],"mappings":"AAIA,UAAU,qBAAqB;IAC7B,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,QAAe,EAAE,EAAE,qBAAqB,QA2BlG"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMouseScroll.js","sourceRoot":"","sources":["../../../src/ui/hooks/useMouseScroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,MAAM,YAAY,GAAG,CAAC,CAAC;AAQvB;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,GAAG,IAAI,EAAyB;IACjG,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,4EAA4E;YAC5E,MAAM,EAAE,GAAG,2BAA2B,CAAC;YACvC,IAAI,KAA6B,CAAC;YAClC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;oBAClB,UAAU,CAAC,YAAY,CAAC,CAAC;gBAC3B,CAAC;qBAAM,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;oBACzB,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,25 @@
1
+ interface UseScrollViewportOptions {
2
+ /** Total height of all content in lines */
3
+ totalContentHeight: number;
4
+ /** Visible viewport height in lines */
5
+ viewportHeight: number;
6
+ }
7
+ export interface ScrollViewport {
8
+ /** Lines from bottom (0 = at bottom / auto-scroll) */
9
+ scrollOffset: number;
10
+ /** Whether viewport is at the bottom (auto-scroll active) */
11
+ isAtBottom: boolean;
12
+ /** Scroll up by N lines */
13
+ scrollUp: (lines: number) => void;
14
+ /** Scroll down (toward bottom) by N lines */
15
+ scrollDown: (lines: number) => void;
16
+ /** Jump to the bottom */
17
+ scrollToBottom: () => void;
18
+ /** Jump to the top */
19
+ scrollToTop: () => void;
20
+ /** Page size (80% of viewport) */
21
+ pageSize: number;
22
+ }
23
+ export declare function useScrollViewport({ totalContentHeight, viewportHeight, }: UseScrollViewportOptions): ScrollViewport;
24
+ export {};
25
+ //# sourceMappingURL=useScrollViewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollViewport.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useScrollViewport.ts"],"names":[],"mappings":"AAEA,UAAU,wBAAwB;IAChC,2CAA2C;IAC3C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,UAAU,EAAE,OAAO,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,6CAA6C;IAC7C,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,yBAAyB;IACzB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,sBAAsB;IACtB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,kBAAkB,EAClB,cAAc,GACf,EAAE,wBAAwB,GAAG,cAAc,CAuC3C"}
@@ -0,0 +1,32 @@
1
+ import { useState, useCallback, useEffect } from "react";
2
+ export function useScrollViewport({ totalContentHeight, viewportHeight, }) {
3
+ const [scrollOffset, setScrollOffset] = useState(0);
4
+ const maxScroll = Math.max(0, totalContentHeight - viewportHeight);
5
+ const pageSize = Math.max(1, Math.floor(viewportHeight * 0.8));
6
+ // Clamp scroll offset when content or viewport changes
7
+ useEffect(() => {
8
+ setScrollOffset((prev) => Math.min(prev, maxScroll));
9
+ }, [maxScroll]);
10
+ const scrollUp = useCallback((lines) => {
11
+ setScrollOffset((prev) => Math.min(prev + lines, maxScroll));
12
+ }, [maxScroll]);
13
+ const scrollDown = useCallback((lines) => {
14
+ setScrollOffset((prev) => Math.max(0, prev - lines));
15
+ }, []);
16
+ const scrollToBottom = useCallback(() => {
17
+ setScrollOffset(0);
18
+ }, []);
19
+ const scrollToTop = useCallback(() => {
20
+ setScrollOffset(maxScroll);
21
+ }, [maxScroll]);
22
+ return {
23
+ scrollOffset,
24
+ isAtBottom: scrollOffset === 0,
25
+ scrollUp,
26
+ scrollDown,
27
+ scrollToBottom,
28
+ scrollToTop,
29
+ pageSize,
30
+ };
31
+ }
32
+ //# sourceMappingURL=useScrollViewport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollViewport.js","sourceRoot":"","sources":["../../../src/ui/hooks/useScrollViewport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AA0BzD,MAAM,UAAU,iBAAiB,CAAC,EAChC,kBAAkB,EAClB,cAAc,GACW;IACzB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC;IAE/D,uDAAuD;IACvD,SAAS,CAAC,GAAG,EAAE;QACb,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACvD,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,KAAa,EAAE,EAAE;QAChB,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/D,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QAC/C,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,eAAe,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO;QACL,YAAY;QACZ,UAAU,EAAE,YAAY,KAAK,CAAC;QAC9B,QAAQ;QACR,UAAU;QACV,cAAc;QACd,WAAW;QACX,QAAQ;KACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Provider } from "@kenkaiiii/gg-ai";
2
+ export declare function renderLoginSelector(): Promise<Provider | null>;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/ui/login.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAsDjD,wBAAgB,mBAAmB,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAuD9D"}
@@ -0,0 +1,90 @@
1
+ import chalk from "chalk";
2
+ const LOGO_LINES = [" ▄▀▀▀ ▄▀▀▀", " █ ▀█ █ ▀█", " ▀▄▄▀ ▀▄▄▀"];
3
+ const GRADIENT = ["#60a5fa", "#6da1f9", "#7a9df7", "#8799f5", "#9495f3", "#a18ff1", "#a78bfa"];
4
+ const GAP = " ";
5
+ const PRIMARY = "#60a5fa";
6
+ const TEXT = "#e2e8f0";
7
+ const TEXT_DIM = "#64748b";
8
+ const PROVIDERS = [
9
+ { label: "Anthropic", value: "anthropic", description: "Claude Opus, Sonnet, Haiku" },
10
+ { label: "OpenAI", value: "openai", description: "GPT-4.1, o3, o4-mini" },
11
+ ];
12
+ function gradientLine(text) {
13
+ let result = "";
14
+ let colorIdx = 0;
15
+ for (const ch of text) {
16
+ if (ch === " ") {
17
+ result += ch;
18
+ }
19
+ else {
20
+ const color = GRADIENT[Math.min(colorIdx, GRADIENT.length - 1)];
21
+ result += chalk.hex(color)(ch);
22
+ colorIdx++;
23
+ }
24
+ }
25
+ return result;
26
+ }
27
+ function renderScreen(selectedIndex) {
28
+ const lines = [];
29
+ lines.push(gradientLine(LOGO_LINES[0]) + GAP + chalk.hex(PRIMARY).bold("Login"));
30
+ lines.push(gradientLine(LOGO_LINES[1]) + GAP + chalk.hex(TEXT_DIM)("Select a provider"));
31
+ lines.push(gradientLine(LOGO_LINES[2]));
32
+ lines.push("");
33
+ for (let i = 0; i < PROVIDERS.length; i++) {
34
+ const item = PROVIDERS[i];
35
+ const selected = i === selectedIndex;
36
+ const marker = selected ? "❯ " : " ";
37
+ const labelColor = selected ? PRIMARY : TEXT;
38
+ lines.push(chalk.hex(labelColor)(marker + item.label) + chalk.hex(TEXT_DIM)(` — ${item.description}`));
39
+ }
40
+ lines.push("");
41
+ lines.push(chalk.hex(TEXT_DIM)("↑↓ navigate · Enter select · Esc cancel"));
42
+ return lines.join("\n");
43
+ }
44
+ export function renderLoginSelector() {
45
+ return new Promise((resolve) => {
46
+ let selectedIndex = 0;
47
+ const draw = () => {
48
+ // Restore saved cursor position, clear everything below, then draw
49
+ process.stdout.write("\x1b[u\x1b[J" + renderScreen(selectedIndex) + "\n");
50
+ };
51
+ // Save cursor position, then draw
52
+ process.stdout.write("\n\x1b[s");
53
+ draw();
54
+ process.stdin.setRawMode(true);
55
+ process.stdin.resume();
56
+ const cleanup = () => {
57
+ process.stdin.removeListener("data", onData);
58
+ process.stdin.setRawMode(false);
59
+ // Clear the selector display
60
+ process.stdout.write("\x1b[u\x1b[J");
61
+ };
62
+ const onData = (chunk) => {
63
+ const key = chunk.toString();
64
+ // Escape or Ctrl+C → cancel
65
+ if (key === "\x1b" || key === "\x03") {
66
+ cleanup();
67
+ resolve(null);
68
+ return;
69
+ }
70
+ // Enter → select
71
+ if (key === "\r" || key === "\n") {
72
+ cleanup();
73
+ resolve(PROVIDERS[selectedIndex].value);
74
+ return;
75
+ }
76
+ // Up arrow
77
+ if (key === "\x1b[A" && selectedIndex > 0) {
78
+ selectedIndex--;
79
+ draw();
80
+ }
81
+ // Down arrow
82
+ if (key === "\x1b[B" && selectedIndex < PROVIDERS.length - 1) {
83
+ selectedIndex++;
84
+ draw();
85
+ }
86
+ };
87
+ process.stdin.on("data", onData);
88
+ });
89
+ }
90
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/ui/login.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
- import type { Message, Provider, ThinkingLevel } from "@kenkaiiii/gg-ai";
1
+ import type { Message, Provider, ServerToolDefinition, ThinkingLevel } from "@kenkaiiii/gg-ai";
2
2
  import type { AgentTool } from "@kenkaiiii/gg-agent";
3
+ import { type CompletedItem } from "./App.js";
3
4
  export interface RenderAppConfig {
4
5
  provider: Provider;
5
6
  model: string;
6
7
  tools: AgentTool[];
8
+ serverTools?: ServerToolDefinition[];
7
9
  messages: Message[];
8
10
  maxTokens: number;
9
11
  thinking?: ThinkingLevel;
@@ -11,10 +13,19 @@ export interface RenderAppConfig {
11
13
  baseUrl?: string;
12
14
  accountId?: string;
13
15
  cwd: string;
16
+ version: string;
14
17
  theme?: "dark" | "light";
15
18
  showThinking?: boolean;
16
19
  showTokenUsage?: boolean;
17
20
  onSlashCommand?: (input: string) => Promise<string | null>;
21
+ loggedInProviders?: Provider[];
22
+ credentialsByProvider?: Record<string, {
23
+ accessToken: string;
24
+ accountId?: string;
25
+ }>;
26
+ initialHistory?: CompletedItem[];
27
+ sessionsDir?: string;
28
+ sessionPath?: string;
18
29
  }
19
30
  export declare function renderApp(config: RenderAppConfig): Promise<void>;
20
31
  //# sourceMappingURL=render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/ui/render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,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;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC5D;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BtE"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/ui/render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAO,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAGnD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACrC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,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;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCtE"}
package/dist/ui/render.js CHANGED
@@ -8,6 +8,7 @@ export async function renderApp(config) {
8
8
  provider: config.provider,
9
9
  model: config.model,
10
10
  tools: config.tools,
11
+ serverTools: config.serverTools,
11
12
  messages: config.messages,
12
13
  maxTokens: config.maxTokens,
13
14
  thinking: config.thinking,
@@ -15,9 +16,15 @@ export async function renderApp(config) {
15
16
  baseUrl: config.baseUrl,
16
17
  accountId: config.accountId,
17
18
  cwd: config.cwd,
19
+ version: config.version,
18
20
  showThinking: config.showThinking,
19
21
  showTokenUsage: config.showTokenUsage,
20
22
  onSlashCommand: config.onSlashCommand,
23
+ loggedInProviders: config.loggedInProviders,
24
+ credentialsByProvider: config.credentialsByProvider,
25
+ initialHistory: config.initialHistory,
26
+ sessionsDir: config.sessionsDir,
27
+ sessionPath: config.sessionPath,
21
28
  })));
22
29
  await waitUntilExit();
23
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/ui/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAG7B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAmB3D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAuB;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;IAEhD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAC9B,KAAK,CAAC,aAAa,CACjB,YAAY,CAAC,QAAQ,EACrB,EAAE,KAAK,EAAE,KAAK,EAAE,EAChB,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC,CACH,CACF,CAAC;IAEF,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/ui/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAG7B,OAAO,EAAE,GAAG,EAAsB,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA0B3D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAuB;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;IAEhD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAC9B,KAAK,CAAC,aAAa,CACjB,YAAY,CAAC,QAAQ,EACrB,EAAE,KAAK,EAAE,KAAK,EAAE,EAChB,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;QACnD,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CACH,CACF,CAAC;IAEF,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Get language from a file path's extension */
2
+ export declare function langFromPath(filePath: string): string | undefined;
3
+ /**
4
+ * Syntax-highlight code. Returns ANSI string.
5
+ * Falls back to raw code if language unknown.
6
+ */
7
+ export declare function highlightCode(code: string, language?: string): string;
8
+ //# sourceMappingURL=highlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/highlight.ts"],"names":[],"mappings":"AA+BA,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAOrE"}
@@ -0,0 +1,49 @@
1
+ import { highlight, supportsLanguage } from "cli-highlight";
2
+ import path from "node:path";
3
+ /** Map file extension to cli-highlight language name */
4
+ const EXT_TO_LANG = {
5
+ ts: "typescript",
6
+ tsx: "typescript",
7
+ js: "javascript",
8
+ jsx: "javascript",
9
+ py: "python",
10
+ rb: "ruby",
11
+ rs: "rust",
12
+ go: "go",
13
+ java: "java",
14
+ kt: "kotlin",
15
+ sh: "bash",
16
+ zsh: "bash",
17
+ bash: "bash",
18
+ json: "json",
19
+ yaml: "yaml",
20
+ yml: "yaml",
21
+ md: "markdown",
22
+ html: "xml",
23
+ xml: "xml",
24
+ css: "css",
25
+ scss: "scss",
26
+ sql: "sql",
27
+ toml: "ini",
28
+ dockerfile: "dockerfile",
29
+ };
30
+ /** Get language from a file path's extension */
31
+ export function langFromPath(filePath) {
32
+ const ext = path.extname(filePath).replace(/^\./, "").toLowerCase();
33
+ return EXT_TO_LANG[ext];
34
+ }
35
+ /**
36
+ * Syntax-highlight code. Returns ANSI string.
37
+ * Falls back to raw code if language unknown.
38
+ */
39
+ export function highlightCode(code, language) {
40
+ if (!language || !supportsLanguage(language))
41
+ return code;
42
+ try {
43
+ return highlight(code, { language, ignoreIllegals: true });
44
+ }
45
+ catch {
46
+ return code;
47
+ }
48
+ }
49
+ //# sourceMappingURL=highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../src/ui/utils/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,wDAAwD;AACxD,MAAM,WAAW,GAA2B;IAC1C,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,MAAM;IACV,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,YAAY;CACzB,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAiB;IAC3D,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}