@syntero/orca-cli 1.0.0 → 1.1.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 (111) hide show
  1. package/dist/assistant.d.ts +17 -3
  2. package/dist/assistant.d.ts.map +1 -1
  3. package/dist/assistant.js +217 -22
  4. package/dist/assistant.js.map +1 -1
  5. package/dist/auth.d.ts +97 -0
  6. package/dist/auth.d.ts.map +1 -0
  7. package/dist/auth.js +437 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/autocomplete.d.ts +24 -0
  10. package/dist/autocomplete.d.ts.map +1 -0
  11. package/dist/autocomplete.js +43 -0
  12. package/dist/autocomplete.js.map +1 -0
  13. package/dist/components/ChatApp.d.ts +32 -0
  14. package/dist/components/ChatApp.d.ts.map +1 -0
  15. package/dist/components/ChatApp.js +470 -0
  16. package/dist/components/ChatApp.js.map +1 -0
  17. package/dist/components/CommandPalette.d.ts +15 -0
  18. package/dist/components/CommandPalette.d.ts.map +1 -0
  19. package/dist/components/CommandPalette.js +22 -0
  20. package/dist/components/CommandPalette.js.map +1 -0
  21. package/dist/components/ConfigWizard.d.ts +25 -0
  22. package/dist/components/ConfigWizard.d.ts.map +1 -0
  23. package/dist/components/ConfigWizard.js +401 -0
  24. package/dist/components/ConfigWizard.js.map +1 -0
  25. package/dist/components/InputFooter.d.ts +33 -0
  26. package/dist/components/InputFooter.d.ts.map +1 -0
  27. package/dist/components/InputFooter.js +618 -0
  28. package/dist/components/InputFooter.js.map +1 -0
  29. package/dist/components/InputModal.d.ts +25 -0
  30. package/dist/components/InputModal.d.ts.map +1 -0
  31. package/dist/components/InputModal.js +529 -0
  32. package/dist/components/InputModal.js.map +1 -0
  33. package/dist/components/ModelMenu.d.ts +24 -0
  34. package/dist/components/ModelMenu.d.ts.map +1 -0
  35. package/dist/components/ModelMenu.js +175 -0
  36. package/dist/components/ModelMenu.js.map +1 -0
  37. package/dist/components/ProviderMenu.d.ts +20 -0
  38. package/dist/components/ProviderMenu.d.ts.map +1 -0
  39. package/dist/components/ProviderMenu.js +31 -0
  40. package/dist/components/ProviderMenu.js.map +1 -0
  41. package/dist/components/SyncMenu.d.ts +23 -0
  42. package/dist/components/SyncMenu.d.ts.map +1 -0
  43. package/dist/components/SyncMenu.js +135 -0
  44. package/dist/components/SyncMenu.js.map +1 -0
  45. package/dist/components/TokenInput.d.ts +15 -0
  46. package/dist/components/TokenInput.d.ts.map +1 -0
  47. package/dist/components/TokenInput.js +103 -0
  48. package/dist/components/TokenInput.js.map +1 -0
  49. package/dist/index.js +323 -173
  50. package/dist/index.js.map +1 -1
  51. package/dist/ink-input.d.ts +14 -0
  52. package/dist/ink-input.d.ts.map +1 -0
  53. package/dist/ink-input.js +92 -0
  54. package/dist/ink-input.js.map +1 -0
  55. package/dist/models.d.ts +115 -0
  56. package/dist/models.d.ts.map +1 -0
  57. package/dist/models.js +221 -0
  58. package/dist/models.js.map +1 -0
  59. package/dist/providers.d.ts +19 -4
  60. package/dist/providers.d.ts.map +1 -1
  61. package/dist/providers.js +80 -112
  62. package/dist/providers.js.map +1 -1
  63. package/dist/settings.d.ts +15 -0
  64. package/dist/settings.d.ts.map +1 -1
  65. package/dist/settings.js +56 -21
  66. package/dist/settings.js.map +1 -1
  67. package/dist/sync/docker.d.ts +68 -0
  68. package/dist/sync/docker.d.ts.map +1 -0
  69. package/dist/sync/docker.js +234 -0
  70. package/dist/sync/docker.js.map +1 -0
  71. package/dist/sync/download.d.ts +87 -0
  72. package/dist/sync/download.d.ts.map +1 -0
  73. package/dist/sync/download.js +291 -0
  74. package/dist/sync/download.js.map +1 -0
  75. package/dist/sync/hash.d.ts +60 -0
  76. package/dist/sync/hash.d.ts.map +1 -0
  77. package/dist/sync/hash.js +92 -0
  78. package/dist/sync/hash.js.map +1 -0
  79. package/dist/sync/index.d.ts +15 -0
  80. package/dist/sync/index.d.ts.map +1 -0
  81. package/dist/sync/index.js +21 -0
  82. package/dist/sync/index.js.map +1 -0
  83. package/dist/sync/manifest.d.ts +132 -0
  84. package/dist/sync/manifest.d.ts.map +1 -0
  85. package/dist/sync/manifest.js +260 -0
  86. package/dist/sync/manifest.js.map +1 -0
  87. package/dist/sync/progress.d.ts +164 -0
  88. package/dist/sync/progress.d.ts.map +1 -0
  89. package/dist/sync/progress.js +233 -0
  90. package/dist/sync/progress.js.map +1 -0
  91. package/dist/sync/services.d.ts +70 -0
  92. package/dist/sync/services.d.ts.map +1 -0
  93. package/dist/sync/services.js +134 -0
  94. package/dist/sync/services.js.map +1 -0
  95. package/dist/sync/sync-engine.d.ts +69 -0
  96. package/dist/sync/sync-engine.d.ts.map +1 -0
  97. package/dist/sync/sync-engine.js +533 -0
  98. package/dist/sync/sync-engine.js.map +1 -0
  99. package/dist/tokens.d.ts +70 -0
  100. package/dist/tokens.d.ts.map +1 -0
  101. package/dist/tokens.js +198 -0
  102. package/dist/tokens.js.map +1 -0
  103. package/dist/tools.d.ts +60 -0
  104. package/dist/tools.d.ts.map +1 -1
  105. package/dist/tools.js +34 -0
  106. package/dist/tools.js.map +1 -1
  107. package/dist/types/sync.d.ts +284 -0
  108. package/dist/types/sync.d.ts.map +1 -0
  109. package/dist/types/sync.js +5 -0
  110. package/dist/types/sync.js.map +1 -0
  111. package/package.json +10 -2
