poe-code 1.2.1 → 2.0.0

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 (156) hide show
  1. package/README.md +16 -20
  2. package/dist/cli/bootstrap.d.ts +4 -0
  3. package/dist/cli/bootstrap.js +75 -0
  4. package/dist/cli/bootstrap.js.map +1 -0
  5. package/dist/cli/commands/configure.d.ts +2 -1
  6. package/dist/cli/commands/configure.js +7 -7
  7. package/dist/cli/commands/configure.js.map +1 -1
  8. package/dist/cli/container.d.ts +0 -5
  9. package/dist/cli/container.js +0 -8
  10. package/dist/cli/container.js.map +1 -1
  11. package/dist/cli/error-logger.d.ts +17 -2
  12. package/dist/cli/error-logger.js.map +1 -1
  13. package/dist/cli/errors.d.ts +6 -0
  14. package/dist/cli/errors.js +8 -0
  15. package/dist/cli/errors.js.map +1 -1
  16. package/dist/cli/program.js +6 -26
  17. package/dist/cli/program.js.map +1 -1
  18. package/dist/cli/prompt-runner.d.ts +3 -0
  19. package/dist/cli/prompt-runner.js +9 -0
  20. package/dist/cli/prompt-runner.js.map +1 -0
  21. package/dist/cli/service-registry.d.ts +8 -0
  22. package/dist/cli/service-registry.js.map +1 -1
  23. package/dist/cli/ui/service-menu.d.ts +6 -0
  24. package/dist/cli/ui/service-menu.js +37 -0
  25. package/dist/cli/ui/service-menu.js.map +1 -0
  26. package/dist/cli/ui/theme.d.ts +16 -0
  27. package/dist/cli/ui/theme.js +78 -0
  28. package/dist/cli/ui/theme.js.map +1 -0
  29. package/dist/index.d.ts +2 -2
  30. package/dist/index.js +2 -74
  31. package/dist/index.js.map +1 -1
  32. package/dist/providers/claude-code-adapter.js +6 -0
  33. package/dist/providers/claude-code-adapter.js.map +1 -1
  34. package/dist/providers/codex-adapter.js +6 -0
  35. package/dist/providers/codex-adapter.js.map +1 -1
  36. package/dist/providers/opencode-adapter.js +6 -0
  37. package/dist/providers/opencode-adapter.js.map +1 -1
  38. package/package.json +13 -34
  39. package/dist/cli/api-client.d.ts +0 -14
  40. package/dist/cli/api-client.js +0 -140
  41. package/dist/cli/api-client.js.map +0 -1
  42. package/dist/cli/chat.d.ts +0 -32
  43. package/dist/cli/chat.js +0 -2
  44. package/dist/cli/chat.js.map +0 -1
  45. package/dist/cli/commands/agent.d.ts +0 -18
  46. package/dist/cli/commands/agent.js +0 -84
  47. package/dist/cli/commands/agent.js.map +0 -1
  48. package/dist/cli/commands/configure-agents.d.ts +0 -3
  49. package/dist/cli/commands/configure-agents.js +0 -72
  50. package/dist/cli/commands/configure-agents.js.map +0 -1
  51. package/dist/cli/commands/init.d.ts +0 -8
  52. package/dist/cli/commands/init.js +0 -45
  53. package/dist/cli/commands/init.js.map +0 -1
  54. package/dist/cli/commands/interactive.d.ts +0 -3
  55. package/dist/cli/commands/interactive.js +0 -17
  56. package/dist/cli/commands/interactive.js.map +0 -1
  57. package/dist/cli/commands/login.d.ts +0 -6
  58. package/dist/cli/commands/login.js +0 -51
  59. package/dist/cli/commands/login.js.map +0 -1
  60. package/dist/cli/commands/logout.d.ts +0 -3
  61. package/dist/cli/commands/logout.js +0 -31
  62. package/dist/cli/commands/logout.js.map +0 -1
  63. package/dist/cli/commands/prerequisites.d.ts +0 -3
  64. package/dist/cli/commands/prerequisites.js +0 -23
  65. package/dist/cli/commands/prerequisites.js.map +0 -1
  66. package/dist/cli/commands/query.d.ts +0 -7
  67. package/dist/cli/commands/query.js +0 -46
  68. package/dist/cli/commands/query.js.map +0 -1
  69. package/dist/cli/commands/remove.d.ts +0 -6
  70. package/dist/cli/commands/remove.js +0 -80
  71. package/dist/cli/commands/remove.js.map +0 -1
  72. package/dist/cli/commands/root.d.ts +0 -3
  73. package/dist/cli/commands/root.js +0 -7
  74. package/dist/cli/commands/root.js.map +0 -1
  75. package/dist/cli/commands/spawn-worktree.d.ts +0 -6
  76. package/dist/cli/commands/spawn-worktree.js +0 -91
  77. package/dist/cli/commands/spawn-worktree.js.map +0 -1
  78. package/dist/cli/commands/spawn.d.ts +0 -7
  79. package/dist/cli/commands/spawn.js +0 -112
  80. package/dist/cli/commands/spawn.js.map +0 -1
  81. package/dist/cli/commands/test.d.ts +0 -6
  82. package/dist/cli/commands/test.js +0 -26
  83. package/dist/cli/commands/test.js.map +0 -1
  84. package/dist/cli/file-mentions.d.ts +0 -13
  85. package/dist/cli/file-mentions.js +0 -87
  86. package/dist/cli/file-mentions.js.map +0 -1
  87. package/dist/cli/file-picker-state.d.ts +0 -14
  88. package/dist/cli/file-picker-state.js +0 -23
  89. package/dist/cli/file-picker-state.js.map +0 -1
  90. package/dist/cli/interactive-command-runner.d.ts +0 -11
  91. package/dist/cli/interactive-command-runner.js +0 -142
  92. package/dist/cli/interactive-command-runner.js.map +0 -1
  93. package/dist/cli/interactive-launcher.d.ts +0 -2
  94. package/dist/cli/interactive-launcher.js +0 -404
  95. package/dist/cli/interactive-launcher.js.map +0 -1
  96. package/dist/cli/interactive-tasks.d.ts +0 -7
  97. package/dist/cli/interactive-tasks.js +0 -199
  98. package/dist/cli/interactive-tasks.js.map +0 -1
  99. package/dist/cli/interactive.d.ts +0 -19
  100. package/dist/cli/interactive.js +0 -479
  101. package/dist/cli/interactive.js.map +0 -1
  102. package/dist/cli/markdown-renderer.d.ts +0 -27
  103. package/dist/cli/markdown-renderer.js +0 -178
  104. package/dist/cli/markdown-renderer.js.map +0 -1
  105. package/dist/cli/markdown-renderer.test.d.ts +0 -1
  106. package/dist/cli/markdown-renderer.test.js +0 -105
  107. package/dist/cli/markdown-renderer.test.js.map +0 -1
  108. package/dist/commands/init.d.ts +0 -9
  109. package/dist/commands/init.js +0 -43
  110. package/dist/commands/init.js.map +0 -1
  111. package/dist/commands/spawn-worktree.d.ts +0 -25
  112. package/dist/commands/spawn-worktree.js +0 -139
  113. package/dist/commands/spawn-worktree.js.map +0 -1
  114. package/dist/services/agent-config-manager.d.ts +0 -32
  115. package/dist/services/agent-config-manager.js +0 -130
  116. package/dist/services/agent-config-manager.js.map +0 -1
  117. package/dist/services/agent-registry.d.ts +0 -27
  118. package/dist/services/agent-registry.js +0 -89
  119. package/dist/services/agent-registry.js.map +0 -1
  120. package/dist/services/agent-session.d.ts +0 -24
  121. package/dist/services/agent-session.js +0 -107
  122. package/dist/services/agent-session.js.map +0 -1
  123. package/dist/services/agent-task-registry.d.ts +0 -131
  124. package/dist/services/agent-task-registry.js +0 -491
  125. package/dist/services/agent-task-registry.js.map +0 -1
  126. package/dist/services/chat.d.ts +0 -94
  127. package/dist/services/chat.js +0 -241
  128. package/dist/services/chat.js.map +0 -1
  129. package/dist/services/mcp-client.d.ts +0 -38
  130. package/dist/services/mcp-client.js +0 -170
  131. package/dist/services/mcp-client.js.map +0 -1
  132. package/dist/services/mcp-manager.d.ts +0 -28
  133. package/dist/services/mcp-manager.js +0 -157
  134. package/dist/services/mcp-manager.js.map +0 -1
  135. package/dist/services/poe-code.d.ts +0 -7
  136. package/dist/services/poe-code.js +0 -5
  137. package/dist/services/poe-code.js.map +0 -1
  138. package/dist/services/task-logger.d.ts +0 -24
  139. package/dist/services/task-logger.js +0 -73
  140. package/dist/services/task-logger.js.map +0 -1
  141. package/dist/services/task-runner.d.ts +0 -19
  142. package/dist/services/task-runner.js +0 -157
  143. package/dist/services/task-runner.js.map +0 -1
  144. package/dist/services/tools.d.ts +0 -76
  145. package/dist/services/tools.js +0 -870
  146. package/dist/services/tools.js.map +0 -1
  147. package/dist/utils/e2e-flags.d.ts +0 -1
  148. package/dist/utils/e2e-flags.js +0 -9
  149. package/dist/utils/e2e-flags.js.map +0 -1
  150. package/dist/utils/worktree.d.ts +0 -40
  151. package/dist/utils/worktree.js +0 -179
  152. package/dist/utils/worktree.js.map +0 -1
  153. package/shared/conversation-layout.cjs +0 -11
  154. package/shared/conversation-layout.d.ts +0 -7
  155. package/shared/conversation-layout.js +0 -11
  156. package/shared/package.json +0 -13
