@syntero/orca-cli 1.0.0 → 1.1.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.
- 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 +438 -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,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Settings } from '../settings.js';
|
|
3
|
+
interface InputModalProps {
|
|
4
|
+
label: string;
|
|
5
|
+
onSubmit: (value: string) => void;
|
|
6
|
+
settings?: Settings;
|
|
7
|
+
history?: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Multi-line input modal with a bordered box and inline command palette.
|
|
11
|
+
*
|
|
12
|
+
* Controls:
|
|
13
|
+
* - Enter: Submit the input (or select command when palette is open)
|
|
14
|
+
* - Ctrl+J: Add a new line
|
|
15
|
+
* - Arrow Up/Down: Navigate between lines (or navigate palette when open)
|
|
16
|
+
* - Arrow Left/Right: Navigate within a line
|
|
17
|
+
* - Backspace: Delete character or merge lines
|
|
18
|
+
* - Escape: Close command palette
|
|
19
|
+
* - Ctrl+C: Exit
|
|
20
|
+
*
|
|
21
|
+
* When "/" is typed, the command palette appears automatically.
|
|
22
|
+
*/
|
|
23
|
+
export declare function InputModal({ label, onSubmit, settings, history }: InputModalProps): React.ReactElement;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=InputModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputModal.d.ts","sourceRoot":"","sources":["../../src/components/InputModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAOzE,OAAO,EAAE,QAAQ,EAA0B,MAAM,gBAAgB,CAAC;AAElE,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAY,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAmoB3G"}
|
|
@@ -0,0 +1,529 @@
|
|
|
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 { filterCommands } from '../autocomplete.js';
|
|
9
|
+
import { Provider, saveSettings } from '../settings.js';
|
|
10
|
+
/**
|
|
11
|
+
* Multi-line input modal with a bordered box and inline command palette.
|
|
12
|
+
*
|
|
13
|
+
* Controls:
|
|
14
|
+
* - Enter: Submit the input (or select command when palette is open)
|
|
15
|
+
* - Ctrl+J: Add a new line
|
|
16
|
+
* - Arrow Up/Down: Navigate between lines (or navigate palette when open)
|
|
17
|
+
* - Arrow Left/Right: Navigate within a line
|
|
18
|
+
* - Backspace: Delete character or merge lines
|
|
19
|
+
* - Escape: Close command palette
|
|
20
|
+
* - Ctrl+C: Exit
|
|
21
|
+
*
|
|
22
|
+
* When "/" is typed, the command palette appears automatically.
|
|
23
|
+
*/
|
|
24
|
+
export function InputModal({ label, onSubmit, settings, history = [] }) {
|
|
25
|
+
const { exit } = useApp();
|
|
26
|
+
// State for multi-line input - combined into single object for atomic updates
|
|
27
|
+
const [inputState, setInputState] = useState({
|
|
28
|
+
lines: [''],
|
|
29
|
+
currentLine: 0,
|
|
30
|
+
cursorPos: 0,
|
|
31
|
+
});
|
|
32
|
+
// State for command history navigation
|
|
33
|
+
// historyIndex: -1 means not navigating, 0 = most recent, length-1 = oldest
|
|
34
|
+
const [historyIndex, setHistoryIndex] = useState(-1);
|
|
35
|
+
// savedInput: saves the current input when user starts navigating history
|
|
36
|
+
const [savedInput, setSavedInput] = useState('');
|
|
37
|
+
// Destructure for easier access in render
|
|
38
|
+
const { lines, currentLine, cursorPos } = inputState;
|
|
39
|
+
// Helper to update input state atomically
|
|
40
|
+
const updateInputState = (updates) => {
|
|
41
|
+
setInputState(prev => ({ ...prev, ...updates }));
|
|
42
|
+
};
|
|
43
|
+
// State for command palette
|
|
44
|
+
const [showPalette, setShowPalette] = useState(false);
|
|
45
|
+
const [paletteFilter, setPaletteFilter] = useState('');
|
|
46
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
47
|
+
// State for model menu
|
|
48
|
+
const [showModelMenu, setShowModelMenu] = useState(false);
|
|
49
|
+
const [confirmationMessage, setConfirmationMessage] = useState(null);
|
|
50
|
+
// State for config wizard
|
|
51
|
+
const [showConfigWizard, setShowConfigWizard] = useState(false);
|
|
52
|
+
const [currentSettings, setCurrentSettings] = useState(settings);
|
|
53
|
+
// State for token input
|
|
54
|
+
const [showTokenInput, setShowTokenInput] = useState(false);
|
|
55
|
+
// Get filtered commands based on paletteFilter
|
|
56
|
+
const filteredCommands = useMemo(() => {
|
|
57
|
+
if (!showPalette)
|
|
58
|
+
return [];
|
|
59
|
+
return filterCommands(paletteFilter);
|
|
60
|
+
}, [showPalette, paletteFilter]);
|
|
61
|
+
// Reset selected index when filtered commands change
|
|
62
|
+
useMemo(() => {
|
|
63
|
+
if (selectedIndex >= filteredCommands.length) {
|
|
64
|
+
setSelectedIndex(Math.max(0, filteredCommands.length - 1));
|
|
65
|
+
}
|
|
66
|
+
}, [filteredCommands.length, selectedIndex]);
|
|
67
|
+
// Clear confirmation message after a delay
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
if (confirmationMessage) {
|
|
70
|
+
const timer = setTimeout(() => {
|
|
71
|
+
setConfirmationMessage(null);
|
|
72
|
+
}, 2000);
|
|
73
|
+
return () => clearTimeout(timer);
|
|
74
|
+
}
|
|
75
|
+
}, [confirmationMessage]);
|
|
76
|
+
// Sync settings prop with local state
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
if (settings) {
|
|
79
|
+
setCurrentSettings(settings);
|
|
80
|
+
}
|
|
81
|
+
}, [settings]);
|
|
82
|
+
// Config wizard callbacks
|
|
83
|
+
const closeConfigWizard = useCallback(() => {
|
|
84
|
+
setShowConfigWizard(false);
|
|
85
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
86
|
+
}, []);
|
|
87
|
+
const handleConfigComplete = useCallback((newSettings) => {
|
|
88
|
+
// Save the settings
|
|
89
|
+
saveSettings(newSettings);
|
|
90
|
+
setCurrentSettings(newSettings);
|
|
91
|
+
setConfirmationMessage(`Configuration saved for ${newSettings.provider}`);
|
|
92
|
+
closeConfigWizard();
|
|
93
|
+
// Trigger reconnect by submitting a special token
|
|
94
|
+
setTimeout(() => {
|
|
95
|
+
onSubmit('__CONFIG_SAVED__');
|
|
96
|
+
}, 100);
|
|
97
|
+
}, [closeConfigWizard, onSubmit]);
|
|
98
|
+
const handleConfigCancel = useCallback(() => {
|
|
99
|
+
setConfirmationMessage('Configuration cancelled');
|
|
100
|
+
closeConfigWizard();
|
|
101
|
+
}, [closeConfigWizard]);
|
|
102
|
+
// Token input callbacks
|
|
103
|
+
const closeTokenInput = useCallback(() => {
|
|
104
|
+
setShowTokenInput(false);
|
|
105
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
106
|
+
}, []);
|
|
107
|
+
const handleTokenSubmit = useCallback((token) => {
|
|
108
|
+
closeTokenInput();
|
|
109
|
+
// Submit with special prefix for index.ts to handle
|
|
110
|
+
onSubmit(`__TOKEN__:${token}`);
|
|
111
|
+
}, [closeTokenInput, onSubmit]);
|
|
112
|
+
const handleTokenCancel = useCallback(() => {
|
|
113
|
+
setConfirmationMessage('Token entry cancelled');
|
|
114
|
+
closeTokenInput();
|
|
115
|
+
}, [closeTokenInput]);
|
|
116
|
+
const handleSubmit = useCallback(() => {
|
|
117
|
+
const result = lines.join('\n').trim();
|
|
118
|
+
// Reset history navigation state
|
|
119
|
+
setHistoryIndex(-1);
|
|
120
|
+
setSavedInput('');
|
|
121
|
+
onSubmit(result);
|
|
122
|
+
}, [lines, onSubmit]);
|
|
123
|
+
const closePalette = useCallback(() => {
|
|
124
|
+
setShowPalette(false);
|
|
125
|
+
setPaletteFilter('');
|
|
126
|
+
setSelectedIndex(0);
|
|
127
|
+
}, []);
|
|
128
|
+
// Model menu callbacks
|
|
129
|
+
const closeModelMenu = useCallback(() => {
|
|
130
|
+
setShowModelMenu(false);
|
|
131
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
132
|
+
}, []);
|
|
133
|
+
const handleModelSelect = useCallback((provider, modelId) => {
|
|
134
|
+
if (!currentSettings) {
|
|
135
|
+
closeModelMenu();
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
// Update the provider
|
|
139
|
+
currentSettings.provider = provider;
|
|
140
|
+
// Update the model in settings based on provider
|
|
141
|
+
if (provider === Provider.ANTHROPIC || provider === 'anthropic') {
|
|
142
|
+
currentSettings.anthropic.model = modelId;
|
|
143
|
+
}
|
|
144
|
+
else if (provider === Provider.OPENAI || provider === 'openai') {
|
|
145
|
+
currentSettings.openai.model = modelId;
|
|
146
|
+
}
|
|
147
|
+
else if (provider === Provider.AZURE || provider === 'azure') {
|
|
148
|
+
currentSettings.azure.deployment = modelId;
|
|
149
|
+
}
|
|
150
|
+
// Save the updated settings
|
|
151
|
+
saveSettings(currentSettings);
|
|
152
|
+
// Format confirmation message with provider and model
|
|
153
|
+
const providerName = provider.charAt(0).toUpperCase() + provider.slice(1);
|
|
154
|
+
setConfirmationMessage(`Provider changed to ${providerName}, model: ${modelId}`);
|
|
155
|
+
closeModelMenu();
|
|
156
|
+
// Trigger reconnect to use the new provider/model
|
|
157
|
+
setTimeout(() => {
|
|
158
|
+
onSubmit('__CONFIG_SAVED__');
|
|
159
|
+
}, 100);
|
|
160
|
+
}, [currentSettings, closeModelMenu, onSubmit]);
|
|
161
|
+
const handleModelCancel = useCallback(() => {
|
|
162
|
+
setConfirmationMessage('Model selection cancelled');
|
|
163
|
+
closeModelMenu();
|
|
164
|
+
}, [closeModelMenu]);
|
|
165
|
+
useInput((input, key) => {
|
|
166
|
+
// Ctrl+C to exit
|
|
167
|
+
if (input === 'c' && key.ctrl) {
|
|
168
|
+
exit();
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
// Config wizard handles its own input
|
|
172
|
+
if (showConfigWizard) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
// Token input handles its own input
|
|
176
|
+
if (showTokenInput) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// Model menu handles its own input
|
|
180
|
+
if (showModelMenu) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
// Handle command palette navigation when it's open
|
|
184
|
+
if (showPalette) {
|
|
185
|
+
// Escape to close palette
|
|
186
|
+
if (key.escape) {
|
|
187
|
+
closePalette();
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
// Arrow Up: navigate up in palette
|
|
191
|
+
if (key.upArrow) {
|
|
192
|
+
setSelectedIndex(prev => (prev > 0 ? prev - 1 : filteredCommands.length - 1));
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
// Arrow Down: navigate down in palette
|
|
196
|
+
if (key.downArrow) {
|
|
197
|
+
setSelectedIndex(prev => (prev < filteredCommands.length - 1 ? prev + 1 : 0));
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
// Tab: autocomplete with the highlighted command (keep palette open)
|
|
201
|
+
if (key.tab) {
|
|
202
|
+
if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
|
|
203
|
+
const selectedCommand = filteredCommands[selectedIndex].name;
|
|
204
|
+
// Update the input line with the full command and cursor position atomically
|
|
205
|
+
setInputState(prev => {
|
|
206
|
+
const newLines = [...prev.lines];
|
|
207
|
+
newLines[prev.currentLine] = selectedCommand;
|
|
208
|
+
return { ...prev, lines: newLines, cursorPos: selectedCommand.length };
|
|
209
|
+
});
|
|
210
|
+
// Reset filter to match the full command (minus the leading "/")
|
|
211
|
+
setPaletteFilter(selectedCommand.slice(1));
|
|
212
|
+
// Reset selected index
|
|
213
|
+
setSelectedIndex(0);
|
|
214
|
+
// Keep palette open - don't close it
|
|
215
|
+
}
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
// Enter: select the highlighted command or submit full input
|
|
219
|
+
if (key.return) {
|
|
220
|
+
if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
|
|
221
|
+
const selectedCommand = filteredCommands[selectedIndex].name;
|
|
222
|
+
// Special handling for /config command
|
|
223
|
+
if (selectedCommand === '/config' && currentSettings) {
|
|
224
|
+
closePalette();
|
|
225
|
+
setShowConfigWizard(true);
|
|
226
|
+
// Clear the input since we're handling it inline
|
|
227
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
// Special handling for /token command
|
|
231
|
+
if (selectedCommand === '/token') {
|
|
232
|
+
closePalette();
|
|
233
|
+
setShowTokenInput(true);
|
|
234
|
+
// Clear the input since we're handling it inline
|
|
235
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
// Special handling for /model command
|
|
239
|
+
if (selectedCommand === '/model' && currentSettings) {
|
|
240
|
+
closePalette();
|
|
241
|
+
setShowModelMenu(true);
|
|
242
|
+
// Clear the input since we're handling it inline
|
|
243
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
// Set the command in input and submit immediately
|
|
247
|
+
setInputState(prev => {
|
|
248
|
+
const newLines = [...prev.lines];
|
|
249
|
+
newLines[prev.currentLine] = selectedCommand;
|
|
250
|
+
return { ...prev, lines: newLines };
|
|
251
|
+
});
|
|
252
|
+
// Submit with the selected command
|
|
253
|
+
onSubmit(selectedCommand);
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
// No matching commands - submit the full input as-is (for commands with arguments)
|
|
257
|
+
const fullInput = '/' + paletteFilter;
|
|
258
|
+
closePalette();
|
|
259
|
+
onSubmit(fullInput);
|
|
260
|
+
}
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
// Backspace: remove from filter or close palette
|
|
264
|
+
if (key.backspace || key.delete) {
|
|
265
|
+
if (paletteFilter.length > 0) {
|
|
266
|
+
// Remove last character from filter
|
|
267
|
+
const newFilter = paletteFilter.slice(0, -1);
|
|
268
|
+
setPaletteFilter(newFilter);
|
|
269
|
+
setSelectedIndex(0);
|
|
270
|
+
// Update the input line and cursor atomically
|
|
271
|
+
setInputState(prev => {
|
|
272
|
+
const newLines = [...prev.lines];
|
|
273
|
+
newLines[prev.currentLine] = '/' + newFilter;
|
|
274
|
+
return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Filter is empty, delete the "/" and close palette
|
|
279
|
+
setInputState(prev => {
|
|
280
|
+
const newLines = [...prev.lines];
|
|
281
|
+
const line = newLines[prev.currentLine];
|
|
282
|
+
if (line.startsWith('/')) {
|
|
283
|
+
newLines[prev.currentLine] = line.slice(1);
|
|
284
|
+
}
|
|
285
|
+
return { ...prev, lines: newLines, cursorPos: Math.max(0, prev.cursorPos - 1) };
|
|
286
|
+
});
|
|
287
|
+
closePalette();
|
|
288
|
+
}
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// Regular character input: add to filter
|
|
292
|
+
if (input && !key.ctrl && !key.meta) {
|
|
293
|
+
const newFilter = paletteFilter + input;
|
|
294
|
+
setPaletteFilter(newFilter);
|
|
295
|
+
setSelectedIndex(0);
|
|
296
|
+
// Update the input line and cursor atomically
|
|
297
|
+
setInputState(prev => {
|
|
298
|
+
const newLines = [...prev.lines];
|
|
299
|
+
newLines[prev.currentLine] = '/' + newFilter;
|
|
300
|
+
return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
|
|
301
|
+
});
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
// Normal input handling when palette is closed
|
|
307
|
+
// Ctrl+J for new line
|
|
308
|
+
if (input === 'j' && key.ctrl) {
|
|
309
|
+
setInputState(prev => {
|
|
310
|
+
const newLines = [...prev.lines];
|
|
311
|
+
// Split current line at cursor position
|
|
312
|
+
const currentLineContent = newLines[prev.currentLine];
|
|
313
|
+
const beforeCursor = currentLineContent.slice(0, prev.cursorPos);
|
|
314
|
+
const afterCursor = currentLineContent.slice(prev.cursorPos);
|
|
315
|
+
newLines[prev.currentLine] = beforeCursor;
|
|
316
|
+
newLines.splice(prev.currentLine + 1, 0, afterCursor);
|
|
317
|
+
return { lines: newLines, currentLine: prev.currentLine + 1, cursorPos: 0 };
|
|
318
|
+
});
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
// Enter to submit
|
|
322
|
+
if (key.return) {
|
|
323
|
+
handleSubmit();
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
// Arrow Up - navigate lines or history
|
|
327
|
+
if (key.upArrow) {
|
|
328
|
+
// If on first line, navigate history backward
|
|
329
|
+
if (currentLine === 0 && history.length > 0) {
|
|
330
|
+
const nextIndex = historyIndex + 1;
|
|
331
|
+
if (nextIndex < history.length) {
|
|
332
|
+
// Save current input when first starting to navigate
|
|
333
|
+
if (historyIndex === -1) {
|
|
334
|
+
setSavedInput(lines.join('\n'));
|
|
335
|
+
}
|
|
336
|
+
setHistoryIndex(nextIndex);
|
|
337
|
+
// History is stored newest first, so index 0 = most recent
|
|
338
|
+
const historyItem = history[nextIndex];
|
|
339
|
+
const historyLines = historyItem.split('\n');
|
|
340
|
+
setInputState({
|
|
341
|
+
lines: historyLines,
|
|
342
|
+
currentLine: 0,
|
|
343
|
+
cursorPos: historyLines[0].length,
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
// Otherwise navigate between lines
|
|
349
|
+
setInputState(prev => {
|
|
350
|
+
if (prev.currentLine > 0) {
|
|
351
|
+
const newLine = prev.currentLine - 1;
|
|
352
|
+
return {
|
|
353
|
+
...prev,
|
|
354
|
+
currentLine: newLine,
|
|
355
|
+
cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
return prev;
|
|
359
|
+
});
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
// Arrow Down - navigate lines or history
|
|
363
|
+
if (key.downArrow) {
|
|
364
|
+
// If navigating history, move forward (toward more recent)
|
|
365
|
+
if (historyIndex >= 0) {
|
|
366
|
+
const nextIndex = historyIndex - 1;
|
|
367
|
+
if (nextIndex >= 0) {
|
|
368
|
+
// Still in history
|
|
369
|
+
setHistoryIndex(nextIndex);
|
|
370
|
+
const historyItem = history[nextIndex];
|
|
371
|
+
const historyLines = historyItem.split('\n');
|
|
372
|
+
setInputState({
|
|
373
|
+
lines: historyLines,
|
|
374
|
+
currentLine: 0,
|
|
375
|
+
cursorPos: historyLines[0].length,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
// Reached end of history, restore saved input
|
|
380
|
+
setHistoryIndex(-1);
|
|
381
|
+
const restoredLines = savedInput ? savedInput.split('\n') : [''];
|
|
382
|
+
setInputState({
|
|
383
|
+
lines: restoredLines,
|
|
384
|
+
currentLine: 0,
|
|
385
|
+
cursorPos: restoredLines[0].length,
|
|
386
|
+
});
|
|
387
|
+
setSavedInput('');
|
|
388
|
+
}
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
// Otherwise navigate between lines
|
|
392
|
+
setInputState(prev => {
|
|
393
|
+
if (prev.currentLine < prev.lines.length - 1) {
|
|
394
|
+
const newLine = prev.currentLine + 1;
|
|
395
|
+
return {
|
|
396
|
+
...prev,
|
|
397
|
+
currentLine: newLine,
|
|
398
|
+
cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
return prev;
|
|
402
|
+
});
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
// Arrow Left
|
|
406
|
+
if (key.leftArrow) {
|
|
407
|
+
setInputState(prev => {
|
|
408
|
+
if (prev.cursorPos > 0) {
|
|
409
|
+
return { ...prev, cursorPos: prev.cursorPos - 1 };
|
|
410
|
+
}
|
|
411
|
+
else if (prev.currentLine > 0) {
|
|
412
|
+
// Move to end of previous line
|
|
413
|
+
const newLine = prev.currentLine - 1;
|
|
414
|
+
return { ...prev, currentLine: newLine, cursorPos: prev.lines[newLine].length };
|
|
415
|
+
}
|
|
416
|
+
return prev;
|
|
417
|
+
});
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
// Arrow Right
|
|
421
|
+
if (key.rightArrow) {
|
|
422
|
+
setInputState(prev => {
|
|
423
|
+
if (prev.cursorPos < prev.lines[prev.currentLine].length) {
|
|
424
|
+
return { ...prev, cursorPos: prev.cursorPos + 1 };
|
|
425
|
+
}
|
|
426
|
+
else if (prev.currentLine < prev.lines.length - 1) {
|
|
427
|
+
// Move to start of next line
|
|
428
|
+
return { ...prev, currentLine: prev.currentLine + 1, cursorPos: 0 };
|
|
429
|
+
}
|
|
430
|
+
return prev;
|
|
431
|
+
});
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
// Alt+Backspace: delete word before cursor
|
|
435
|
+
if (key.meta && (key.backspace || key.delete)) {
|
|
436
|
+
setInputState(prev => {
|
|
437
|
+
if (prev.cursorPos === 0)
|
|
438
|
+
return prev;
|
|
439
|
+
const line = prev.lines[prev.currentLine];
|
|
440
|
+
let pos = prev.cursorPos;
|
|
441
|
+
// Skip any whitespace immediately before cursor
|
|
442
|
+
while (pos > 0 && /\s/.test(line[pos - 1])) {
|
|
443
|
+
pos--;
|
|
444
|
+
}
|
|
445
|
+
// Delete back to the previous whitespace or start of line
|
|
446
|
+
while (pos > 0 && !/\s/.test(line[pos - 1])) {
|
|
447
|
+
pos--;
|
|
448
|
+
}
|
|
449
|
+
const newLines = [...prev.lines];
|
|
450
|
+
newLines[prev.currentLine] = line.slice(0, pos) + line.slice(prev.cursorPos);
|
|
451
|
+
return { ...prev, lines: newLines, cursorPos: pos };
|
|
452
|
+
});
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
// Backspace
|
|
456
|
+
if (key.backspace || key.delete) {
|
|
457
|
+
setInputState(prev => {
|
|
458
|
+
if (prev.cursorPos > 0) {
|
|
459
|
+
// Delete character before cursor
|
|
460
|
+
const newLines = [...prev.lines];
|
|
461
|
+
const line = newLines[prev.currentLine];
|
|
462
|
+
newLines[prev.currentLine] = line.slice(0, prev.cursorPos - 1) + line.slice(prev.cursorPos);
|
|
463
|
+
return { ...prev, lines: newLines, cursorPos: prev.cursorPos - 1 };
|
|
464
|
+
}
|
|
465
|
+
else if (prev.currentLine > 0) {
|
|
466
|
+
// Merge with previous line
|
|
467
|
+
const prevLineLen = prev.lines[prev.currentLine - 1].length;
|
|
468
|
+
const newLines = [...prev.lines];
|
|
469
|
+
newLines[prev.currentLine - 1] += newLines[prev.currentLine];
|
|
470
|
+
newLines.splice(prev.currentLine, 1);
|
|
471
|
+
return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: prevLineLen };
|
|
472
|
+
}
|
|
473
|
+
return prev;
|
|
474
|
+
});
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
// Home key (Ctrl+A in some terminals)
|
|
478
|
+
if (input === 'a' && key.ctrl) {
|
|
479
|
+
updateInputState({ cursorPos: 0 });
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
// End key (Ctrl+E in some terminals)
|
|
483
|
+
if (input === 'e' && key.ctrl) {
|
|
484
|
+
setInputState(prev => ({ ...prev, cursorPos: prev.lines[prev.currentLine].length }));
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
// Regular character input (including multi-character paste)
|
|
488
|
+
if (input && !key.ctrl && !key.meta) {
|
|
489
|
+
// Check if "/" is typed at the beginning of an empty line or at cursor position 0
|
|
490
|
+
if (input === '/' && (inputState.lines[inputState.currentLine] === '' || inputState.cursorPos === 0)) {
|
|
491
|
+
setShowPalette(true);
|
|
492
|
+
setPaletteFilter('');
|
|
493
|
+
setSelectedIndex(0);
|
|
494
|
+
}
|
|
495
|
+
setInputState(prev => {
|
|
496
|
+
const newLines = [...prev.lines];
|
|
497
|
+
const line = newLines[prev.currentLine];
|
|
498
|
+
newLines[prev.currentLine] = line.slice(0, prev.cursorPos) + input + line.slice(prev.cursorPos);
|
|
499
|
+
return {
|
|
500
|
+
...prev,
|
|
501
|
+
lines: newLines,
|
|
502
|
+
cursorPos: prev.cursorPos + input.length
|
|
503
|
+
};
|
|
504
|
+
});
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
});
|
|
508
|
+
// Render lines with cursor indicator
|
|
509
|
+
const renderLines = () => {
|
|
510
|
+
const maxDisplayLines = 5;
|
|
511
|
+
const displayLines = lines.slice(0, maxDisplayLines);
|
|
512
|
+
return displayLines.map((line, index) => {
|
|
513
|
+
const isCurrentLine = index === currentLine;
|
|
514
|
+
if (isCurrentLine) {
|
|
515
|
+
// Show cursor in current line
|
|
516
|
+
// Use sibling Text components instead of nesting to avoid Ink layout bugs
|
|
517
|
+
const beforeCursor = line.slice(0, cursorPos);
|
|
518
|
+
const cursorChar = line[cursorPos] || ' ';
|
|
519
|
+
const afterCursor = line.slice(cursorPos + 1);
|
|
520
|
+
return (_jsxs(Box, { children: [_jsx(Text, { children: beforeCursor }), _jsx(Text, { inverse: true, children: cursorChar }), _jsx(Text, { children: afterCursor })] }, index));
|
|
521
|
+
}
|
|
522
|
+
return (_jsx(Box, { children: _jsx(Text, { children: line || ' ' }) }, index));
|
|
523
|
+
});
|
|
524
|
+
};
|
|
525
|
+
// Calculate minimum height (at least 1 line)
|
|
526
|
+
const minHeight = Math.max(1, Math.min(lines.length, 5));
|
|
527
|
+
return (_jsxs(Box, { flexDirection: "column", children: [confirmationMessage && (_jsx(Box, { marginBottom: 0, children: _jsx(Text, { color: "green", children: confirmationMessage }) })), _jsx(Text, { dimColor: true, children: "(Enter to send, Ctrl+J for new line, \"/\" for commands, Up/Down for history)" }), _jsxs(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, flexDirection: "column", minHeight: minHeight + 2, children: [_jsx(Box, { marginTop: -1, marginLeft: -1, children: _jsxs(Text, { color: "gray", children: [" ", label, " "] }) }), _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 }), lines.length > 1 && !showPalette && !showModelMenu && !showConfigWizard && !showTokenInput && (_jsxs(Text, { dimColor: true, children: ["Line ", currentLine + 1, "/", lines.length] }))] }));
|
|
528
|
+
}
|
|
529
|
+
//# sourceMappingURL=InputModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputModal.js","sourceRoot":"","sources":["../../src/components/InputModal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Settings } from '../settings.js';
|
|
3
|
+
export interface ModelInfo {
|
|
4
|
+
id: string;
|
|
5
|
+
description: string;
|
|
6
|
+
isCurrent: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface ModelMenuProps {
|
|
9
|
+
isOpen: boolean;
|
|
10
|
+
settings: Settings;
|
|
11
|
+
onSelect: (provider: string, modelId: string) => void;
|
|
12
|
+
onCancel: () => void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* ModelMenu - Two-step inline model selection menu.
|
|
16
|
+
*
|
|
17
|
+
* Step 1: Select provider (Anthropic, OpenAI, Azure)
|
|
18
|
+
* Step 2: Select model for that provider
|
|
19
|
+
*
|
|
20
|
+
* For Azure: Step 2 shows a text input for deployment name.
|
|
21
|
+
*/
|
|
22
|
+
export declare function ModelMenu({ isOpen, settings, onSelect, onCancel, }: ModelMenuProps): React.ReactElement | null;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=ModelMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelMenu.d.ts","sourceRoot":"","sources":["../../src/components/ModelMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAY,MAAM,gBAAgB,CAAC;AAIpD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAeD,UAAU,cAAc;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAkT5C"}
|