@@ -0,0 +1,470 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback, useRef } from 'react';
3
+ import { Static, Box, Text, useApp, useInput } from 'ink';
4
+ import { InputFooter } from './InputFooter.js';
5
+ import { loadSettings } from '../settings.js';
6
+ import { runAssistant, summarizeConversation } from '../assistant.js';
7
+ import { Colors, color } from '../utils.js';
8
+ import { setToken as authSetToken, logout as authLogout, status as authStatus, loadCredentials, } from '../auth.js';
9
+ import { estimateConversationTokens, shouldAutoCompact, formatTokenCount, AUTO_COMPACT_THRESHOLD, calculateContextBreakdown, generateContextDisplay, } from '../tokens.js';
10
+ import { debugLog } from '../settings.js';
11
+ /**
12
+ * ChatApp - Main chat component using Ink's Static for persistent footer pattern.
13
+ *
14
+ * Architecture:
15
+ * - <Static> for completed messages (user + assistant) - these are permanently rendered
16
+ * - Dynamic area for currently streaming response
17
+ * - Persistent input footer that's always visible
18
+ */
19
+ export function ChatApp({ settings: initialSettings, createClient, onUpdateCommand }) {
20
+ const { exit } = useApp();
21
+ // Settings state (can be updated by config wizard)
22
+ const [settings, setSettings] = useState(initialSettings);
23
+ // LLM client state
24
+ const [client, setClient] = useState(() => createClient(initialSettings).client);
25
+ const [isCloud, setIsCloud] = useState(() => createClient(initialSettings).isCloud);
26
+ const [cloudProvider, setCloudProvider] = useState(() => createClient(initialSettings).cloudProvider);
27
+ // Chat state
28
+ const [messages, setMessages] = useState([]);
29
+ const [conversationHistory, setConversationHistory] = useState([]);
30
+ const [streamingContent, setStreamingContent] = useState('');
31
+ const [isStreaming, setIsStreaming] = useState(false);
32
+ const [isCompacting, setIsCompacting] = useState(false);
33
+ // Message queue for messages sent during streaming (using ref for stable reference)
34
+ // Messages are injected at each agent iteration via getQueuedMessage callback
35
+ const messageQueueRef = useRef([]);
36
+ const [queueLength, setQueueLength] = useState(0); // For triggering re-renders
37
+ // Command history for up/down arrow navigation (newest first)
38
+ const [commandHistory, setCommandHistory] = useState([]);
39
+ // Abort controller for interrupting streams
40
+ const abortControllerRef = useRef(null);
41
+ // Next message ID
42
+ const nextIdRef = useRef(1);
43
+ const getNextId = () => nextIdRef.current++;
44
+ // Reconnect client with new settings
45
+ const reconnectClient = useCallback((newSettings) => {
46
+ debugLog(`[reconnectClient] called with provider=${newSettings.provider}, anthropic.model=${newSettings.anthropic.model}, openai.model=${newSettings.openai.model}`);
47
+ const result = createClient(newSettings);
48
+ debugLog(`[reconnectClient] createClient returned isCloud=${result.isCloud}, cloudProvider=${result.cloudProvider}`);
49
+ setClient(result.client);
50
+ setIsCloud(result.isCloud);
51
+ setCloudProvider(result.cloudProvider);
52
+ setSettings(newSettings);
53
+ debugLog(`[reconnectClient] state updated, settings.provider is now ${newSettings.provider}`);
54
+ return result;
55
+ }, [createClient]);
56
+ // Perform conversation compaction
57
+ const performCompaction = useCallback(async (customInstructions) => {
58
+ if (conversationHistory.length === 0) {
59
+ return false;
60
+ }
61
+ setIsCompacting(true);
62
+ try {
63
+ // Get current token count for display
64
+ const tokensBefore = estimateConversationTokens(conversationHistory);
65
+ // Generate summary
66
+ const summary = await summarizeConversation(client, settings, conversationHistory, customInstructions);
67
+ if (!summary) {
68
+ setIsCompacting(false);
69
+ return false;
70
+ }
71
+ // Create a new conversation history with just the summary as context
72
+ const summaryMessage = {
73
+ role: 'user',
74
+ content: `[Previous conversation summary - use this as context]\n\n${summary}\n\n[End of summary - conversation continues below]`,
75
+ };
76
+ // Clear and reset conversation
77
+ setConversationHistory([summaryMessage]);
78
+ // Add a system message to display in the UI
79
+ const tokensAfter = estimateConversationTokens([summaryMessage]);
80
+ setMessages(prev => [...prev, {
81
+ id: getNextId(),
82
+ role: 'system',
83
+ content: color(`Conversation compacted: ${formatTokenCount(tokensBefore)} -> ${formatTokenCount(tokensAfter)} tokens`, Colors.dim),
84
+ timestamp: Date.now(),
85
+ }]);
86
+ return true;
87
+ }
88
+ catch (e) {
89
+ setMessages(prev => [...prev, {
90
+ id: getNextId(),
91
+ role: 'system',
92
+ content: color(`Compaction failed: ${e instanceof Error ? e.message : String(e)}`, Colors.red),
93
+ timestamp: Date.now(),
94
+ }]);
95
+ return false;
96
+ }
97
+ finally {
98
+ setIsCompacting(false);
99
+ }
100
+ }, [client, settings, conversationHistory]);
101
+ // Handle slash commands
102
+ const handleCommand = useCallback(async (command) => {
103
+ const parts = command.trim().split(/\s+/);
104
+ const cmd = parts[0].toLowerCase();
105
+ const args = parts.slice(1).join(' ');
106
+ if (cmd === '/token') {
107
+ // Token is handled inline by InputFooter
108
+ return { handled: false };
109
+ }
110
+ if (cmd === '/logout') {
111
+ await authLogout();
112
+ const newClient = reconnectClient(settings);
113
+ return {
114
+ handled: true,
115
+ output: newClient.isCloud && newClient.cloudProvider
116
+ ? color(`Using cloud: ${loadCredentials()?.user.email} (${newClient.cloudProvider})`, Colors.green)
117
+ : color(`Using local provider: ${settings.provider}`, Colors.green),
118
+ };
119
+ }
120
+ if (cmd === '/status') {
121
+ await authStatus();
122
+ return { handled: true };
123
+ }
124
+ if (cmd === '/config') {
125
+ // Config is handled inline by InputFooter
126
+ return { handled: false };
127
+ }
128
+ if (cmd === '/settings') {
129
+ return { handled: true, output: `\n${settings.getMaskedDisplay()}\n` };
130
+ }
131
+ if (cmd === '/context') {
132
+ // Determine the current model based on provider (handles both cloud and local mode)
133
+ let currentModel;
134
+ const effectiveProvider = settings.provider;
135
+ if (effectiveProvider === 'anthropic') {
136
+ currentModel = settings.anthropic.model;
137
+ }
138
+ else if (effectiveProvider === 'openai') {
139
+ currentModel = settings.openai.model;
140
+ }
141
+ else if (effectiveProvider === 'azure') {
142
+ currentModel = settings.azure.deployment;
143
+ }
144
+ else {
145
+ currentModel = settings.openai.model; // Fallback
146
+ }
147
+ debugLog(`[/context] effectiveProvider=${effectiveProvider}, currentModel=${currentModel}`);
148
+ const breakdown = calculateContextBreakdown(currentModel, conversationHistory);
149
+ const display = generateContextDisplay(breakdown);
150
+ return { handled: true, output: `\n${display}\n` };
151
+ }
152
+ if (cmd === '/help') {
153
+ const tokenCount = estimateConversationTokens(conversationHistory);
154
+ const helpText = `
155
+ Available commands:
156
+ /token Enter CLI token from web UI
157
+ /token <token> Set CLI token directly
158
+ /logout Log out from cloud platform
159
+ /status Show authentication status
160
+ /config Configure local API keys (instead of cloud)
161
+ /model Select AI model for current provider
162
+ /settings Show current settings
163
+ /update [path] Update to latest version (pull images, restart services)
164
+ /sync Sync library from cloud (opens menu)
165
+ /clear Clear conversation
166
+ /compact [msg] Compact conversation (summarize and reset)
167
+ Optional: add instructions for what to preserve
168
+ /context Show token usage breakdown
169
+ /help Show this help
170
+ quit, exit Exit
171
+
172
+ Current conversation: ~${formatTokenCount(tokenCount)} tokens (auto-compact at ${formatTokenCount(AUTO_COMPACT_THRESHOLD)})
173
+ `;
174
+ return { handled: true, output: helpText };
175
+ }
176
+ if (cmd === '/clear') {
177
+ setMessages([]);
178
+ setConversationHistory([]);
179
+ return { handled: true, output: color('Conversation cleared.', Colors.dim) };
180
+ }
181
+ if (cmd === '/compact') {
182
+ if (conversationHistory.length === 0) {
183
+ return { handled: true, output: color('Nothing to compact - conversation is empty.', Colors.dim) };
184
+ }
185
+ // Extract custom instructions if provided
186
+ const customInstructions = args.trim() || undefined;
187
+ const tokenCount = estimateConversationTokens(conversationHistory);
188
+ setMessages(prev => [...prev, {
189
+ id: getNextId(),
190
+ role: 'system',
191
+ content: color(`Compacting conversation (~${formatTokenCount(tokenCount)} tokens)...`, Colors.dim),
192
+ timestamp: Date.now(),
193
+ }]);
194
+ // Perform compaction asynchronously
195
+ performCompaction(customInstructions);
196
+ return { handled: true };
197
+ }
198
+ if (cmd === '/update') {
199
+ const deployPath = parts.slice(1).join(' ') || undefined;
200
+ // Run update command - it outputs directly to console
201
+ await onUpdateCommand(deployPath);
202
+ return { handled: true };
203
+ }
204
+ if (cmd === '/sync') {
205
+ // Sync is handled inline by InputFooter via SyncMenu
206
+ return { handled: false };
207
+ }
208
+ if (cmd === '/model') {
209
+ // Model selection is handled inline by InputFooter
210
+ return { handled: false };
211
+ }
212
+ return { handled: false };
213
+ }, [settings, reconnectClient, onUpdateCommand, conversationHistory, performCompaction]);
214
+ // Process a single message (used by both direct submission and queue processing)
215
+ const processMessage = useCallback(async (input) => {
216
+ // Handle special token submission from InputFooter
217
+ if (input.startsWith('__TOKEN__:')) {
218
+ const token = input.slice('__TOKEN__:'.length);
219
+ const success = await authSetToken(token);
220
+ if (success) {
221
+ const newClient = reconnectClient(settings);
222
+ if (newClient.isCloud && newClient.cloudProvider) {
223
+ const creds = loadCredentials();
224
+ if (creds) {
225
+ setMessages(prev => [...prev, {
226
+ id: getNextId(),
227
+ role: 'system',
228
+ content: color(`Using cloud: ${creds.user.email} (${newClient.cloudProvider})`, Colors.green),
229
+ timestamp: Date.now(),
230
+ }]);
231
+ }
232
+ }
233
+ }
234
+ return;
235
+ }
236
+ // Handle sync menu actions
237
+ if (input.startsWith('__SYNC__:')) {
238
+ const action = input.slice('__SYNC__:'.length);
239
+ const { runSync, resumeSync, showSyncStatus } = await import('../sync/index.js');
240
+ switch (action) {
241
+ case 'normal':
242
+ await runSync({ force: false });
243
+ break;
244
+ case 'force':
245
+ await runSync({ force: true });
246
+ break;
247
+ case 'preview':
248
+ await runSync({ dryRun: true });
249
+ break;
250
+ case 'status':
251
+ await showSyncStatus();
252
+ break;
253
+ case 'resume':
254
+ await resumeSync({});
255
+ break;
256
+ }
257
+ return;
258
+ }
259
+ // Handle config saved
260
+ if (input === '__CONFIG_SAVED__') {
261
+ debugLog(`[processMessage] Received __CONFIG_SAVED__, reloading settings`);
262
+ const reloadedSettings = loadSettings();
263
+ debugLog(`[processMessage] Reloaded settings: provider=${reloadedSettings.provider}, anthropic.model=${reloadedSettings.anthropic.model}, openai.model=${reloadedSettings.openai.model}`);
264
+ const newClient = reconnectClient(reloadedSettings);
265
+ debugLog(`[processMessage] Client reconnected: isCloud=${newClient.isCloud}, cloudProvider=${newClient.cloudProvider}`);
266
+ if (newClient.isCloud && newClient.cloudProvider) {
267
+ const creds = loadCredentials();
268
+ // Get the actual model being used based on the cloud provider
269
+ let modelInUse;
270
+ if (newClient.cloudProvider === 'anthropic') {
271
+ modelInUse = reloadedSettings.anthropic.model;
272
+ }
273
+ else if (newClient.cloudProvider === 'openai') {
274
+ modelInUse = reloadedSettings.openai.model;
275
+ }
276
+ else if (newClient.cloudProvider === 'azure') {
277
+ modelInUse = reloadedSettings.azure.deployment;
278
+ }
279
+ else {
280
+ modelInUse = 'unknown';
281
+ }
282
+ debugLog(`[processMessage] Cloud mode: provider=${newClient.cloudProvider}, model=${modelInUse}`);
283
+ if (creds) {
284
+ setMessages(prev => [...prev, {
285
+ id: getNextId(),
286
+ role: 'system',
287
+ content: color(`Using cloud: ${creds.user.email} (${newClient.cloudProvider}: ${modelInUse})`, Colors.green),
288
+ timestamp: Date.now(),
289
+ }]);
290
+ }
291
+ }
292
+ else {
293
+ debugLog(`[processMessage] Local mode: provider=${reloadedSettings.provider}`);
294
+ setMessages(prev => [...prev, {
295
+ id: getNextId(),
296
+ role: 'system',
297
+ content: color(`Using local provider: ${reloadedSettings.provider}`, Colors.green),
298
+ timestamp: Date.now(),
299
+ }]);
300
+ }
301
+ return;
302
+ }
303
+ if (!input.trim())
304
+ return;
305
+ // Handle exit commands
306
+ if (['quit', 'exit', 'q'].includes(input.toLowerCase())) {
307
+ exit();
308
+ return;
309
+ }
310
+ // Add to command history (newest first, avoid duplicates at the front)
311
+ if (commandHistory[0] !== input) {
312
+ setCommandHistory(prev => {
313
+ const newHistory = [input, ...prev];
314
+ return newHistory.slice(0, 100); // Limit history size
315
+ });
316
+ }
317
+ // Handle slash commands
318
+ if (input.startsWith('/')) {
319
+ const result = await handleCommand(input);
320
+ if (result.handled) {
321
+ if (result.output) {
322
+ setMessages(prev => [...prev, {
323
+ id: getNextId(),
324
+ role: 'system',
325
+ content: result.output,
326
+ timestamp: Date.now(),
327
+ }]);
328
+ }
329
+ return;
330
+ }
331
+ }
332
+ // Regular chat message - add user message to history
333
+ const userMsg = {
334
+ id: getNextId(),
335
+ role: 'user',
336
+ content: input,
337
+ timestamp: Date.now(),
338
+ };
339
+ setMessages(prev => [...prev, userMsg]);
340
+ // Start streaming
341
+ setIsStreaming(true);
342
+ setStreamingContent('');
343
+ abortControllerRef.current = new AbortController();
344
+ // Create callback to get queued messages (called at each agent iteration)
345
+ const getQueuedMessage = () => {
346
+ if (messageQueueRef.current.length > 0) {
347
+ const msg = messageQueueRef.current.shift();
348
+ setQueueLength(messageQueueRef.current.length);
349
+ return msg;
350
+ }
351
+ return null;
352
+ };
353
+ try {
354
+ const generator = runAssistant(client, settings, input, conversationHistory, abortControllerRef.current.signal, getQueuedMessage);
355
+ let fullResponse = '';
356
+ let result = await generator.next();
357
+ while (!result.done) {
358
+ fullResponse += result.value;
359
+ setStreamingContent(fullResponse);
360
+ result = await generator.next();
361
+ }
362
+ // Update conversation history with the returned value
363
+ if (result.value) {
364
+ setConversationHistory(result.value);
365
+ // Check for auto-compaction after updating history
366
+ if (shouldAutoCompact(result.value)) {
367
+ const tokenCount = estimateConversationTokens(result.value);
368
+ setMessages(prev => [...prev, {
369
+ id: getNextId(),
370
+ role: 'system',
371
+ content: color(`Context limit approaching (~${formatTokenCount(tokenCount)} tokens). Auto-compacting conversation...`, Colors.yellow),
372
+ timestamp: Date.now(),
373
+ }]);
374
+ // Trigger auto-compaction after a brief delay to allow UI update
375
+ setTimeout(() => performCompaction(), 100);
376
+ }
377
+ }
378
+ // Move completed response to static messages
379
+ const assistantMsg = {
380
+ id: getNextId(),
381
+ role: 'assistant',
382
+ content: fullResponse,
383
+ timestamp: Date.now(),
384
+ };
385
+ setMessages(prev => [...prev, assistantMsg]);
386
+ }
387
+ catch (e) {
388
+ // Handle abort error gracefully (user interrupted with Escape)
389
+ if (e instanceof Error && (e.name === 'AbortError' || e.message.includes('aborted'))) {
390
+ const streamedSoFar = streamingContent;
391
+ if (streamedSoFar) {
392
+ // Save what was streamed so far
393
+ setMessages(prev => [...prev, {
394
+ id: getNextId(),
395
+ role: 'assistant',
396
+ content: streamedSoFar + color(' (interrupted)', Colors.dim),
397
+ timestamp: Date.now(),
398
+ }]);
399
+ }
400
+ else {
401
+ setMessages(prev => [...prev, {
402
+ id: getNextId(),
403
+ role: 'system',
404
+ content: color('(interrupted)', Colors.dim),
405
+ timestamp: Date.now(),
406
+ }]);
407
+ }
408
+ }
409
+ else {
410
+ setMessages(prev => [...prev, {
411
+ id: getNextId(),
412
+ role: 'system',
413
+ content: color(`Error: ${e instanceof Error ? e.message : String(e)}`, Colors.red),
414
+ timestamp: Date.now(),
415
+ }]);
416
+ }
417
+ }
418
+ finally {
419
+ setStreamingContent('');
420
+ setIsStreaming(false);
421
+ abortControllerRef.current = null;
422
+ }
423
+ }, [client, settings, conversationHistory, streamingContent, commandHistory, handleCommand, reconnectClient, exit, performCompaction]);
424
+ // Handle user input submission - queues messages during streaming
425
+ const handleSubmit = useCallback(async (input) => {
426
+ if (!input.trim())
427
+ return;
428
+ // Special inputs bypass queuing
429
+ if (input.startsWith('__TOKEN__:') || input === '__CONFIG_SAVED__' || input.startsWith('__SYNC__:')) {
430
+ await processMessage(input);
431
+ return;
432
+ }
433
+ // If streaming, queue the message for injection at next agent iteration
434
+ if (isStreaming) {
435
+ messageQueueRef.current.push(input);
436
+ setQueueLength(messageQueueRef.current.length);
437
+ // Add a system message indicating the message was queued
438
+ setMessages(prev => [...prev, {
439
+ id: getNextId(),
440
+ role: 'system',
441
+ content: color(`[Queued for next iteration] "${input.length > 50 ? input.slice(0, 50) + '...' : input}"`, Colors.dim),
442
+ timestamp: Date.now(),
443
+ }]);
444
+ return;
445
+ }
446
+ // Not streaming - process immediately
447
+ await processMessage(input);
448
+ }, [isStreaming, processMessage]);
449
+ // Handle Escape key to interrupt streaming
450
+ useInput((input, key) => {
451
+ if (key.escape && isStreaming && abortControllerRef.current) {
452
+ abortControllerRef.current.abort();
453
+ }
454
+ });
455
+ // Render a single message
456
+ const renderMessage = (msg) => {
457
+ if (msg.role === 'user') {
458
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: "green", bold: true, children: "You: " }), _jsx(Text, { children: msg.content })] }, msg.id));
459
+ }
460
+ else if (msg.role === 'assistant') {
461
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: "blue", bold: true, children: "Assistant: " }), _jsx(Text, { children: msg.content })] }, msg.id));
462
+ }
463
+ else {
464
+ // System message
465
+ return (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: msg.content }) }, msg.id));
466
+ }
467
+ };
468
+ return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [_jsx(Static, { items: messages, children: renderMessage }), isStreaming && streamingContent && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: "blue", bold: true, children: "Assistant: " }), _jsx(Text, { children: streamingContent })] })), isStreaming && !streamingContent && (_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { dimColor: true, children: "Thinking..." }), queueLength > 0 && (_jsxs(Text, { dimColor: true, children: [" (", queueLength, " message", queueLength > 1 ? 's' : '', " queued)"] }))] })), isStreaming && streamingContent && queueLength > 0 && (_jsx(Box, { marginBottom: 0, children: _jsxs(Text, { dimColor: true, children: ["(", queueLength, " message", queueLength > 1 ? 's' : '', " queued)"] }) })), _jsx(InputFooter, { onSubmit: handleSubmit, history: commandHistory, isDisabled: isStreaming || isCompacting, settings: settings })] }));
469
+ }
470
+ //# sourceMappingURL=ChatApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatApp.js","sourceRoot":"","sources":["../../src/components/ChatApp.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { CommandDefinition } from '../autocomplete.js';
3
+ interface CommandPaletteProps {
4
+ commands: CommandDefinition[];
5
+ selectedIndex: number;
6
+ filterText: string;
7
+ isOpen: boolean;
8
+ }
9
+ /**
10
+ * Inline command palette component that displays below the input box.
11
+ * Shows filtered commands with the selected item highlighted.
12
+ */
13
+ export declare function CommandPalette({ commands, selectedIndex, filterText, isOpen, }: CommandPaletteProps): React.ReactElement | null;
14
+ export {};
15
+ //# sourceMappingURL=CommandPalette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../src/components/CommandPalette.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,aAAa,EACb,UAAU,EACV,MAAM,GACP,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CA+DjD"}
@@ -0,0 +1,22 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ /**
4
+ * Inline command palette component that displays below the input box.
5
+ * Shows filtered commands with the selected item highlighted.
6
+ */
7
+ export function CommandPalette({ commands, selectedIndex, filterText, isOpen, }) {
8
+ if (!isOpen || commands.length === 0) {
9
+ return null;
10
+ }
11
+ // Limit displayed commands to prevent overflow
12
+ const maxDisplayCommands = 8;
13
+ const displayCommands = commands.slice(0, maxDisplayCommands);
14
+ // Calculate the longest command name for alignment
15
+ const maxNameLength = Math.max(...displayCommands.map((cmd) => cmd.name.length));
16
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "cyan", paddingX: 1, marginTop: 0, children: [_jsx(Box, { marginBottom: 0, children: _jsxs(Text, { dimColor: true, children: ["Commands", filterText ? ` matching "/${filterText}"` : '', ":"] }) }), displayCommands.map((cmd, index) => {
17
+ const isSelected = index === selectedIndex;
18
+ const paddedName = cmd.name.padEnd(maxNameLength + 2);
19
+ return (_jsx(Box, { children: isSelected ? (_jsxs(Text, { inverse: true, bold: true, children: [' ', paddedName, cmd.description] })) : (_jsxs(Text, { children: [_jsxs(Text, { color: "cyan", children: [' ', cmd.name] }), _jsxs(Text, { dimColor: true, children: [' '.repeat(maxNameLength - cmd.name.length + 2), cmd.description] })] })) }, cmd.name));
20
+ }), commands.length > maxDisplayCommands && (_jsxs(Text, { dimColor: true, italic: true, children: [' ', "...and ", commands.length - maxDisplayCommands, " more"] })), _jsx(Box, { marginTop: 0, children: _jsxs(Text, { dimColor: true, children: [' ', "Use arrows to navigate, Enter to select, Esc to close"] }) })] }));
21
+ }
22
+ //# sourceMappingURL=CommandPalette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../src/components/CommandPalette.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAUhC;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,aAAa,EACb,UAAU,EACV,MAAM,GACc;IACpB,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+CAA+C;IAC/C,MAAM,kBAAkB,GAAG,CAAC,CAAC;IAC7B,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAE9D,mDAAmD;IACnD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjF,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,CAAC,aAGZ,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,MAAC,IAAI,IAAC,QAAQ,+BACH,UAAU,CAAC,CAAC,CAAC,eAAe,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,SAClD,GACH,EAGL,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBAClC,MAAM,UAAU,GAAG,KAAK,KAAK,aAAa,CAAC;gBAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;gBAEtD,OAAO,CACL,KAAC,GAAG,cACD,UAAU,CAAC,CAAC,CAAC,CACZ,MAAC,IAAI,IAAC,OAAO,QAAC,IAAI,mBACf,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,IAC5B,CACR,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,eACH,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,aAAE,GAAG,EAAE,GAAG,CAAC,IAAI,IAAQ,EACzC,MAAC,IAAI,IAAC,QAAQ,mBAAE,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,IAAQ,IACnF,CACR,IAVO,GAAG,CAAC,IAAI,CAWZ,CACP,CAAC;YACJ,CAAC,CAAC,EAGD,QAAQ,CAAC,MAAM,GAAG,kBAAkB,IAAI,CACvC,MAAC,IAAI,IAAC,QAAQ,QAAC,MAAM,mBAClB,GAAG,aAAS,QAAQ,CAAC,MAAM,GAAG,kBAAkB,aAC5C,CACR,EAGD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,MAAC,IAAI,IAAC,QAAQ,mBACX,GAAG,6DACC,GACH,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import { Settings } from '../settings.js';
3
+ interface ConfigWizardProps {
4
+ isOpen: boolean;
5
+ settings: Settings;
6
+ onComplete: (settings: Settings) => void;
7
+ onCancel: () => void;
8
+ }
9
+ /**
10
+ * ConfigWizard - Multi-step inline configuration wizard for LLM providers.
11
+ *
12
+ * Steps:
13
+ * 1. Select provider (Anthropic, OpenAI, Azure)
14
+ * 2. Enter API key (masked input)
15
+ * 3. Select model (Anthropic/OpenAI) or continue Azure flow
16
+ *
17
+ * For Azure:
18
+ * 2. Enter endpoint
19
+ * 3. Enter API key (masked)
20
+ * 4. Enter API version
21
+ * 5. Enter deployment name
22
+ */
23
+ export declare function ConfigWizard({ isOpen, settings, onComplete, onCancel, }: ConfigWizardProps): React.ReactElement | null;
24
+ export {};
25
+ //# sourceMappingURL=ConfigWizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigWizard.d.ts","sourceRoot":"","sources":["../../src/components/ConfigWizard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAA0B,MAAM,gBAAgB,CAAC;AAWlE,UAAU,iBAAiB;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAaD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAsd/C"}