@@ -1,19 +0,0 @@
1
- import React from "react";
2
- interface InteractiveCliProps {
3
- onExit: () => void;
4
- onCommand: (input: string, options?: {
5
- signal?: AbortSignal;
6
- onChunk?: (chunk: string) => void;
7
- }) => Promise<string>;
8
- onSetToolCallHandler?: (handler: (toolName: string, args: Record<string, unknown>, result?: string, error?: string) => void) => void;
9
- cwd: string;
10
- fs: {
11
- readdir: (path: string) => Promise<string[]>;
12
- stat: (path: string) => Promise<{
13
- isDirectory: () => boolean;
14
- }>;
15
- };
16
- logError?: (error: Error, context: Record<string, unknown>) => void;
17
- }
18
- export declare const InteractiveCli: React.FC<InteractiveCliProps>;
19
- export {};
@@ -1,479 +0,0 @@
1
- import React, { useState, useEffect, useCallback } from "react";
2
- import { Box, Text, useApp, useInput } from "ink";
3
- import TextInput from "ink-text-input";
4
- import path from "node:path";
5
- import { findLastUserIndex } from "../../shared/conversation-layout.js";
6
- import { renderMarkdown } from "./markdown-renderer.js";
7
- import { evaluateFilePickerAction } from "./file-picker-state.js";
8
- const SPINNER_FRAMES = ["|", "/", "-", "\\"];
9
- export const InteractiveCli = ({ onExit, onCommand, onSetToolCallHandler, cwd, fs, logError }) => {
10
- const { exit } = useApp();
11
- const reportError = useCallback((err, context) => {
12
- const failure = err instanceof Error ? err : new Error(String(err));
13
- if (logError) {
14
- logError(failure, context);
15
- }
16
- else {
17
- console.error(context.operation ?? "Interactive error", failure);
18
- }
19
- }, [logError]);
20
- const [messages, setMessages] = useState([
21
- {
22
- role: "system",
23
- content: "Welcome to Poe Code\n\nAn interactive CLI for chatting with AI models using the Poe API.\n\nType '/help' for available commands.\nType '/model' to view or switch models.\nType '/strategy' to configure model selection strategies.\nOr just start chatting - the model can use tools to help you!"
24
- }
25
- ]);
26
- const [input, setInput] = useState("");
27
- const [inputRenderVersion, setInputRenderVersion] = useState(0);
28
- const [isResponding, setIsResponding] = useState(false);
29
- const [partialResponse, setPartialResponse] = useState(null);
30
- const [spinnerFrame, setSpinnerFrame] = useState(0);
31
- const [toolCalls, setToolCalls] = useState([]);
32
- const [showFilePicker, setShowFilePicker] = useState(false);
33
- const [filePickerFiles, setFilePickerFiles] = useState([]);
34
- const [filePickerIndex, setFilePickerIndex] = useState(0);
35
- const [inputBeforeAt, setInputBeforeAt] = useState("");
36
- const [fileSearchQuery, setFileSearchQuery] = useState("");
37
- const [history, setHistory] = useState([]);
38
- const [historyIndex, setHistoryIndex] = useState(-1);
39
- const [isBrowsingHistory, setIsBrowsingHistory] = useState(false);
40
- const historyRef = React.useRef([]);
41
- const isBrowsingHistoryRef = React.useRef(false);
42
- const fileSearchQueryRef = React.useRef("");
43
- const filePickerFilesRef = React.useRef([]);
44
- const filePickerIndexRef = React.useRef(0);
45
- const abortControllerRef = React.useRef(null);
46
- const pendingSelectionRef = React.useRef(null);
47
- const lastKeyRef = React.useRef(null);
48
- const lastUserIndex = React.useMemo(() => findLastUserIndex(messages), [messages]);
49
- const updateInput = useCallback((nextValue, options) => {
50
- setInput(nextValue);
51
- if (options?.resetCursor) {
52
- setInputRenderVersion((version) => version + 1);
53
- }
54
- }, [setInput, setInputRenderVersion]);
55
- useEffect(() => {
56
- if (!isResponding) {
57
- setSpinnerFrame(0);
58
- return;
59
- }
60
- const timer = setInterval(() => {
61
- setSpinnerFrame((frame) => (frame + 1) % SPINNER_FRAMES.length);
62
- }, 120);
63
- return () => {
64
- clearInterval(timer);
65
- };
66
- }, [isResponding]);
67
- const trimmedPreview = (partialResponse ?? "").trim();
68
- const displayPreview = trimmedPreview.length > 0
69
- ? `${trimmedPreview.slice(0, 80)}${trimmedPreview.length > 80 ? "..." : ""}`
70
- : "Waiting for assistant...";
71
- // Set up tool call handler
72
- React.useEffect(() => {
73
- if (onSetToolCallHandler) {
74
- onSetToolCallHandler((toolName, args, result, error) => {
75
- const id = `${toolName}-${Date.now()}`;
76
- if (!result && !error) {
77
- // Tool call started
78
- setToolCalls((prev) => [
79
- ...prev,
80
- {
81
- id,
82
- toolName,
83
- args,
84
- completed: false
85
- }
86
- ]);
87
- }
88
- else {
89
- // Tool call completed
90
- setToolCalls((prev) => prev.map((tc) => tc.toolName === toolName && !tc.completed
91
- ? { ...tc, result, error, completed: true }
92
- : tc));
93
- }
94
- });
95
- }
96
- }, [onSetToolCallHandler]);
97
- useEffect(() => {
98
- fileSearchQueryRef.current = fileSearchQuery.trim();
99
- }, [fileSearchQuery]);
100
- // Load files for picker when @ is typed
101
- useEffect(() => {
102
- if (!showFilePicker) {
103
- return;
104
- }
105
- let cancelled = false;
106
- const currentQuery = fileSearchQueryRef.current;
107
- const loadFiles = async () => {
108
- try {
109
- const files = await getFilesRecursive(cwd, "");
110
- const filtered = currentQuery
111
- ? files.filter((file) => file.toLowerCase().includes(currentQuery.toLowerCase()))
112
- : files;
113
- if (cancelled || fileSearchQueryRef.current !== currentQuery) {
114
- return;
115
- }
116
- const limited = filtered.slice(0, 50);
117
- filePickerFilesRef.current = limited;
118
- filePickerIndexRef.current = 0;
119
- setFilePickerFiles(limited);
120
- setFilePickerIndex(0);
121
- }
122
- catch (error) {
123
- if (cancelled || fileSearchQueryRef.current !== currentQuery) {
124
- return;
125
- }
126
- reportError(error, {
127
- operation: "load file picker entries",
128
- cwd,
129
- query: currentQuery
130
- });
131
- filePickerFilesRef.current = [];
132
- setFilePickerFiles([]);
133
- }
134
- };
135
- void loadFiles();
136
- return () => {
137
- cancelled = true;
138
- };
139
- }, [showFilePicker, fileSearchQuery, cwd]);
140
- const getFilesRecursive = async (dir, prefix) => {
141
- const files = [];
142
- try {
143
- const entries = await fs.readdir(dir);
144
- for (const entry of entries) {
145
- // Skip hidden files and node_modules
146
- if (entry.startsWith(".") || entry === "node_modules")
147
- continue;
148
- const fullPath = path.join(dir, entry);
149
- const relativePath = prefix ? path.join(prefix, entry) : entry;
150
- try {
151
- const stat = await fs.stat(fullPath);
152
- if (stat.isDirectory()) {
153
- const subFiles = await getFilesRecursive(fullPath, relativePath);
154
- files.push(...subFiles);
155
- }
156
- else {
157
- files.push(relativePath);
158
- }
159
- }
160
- catch (error) {
161
- reportError(error, {
162
- operation: "stat file for picker",
163
- path: fullPath
164
- });
165
- }
166
- }
167
- }
168
- catch (error) {
169
- reportError(error, {
170
- operation: "read directory for picker",
171
- path: dir
172
- });
173
- }
174
- return files;
175
- };
176
- useInput((inputChar, key) => {
177
- lastKeyRef.current = { input: inputChar, key };
178
- if (isResponding && key.ctrl && inputChar === "x") {
179
- abortControllerRef.current?.abort();
180
- return;
181
- }
182
- if ((key.ctrl && inputChar === "c") || (key.ctrl && inputChar === "d")) {
183
- exit();
184
- onExit();
185
- return;
186
- }
187
- // Ctrl+A: Move to start (clear input to simulate)
188
- if (key.ctrl && inputChar === "a") {
189
- // Note: ink-text-input doesn't support cursor positioning,
190
- // so we can't truly move to start. User can use Home key instead.
191
- return;
192
- }
193
- // Ctrl+K: Delete from cursor to end (clear input)
194
- if (key.ctrl && inputChar === "k") {
195
- updateInput("");
196
- if (showFilePicker) {
197
- setShowFilePicker(false);
198
- setFileSearchQuery("");
199
- }
200
- pendingSelectionRef.current = null;
201
- lastKeyRef.current = null;
202
- return;
203
- }
204
- // Handle file picker navigation
205
- if (showFilePicker) {
206
- const currentIndex = filePickerIndexRef.current;
207
- const currentFiles = filePickerFilesRef.current;
208
- if (key.upArrow && currentIndex > 0) {
209
- const newIndex = currentIndex - 1;
210
- filePickerIndexRef.current = newIndex;
211
- setFilePickerIndex(newIndex);
212
- return;
213
- }
214
- else if (key.downArrow && currentIndex < currentFiles.length - 1) {
215
- const newIndex = currentIndex + 1;
216
- filePickerIndexRef.current = newIndex;
217
- setFilePickerIndex(newIndex);
218
- return;
219
- }
220
- else if (key.return && currentFiles.length > 0) {
221
- // Select file
222
- const selectedFile = currentFiles[currentIndex];
223
- const insertedValue = `${inputBeforeAt}@${selectedFile} `;
224
- setShowFilePicker(false);
225
- setFileSearchQuery("");
226
- // Force TextInput to re-render with new value by resetting cursor
227
- updateInput(insertedValue, { resetCursor: true });
228
- pendingSelectionRef.current = {
229
- base: insertedValue
230
- };
231
- lastKeyRef.current = null;
232
- return;
233
- }
234
- else if (key.escape) {
235
- // Cancel file picker
236
- setShowFilePicker(false);
237
- setFileSearchQuery("");
238
- updateInput(inputBeforeAt);
239
- pendingSelectionRef.current = null;
240
- lastKeyRef.current = null;
241
- return;
242
- }
243
- }
244
- // Handle history navigation (only when file picker is not open)
245
- if (!showFilePicker && !isResponding) {
246
- if (key.upArrow) {
247
- const currentHistory = historyRef.current;
248
- if (currentHistory.length > 0) {
249
- const newIndex = isBrowsingHistoryRef.current
250
- ? Math.max(0, historyIndex - 1)
251
- : currentHistory.length - 1;
252
- setHistoryIndex(newIndex);
253
- setIsBrowsingHistory(true);
254
- isBrowsingHistoryRef.current = true;
255
- updateInput(currentHistory[newIndex]);
256
- }
257
- return;
258
- }
259
- else if (key.downArrow && isBrowsingHistoryRef.current) {
260
- const currentHistory = historyRef.current;
261
- // Check if history index is valid
262
- if (historyIndex < 0 || historyIndex >= currentHistory.length) {
263
- setIsBrowsingHistory(false);
264
- isBrowsingHistoryRef.current = false;
265
- setHistoryIndex(-1);
266
- return;
267
- }
268
- const currentHistoryValue = currentHistory[historyIndex];
269
- // If input has been manually edited, stop browsing
270
- if (input !== currentHistoryValue) {
271
- setIsBrowsingHistory(false);
272
- isBrowsingHistoryRef.current = false;
273
- setHistoryIndex(-1);
274
- return;
275
- }
276
- if (historyIndex < currentHistory.length - 1) {
277
- const newIndex = historyIndex + 1;
278
- setHistoryIndex(newIndex);
279
- updateInput(currentHistory[newIndex]);
280
- }
281
- else {
282
- // Reached the end, clear input
283
- setHistoryIndex(-1);
284
- setIsBrowsingHistory(false);
285
- isBrowsingHistoryRef.current = false;
286
- updateInput("");
287
- }
288
- return;
289
- }
290
- }
291
- });
292
- const handleInputChange = (incoming) => {
293
- let nextValue = incoming;
294
- let shouldResetCursor = false;
295
- const pending = pendingSelectionRef.current;
296
- if (pending) {
297
- const lastKey = lastKeyRef.current;
298
- const appendedStart = Math.min(pending.base.length, incoming.length);
299
- if (lastKey?.key.backspace) {
300
- nextValue = pending.base.slice(0, Math.max(0, pending.base.length - 1));
301
- }
302
- else if (lastKey?.key.delete) {
303
- nextValue = pending.base;
304
- }
305
- else {
306
- const appended = incoming.slice(appendedStart) || lastKey?.input || "";
307
- nextValue = `${pending.base}${appended}`;
308
- }
309
- pendingSelectionRef.current = null;
310
- shouldResetCursor = true;
311
- lastKeyRef.current = null;
312
- }
313
- // If user manually edits while browsing history, stop browsing
314
- if (isBrowsingHistoryRef.current && !showFilePicker) {
315
- const currentHistoryValue = historyRef.current[historyIndex];
316
- if (incoming !== currentHistoryValue) {
317
- setIsBrowsingHistory(false);
318
- isBrowsingHistoryRef.current = false;
319
- setHistoryIndex(-1);
320
- }
321
- }
322
- updateInput(nextValue, shouldResetCursor ? { resetCursor: true } : undefined);
323
- const action = evaluateFilePickerAction({
324
- value: nextValue,
325
- isOpen: showFilePicker
326
- });
327
- if (!action) {
328
- return;
329
- }
330
- if (action.kind === "open") {
331
- setShowFilePicker(true);
332
- setInputBeforeAt(action.prefix);
333
- setFileSearchQuery("");
334
- setFilePickerIndex(0);
335
- return;
336
- }
337
- if (action.kind === "search") {
338
- setShowFilePicker(true);
339
- setFileSearchQuery(action.query);
340
- return;
341
- }
342
- setShowFilePicker(false);
343
- setFileSearchQuery("");
344
- };
345
- const handleSubmit = async (value) => {
346
- if (!value.trim() || isResponding)
347
- return;
348
- // Don't submit if file picker is open - the useInput handler will handle selection
349
- if (showFilePicker) {
350
- return;
351
- }
352
- const trimmedInput = value.trim();
353
- // Clear previous tool calls when starting a new message
354
- setToolCalls([]);
355
- // Add user message
356
- setMessages((prev) => [...prev, { role: "user", content: trimmedInput }]);
357
- // Add to history (only non-blank messages)
358
- if (trimmedInput) {
359
- const newHistory = [...historyRef.current, trimmedInput];
360
- historyRef.current = newHistory;
361
- setHistory(newHistory);
362
- }
363
- // Reset input and history browsing state
364
- updateInput("");
365
- setHistoryIndex(-1);
366
- setIsBrowsingHistory(false);
367
- isBrowsingHistoryRef.current = false;
368
- pendingSelectionRef.current = null;
369
- lastKeyRef.current = null;
370
- // Check for exit command
371
- if (trimmedInput.toLowerCase() === "exit" || trimmedInput.toLowerCase() === "quit") {
372
- exit();
373
- onExit();
374
- return;
375
- }
376
- const controller = new AbortController();
377
- abortControllerRef.current = controller;
378
- setIsResponding(true);
379
- setPartialResponse(null);
380
- try {
381
- const response = await onCommand(trimmedInput, {
382
- signal: controller.signal,
383
- onChunk: (chunk) => setPartialResponse(chunk)
384
- });
385
- // Parse model name from response if present
386
- let content = response;
387
- let model;
388
- const modelMatch = response.match(/^\[Model: ([^\]]+)\]\n\n/);
389
- if (modelMatch) {
390
- model = modelMatch[1];
391
- content = response.substring(modelMatch[0].length);
392
- }
393
- setMessages((prev) => [...prev, { role: "assistant", content, model }]);
394
- setPartialResponse(null);
395
- }
396
- catch (error) {
397
- if (error instanceof Error && error.name === "AbortError") {
398
- setMessages((prev) => [
399
- ...prev,
400
- {
401
- role: "assistant",
402
- content: "Response stopped."
403
- }
404
- ]);
405
- }
406
- else {
407
- setMessages((prev) => [
408
- ...prev,
409
- {
410
- role: "assistant",
411
- content: `Error: ${error instanceof Error ? error.message : String(error)}`
412
- }
413
- ]);
414
- }
415
- }
416
- finally {
417
- abortControllerRef.current = null;
418
- setIsResponding(false);
419
- setPartialResponse(null);
420
- // Don't clear tool calls - keep them visible so user can see what happened
421
- }
422
- };
423
- return (React.createElement(Box, { flexDirection: "column", padding: 1 },
424
- React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, messages.map((msg, idx) => {
425
- const isLatestUser = msg.role === "user" && idx === lastUserIndex;
426
- return (React.createElement(React.Fragment, { key: `msg-${idx}-${msg.role}` },
427
- React.createElement(Box, { flexDirection: "column", marginBottom: 1 },
428
- msg.role === "system" && (React.createElement(Box, { flexDirection: "column" },
429
- React.createElement(Text, { bold: true, color: "cyan" }, msg.content))),
430
- msg.role === "user" && (React.createElement(Box, { flexDirection: "column" },
431
- React.createElement(Text, { color: "green" }, "You:"),
432
- React.createElement(Text, null, msg.content))),
433
- msg.role === "assistant" && (React.createElement(Box, { flexDirection: "column" },
434
- React.createElement(Text, { color: "blue" },
435
- msg.model || "Assistant",
436
- ":"),
437
- React.createElement(Text, null, renderMarkdown(msg.content))))),
438
- isLatestUser && toolCalls.length > 0 && (React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, toolCalls.map((toolCall) => (React.createElement(Box, { key: toolCall.id, flexDirection: "column", marginY: 0 },
439
- React.createElement(Box, null,
440
- React.createElement(Text, { color: "cyan" }, "\u23FA Tool Call: "),
441
- React.createElement(Text, { color: "cyan", bold: true }, toolCall.toolName)),
442
- React.createElement(Box, { marginLeft: 2, flexDirection: "column" },
443
- React.createElement(Text, { color: "gray" }, "Arguments:"),
444
- React.createElement(Text, { color: "yellow" }, JSON.stringify(toolCall.args, null, 2))),
445
- toolCall.completed && (React.createElement(Box, { marginLeft: 2, flexDirection: "column", marginTop: 1 },
446
- React.createElement(Text, { color: "gray" }, toolCall.error ? "Error:" : "Result:"),
447
- toolCall.error ? (React.createElement(Text, { color: "red" }, toolCall.error)) : (React.createElement(Text, { color: "green" }, toolCall.result || "Done")))))))))));
448
- })),
449
- isResponding && (React.createElement(Box, { flexDirection: "column", marginBottom: 1 },
450
- React.createElement(Box, null,
451
- React.createElement(Text, { color: "yellow" },
452
- SPINNER_FRAMES[spinnerFrame],
453
- " "),
454
- React.createElement(Text, { color: "yellow" }, displayPreview)),
455
- React.createElement(Text, { color: "cyan" }, "Press Ctrl+X to stop"))),
456
- showFilePicker && filePickerFiles.length > 0 && (React.createElement(Box, { flexDirection: "column", marginBottom: 1, borderStyle: "single", borderColor: "cyan", padding: 1 },
457
- React.createElement(Text, { bold: true, color: "cyan" }, "Select a file (\u2191/\u2193 to navigate, Enter to select, Esc to cancel):"),
458
- React.createElement(Box, { flexDirection: "column", marginTop: 1 }, filePickerFiles.slice(Math.max(0, filePickerIndex - 5), filePickerIndex + 5).map((file, idx) => {
459
- const actualIndex = Math.max(0, filePickerIndex - 5) + idx;
460
- const isSelected = actualIndex === filePickerIndex;
461
- return (React.createElement(Box, { key: file },
462
- React.createElement(Text, { color: isSelected ? "green" : "white", bold: isSelected },
463
- isSelected ? "> " : " ",
464
- file)));
465
- })),
466
- filePickerFiles.length > 10 && (React.createElement(Box, { marginTop: 1 },
467
- React.createElement(Text, { dimColor: true },
468
- "Showing ",
469
- Math.min(10, filePickerFiles.length),
470
- " of ",
471
- filePickerFiles.length,
472
- " files"))))),
473
- !isResponding && (React.createElement(Box, null,
474
- React.createElement(Text, { color: "green" }, "> "),
475
- React.createElement(TextInput, { key: inputRenderVersion, value: input, onChange: handleInputChange, onSubmit: handleSubmit, placeholder: "Type a command... (use @ to select files)" }))),
476
- React.createElement(Box, { marginTop: 1 },
477
- React.createElement(Text, { dimColor: true }, "Press Ctrl+C or Ctrl+D to exit | Type 'help' for commands"))));
478
- };
479
- //# sourceMappingURL=interactive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/cli/interactive.tsx"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Simple terminal markdown renderer with ANSI escape codes
3
- * Falls back to plaintext for unsupported features
4
- */
5
- interface RenderOptions {
6
- /**
7
- * Maximum width for wrapping text (0 = no wrapping)
8
- */
9
- maxWidth?: number;
10
- /**
11
- * Indent for nested content (lists, quotes, code blocks)
12
- */
13
- indent?: string;
14
- }
15
- /**
16
- * Renders markdown text to terminal with ANSI formatting
17
- */
18
- export declare function renderMarkdown(markdown: string, options?: RenderOptions): string;
19
- /**
20
- * Strips all ANSI codes from a string (useful for testing or length calculation)
21
- */
22
- export declare function stripAnsi(text: string): string;
23
- /**
24
- * Simple markdown-to-plaintext converter (no formatting)
25
- */
26
- export declare function markdownToPlaintext(markdown: string): string;
27
- export {};