@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.
- package/dist/assistant.d.ts +17 -3
- package/dist/assistant.d.ts.map +1 -1
- package/dist/assistant.js +217 -22
- package/dist/assistant.js.map +1 -1
- package/dist/auth.d.ts +97 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +437 -0
- package/dist/auth.js.map +1 -0
- package/dist/autocomplete.d.ts +24 -0
- package/dist/autocomplete.d.ts.map +1 -0
- package/dist/autocomplete.js +43 -0
- package/dist/autocomplete.js.map +1 -0
- package/dist/components/ChatApp.d.ts +32 -0
- package/dist/components/ChatApp.d.ts.map +1 -0
- package/dist/components/ChatApp.js +470 -0
- package/dist/components/ChatApp.js.map +1 -0
- package/dist/components/CommandPalette.d.ts +15 -0
- package/dist/components/CommandPalette.d.ts.map +1 -0
- package/dist/components/CommandPalette.js +22 -0
- package/dist/components/CommandPalette.js.map +1 -0
- package/dist/components/ConfigWizard.d.ts +25 -0
- package/dist/components/ConfigWizard.d.ts.map +1 -0
- package/dist/components/ConfigWizard.js +401 -0
- package/dist/components/ConfigWizard.js.map +1 -0
- package/dist/components/InputFooter.d.ts +33 -0
- package/dist/components/InputFooter.d.ts.map +1 -0
- package/dist/components/InputFooter.js +618 -0
- package/dist/components/InputFooter.js.map +1 -0
- package/dist/components/InputModal.d.ts +25 -0
- package/dist/components/InputModal.d.ts.map +1 -0
- package/dist/components/InputModal.js +529 -0
- package/dist/components/InputModal.js.map +1 -0
- package/dist/components/ModelMenu.d.ts +24 -0
- package/dist/components/ModelMenu.d.ts.map +1 -0
- package/dist/components/ModelMenu.js +175 -0
- package/dist/components/ModelMenu.js.map +1 -0
- package/dist/components/ProviderMenu.d.ts +20 -0
- package/dist/components/ProviderMenu.d.ts.map +1 -0
- package/dist/components/ProviderMenu.js +31 -0
- package/dist/components/ProviderMenu.js.map +1 -0
- package/dist/components/SyncMenu.d.ts +23 -0
- package/dist/components/SyncMenu.d.ts.map +1 -0
- package/dist/components/SyncMenu.js +135 -0
- package/dist/components/SyncMenu.js.map +1 -0
- package/dist/components/TokenInput.d.ts +15 -0
- package/dist/components/TokenInput.d.ts.map +1 -0
- package/dist/components/TokenInput.js +103 -0
- package/dist/components/TokenInput.js.map +1 -0
- package/dist/index.js +323 -173
- package/dist/index.js.map +1 -1
- package/dist/ink-input.d.ts +14 -0
- package/dist/ink-input.d.ts.map +1 -0
- package/dist/ink-input.js +92 -0
- package/dist/ink-input.js.map +1 -0
- package/dist/models.d.ts +115 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +221 -0
- package/dist/models.js.map +1 -0
- package/dist/providers.d.ts +19 -4
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +80 -112
- package/dist/providers.js.map +1 -1
- package/dist/settings.d.ts +15 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +56 -21
- package/dist/settings.js.map +1 -1
- package/dist/sync/docker.d.ts +68 -0
- package/dist/sync/docker.d.ts.map +1 -0
- package/dist/sync/docker.js +234 -0
- package/dist/sync/docker.js.map +1 -0
- package/dist/sync/download.d.ts +87 -0
- package/dist/sync/download.d.ts.map +1 -0
- package/dist/sync/download.js +291 -0
- package/dist/sync/download.js.map +1 -0
- package/dist/sync/hash.d.ts +60 -0
- package/dist/sync/hash.d.ts.map +1 -0
- package/dist/sync/hash.js +92 -0
- package/dist/sync/hash.js.map +1 -0
- package/dist/sync/index.d.ts +15 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +21 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/manifest.d.ts +132 -0
- package/dist/sync/manifest.d.ts.map +1 -0
- package/dist/sync/manifest.js +260 -0
- package/dist/sync/manifest.js.map +1 -0
- package/dist/sync/progress.d.ts +164 -0
- package/dist/sync/progress.d.ts.map +1 -0
- package/dist/sync/progress.js +233 -0
- package/dist/sync/progress.js.map +1 -0
- package/dist/sync/services.d.ts +70 -0
- package/dist/sync/services.d.ts.map +1 -0
- package/dist/sync/services.js +134 -0
- package/dist/sync/services.js.map +1 -0
- package/dist/sync/sync-engine.d.ts +69 -0
- package/dist/sync/sync-engine.d.ts.map +1 -0
- package/dist/sync/sync-engine.js +533 -0
- package/dist/sync/sync-engine.js.map +1 -0
- package/dist/tokens.d.ts +70 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +198 -0
- package/dist/tokens.js.map +1 -0
- package/dist/tools.d.ts +60 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +34 -0
- package/dist/tools.js.map +1 -1
- package/dist/types/sync.d.ts +284 -0
- package/dist/types/sync.d.ts.map +1 -0
- package/dist/types/sync.js +5 -0
- package/dist/types/sync.js.map +1 -0
- package/package.json +10 -2
|
@@ -0,0 +1,618 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback, useMemo, useEffect } from 'react';
|
|
3
|
+
import { Box, Text, useInput, useApp } from 'ink';
|
|
4
|
+
import { CommandPalette } from './CommandPalette.js';
|
|
5
|
+
import { ModelMenu } from './ModelMenu.js';
|
|
6
|
+
import { ConfigWizard } from './ConfigWizard.js';
|
|
7
|
+
import { TokenInput } from './TokenInput.js';
|
|
8
|
+
import { SyncMenu } from './SyncMenu.js';
|
|
9
|
+
import { filterCommands } from '../autocomplete.js';
|
|
10
|
+
import { Settings, Provider, saveSettings, debugLog as settingsDebugLog } from '../settings.js';
|
|
11
|
+
import { isAuthenticated, setSelectedCloudProvider } from '../auth.js';
|
|
12
|
+
/**
|
|
13
|
+
* InputFooter - Persistent input component for the chat footer.
|
|
14
|
+
*
|
|
15
|
+
* This is a simplified, controlled version of InputModal designed to stay
|
|
16
|
+
* mounted throughout the session. It handles:
|
|
17
|
+
* - Multi-line input with cursor navigation
|
|
18
|
+
* - Command history navigation (up/down arrows)
|
|
19
|
+
* - Command palette (triggered by "/")
|
|
20
|
+
* - Inline config wizard, model menu, and token input
|
|
21
|
+
*
|
|
22
|
+
* Unlike InputModal, this doesn't resolve a promise on submit - it calls
|
|
23
|
+
* the onSubmit callback and clears the input.
|
|
24
|
+
*
|
|
25
|
+
* Controls:
|
|
26
|
+
* - Enter: Submit the input (or select command when palette is open)
|
|
27
|
+
* - Ctrl+J: Add a new line
|
|
28
|
+
* - Arrow Up/Down: Navigate between lines (or navigate palette/history when appropriate)
|
|
29
|
+
* - Arrow Left/Right: Navigate within a line
|
|
30
|
+
* - Backspace: Delete character or merge lines
|
|
31
|
+
* - Escape: Close command palette (during streaming, parent handles interrupt)
|
|
32
|
+
* - Ctrl+C: Exit
|
|
33
|
+
*/
|
|
34
|
+
export function InputFooter({ onSubmit, history = [], isDisabled = false, settings, }) {
|
|
35
|
+
const { exit } = useApp();
|
|
36
|
+
// State for multi-line input - combined into single object for atomic updates
|
|
37
|
+
const [inputState, setInputState] = useState({
|
|
38
|
+
lines: [''],
|
|
39
|
+
currentLine: 0,
|
|
40
|
+
cursorPos: 0,
|
|
41
|
+
});
|
|
42
|
+
// State for command history navigation
|
|
43
|
+
// historyIndex: -1 means not navigating, 0 = most recent, length-1 = oldest
|
|
44
|
+
const [historyIndex, setHistoryIndex] = useState(-1);
|
|
45
|
+
// savedInput: saves the current input when user starts navigating history
|
|
46
|
+
const [savedInput, setSavedInput] = useState('');
|
|
47
|
+
// Destructure for easier access in render
|
|
48
|
+
const { lines, currentLine, cursorPos } = inputState;
|
|
49
|
+
// Helper to update input state atomically
|
|
50
|
+
const updateInputState = (updates) => {
|
|
51
|
+
setInputState(prev => ({ ...prev, ...updates }));
|
|
52
|
+
};
|
|
53
|
+
// State for command palette
|
|
54
|
+
const [showPalette, setShowPalette] = useState(false);
|
|
55
|
+
const [paletteFilter, setPaletteFilter] = useState('');
|
|
56
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
57
|
+
// State for model menu
|
|
58
|
+
const [showModelMenu, setShowModelMenu] = useState(false);
|
|
59
|
+
const [confirmationMessage, setConfirmationMessage] = useState(null);
|
|
60
|
+
// State for config wizard
|
|
61
|
+
const [showConfigWizard, setShowConfigWizard] = useState(false);
|
|
62
|
+
const [currentSettings, setCurrentSettings] = useState(settings);
|
|
63
|
+
// State for token input
|
|
64
|
+
const [showTokenInput, setShowTokenInput] = useState(false);
|
|
65
|
+
// State for sync menu
|
|
66
|
+
const [showSyncMenu, setShowSyncMenu] = useState(false);
|
|
67
|
+
// Get filtered commands based on paletteFilter
|
|
68
|
+
const filteredCommands = useMemo(() => {
|
|
69
|
+
if (!showPalette)
|
|
70
|
+
return [];
|
|
71
|
+
return filterCommands(paletteFilter);
|
|
72
|
+
}, [showPalette, paletteFilter]);
|
|
73
|
+
// Reset selected index when filtered commands change
|
|
74
|
+
useMemo(() => {
|
|
75
|
+
if (selectedIndex >= filteredCommands.length) {
|
|
76
|
+
setSelectedIndex(Math.max(0, filteredCommands.length - 1));
|
|
77
|
+
}
|
|
78
|
+
}, [filteredCommands.length, selectedIndex]);
|
|
79
|
+
// Clear confirmation message after a delay
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
if (confirmationMessage) {
|
|
82
|
+
const timer = setTimeout(() => {
|
|
83
|
+
setConfirmationMessage(null);
|
|
84
|
+
}, 2000);
|
|
85
|
+
return () => clearTimeout(timer);
|
|
86
|
+
}
|
|
87
|
+
}, [confirmationMessage]);
|
|
88
|
+
// Sync settings prop with local state
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (settings) {
|
|
91
|
+
setCurrentSettings(settings);
|
|
92
|
+
}
|
|
93
|
+
}, [settings]);
|
|
94
|
+
// Config wizard callbacks
|
|
95
|
+
const closeConfigWizard = useCallback(() => {
|
|
96
|
+
setShowConfigWizard(false);
|
|
97
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
98
|
+
}, []);
|
|
99
|
+
const handleConfigComplete = useCallback((newSettings) => {
|
|
100
|
+
// Save the settings
|
|
101
|
+
saveSettings(newSettings);
|
|
102
|
+
setCurrentSettings(newSettings);
|
|
103
|
+
setConfirmationMessage(`Configuration saved for ${newSettings.provider}`);
|
|
104
|
+
closeConfigWizard();
|
|
105
|
+
// Trigger reconnect by submitting a special token
|
|
106
|
+
setTimeout(() => {
|
|
107
|
+
onSubmit('__CONFIG_SAVED__');
|
|
108
|
+
}, 100);
|
|
109
|
+
}, [closeConfigWizard, onSubmit]);
|
|
110
|
+
const handleConfigCancel = useCallback(() => {
|
|
111
|
+
setConfirmationMessage('Configuration cancelled');
|
|
112
|
+
closeConfigWizard();
|
|
113
|
+
}, [closeConfigWizard]);
|
|
114
|
+
// Token input callbacks
|
|
115
|
+
const closeTokenInput = useCallback(() => {
|
|
116
|
+
setShowTokenInput(false);
|
|
117
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
118
|
+
}, []);
|
|
119
|
+
const handleTokenSubmit = useCallback((token) => {
|
|
120
|
+
closeTokenInput();
|
|
121
|
+
// Submit with special prefix for ChatApp to handle
|
|
122
|
+
onSubmit(`__TOKEN__:${token}`);
|
|
123
|
+
}, [closeTokenInput, onSubmit]);
|
|
124
|
+
const handleTokenCancel = useCallback(() => {
|
|
125
|
+
setConfirmationMessage('Token entry cancelled');
|
|
126
|
+
closeTokenInput();
|
|
127
|
+
}, [closeTokenInput]);
|
|
128
|
+
// Sync menu callbacks
|
|
129
|
+
const closeSyncMenu = useCallback(() => {
|
|
130
|
+
setShowSyncMenu(false);
|
|
131
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
132
|
+
}, []);
|
|
133
|
+
const handleSyncSelect = useCallback(async (result) => {
|
|
134
|
+
closeSyncMenu();
|
|
135
|
+
// Execute the sync action - we'll submit a special command for ChatApp to handle
|
|
136
|
+
switch (result.action) {
|
|
137
|
+
case 'sync':
|
|
138
|
+
if (result.force) {
|
|
139
|
+
onSubmit('__SYNC__:force');
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
onSubmit('__SYNC__:normal');
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
case 'preview':
|
|
146
|
+
onSubmit('__SYNC__:preview');
|
|
147
|
+
break;
|
|
148
|
+
case 'status':
|
|
149
|
+
onSubmit('__SYNC__:status');
|
|
150
|
+
break;
|
|
151
|
+
case 'resume':
|
|
152
|
+
onSubmit('__SYNC__:resume');
|
|
153
|
+
break;
|
|
154
|
+
case 'cancel':
|
|
155
|
+
// Already closed menu, nothing else to do
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
}, [closeSyncMenu, onSubmit]);
|
|
159
|
+
const handleSyncCancel = useCallback(() => {
|
|
160
|
+
setConfirmationMessage('Sync cancelled');
|
|
161
|
+
closeSyncMenu();
|
|
162
|
+
}, [closeSyncMenu]);
|
|
163
|
+
const handleSubmit = useCallback(() => {
|
|
164
|
+
const result = lines.join('\n').trim();
|
|
165
|
+
if (!result)
|
|
166
|
+
return;
|
|
167
|
+
// Reset history navigation state
|
|
168
|
+
setHistoryIndex(-1);
|
|
169
|
+
setSavedInput('');
|
|
170
|
+
// Clear input
|
|
171
|
+
setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
|
|
172
|
+
// Call the onSubmit callback (parent handles queuing if streaming)
|
|
173
|
+
onSubmit(result);
|
|
174
|
+
}, [lines, onSubmit]);
|
|
175
|
+
const closePalette = useCallback(() => {
|
|
176
|
+
setShowPalette(false);
|
|
177
|
+
setPaletteFilter('');
|
|
178
|
+
setSelectedIndex(0);
|
|
179
|
+
}, []);
|
|
180
|
+
// Model menu callbacks
|
|
181
|
+
const closeModelMenu = useCallback(() => {
|
|
182
|
+
setShowModelMenu(false);
|
|
183
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
184
|
+
}, []);
|
|
185
|
+
const handleModelSelect = useCallback((provider, modelId) => {
|
|
186
|
+
if (!currentSettings) {
|
|
187
|
+
settingsDebugLog('[handleModelSelect] No currentSettings, aborting');
|
|
188
|
+
closeModelMenu();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
settingsDebugLog(`[handleModelSelect] Changing to provider=${provider}, model=${modelId}`);
|
|
192
|
+
settingsDebugLog(`[handleModelSelect] Before: provider=${currentSettings.provider}, isAuthenticated=${isAuthenticated()}`);
|
|
193
|
+
// Create a deep copy of settings to avoid mutation issues
|
|
194
|
+
const updatedSettings = Settings.fromDict(currentSettings.toDict());
|
|
195
|
+
// Update the provider
|
|
196
|
+
updatedSettings.provider = provider;
|
|
197
|
+
// Update the model in settings based on provider
|
|
198
|
+
if (provider === Provider.ANTHROPIC || provider === 'anthropic') {
|
|
199
|
+
updatedSettings.anthropic.model = modelId;
|
|
200
|
+
}
|
|
201
|
+
else if (provider === Provider.OPENAI || provider === 'openai') {
|
|
202
|
+
updatedSettings.openai.model = modelId;
|
|
203
|
+
}
|
|
204
|
+
else if (provider === Provider.AZURE || provider === 'azure') {
|
|
205
|
+
updatedSettings.azure.deployment = modelId;
|
|
206
|
+
}
|
|
207
|
+
// Save the updated settings to disk
|
|
208
|
+
settingsDebugLog(`[handleModelSelect] Saving settings: provider=${updatedSettings.provider}`);
|
|
209
|
+
saveSettings(updatedSettings);
|
|
210
|
+
// CRITICAL: If cloud authenticated, also update the selected cloud provider
|
|
211
|
+
// This ensures getSelectedCloudProvider() returns the correct provider
|
|
212
|
+
if (isAuthenticated()) {
|
|
213
|
+
settingsDebugLog(`[handleModelSelect] Cloud authenticated, calling setSelectedCloudProvider(${provider})`);
|
|
214
|
+
const cloudProviderSet = setSelectedCloudProvider(provider);
|
|
215
|
+
if (!cloudProviderSet) {
|
|
216
|
+
settingsDebugLog(`[handleModelSelect] WARNING: setSelectedCloudProvider returned false - provider ${provider} may not be available in cloud config`);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
settingsDebugLog(`[handleModelSelect] Cloud provider selection saved successfully`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Update local state with the new settings
|
|
223
|
+
setCurrentSettings(updatedSettings);
|
|
224
|
+
// Format confirmation message with provider and model
|
|
225
|
+
const providerName = provider.charAt(0).toUpperCase() + provider.slice(1);
|
|
226
|
+
setConfirmationMessage(`Provider changed to ${providerName}, model: ${modelId}`);
|
|
227
|
+
closeModelMenu();
|
|
228
|
+
settingsDebugLog(`[handleModelSelect] Triggering reconnect via __CONFIG_SAVED__`);
|
|
229
|
+
// Trigger reconnect to use the new provider/model
|
|
230
|
+
setTimeout(() => {
|
|
231
|
+
onSubmit('__CONFIG_SAVED__');
|
|
232
|
+
}, 100);
|
|
233
|
+
}, [currentSettings, closeModelMenu, onSubmit]);
|
|
234
|
+
const handleModelCancel = useCallback(() => {
|
|
235
|
+
setConfirmationMessage('Model selection cancelled');
|
|
236
|
+
closeModelMenu();
|
|
237
|
+
}, [closeModelMenu]);
|
|
238
|
+
useInput((input, key) => {
|
|
239
|
+
// Ctrl+C to exit
|
|
240
|
+
if (input === 'c' && key.ctrl) {
|
|
241
|
+
exit();
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
// Config wizard handles its own input
|
|
245
|
+
if (showConfigWizard) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
// Token input handles its own input
|
|
249
|
+
if (showTokenInput) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
// Model menu handles its own input
|
|
253
|
+
if (showModelMenu) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
// Sync menu handles its own input
|
|
257
|
+
if (showSyncMenu) {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
// NOTE: We no longer block input when streaming (isDisabled).
|
|
261
|
+
// Users can type, search history, and submit messages while streaming.
|
|
262
|
+
// The parent component handles queuing messages submitted during streaming.
|
|
263
|
+
// Handle command palette navigation when it's open
|
|
264
|
+
if (showPalette) {
|
|
265
|
+
// Escape to close palette
|
|
266
|
+
if (key.escape) {
|
|
267
|
+
closePalette();
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
// Arrow Up: navigate up in palette
|
|
271
|
+
if (key.upArrow) {
|
|
272
|
+
setSelectedIndex(prev => (prev > 0 ? prev - 1 : filteredCommands.length - 1));
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
// Arrow Down: navigate down in palette
|
|
276
|
+
if (key.downArrow) {
|
|
277
|
+
setSelectedIndex(prev => (prev < filteredCommands.length - 1 ? prev + 1 : 0));
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
// Tab: autocomplete with the highlighted command (keep palette open)
|
|
281
|
+
if (key.tab) {
|
|
282
|
+
if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
|
|
283
|
+
const selectedCommand = filteredCommands[selectedIndex].name;
|
|
284
|
+
// Update the input line with the full command and cursor position atomically
|
|
285
|
+
setInputState(prev => {
|
|
286
|
+
const newLines = [...prev.lines];
|
|
287
|
+
newLines[prev.currentLine] = selectedCommand;
|
|
288
|
+
return { ...prev, lines: newLines, cursorPos: selectedCommand.length };
|
|
289
|
+
});
|
|
290
|
+
// Reset filter to match the full command (minus the leading "/")
|
|
291
|
+
setPaletteFilter(selectedCommand.slice(1));
|
|
292
|
+
// Reset selected index
|
|
293
|
+
setSelectedIndex(0);
|
|
294
|
+
// Keep palette open - don't close it
|
|
295
|
+
}
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
// Enter: select the highlighted command or submit full input
|
|
299
|
+
if (key.return) {
|
|
300
|
+
if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
|
|
301
|
+
const selectedCommand = filteredCommands[selectedIndex].name;
|
|
302
|
+
// Special handling for /config command
|
|
303
|
+
if (selectedCommand === '/config' && currentSettings) {
|
|
304
|
+
closePalette();
|
|
305
|
+
setShowConfigWizard(true);
|
|
306
|
+
// Clear the input since we're handling it inline
|
|
307
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
// Special handling for /token command
|
|
311
|
+
if (selectedCommand === '/token') {
|
|
312
|
+
closePalette();
|
|
313
|
+
setShowTokenInput(true);
|
|
314
|
+
// Clear the input since we're handling it inline
|
|
315
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
// Special handling for /model command
|
|
319
|
+
if (selectedCommand === '/model' && currentSettings) {
|
|
320
|
+
closePalette();
|
|
321
|
+
setShowModelMenu(true);
|
|
322
|
+
// Clear the input since we're handling it inline
|
|
323
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
// Special handling for /sync command
|
|
327
|
+
if (selectedCommand === '/sync') {
|
|
328
|
+
closePalette();
|
|
329
|
+
setShowSyncMenu(true);
|
|
330
|
+
// Clear the input since we're handling it inline
|
|
331
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
// Set the command in input and submit immediately
|
|
335
|
+
closePalette();
|
|
336
|
+
setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
|
|
337
|
+
onSubmit(selectedCommand);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
// No matching commands - submit the full input as-is (for commands with arguments)
|
|
341
|
+
const fullInput = '/' + paletteFilter;
|
|
342
|
+
closePalette();
|
|
343
|
+
setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
|
|
344
|
+
onSubmit(fullInput);
|
|
345
|
+
}
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
// Backspace: remove from filter or close palette
|
|
349
|
+
if (key.backspace || key.delete) {
|
|
350
|
+
if (paletteFilter.length > 0) {
|
|
351
|
+
// Remove last character from filter
|
|
352
|
+
const newFilter = paletteFilter.slice(0, -1);
|
|
353
|
+
setPaletteFilter(newFilter);
|
|
354
|
+
setSelectedIndex(0);
|
|
355
|
+
// Update the input line and cursor atomically
|
|
356
|
+
setInputState(prev => {
|
|
357
|
+
const newLines = [...prev.lines];
|
|
358
|
+
newLines[prev.currentLine] = '/' + newFilter;
|
|
359
|
+
return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
// Filter is empty, delete the "/" and close palette
|
|
364
|
+
setInputState(prev => {
|
|
365
|
+
const newLines = [...prev.lines];
|
|
366
|
+
const line = newLines[prev.currentLine];
|
|
367
|
+
if (line.startsWith('/')) {
|
|
368
|
+
newLines[prev.currentLine] = line.slice(1);
|
|
369
|
+
}
|
|
370
|
+
return { ...prev, lines: newLines, cursorPos: Math.max(0, prev.cursorPos - 1) };
|
|
371
|
+
});
|
|
372
|
+
closePalette();
|
|
373
|
+
}
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
// Regular character input: add to filter
|
|
377
|
+
if (input && !key.ctrl && !key.meta) {
|
|
378
|
+
const newFilter = paletteFilter + input;
|
|
379
|
+
setPaletteFilter(newFilter);
|
|
380
|
+
setSelectedIndex(0);
|
|
381
|
+
// Update the input line and cursor atomically
|
|
382
|
+
setInputState(prev => {
|
|
383
|
+
const newLines = [...prev.lines];
|
|
384
|
+
newLines[prev.currentLine] = '/' + newFilter;
|
|
385
|
+
return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
|
|
386
|
+
});
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
// Normal input handling when palette is closed
|
|
392
|
+
// Ctrl+J for new line
|
|
393
|
+
if (input === 'j' && key.ctrl) {
|
|
394
|
+
setInputState(prev => {
|
|
395
|
+
const newLines = [...prev.lines];
|
|
396
|
+
// Split current line at cursor position
|
|
397
|
+
const currentLineContent = newLines[prev.currentLine];
|
|
398
|
+
const beforeCursor = currentLineContent.slice(0, prev.cursorPos);
|
|
399
|
+
const afterCursor = currentLineContent.slice(prev.cursorPos);
|
|
400
|
+
newLines[prev.currentLine] = beforeCursor;
|
|
401
|
+
newLines.splice(prev.currentLine + 1, 0, afterCursor);
|
|
402
|
+
return { lines: newLines, currentLine: prev.currentLine + 1, cursorPos: 0 };
|
|
403
|
+
});
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
// Enter to submit
|
|
407
|
+
if (key.return) {
|
|
408
|
+
handleSubmit();
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
// Arrow Up - navigate lines or history
|
|
412
|
+
if (key.upArrow) {
|
|
413
|
+
// If on first line, navigate history backward
|
|
414
|
+
if (currentLine === 0 && history.length > 0) {
|
|
415
|
+
const nextIndex = historyIndex + 1;
|
|
416
|
+
if (nextIndex < history.length) {
|
|
417
|
+
// Save current input when first starting to navigate
|
|
418
|
+
if (historyIndex === -1) {
|
|
419
|
+
setSavedInput(lines.join('\n'));
|
|
420
|
+
}
|
|
421
|
+
setHistoryIndex(nextIndex);
|
|
422
|
+
// History is stored newest first, so index 0 = most recent
|
|
423
|
+
const historyItem = history[nextIndex];
|
|
424
|
+
const historyLines = historyItem.split('\n');
|
|
425
|
+
setInputState({
|
|
426
|
+
lines: historyLines,
|
|
427
|
+
currentLine: 0,
|
|
428
|
+
cursorPos: historyLines[0].length,
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
// Otherwise navigate between lines
|
|
434
|
+
setInputState(prev => {
|
|
435
|
+
if (prev.currentLine > 0) {
|
|
436
|
+
const newLine = prev.currentLine - 1;
|
|
437
|
+
return {
|
|
438
|
+
...prev,
|
|
439
|
+
currentLine: newLine,
|
|
440
|
+
cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
return prev;
|
|
444
|
+
});
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
// Arrow Down - navigate lines or history
|
|
448
|
+
if (key.downArrow) {
|
|
449
|
+
// If navigating history, move forward (toward more recent)
|
|
450
|
+
if (historyIndex >= 0) {
|
|
451
|
+
const nextIndex = historyIndex - 1;
|
|
452
|
+
if (nextIndex >= 0) {
|
|
453
|
+
// Still in history
|
|
454
|
+
setHistoryIndex(nextIndex);
|
|
455
|
+
const historyItem = history[nextIndex];
|
|
456
|
+
const historyLines = historyItem.split('\n');
|
|
457
|
+
setInputState({
|
|
458
|
+
lines: historyLines,
|
|
459
|
+
currentLine: 0,
|
|
460
|
+
cursorPos: historyLines[0].length,
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
// Reached end of history, restore saved input
|
|
465
|
+
setHistoryIndex(-1);
|
|
466
|
+
const restoredLines = savedInput ? savedInput.split('\n') : [''];
|
|
467
|
+
setInputState({
|
|
468
|
+
lines: restoredLines,
|
|
469
|
+
currentLine: 0,
|
|
470
|
+
cursorPos: restoredLines[0].length,
|
|
471
|
+
});
|
|
472
|
+
setSavedInput('');
|
|
473
|
+
}
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
// Otherwise navigate between lines
|
|
477
|
+
setInputState(prev => {
|
|
478
|
+
if (prev.currentLine < prev.lines.length - 1) {
|
|
479
|
+
const newLine = prev.currentLine + 1;
|
|
480
|
+
return {
|
|
481
|
+
...prev,
|
|
482
|
+
currentLine: newLine,
|
|
483
|
+
cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
return prev;
|
|
487
|
+
});
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
// Arrow Left
|
|
491
|
+
if (key.leftArrow) {
|
|
492
|
+
setInputState(prev => {
|
|
493
|
+
if (prev.cursorPos > 0) {
|
|
494
|
+
return { ...prev, cursorPos: prev.cursorPos - 1 };
|
|
495
|
+
}
|
|
496
|
+
else if (prev.currentLine > 0) {
|
|
497
|
+
// Move to end of previous line
|
|
498
|
+
const newLine = prev.currentLine - 1;
|
|
499
|
+
return { ...prev, currentLine: newLine, cursorPos: prev.lines[newLine].length };
|
|
500
|
+
}
|
|
501
|
+
return prev;
|
|
502
|
+
});
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
// Arrow Right
|
|
506
|
+
if (key.rightArrow) {
|
|
507
|
+
setInputState(prev => {
|
|
508
|
+
if (prev.cursorPos < prev.lines[prev.currentLine].length) {
|
|
509
|
+
return { ...prev, cursorPos: prev.cursorPos + 1 };
|
|
510
|
+
}
|
|
511
|
+
else if (prev.currentLine < prev.lines.length - 1) {
|
|
512
|
+
// Move to start of next line
|
|
513
|
+
return { ...prev, currentLine: prev.currentLine + 1, cursorPos: 0 };
|
|
514
|
+
}
|
|
515
|
+
return prev;
|
|
516
|
+
});
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
// Alt+Backspace: delete word before cursor
|
|
520
|
+
if (key.meta && (key.backspace || key.delete)) {
|
|
521
|
+
setInputState(prev => {
|
|
522
|
+
if (prev.cursorPos === 0)
|
|
523
|
+
return prev;
|
|
524
|
+
const line = prev.lines[prev.currentLine];
|
|
525
|
+
let pos = prev.cursorPos;
|
|
526
|
+
// Skip any whitespace immediately before cursor
|
|
527
|
+
while (pos > 0 && /\s/.test(line[pos - 1])) {
|
|
528
|
+
pos--;
|
|
529
|
+
}
|
|
530
|
+
// Delete back to the previous whitespace or start of line
|
|
531
|
+
while (pos > 0 && !/\s/.test(line[pos - 1])) {
|
|
532
|
+
pos--;
|
|
533
|
+
}
|
|
534
|
+
const newLines = [...prev.lines];
|
|
535
|
+
newLines[prev.currentLine] = line.slice(0, pos) + line.slice(prev.cursorPos);
|
|
536
|
+
return { ...prev, lines: newLines, cursorPos: pos };
|
|
537
|
+
});
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
// Backspace
|
|
541
|
+
if (key.backspace || key.delete) {
|
|
542
|
+
setInputState(prev => {
|
|
543
|
+
if (prev.cursorPos > 0) {
|
|
544
|
+
// Delete character before cursor
|
|
545
|
+
const newLines = [...prev.lines];
|
|
546
|
+
const line = newLines[prev.currentLine];
|
|
547
|
+
newLines[prev.currentLine] = line.slice(0, prev.cursorPos - 1) + line.slice(prev.cursorPos);
|
|
548
|
+
return { ...prev, lines: newLines, cursorPos: prev.cursorPos - 1 };
|
|
549
|
+
}
|
|
550
|
+
else if (prev.currentLine > 0) {
|
|
551
|
+
// Merge with previous line
|
|
552
|
+
const prevLineLen = prev.lines[prev.currentLine - 1].length;
|
|
553
|
+
const newLines = [...prev.lines];
|
|
554
|
+
newLines[prev.currentLine - 1] += newLines[prev.currentLine];
|
|
555
|
+
newLines.splice(prev.currentLine, 1);
|
|
556
|
+
return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: prevLineLen };
|
|
557
|
+
}
|
|
558
|
+
return prev;
|
|
559
|
+
});
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
562
|
+
// Home key (Ctrl+A in some terminals)
|
|
563
|
+
if (input === 'a' && key.ctrl) {
|
|
564
|
+
updateInputState({ cursorPos: 0 });
|
|
565
|
+
return;
|
|
566
|
+
}
|
|
567
|
+
// End key (Ctrl+E in some terminals)
|
|
568
|
+
if (input === 'e' && key.ctrl) {
|
|
569
|
+
setInputState(prev => ({ ...prev, cursorPos: prev.lines[prev.currentLine].length }));
|
|
570
|
+
return;
|
|
571
|
+
}
|
|
572
|
+
// Regular character input (including multi-character paste)
|
|
573
|
+
if (input && !key.ctrl && !key.meta) {
|
|
574
|
+
// Check if "/" is typed at the beginning of an empty line or at cursor position 0
|
|
575
|
+
if (input === '/' && (inputState.lines[inputState.currentLine] === '' || inputState.cursorPos === 0)) {
|
|
576
|
+
setShowPalette(true);
|
|
577
|
+
setPaletteFilter('');
|
|
578
|
+
setSelectedIndex(0);
|
|
579
|
+
}
|
|
580
|
+
setInputState(prev => {
|
|
581
|
+
const newLines = [...prev.lines];
|
|
582
|
+
const line = newLines[prev.currentLine];
|
|
583
|
+
newLines[prev.currentLine] = line.slice(0, prev.cursorPos) + input + line.slice(prev.cursorPos);
|
|
584
|
+
return {
|
|
585
|
+
...prev,
|
|
586
|
+
lines: newLines,
|
|
587
|
+
cursorPos: prev.cursorPos + input.length
|
|
588
|
+
};
|
|
589
|
+
});
|
|
590
|
+
return;
|
|
591
|
+
}
|
|
592
|
+
});
|
|
593
|
+
// Render lines with cursor indicator
|
|
594
|
+
const renderLines = () => {
|
|
595
|
+
const maxDisplayLines = 5;
|
|
596
|
+
const displayLines = lines.slice(0, maxDisplayLines);
|
|
597
|
+
return displayLines.map((line, index) => {
|
|
598
|
+
const isCurrentLine = index === currentLine;
|
|
599
|
+
if (isCurrentLine) {
|
|
600
|
+
// Show cursor in current line
|
|
601
|
+
// Use sibling Text components instead of nesting to avoid Ink layout bugs
|
|
602
|
+
const beforeCursor = line.slice(0, cursorPos);
|
|
603
|
+
const cursorChar = line[cursorPos] || ' ';
|
|
604
|
+
const afterCursor = line.slice(cursorPos + 1);
|
|
605
|
+
return (_jsxs(Box, { children: [_jsx(Text, { children: beforeCursor }), _jsx(Text, { inverse: true, children: cursorChar }), _jsx(Text, { children: afterCursor })] }, index));
|
|
606
|
+
}
|
|
607
|
+
return (_jsx(Box, { children: _jsx(Text, { children: line || ' ' }) }, index));
|
|
608
|
+
});
|
|
609
|
+
};
|
|
610
|
+
// Calculate minimum height (at least 1 line)
|
|
611
|
+
const minHeight = Math.max(1, Math.min(lines.length, 5));
|
|
612
|
+
// Determine hint text based on state
|
|
613
|
+
const hintText = isDisabled
|
|
614
|
+
? '(Streaming... Escape to interrupt, Enter to queue next message)'
|
|
615
|
+
: '(Enter to send, Ctrl+J for new line, "/" for commands, Up/Down for history)';
|
|
616
|
+
return (_jsxs(Box, { flexDirection: "column", children: [confirmationMessage && (_jsx(Box, { marginBottom: 0, children: _jsx(Text, { color: "green", children: confirmationMessage }) })), _jsx(Text, { dimColor: true, children: hintText }), _jsxs(Box, { borderStyle: "round", borderColor: isDisabled ? 'gray' : 'cyan', paddingX: 1, flexDirection: "column", minHeight: minHeight + 2, children: [_jsx(Box, { marginTop: -1, marginLeft: -1, children: _jsx(Text, { color: isDisabled ? 'gray' : 'cyan', children: " You " }) }), _jsx(Box, { flexDirection: "column", minHeight: minHeight, children: renderLines() })] }), _jsx(CommandPalette, { commands: filteredCommands, selectedIndex: selectedIndex, filterText: paletteFilter, isOpen: showPalette }), currentSettings && (_jsx(ModelMenu, { isOpen: showModelMenu, settings: currentSettings, onSelect: handleModelSelect, onCancel: handleModelCancel })), currentSettings && (_jsx(ConfigWizard, { isOpen: showConfigWizard, settings: currentSettings, onComplete: handleConfigComplete, onCancel: handleConfigCancel })), _jsx(TokenInput, { isOpen: showTokenInput, onSubmit: handleTokenSubmit, onCancel: handleTokenCancel }), _jsx(SyncMenu, { isOpen: showSyncMenu, onSelect: handleSyncSelect, onCancel: handleSyncCancel }), lines.length > 1 && !showPalette && !showModelMenu && !showConfigWizard && !showTokenInput && !showSyncMenu && (_jsxs(Text, { dimColor: true, children: ["Line ", currentLine + 1, "/", lines.length] }))] }));
|
|
617
|
+
}
|
|
618
|
+
//# sourceMappingURL=InputFooter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputFooter.js","sourceRoot":"","sources":["../../src/components/InputFooter.tsx"],"names":[],"mappings":"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"}
|