@syntero/orca-cli 1.3.2 → 1.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assistant/anthropic.js +1 -1
- package/dist/assistant/anthropic.js.map +1 -1
- package/dist/assistant/helpers.js +1 -1
- package/dist/assistant/helpers.js.map +1 -1
- package/dist/assistant/openai.js +1 -1
- package/dist/assistant/openai.js.map +1 -1
- package/dist/assistant/prompts.d.ts.map +1 -1
- package/dist/assistant/prompts.js +63 -34
- package/dist/assistant/prompts.js.map +1 -1
- package/dist/assistant/types.d.ts +1 -1
- package/dist/assistant/types.d.ts.map +1 -1
- package/dist/components/ChatApp.d.ts.map +1 -1
- package/dist/components/ChatApp.js +8 -6
- package/dist/components/ChatApp.js.map +1 -1
- package/dist/components/InputFooter.d.ts.map +1 -1
- package/dist/components/InputFooter.js +34 -695
- package/dist/components/InputFooter.js.map +1 -1
- package/dist/components/ResumeMenu.d.ts.map +1 -1
- package/dist/components/ResumeMenu.js +24 -3
- package/dist/components/ResumeMenu.js.map +1 -1
- package/dist/components/hooks/useCommandPalette.d.ts +13 -0
- package/dist/components/hooks/useCommandPalette.d.ts.map +1 -0
- package/dist/components/hooks/useCommandPalette.js +38 -0
- package/dist/components/hooks/useCommandPalette.js.map +1 -0
- package/dist/components/hooks/useInputKeyHandler.d.ts +14 -0
- package/dist/components/hooks/useInputKeyHandler.d.ts.map +1 -0
- package/dist/components/hooks/useInputKeyHandler.js +584 -0
- package/dist/components/hooks/useInputKeyHandler.js.map +1 -0
- package/dist/components/hooks/useInputLines.d.ts +18 -0
- package/dist/components/hooks/useInputLines.d.ts.map +1 -0
- package/dist/components/hooks/useInputLines.js +46 -0
- package/dist/components/hooks/useInputLines.js.map +1 -0
- package/dist/components/hooks/useMenus.d.ts +60 -0
- package/dist/components/hooks/useMenus.d.ts.map +1 -0
- package/dist/components/hooks/useMenus.js +266 -0
- package/dist/components/hooks/useMenus.js.map +1 -0
- package/dist/components/hooks/usePasteBlocks.d.ts +14 -0
- package/dist/components/hooks/usePasteBlocks.d.ts.map +1 -0
- package/dist/components/hooks/usePasteBlocks.js +32 -0
- package/dist/components/hooks/usePasteBlocks.js.map +1 -0
- package/dist/models.js +4 -4
- package/dist/settings.js +1 -1
- package/dist/tools/auth-tools.d.ts +26 -0
- package/dist/tools/auth-tools.d.ts.map +1 -0
- package/dist/tools/auth-tools.js +53 -0
- package/dist/tools/auth-tools.js.map +1 -0
- package/dist/tools/command.d.ts +28 -0
- package/dist/tools/command.d.ts.map +1 -0
- package/dist/tools/command.js +76 -0
- package/dist/tools/command.js.map +1 -0
- package/dist/tools/database.d.ts +19 -0
- package/dist/tools/database.d.ts.map +1 -0
- package/dist/tools/database.js +90 -0
- package/dist/tools/database.js.map +1 -0
- package/dist/tools/deployment.d.ts +195 -0
- package/dist/tools/deployment.d.ts.map +1 -0
- package/dist/tools/deployment.js +324 -0
- package/dist/tools/deployment.js.map +1 -0
- package/dist/tools/docker.d.ts +51 -0
- package/dist/tools/docker.d.ts.map +1 -0
- package/dist/tools/docker.js +68 -0
- package/dist/tools/docker.js.map +1 -0
- package/dist/tools/env.d.ts +18 -0
- package/dist/tools/env.d.ts.map +1 -0
- package/dist/tools/env.js +52 -0
- package/dist/tools/env.js.map +1 -0
- package/dist/tools/filesystem.d.ts +77 -0
- package/dist/tools/filesystem.d.ts.map +1 -0
- package/dist/tools/filesystem.js +138 -0
- package/dist/tools/filesystem.js.map +1 -0
- package/dist/tools/handler.d.ts +5 -0
- package/dist/tools/handler.d.ts.map +1 -0
- package/dist/tools/handler.js +62 -0
- package/dist/tools/handler.js.map +1 -0
- package/dist/tools/index.d.ts +614 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +40 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/inference.d.ts +127 -0
- package/dist/tools/inference.d.ts.map +1 -0
- package/dist/tools/inference.js +318 -0
- package/dist/tools/inference.js.map +1 -0
- package/dist/tools/shared.d.ts +21 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +75 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/types.d.ts +2 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +3 -0
- package/dist/tools/types.js.map +1 -0
- package/package.json +4 -4
- package/dist/tools.d.ts +0 -908
- package/dist/tools.d.ts.map +0 -1
- package/dist/tools.js +0 -774
- package/dist/tools.js.map +0 -1
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import { useInput, useApp } from 'ink';
|
|
3
|
+
import { listConversations } from '../../conversations/index.js';
|
|
4
|
+
import { isPasteMarker, parsePasteMarker, makePasteMarker } from './usePasteBlocks.js';
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Hook
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
export function useInputKeyHandler({ pasteBlocks, inputLines, commandPalette, menus, history, onSubmit, }) {
|
|
9
|
+
const { exit } = useApp();
|
|
10
|
+
const { pasteBlocksRef, pasteCounterRef, expandLines, clearPasteBlocks } = pasteBlocks;
|
|
11
|
+
const { inputState, setInputState, updateInputState, historyIndex, setHistoryIndex, savedInput, setSavedInput, handleSubmit, } = inputLines;
|
|
12
|
+
const { showPalette, setShowPalette, paletteFilter, setPaletteFilter, selectedIndex, setSelectedIndex, filteredCommands, closePalette, } = commandPalette;
|
|
13
|
+
const { currentSettings, isAnyMenuOpen, setShowModelMenu, setShowStreamingMenu, setShowConfigWizard, setShowTokenInput, setShowSyncMenu, setShowUploadMenu, setShowResumeMenu, setResumeConversations, } = menus;
|
|
14
|
+
const { lines, currentLine, cursorPos } = inputState;
|
|
15
|
+
// Track last Escape press time for double-Escape-to-clear
|
|
16
|
+
const lastEscapeTime = useRef(0);
|
|
17
|
+
useInput((input, key) => {
|
|
18
|
+
// Ctrl+C to exit
|
|
19
|
+
if (input === 'c' && key.ctrl) {
|
|
20
|
+
exit();
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
// Config wizard handles its own input
|
|
24
|
+
// Token input handles its own input
|
|
25
|
+
// Model menu handles its own input
|
|
26
|
+
// Sync menu handles its own input
|
|
27
|
+
// Upload menu handles its own input
|
|
28
|
+
// Resume menu handles its own input
|
|
29
|
+
// Streaming menu handles its own input
|
|
30
|
+
if (isAnyMenuOpen) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
// NOTE: We no longer block input when streaming (isDisabled).
|
|
34
|
+
// Users can type, search history, and submit messages while streaming.
|
|
35
|
+
// The parent component handles queuing messages submitted during streaming.
|
|
36
|
+
// Double-Escape to clear input (when no palette/menu is open)
|
|
37
|
+
if (key.escape && !showPalette) {
|
|
38
|
+
const now = Date.now();
|
|
39
|
+
if (now - lastEscapeTime.current < 500) {
|
|
40
|
+
// Double Escape: clear the input
|
|
41
|
+
setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
|
|
42
|
+
setHistoryIndex(-1);
|
|
43
|
+
setSavedInput('');
|
|
44
|
+
clearPasteBlocks();
|
|
45
|
+
lastEscapeTime.current = 0;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
lastEscapeTime.current = now;
|
|
49
|
+
}
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// Handle command palette navigation when it's open
|
|
53
|
+
if (showPalette) {
|
|
54
|
+
// Escape to close palette
|
|
55
|
+
if (key.escape) {
|
|
56
|
+
closePalette();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Arrow Up: navigate up in palette
|
|
60
|
+
if (key.upArrow) {
|
|
61
|
+
setSelectedIndex(prev => (prev > 0 ? prev - 1 : filteredCommands.length - 1));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Arrow Down: navigate down in palette
|
|
65
|
+
if (key.downArrow) {
|
|
66
|
+
setSelectedIndex(prev => (prev < filteredCommands.length - 1 ? prev + 1 : 0));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Tab: autocomplete with the highlighted command (keep palette open)
|
|
70
|
+
if (key.tab) {
|
|
71
|
+
if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
|
|
72
|
+
const selectedCommand = filteredCommands[selectedIndex].name;
|
|
73
|
+
// Update the input line with the full command and cursor position atomically
|
|
74
|
+
setInputState(prev => {
|
|
75
|
+
const newLines = [...prev.lines];
|
|
76
|
+
newLines[prev.currentLine] = selectedCommand;
|
|
77
|
+
return { ...prev, lines: newLines, cursorPos: selectedCommand.length };
|
|
78
|
+
});
|
|
79
|
+
// Reset filter to match the full command (minus the leading "/")
|
|
80
|
+
setPaletteFilter(selectedCommand.slice(1));
|
|
81
|
+
// Reset selected index
|
|
82
|
+
setSelectedIndex(0);
|
|
83
|
+
// Keep palette open - don't close it
|
|
84
|
+
}
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
// Enter: select the highlighted command or submit full input
|
|
88
|
+
if (key.return) {
|
|
89
|
+
if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
|
|
90
|
+
const selectedCommand = filteredCommands[selectedIndex].name;
|
|
91
|
+
// Special handling for /config command
|
|
92
|
+
if (selectedCommand === '/config' && currentSettings) {
|
|
93
|
+
closePalette();
|
|
94
|
+
setShowConfigWizard(true);
|
|
95
|
+
// Clear the input since we're handling it inline
|
|
96
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// Special handling for /token command
|
|
100
|
+
if (selectedCommand === '/token') {
|
|
101
|
+
closePalette();
|
|
102
|
+
setShowTokenInput(true);
|
|
103
|
+
// Clear the input since we're handling it inline
|
|
104
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
// Special handling for /model command
|
|
108
|
+
if (selectedCommand === '/model' && currentSettings) {
|
|
109
|
+
closePalette();
|
|
110
|
+
setShowModelMenu(true);
|
|
111
|
+
// Clear the input since we're handling it inline
|
|
112
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// Special handling for /streaming command
|
|
116
|
+
if (selectedCommand === '/streaming' && currentSettings) {
|
|
117
|
+
closePalette();
|
|
118
|
+
setShowStreamingMenu(true);
|
|
119
|
+
// Clear the input since we're handling it inline
|
|
120
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
// Special handling for /sync command
|
|
124
|
+
if (selectedCommand === '/sync') {
|
|
125
|
+
closePalette();
|
|
126
|
+
setShowSyncMenu(true);
|
|
127
|
+
// Clear the input since we're handling it inline
|
|
128
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Special handling for /upload command
|
|
132
|
+
if (selectedCommand === '/upload') {
|
|
133
|
+
closePalette();
|
|
134
|
+
setShowUploadMenu(true);
|
|
135
|
+
// Clear the input since we're handling it inline
|
|
136
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// Special handling for /resume command
|
|
140
|
+
if (selectedCommand === '/resume') {
|
|
141
|
+
closePalette();
|
|
142
|
+
// Load conversations list before showing menu
|
|
143
|
+
setResumeConversations(listConversations());
|
|
144
|
+
setShowResumeMenu(true);
|
|
145
|
+
// Clear the input since we're handling it inline
|
|
146
|
+
updateInputState({ lines: [''], cursorPos: 0 });
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
// Set the command in input and submit immediately
|
|
150
|
+
closePalette();
|
|
151
|
+
setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
|
|
152
|
+
onSubmit(selectedCommand);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// No matching commands - submit the full input as-is (for commands with arguments)
|
|
156
|
+
const fullInput = '/' + paletteFilter;
|
|
157
|
+
closePalette();
|
|
158
|
+
setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
|
|
159
|
+
onSubmit(fullInput);
|
|
160
|
+
}
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// Backspace: remove from filter or close palette
|
|
164
|
+
if (key.backspace || key.delete) {
|
|
165
|
+
if (paletteFilter.length > 0) {
|
|
166
|
+
// Remove last character from filter
|
|
167
|
+
const newFilter = paletteFilter.slice(0, -1);
|
|
168
|
+
setPaletteFilter(newFilter);
|
|
169
|
+
setSelectedIndex(0);
|
|
170
|
+
// Update the input line and cursor atomically
|
|
171
|
+
setInputState(prev => {
|
|
172
|
+
const newLines = [...prev.lines];
|
|
173
|
+
newLines[prev.currentLine] = '/' + newFilter;
|
|
174
|
+
return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
// Filter is empty, delete the "/" and close palette
|
|
179
|
+
setInputState(prev => {
|
|
180
|
+
const newLines = [...prev.lines];
|
|
181
|
+
const line = newLines[prev.currentLine];
|
|
182
|
+
if (line.startsWith('/')) {
|
|
183
|
+
newLines[prev.currentLine] = line.slice(1);
|
|
184
|
+
}
|
|
185
|
+
return { ...prev, lines: newLines, cursorPos: Math.max(0, prev.cursorPos - 1) };
|
|
186
|
+
});
|
|
187
|
+
closePalette();
|
|
188
|
+
}
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// Regular character input: add to filter
|
|
192
|
+
if (input && !key.ctrl && !key.meta) {
|
|
193
|
+
const newFilter = paletteFilter + input;
|
|
194
|
+
setPaletteFilter(newFilter);
|
|
195
|
+
setSelectedIndex(0);
|
|
196
|
+
// Update the input line and cursor atomically
|
|
197
|
+
setInputState(prev => {
|
|
198
|
+
const newLines = [...prev.lines];
|
|
199
|
+
newLines[prev.currentLine] = '/' + newFilter;
|
|
200
|
+
return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
|
|
201
|
+
});
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
// Normal input handling when palette is closed
|
|
207
|
+
// Ctrl+J for new line
|
|
208
|
+
if (input === 'j' && key.ctrl) {
|
|
209
|
+
setInputState(prev => {
|
|
210
|
+
const newLines = [...prev.lines];
|
|
211
|
+
// Split current line at cursor position
|
|
212
|
+
const currentLineContent = newLines[prev.currentLine];
|
|
213
|
+
const beforeCursor = currentLineContent.slice(0, prev.cursorPos);
|
|
214
|
+
const afterCursor = currentLineContent.slice(prev.cursorPos);
|
|
215
|
+
newLines[prev.currentLine] = beforeCursor;
|
|
216
|
+
newLines.splice(prev.currentLine + 1, 0, afterCursor);
|
|
217
|
+
return { lines: newLines, currentLine: prev.currentLine + 1, cursorPos: 0 };
|
|
218
|
+
});
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
// Enter to submit
|
|
222
|
+
if (key.return) {
|
|
223
|
+
handleSubmit();
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
// Arrow Up - navigate lines or history
|
|
227
|
+
if (key.upArrow) {
|
|
228
|
+
// If on first line, navigate history backward
|
|
229
|
+
if (currentLine === 0 && history.length > 0) {
|
|
230
|
+
const nextIndex = historyIndex + 1;
|
|
231
|
+
if (nextIndex < history.length) {
|
|
232
|
+
// Save current input when first starting to navigate (expand paste markers)
|
|
233
|
+
if (historyIndex === -1) {
|
|
234
|
+
setSavedInput(expandLines(lines).join('\n'));
|
|
235
|
+
clearPasteBlocks();
|
|
236
|
+
}
|
|
237
|
+
setHistoryIndex(nextIndex);
|
|
238
|
+
// History is stored newest first, so index 0 = most recent
|
|
239
|
+
const historyItem = history[nextIndex];
|
|
240
|
+
const historyLines = historyItem.split('\n');
|
|
241
|
+
setInputState({
|
|
242
|
+
lines: historyLines,
|
|
243
|
+
currentLine: 0,
|
|
244
|
+
cursorPos: historyLines[0].length,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
// Otherwise navigate between lines (skip paste markers)
|
|
250
|
+
setInputState(prev => {
|
|
251
|
+
if (prev.currentLine > 0) {
|
|
252
|
+
let newLine = prev.currentLine - 1;
|
|
253
|
+
while (newLine > 0 && isPasteMarker(prev.lines[newLine]))
|
|
254
|
+
newLine--;
|
|
255
|
+
if (isPasteMarker(prev.lines[newLine]))
|
|
256
|
+
return prev;
|
|
257
|
+
return {
|
|
258
|
+
...prev,
|
|
259
|
+
currentLine: newLine,
|
|
260
|
+
cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
return prev;
|
|
264
|
+
});
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
// Arrow Down - navigate lines or history
|
|
268
|
+
if (key.downArrow) {
|
|
269
|
+
// If navigating history, move forward (toward more recent)
|
|
270
|
+
if (historyIndex >= 0) {
|
|
271
|
+
const nextIndex = historyIndex - 1;
|
|
272
|
+
if (nextIndex >= 0) {
|
|
273
|
+
// Still in history
|
|
274
|
+
setHistoryIndex(nextIndex);
|
|
275
|
+
const historyItem = history[nextIndex];
|
|
276
|
+
const historyLines = historyItem.split('\n');
|
|
277
|
+
setInputState({
|
|
278
|
+
lines: historyLines,
|
|
279
|
+
currentLine: 0,
|
|
280
|
+
cursorPos: historyLines[0].length,
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
// Reached end of history, restore saved input
|
|
285
|
+
setHistoryIndex(-1);
|
|
286
|
+
const restoredLines = savedInput ? savedInput.split('\n') : [''];
|
|
287
|
+
setInputState({
|
|
288
|
+
lines: restoredLines,
|
|
289
|
+
currentLine: 0,
|
|
290
|
+
cursorPos: restoredLines[0].length,
|
|
291
|
+
});
|
|
292
|
+
setSavedInput('');
|
|
293
|
+
}
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
// Otherwise navigate between lines (skip paste markers)
|
|
297
|
+
setInputState(prev => {
|
|
298
|
+
if (prev.currentLine < prev.lines.length - 1) {
|
|
299
|
+
let newLine = prev.currentLine + 1;
|
|
300
|
+
while (newLine < prev.lines.length - 1 && isPasteMarker(prev.lines[newLine]))
|
|
301
|
+
newLine++;
|
|
302
|
+
if (isPasteMarker(prev.lines[newLine]))
|
|
303
|
+
return prev;
|
|
304
|
+
return {
|
|
305
|
+
...prev,
|
|
306
|
+
currentLine: newLine,
|
|
307
|
+
cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
return prev;
|
|
311
|
+
});
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
// Ctrl/Alt+Left: move cursor one word left
|
|
315
|
+
if (key.leftArrow && (key.ctrl || key.meta)) {
|
|
316
|
+
setInputState(prev => {
|
|
317
|
+
const line = prev.lines[prev.currentLine];
|
|
318
|
+
let pos = prev.cursorPos;
|
|
319
|
+
if (pos === 0) {
|
|
320
|
+
// Wrap to end of previous line (skip paste markers)
|
|
321
|
+
if (prev.currentLine === 0)
|
|
322
|
+
return prev;
|
|
323
|
+
let newLine = prev.currentLine - 1;
|
|
324
|
+
while (newLine > 0 && isPasteMarker(prev.lines[newLine]))
|
|
325
|
+
newLine--;
|
|
326
|
+
if (isPasteMarker(prev.lines[newLine]))
|
|
327
|
+
return prev;
|
|
328
|
+
return { ...prev, currentLine: newLine, cursorPos: prev.lines[newLine].length };
|
|
329
|
+
}
|
|
330
|
+
// Skip whitespace backwards
|
|
331
|
+
while (pos > 0 && /\s/.test(line[pos - 1]))
|
|
332
|
+
pos--;
|
|
333
|
+
// Skip word characters backwards
|
|
334
|
+
while (pos > 0 && !/\s/.test(line[pos - 1]))
|
|
335
|
+
pos--;
|
|
336
|
+
return { ...prev, cursorPos: pos };
|
|
337
|
+
});
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
// Ctrl/Alt+Right: move cursor one word right
|
|
341
|
+
if (key.rightArrow && (key.ctrl || key.meta)) {
|
|
342
|
+
setInputState(prev => {
|
|
343
|
+
const line = prev.lines[prev.currentLine];
|
|
344
|
+
let pos = prev.cursorPos;
|
|
345
|
+
if (pos >= line.length) {
|
|
346
|
+
// Wrap to start of next line (skip paste markers)
|
|
347
|
+
if (prev.currentLine >= prev.lines.length - 1)
|
|
348
|
+
return prev;
|
|
349
|
+
let newLine = prev.currentLine + 1;
|
|
350
|
+
while (newLine < prev.lines.length - 1 && isPasteMarker(prev.lines[newLine]))
|
|
351
|
+
newLine++;
|
|
352
|
+
if (isPasteMarker(prev.lines[newLine]))
|
|
353
|
+
return prev;
|
|
354
|
+
return { ...prev, currentLine: newLine, cursorPos: 0 };
|
|
355
|
+
}
|
|
356
|
+
// Skip word characters forwards
|
|
357
|
+
while (pos < line.length && !/\s/.test(line[pos]))
|
|
358
|
+
pos++;
|
|
359
|
+
// Skip whitespace forwards
|
|
360
|
+
while (pos < line.length && /\s/.test(line[pos]))
|
|
361
|
+
pos++;
|
|
362
|
+
return { ...prev, cursorPos: pos };
|
|
363
|
+
});
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
// Arrow Left
|
|
367
|
+
if (key.leftArrow) {
|
|
368
|
+
setInputState(prev => {
|
|
369
|
+
if (prev.cursorPos > 0) {
|
|
370
|
+
return { ...prev, cursorPos: prev.cursorPos - 1 };
|
|
371
|
+
}
|
|
372
|
+
else if (prev.currentLine > 0) {
|
|
373
|
+
// Move to end of previous line (skip paste markers)
|
|
374
|
+
let newLine = prev.currentLine - 1;
|
|
375
|
+
while (newLine > 0 && isPasteMarker(prev.lines[newLine]))
|
|
376
|
+
newLine--;
|
|
377
|
+
if (isPasteMarker(prev.lines[newLine]))
|
|
378
|
+
return prev;
|
|
379
|
+
return { ...prev, currentLine: newLine, cursorPos: prev.lines[newLine].length };
|
|
380
|
+
}
|
|
381
|
+
return prev;
|
|
382
|
+
});
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
// Arrow Right
|
|
386
|
+
if (key.rightArrow) {
|
|
387
|
+
setInputState(prev => {
|
|
388
|
+
if (prev.cursorPos < prev.lines[prev.currentLine].length) {
|
|
389
|
+
return { ...prev, cursorPos: prev.cursorPos + 1 };
|
|
390
|
+
}
|
|
391
|
+
else if (prev.currentLine < prev.lines.length - 1) {
|
|
392
|
+
// Move to start of next line (skip paste markers)
|
|
393
|
+
let newLine = prev.currentLine + 1;
|
|
394
|
+
while (newLine < prev.lines.length - 1 && isPasteMarker(prev.lines[newLine]))
|
|
395
|
+
newLine++;
|
|
396
|
+
if (isPasteMarker(prev.lines[newLine]))
|
|
397
|
+
return prev;
|
|
398
|
+
return { ...prev, currentLine: newLine, cursorPos: 0 };
|
|
399
|
+
}
|
|
400
|
+
return prev;
|
|
401
|
+
});
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
// Alt+Backspace: delete word before cursor
|
|
405
|
+
if (key.meta && (key.backspace || key.delete)) {
|
|
406
|
+
setInputState(prev => {
|
|
407
|
+
// If on a paste marker, delete the whole block
|
|
408
|
+
if (isPasteMarker(prev.lines[prev.currentLine])) {
|
|
409
|
+
const marker = parsePasteMarker(prev.lines[prev.currentLine]);
|
|
410
|
+
if (marker)
|
|
411
|
+
pasteBlocksRef.current.delete(marker.id);
|
|
412
|
+
const newLines = [...prev.lines];
|
|
413
|
+
newLines.splice(prev.currentLine, 1);
|
|
414
|
+
if (newLines.length === 0)
|
|
415
|
+
newLines.push('');
|
|
416
|
+
const newCurrent = Math.min(prev.currentLine, newLines.length - 1);
|
|
417
|
+
return { lines: newLines, currentLine: newCurrent, cursorPos: 0 };
|
|
418
|
+
}
|
|
419
|
+
if (prev.cursorPos === 0) {
|
|
420
|
+
if (prev.currentLine === 0)
|
|
421
|
+
return prev;
|
|
422
|
+
// If previous line is a paste marker, delete it
|
|
423
|
+
if (isPasteMarker(prev.lines[prev.currentLine - 1])) {
|
|
424
|
+
const marker = parsePasteMarker(prev.lines[prev.currentLine - 1]);
|
|
425
|
+
if (marker)
|
|
426
|
+
pasteBlocksRef.current.delete(marker.id);
|
|
427
|
+
const newLines = [...prev.lines];
|
|
428
|
+
newLines.splice(prev.currentLine - 1, 1);
|
|
429
|
+
return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: 0 };
|
|
430
|
+
}
|
|
431
|
+
// Merge with previous line (wrap up)
|
|
432
|
+
const prevLineLen = prev.lines[prev.currentLine - 1].length;
|
|
433
|
+
const newLines = [...prev.lines];
|
|
434
|
+
newLines[prev.currentLine - 1] += newLines[prev.currentLine];
|
|
435
|
+
newLines.splice(prev.currentLine, 1);
|
|
436
|
+
return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: prevLineLen };
|
|
437
|
+
}
|
|
438
|
+
const line = prev.lines[prev.currentLine];
|
|
439
|
+
let pos = prev.cursorPos;
|
|
440
|
+
// Skip any whitespace immediately before cursor
|
|
441
|
+
while (pos > 0 && /\s/.test(line[pos - 1])) {
|
|
442
|
+
pos--;
|
|
443
|
+
}
|
|
444
|
+
// Delete back to the previous whitespace or start of line
|
|
445
|
+
while (pos > 0 && !/\s/.test(line[pos - 1])) {
|
|
446
|
+
pos--;
|
|
447
|
+
}
|
|
448
|
+
const newLines = [...prev.lines];
|
|
449
|
+
newLines[prev.currentLine] = line.slice(0, pos) + line.slice(prev.cursorPos);
|
|
450
|
+
return { ...prev, lines: newLines, cursorPos: pos };
|
|
451
|
+
});
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
// Backspace
|
|
455
|
+
if (key.backspace || key.delete) {
|
|
456
|
+
setInputState(prev => {
|
|
457
|
+
// If on a paste marker, delete the whole block
|
|
458
|
+
if (isPasteMarker(prev.lines[prev.currentLine])) {
|
|
459
|
+
const marker = parsePasteMarker(prev.lines[prev.currentLine]);
|
|
460
|
+
if (marker)
|
|
461
|
+
pasteBlocksRef.current.delete(marker.id);
|
|
462
|
+
const newLines = [...prev.lines];
|
|
463
|
+
newLines.splice(prev.currentLine, 1);
|
|
464
|
+
if (newLines.length === 0)
|
|
465
|
+
newLines.push('');
|
|
466
|
+
const newCurrent = Math.min(prev.currentLine, newLines.length - 1);
|
|
467
|
+
return { lines: newLines, currentLine: newCurrent, cursorPos: 0 };
|
|
468
|
+
}
|
|
469
|
+
if (prev.cursorPos > 0) {
|
|
470
|
+
// Delete character before cursor
|
|
471
|
+
const newLines = [...prev.lines];
|
|
472
|
+
const line = newLines[prev.currentLine];
|
|
473
|
+
newLines[prev.currentLine] = line.slice(0, prev.cursorPos - 1) + line.slice(prev.cursorPos);
|
|
474
|
+
return { ...prev, lines: newLines, cursorPos: prev.cursorPos - 1 };
|
|
475
|
+
}
|
|
476
|
+
else if (prev.currentLine > 0) {
|
|
477
|
+
// If previous line is a paste marker, delete it instead of merging
|
|
478
|
+
if (isPasteMarker(prev.lines[prev.currentLine - 1])) {
|
|
479
|
+
const marker = parsePasteMarker(prev.lines[prev.currentLine - 1]);
|
|
480
|
+
if (marker)
|
|
481
|
+
pasteBlocksRef.current.delete(marker.id);
|
|
482
|
+
const newLines = [...prev.lines];
|
|
483
|
+
newLines.splice(prev.currentLine - 1, 1);
|
|
484
|
+
return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: 0 };
|
|
485
|
+
}
|
|
486
|
+
// Merge with previous line
|
|
487
|
+
const prevLineLen = prev.lines[prev.currentLine - 1].length;
|
|
488
|
+
const newLines = [...prev.lines];
|
|
489
|
+
newLines[prev.currentLine - 1] += newLines[prev.currentLine];
|
|
490
|
+
newLines.splice(prev.currentLine, 1);
|
|
491
|
+
return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: prevLineLen };
|
|
492
|
+
}
|
|
493
|
+
return prev;
|
|
494
|
+
});
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
// Home key
|
|
498
|
+
if (key.home) {
|
|
499
|
+
updateInputState({ cursorPos: 0 });
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
// End key
|
|
503
|
+
if (key.end) {
|
|
504
|
+
setInputState(prev => ({ ...prev, cursorPos: prev.lines[prev.currentLine].length }));
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
// Regular character input (including multi-character paste)
|
|
508
|
+
if (input && !key.ctrl && !key.meta) {
|
|
509
|
+
// Normalize line endings: terminals send \r for newlines in raw mode
|
|
510
|
+
const normalizedInput = input.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
511
|
+
// Don't allow typing on a paste marker line
|
|
512
|
+
if (isPasteMarker(inputState.lines[inputState.currentLine]))
|
|
513
|
+
return;
|
|
514
|
+
// Multi-line paste: input contains newlines
|
|
515
|
+
if (normalizedInput.includes('\n')) {
|
|
516
|
+
const pastedLines = normalizedInput.split('\n');
|
|
517
|
+
if (pastedLines.length > 10) {
|
|
518
|
+
// Collapse large paste into a marker
|
|
519
|
+
pasteCounterRef.current++;
|
|
520
|
+
const pasteId = pasteCounterRef.current;
|
|
521
|
+
setInputState(prev => {
|
|
522
|
+
const newLines = [...prev.lines];
|
|
523
|
+
const line = newLines[prev.currentLine];
|
|
524
|
+
const beforeCursor = line.slice(0, prev.cursorPos);
|
|
525
|
+
const afterCursor = line.slice(prev.cursorPos);
|
|
526
|
+
// Merge surrounding text into the pasted content
|
|
527
|
+
const mergedPaste = [...pastedLines];
|
|
528
|
+
mergedPaste[0] = beforeCursor + mergedPaste[0];
|
|
529
|
+
mergedPaste[mergedPaste.length - 1] += afterCursor;
|
|
530
|
+
pasteBlocksRef.current.set(pasteId, mergedPaste);
|
|
531
|
+
const marker = makePasteMarker(pasteId, mergedPaste.length);
|
|
532
|
+
// Replace current line with marker + empty line for cursor
|
|
533
|
+
newLines.splice(prev.currentLine, 1, marker, '');
|
|
534
|
+
return {
|
|
535
|
+
lines: newLines,
|
|
536
|
+
currentLine: prev.currentLine + 1,
|
|
537
|
+
cursorPos: 0,
|
|
538
|
+
};
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
else {
|
|
542
|
+
// Normal multi-line paste (<=10 lines) - split properly
|
|
543
|
+
setInputState(prev => {
|
|
544
|
+
const newLines = [...prev.lines];
|
|
545
|
+
const line = newLines[prev.currentLine];
|
|
546
|
+
const beforeCursor = line.slice(0, prev.cursorPos);
|
|
547
|
+
const afterCursor = line.slice(prev.cursorPos);
|
|
548
|
+
const merged = [...pastedLines];
|
|
549
|
+
merged[0] = beforeCursor + merged[0];
|
|
550
|
+
merged[merged.length - 1] += afterCursor;
|
|
551
|
+
newLines.splice(prev.currentLine, 1, ...merged);
|
|
552
|
+
const lastLine = merged[merged.length - 1];
|
|
553
|
+
const newCursorPos = lastLine.length - afterCursor.length;
|
|
554
|
+
return {
|
|
555
|
+
lines: newLines,
|
|
556
|
+
currentLine: prev.currentLine + merged.length - 1,
|
|
557
|
+
cursorPos: newCursorPos,
|
|
558
|
+
};
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
563
|
+
// Single character / single-line paste
|
|
564
|
+
// Check if "/" is typed at the beginning of an empty line or at cursor position 0
|
|
565
|
+
if (normalizedInput === '/' && (inputState.lines[inputState.currentLine] === '' || inputState.cursorPos === 0)) {
|
|
566
|
+
setShowPalette(true);
|
|
567
|
+
setPaletteFilter('');
|
|
568
|
+
setSelectedIndex(0);
|
|
569
|
+
}
|
|
570
|
+
setInputState(prev => {
|
|
571
|
+
const newLines = [...prev.lines];
|
|
572
|
+
const line = newLines[prev.currentLine];
|
|
573
|
+
newLines[prev.currentLine] = line.slice(0, prev.cursorPos) + normalizedInput + line.slice(prev.cursorPos);
|
|
574
|
+
return {
|
|
575
|
+
...prev,
|
|
576
|
+
lines: newLines,
|
|
577
|
+
cursorPos: prev.cursorPos + normalizedInput.length
|
|
578
|
+
};
|
|
579
|
+
});
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
//# sourceMappingURL=useInputKeyHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInputKeyHandler.js","sourceRoot":"","sources":["../../../src/components/hooks/useInputKeyHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { UsePasteBlocksReturn } from './usePasteBlocks.js';
|
|
2
|
+
export interface InputState {
|
|
3
|
+
lines: string[];
|
|
4
|
+
currentLine: number;
|
|
5
|
+
cursorPos: number;
|
|
6
|
+
}
|
|
7
|
+
export interface UseInputLinesReturn {
|
|
8
|
+
inputState: InputState;
|
|
9
|
+
setInputState: React.Dispatch<React.SetStateAction<InputState>>;
|
|
10
|
+
updateInputState: (updates: Partial<InputState>) => void;
|
|
11
|
+
historyIndex: number;
|
|
12
|
+
setHistoryIndex: React.Dispatch<React.SetStateAction<number>>;
|
|
13
|
+
savedInput: string;
|
|
14
|
+
setSavedInput: React.Dispatch<React.SetStateAction<string>>;
|
|
15
|
+
handleSubmit: () => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function useInputLines(onSubmit: (value: string) => void, pasteBlocks: UsePasteBlocksReturn): UseInputLinesReturn;
|
|
18
|
+
//# sourceMappingURL=useInputLines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInputLines.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useInputLines.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAMhE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAChE,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAMD,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,WAAW,EAAE,oBAAoB,GAChC,mBAAmB,CA6CrB"}
|