wave-code 0.0.4 → 0.0.5
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/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +69 -95
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +2 -1
- package/dist/components/SubagentBlock.d.ts +1 -1
- package/dist/components/SubagentBlock.d.ts.map +1 -1
- package/dist/components/SubagentBlock.js +12 -2
- package/dist/components/ToolResultDisplay.js +1 -1
- package/dist/contexts/useChat.d.ts +2 -1
- package/dist/contexts/useChat.d.ts.map +1 -1
- package/dist/contexts/useChat.js +18 -0
- package/dist/hooks/useInputManager.d.ts +91 -0
- package/dist/hooks/useInputManager.d.ts.map +1 -0
- package/dist/hooks/useInputManager.js +319 -0
- package/dist/index.js +9 -9
- package/dist/managers/InputManager.d.ts +169 -0
- package/dist/managers/InputManager.d.ts.map +1 -0
- package/dist/managers/InputManager.js +806 -0
- package/dist/print-cli.d.ts +7 -0
- package/dist/print-cli.d.ts.map +1 -0
- package/dist/{plain-cli.js → print-cli.js} +21 -2
- package/dist/utils/constants.d.ts +1 -1
- package/dist/utils/constants.js +1 -1
- package/dist/utils/fileSearch.d.ts +20 -0
- package/dist/utils/fileSearch.d.ts.map +1 -0
- package/dist/utils/fileSearch.js +102 -0
- package/dist/utils/logger.js +3 -3
- package/dist/utils/usageSummary.d.ts +27 -0
- package/dist/utils/usageSummary.d.ts.map +1 -0
- package/dist/utils/usageSummary.js +82 -0
- package/package.json +2 -2
- package/src/components/InputBox.tsx +114 -153
- package/src/components/MessageList.tsx +14 -10
- package/src/components/SubagentBlock.tsx +14 -3
- package/src/components/ToolResultDisplay.tsx +1 -1
- package/src/contexts/useChat.tsx +23 -0
- package/src/hooks/useInputManager.ts +443 -0
- package/src/index.ts +9 -9
- package/src/managers/InputManager.ts +1102 -0
- package/src/{plain-cli.ts → print-cli.ts} +21 -3
- package/src/utils/constants.ts +1 -1
- package/src/utils/fileSearch.ts +133 -0
- package/src/utils/logger.ts +3 -3
- package/src/utils/usageSummary.ts +125 -0
- package/dist/hooks/useBashHistorySelector.d.ts +0 -15
- package/dist/hooks/useBashHistorySelector.d.ts.map +0 -1
- package/dist/hooks/useBashHistorySelector.js +0 -61
- package/dist/hooks/useCommandSelector.d.ts +0 -24
- package/dist/hooks/useCommandSelector.d.ts.map +0 -1
- package/dist/hooks/useCommandSelector.js +0 -98
- package/dist/hooks/useFileSelector.d.ts +0 -16
- package/dist/hooks/useFileSelector.d.ts.map +0 -1
- package/dist/hooks/useFileSelector.js +0 -174
- package/dist/hooks/useImageManager.d.ts +0 -13
- package/dist/hooks/useImageManager.d.ts.map +0 -1
- package/dist/hooks/useImageManager.js +0 -46
- package/dist/hooks/useInputHistory.d.ts +0 -11
- package/dist/hooks/useInputHistory.d.ts.map +0 -1
- package/dist/hooks/useInputHistory.js +0 -64
- package/dist/hooks/useInputKeyboardHandler.d.ts +0 -83
- package/dist/hooks/useInputKeyboardHandler.d.ts.map +0 -1
- package/dist/hooks/useInputKeyboardHandler.js +0 -507
- package/dist/hooks/useInputState.d.ts +0 -14
- package/dist/hooks/useInputState.d.ts.map +0 -1
- package/dist/hooks/useInputState.js +0 -57
- package/dist/hooks/useMemoryTypeSelector.d.ts +0 -9
- package/dist/hooks/useMemoryTypeSelector.d.ts.map +0 -1
- package/dist/hooks/useMemoryTypeSelector.js +0 -27
- package/dist/plain-cli.d.ts +0 -7
- package/dist/plain-cli.d.ts.map +0 -1
- package/src/hooks/useBashHistorySelector.ts +0 -77
- package/src/hooks/useCommandSelector.ts +0 -131
- package/src/hooks/useFileSelector.ts +0 -227
- package/src/hooks/useImageManager.ts +0 -64
- package/src/hooks/useInputHistory.ts +0 -74
- package/src/hooks/useInputKeyboardHandler.ts +0 -778
- package/src/hooks/useInputState.ts +0 -66
- package/src/hooks/useMemoryTypeSelector.ts +0 -40
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { useEffect, useRef, useState, useCallback } from "react";
|
|
2
|
+
import { InputManager, } from "../managers/InputManager.js";
|
|
3
|
+
export const useInputManager = (callbacks = {}) => {
|
|
4
|
+
const managerRef = useRef(null);
|
|
5
|
+
// React state that mirrors InputManager state
|
|
6
|
+
const [inputText, setInputText] = useState("");
|
|
7
|
+
const [cursorPosition, setCursorPosition] = useState(0);
|
|
8
|
+
const [fileSelectorState, setFileSelectorState] = useState({
|
|
9
|
+
show: false,
|
|
10
|
+
files: [],
|
|
11
|
+
query: "",
|
|
12
|
+
position: -1,
|
|
13
|
+
});
|
|
14
|
+
const [commandSelectorState, setCommandSelectorState] = useState({
|
|
15
|
+
show: false,
|
|
16
|
+
query: "",
|
|
17
|
+
position: -1,
|
|
18
|
+
});
|
|
19
|
+
const [bashHistorySelectorState, setBashHistorySelectorState] = useState({
|
|
20
|
+
show: false,
|
|
21
|
+
query: "",
|
|
22
|
+
position: -1,
|
|
23
|
+
});
|
|
24
|
+
const [memoryTypeSelectorState, setMemoryTypeSelectorState] = useState({
|
|
25
|
+
show: false,
|
|
26
|
+
message: "",
|
|
27
|
+
});
|
|
28
|
+
const [showBashManager, setShowBashManager] = useState(false);
|
|
29
|
+
const [showMcpManager, setShowMcpManager] = useState(false);
|
|
30
|
+
const [attachedImages, setAttachedImages] = useState([]);
|
|
31
|
+
// Create InputManager on mount and update callbacks when they change
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (!managerRef.current) {
|
|
34
|
+
// Create InputManager on first mount
|
|
35
|
+
const manager = new InputManager({
|
|
36
|
+
onInputTextChange: setInputText,
|
|
37
|
+
onCursorPositionChange: setCursorPosition,
|
|
38
|
+
onFileSelectorStateChange: (show, files, query, position) => {
|
|
39
|
+
setFileSelectorState({ show, files, query, position });
|
|
40
|
+
},
|
|
41
|
+
onCommandSelectorStateChange: (show, query, position) => {
|
|
42
|
+
setCommandSelectorState({ show, query, position });
|
|
43
|
+
},
|
|
44
|
+
onBashHistorySelectorStateChange: (show, query, position) => {
|
|
45
|
+
setBashHistorySelectorState({ show, query, position });
|
|
46
|
+
},
|
|
47
|
+
onMemoryTypeSelectorStateChange: (show, message) => {
|
|
48
|
+
setMemoryTypeSelectorState({ show, message });
|
|
49
|
+
},
|
|
50
|
+
onBashManagerStateChange: (show) => {
|
|
51
|
+
setShowBashManager(show);
|
|
52
|
+
},
|
|
53
|
+
onMcpManagerStateChange: (show) => {
|
|
54
|
+
setShowMcpManager(show);
|
|
55
|
+
},
|
|
56
|
+
onImagesStateChange: setAttachedImages,
|
|
57
|
+
...callbacks,
|
|
58
|
+
});
|
|
59
|
+
managerRef.current = manager;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// Update callbacks on existing manager
|
|
63
|
+
managerRef.current.updateCallbacks({
|
|
64
|
+
onInputTextChange: setInputText,
|
|
65
|
+
onCursorPositionChange: setCursorPosition,
|
|
66
|
+
onFileSelectorStateChange: (show, files, query, position) => {
|
|
67
|
+
setFileSelectorState({ show, files, query, position });
|
|
68
|
+
},
|
|
69
|
+
onCommandSelectorStateChange: (show, query, position) => {
|
|
70
|
+
setCommandSelectorState({ show, query, position });
|
|
71
|
+
},
|
|
72
|
+
onBashHistorySelectorStateChange: (show, query, position) => {
|
|
73
|
+
setBashHistorySelectorState({ show, query, position });
|
|
74
|
+
},
|
|
75
|
+
onMemoryTypeSelectorStateChange: (show, message) => {
|
|
76
|
+
setMemoryTypeSelectorState({ show, message });
|
|
77
|
+
},
|
|
78
|
+
onBashManagerStateChange: (show) => {
|
|
79
|
+
setShowBashManager(show);
|
|
80
|
+
},
|
|
81
|
+
onMcpManagerStateChange: (show) => {
|
|
82
|
+
setShowMcpManager(show);
|
|
83
|
+
},
|
|
84
|
+
onImagesStateChange: setAttachedImages,
|
|
85
|
+
...callbacks,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}, [callbacks]);
|
|
89
|
+
// Cleanup on unmount
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
return () => {
|
|
92
|
+
if (managerRef.current) {
|
|
93
|
+
managerRef.current.destroy();
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}, []);
|
|
97
|
+
// Expose manager methods
|
|
98
|
+
const insertTextAtCursor = useCallback((text, callback) => {
|
|
99
|
+
managerRef.current?.insertTextAtCursor(text, callback);
|
|
100
|
+
}, []);
|
|
101
|
+
const deleteCharAtCursor = useCallback((callback) => {
|
|
102
|
+
managerRef.current?.deleteCharAtCursor(callback);
|
|
103
|
+
}, []);
|
|
104
|
+
const clearInput = useCallback(() => {
|
|
105
|
+
managerRef.current?.clearInput();
|
|
106
|
+
}, []);
|
|
107
|
+
const moveCursorLeft = useCallback(() => {
|
|
108
|
+
managerRef.current?.moveCursorLeft();
|
|
109
|
+
}, []);
|
|
110
|
+
const moveCursorRight = useCallback(() => {
|
|
111
|
+
managerRef.current?.moveCursorRight();
|
|
112
|
+
}, []);
|
|
113
|
+
const moveCursorToStart = useCallback(() => {
|
|
114
|
+
managerRef.current?.moveCursorToStart();
|
|
115
|
+
}, []);
|
|
116
|
+
const moveCursorToEnd = useCallback(() => {
|
|
117
|
+
managerRef.current?.moveCursorToEnd();
|
|
118
|
+
}, []);
|
|
119
|
+
// File selector methods
|
|
120
|
+
const activateFileSelector = useCallback((position) => {
|
|
121
|
+
managerRef.current?.activateFileSelector(position);
|
|
122
|
+
}, []);
|
|
123
|
+
const handleFileSelect = useCallback((filePath) => {
|
|
124
|
+
return (managerRef.current?.handleFileSelect(filePath) || {
|
|
125
|
+
newInput: inputText,
|
|
126
|
+
newCursorPosition: cursorPosition,
|
|
127
|
+
});
|
|
128
|
+
}, [inputText, cursorPosition]);
|
|
129
|
+
const handleCancelFileSelect = useCallback(() => {
|
|
130
|
+
managerRef.current?.handleCancelFileSelect();
|
|
131
|
+
}, []);
|
|
132
|
+
const updateFileSearchQuery = useCallback((query) => {
|
|
133
|
+
managerRef.current?.updateFileSearchQuery(query);
|
|
134
|
+
}, []);
|
|
135
|
+
const checkForAtDeletion = useCallback((cursorPos) => {
|
|
136
|
+
return managerRef.current?.checkForAtDeletion(cursorPos) || false;
|
|
137
|
+
}, []);
|
|
138
|
+
// Command selector methods
|
|
139
|
+
const activateCommandSelector = useCallback((position) => {
|
|
140
|
+
managerRef.current?.activateCommandSelector(position);
|
|
141
|
+
}, []);
|
|
142
|
+
const handleCommandSelect = useCallback((command) => {
|
|
143
|
+
return (managerRef.current?.handleCommandSelect(command) || {
|
|
144
|
+
newInput: inputText,
|
|
145
|
+
newCursorPosition: cursorPosition,
|
|
146
|
+
});
|
|
147
|
+
}, [inputText, cursorPosition]);
|
|
148
|
+
const handleCommandInsert = useCallback((command) => {
|
|
149
|
+
return (managerRef.current?.handleCommandInsert(command) || {
|
|
150
|
+
newInput: inputText,
|
|
151
|
+
newCursorPosition: cursorPosition,
|
|
152
|
+
});
|
|
153
|
+
}, [inputText, cursorPosition]);
|
|
154
|
+
const handleCancelCommandSelect = useCallback(() => {
|
|
155
|
+
managerRef.current?.handleCancelCommandSelect();
|
|
156
|
+
}, []);
|
|
157
|
+
const updateCommandSearchQuery = useCallback((query) => {
|
|
158
|
+
managerRef.current?.updateCommandSearchQuery(query);
|
|
159
|
+
}, []);
|
|
160
|
+
const checkForSlashDeletion = useCallback((cursorPos) => {
|
|
161
|
+
return managerRef.current?.checkForSlashDeletion(cursorPos) || false;
|
|
162
|
+
}, []);
|
|
163
|
+
// Bash history selector methods
|
|
164
|
+
const activateBashHistorySelector = useCallback((position) => {
|
|
165
|
+
managerRef.current?.activateBashHistorySelector(position);
|
|
166
|
+
}, []);
|
|
167
|
+
const handleBashHistorySelect = useCallback((command) => {
|
|
168
|
+
return (managerRef.current?.handleBashHistorySelect(command) || {
|
|
169
|
+
newInput: inputText,
|
|
170
|
+
newCursorPosition: cursorPosition,
|
|
171
|
+
});
|
|
172
|
+
}, [inputText, cursorPosition]);
|
|
173
|
+
const handleCancelBashHistorySelect = useCallback(() => {
|
|
174
|
+
managerRef.current?.handleCancelBashHistorySelect();
|
|
175
|
+
}, []);
|
|
176
|
+
const updateBashHistorySearchQuery = useCallback((query) => {
|
|
177
|
+
managerRef.current?.updateBashHistorySearchQuery(query);
|
|
178
|
+
}, []);
|
|
179
|
+
const handleBashHistoryExecute = useCallback((command) => {
|
|
180
|
+
return managerRef.current?.handleBashHistoryExecute(command) || command;
|
|
181
|
+
}, []);
|
|
182
|
+
const checkForExclamationDeletion = useCallback((cursorPos) => {
|
|
183
|
+
return managerRef.current?.checkForExclamationDeletion(cursorPos) || false;
|
|
184
|
+
}, []);
|
|
185
|
+
// Memory type selector methods
|
|
186
|
+
const activateMemoryTypeSelector = useCallback((message) => {
|
|
187
|
+
managerRef.current?.activateMemoryTypeSelector(message);
|
|
188
|
+
}, []);
|
|
189
|
+
const handleMemoryTypeSelect = useCallback((type) => {
|
|
190
|
+
managerRef.current?.handleMemoryTypeSelect(type);
|
|
191
|
+
}, []);
|
|
192
|
+
const handleCancelMemoryTypeSelect = useCallback(() => {
|
|
193
|
+
managerRef.current?.handleCancelMemoryTypeSelect();
|
|
194
|
+
}, []);
|
|
195
|
+
// Input history methods
|
|
196
|
+
const setUserInputHistory = useCallback((history) => {
|
|
197
|
+
managerRef.current?.setUserInputHistory(history);
|
|
198
|
+
}, []);
|
|
199
|
+
const navigateHistory = useCallback((direction, currentInput) => {
|
|
200
|
+
return (managerRef.current?.navigateHistory(direction, currentInput) || {
|
|
201
|
+
newInput: currentInput,
|
|
202
|
+
newCursorPosition: currentInput.length,
|
|
203
|
+
});
|
|
204
|
+
}, []);
|
|
205
|
+
const resetHistoryNavigation = useCallback(() => {
|
|
206
|
+
managerRef.current?.resetHistoryNavigation();
|
|
207
|
+
}, []);
|
|
208
|
+
// Special character handling
|
|
209
|
+
const handleSpecialCharInput = useCallback((char) => {
|
|
210
|
+
managerRef.current?.handleSpecialCharInput(char);
|
|
211
|
+
}, []);
|
|
212
|
+
// Direct state access methods (for compatibility with existing code)
|
|
213
|
+
const setInputTextDirect = useCallback((text) => {
|
|
214
|
+
managerRef.current?.setInputText(text);
|
|
215
|
+
}, []);
|
|
216
|
+
const setCursorPositionDirect = useCallback((position) => {
|
|
217
|
+
managerRef.current?.setCursorPosition(position);
|
|
218
|
+
}, []);
|
|
219
|
+
return {
|
|
220
|
+
// State
|
|
221
|
+
inputText,
|
|
222
|
+
cursorPosition,
|
|
223
|
+
showFileSelector: fileSelectorState.show,
|
|
224
|
+
filteredFiles: fileSelectorState.files,
|
|
225
|
+
fileSearchQuery: fileSelectorState.query,
|
|
226
|
+
atPosition: fileSelectorState.position,
|
|
227
|
+
showCommandSelector: commandSelectorState.show,
|
|
228
|
+
commandSearchQuery: commandSelectorState.query,
|
|
229
|
+
slashPosition: commandSelectorState.position,
|
|
230
|
+
showBashHistorySelector: bashHistorySelectorState.show,
|
|
231
|
+
bashHistorySearchQuery: bashHistorySelectorState.query,
|
|
232
|
+
exclamationPosition: bashHistorySelectorState.position,
|
|
233
|
+
showMemoryTypeSelector: memoryTypeSelectorState.show,
|
|
234
|
+
memoryMessage: memoryTypeSelectorState.message,
|
|
235
|
+
showBashManager,
|
|
236
|
+
showMcpManager,
|
|
237
|
+
attachedImages,
|
|
238
|
+
// Methods
|
|
239
|
+
insertTextAtCursor,
|
|
240
|
+
deleteCharAtCursor,
|
|
241
|
+
clearInput,
|
|
242
|
+
moveCursorLeft,
|
|
243
|
+
moveCursorRight,
|
|
244
|
+
moveCursorToStart,
|
|
245
|
+
moveCursorToEnd,
|
|
246
|
+
// File selector
|
|
247
|
+
activateFileSelector,
|
|
248
|
+
handleFileSelect,
|
|
249
|
+
handleCancelFileSelect,
|
|
250
|
+
updateFileSearchQuery,
|
|
251
|
+
checkForAtDeletion,
|
|
252
|
+
// Command selector
|
|
253
|
+
activateCommandSelector,
|
|
254
|
+
handleCommandSelect,
|
|
255
|
+
handleCommandInsert,
|
|
256
|
+
handleCancelCommandSelect,
|
|
257
|
+
updateCommandSearchQuery,
|
|
258
|
+
checkForSlashDeletion,
|
|
259
|
+
// Bash history selector
|
|
260
|
+
activateBashHistorySelector,
|
|
261
|
+
handleBashHistorySelect,
|
|
262
|
+
handleCancelBashHistorySelect,
|
|
263
|
+
updateBashHistorySearchQuery,
|
|
264
|
+
handleBashHistoryExecute,
|
|
265
|
+
checkForExclamationDeletion,
|
|
266
|
+
// Memory type selector
|
|
267
|
+
activateMemoryTypeSelector,
|
|
268
|
+
handleMemoryTypeSelect,
|
|
269
|
+
handleCancelMemoryTypeSelect,
|
|
270
|
+
// Input history
|
|
271
|
+
setUserInputHistory,
|
|
272
|
+
navigateHistory,
|
|
273
|
+
resetHistoryNavigation,
|
|
274
|
+
// Special handling
|
|
275
|
+
handleSpecialCharInput,
|
|
276
|
+
// Bash/MCP Manager
|
|
277
|
+
setShowBashManager: useCallback((show) => {
|
|
278
|
+
managerRef.current?.setShowBashManager(show);
|
|
279
|
+
}, []),
|
|
280
|
+
setShowMcpManager: useCallback((show) => {
|
|
281
|
+
managerRef.current?.setShowMcpManager(show);
|
|
282
|
+
}, []),
|
|
283
|
+
// Image management
|
|
284
|
+
addImage: useCallback((imagePath, mimeType) => {
|
|
285
|
+
return managerRef.current?.addImage(imagePath, mimeType);
|
|
286
|
+
}, []),
|
|
287
|
+
removeImage: useCallback((imageId) => {
|
|
288
|
+
managerRef.current?.removeImage(imageId);
|
|
289
|
+
}, []),
|
|
290
|
+
clearImages: useCallback(() => {
|
|
291
|
+
managerRef.current?.clearImages();
|
|
292
|
+
}, []),
|
|
293
|
+
handlePasteImage: useCallback(async () => {
|
|
294
|
+
return (await managerRef.current?.handlePasteImage()) || false;
|
|
295
|
+
}, []),
|
|
296
|
+
// Paste and text handling
|
|
297
|
+
handlePasteInput: useCallback((input) => {
|
|
298
|
+
managerRef.current?.handlePasteInput(input);
|
|
299
|
+
}, []),
|
|
300
|
+
handleSubmit: useCallback(async (attachedImages, isLoading = false, isCommandRunning = false) => {
|
|
301
|
+
await managerRef.current?.handleSubmit(attachedImages, isLoading, isCommandRunning);
|
|
302
|
+
}, []),
|
|
303
|
+
expandLongTextPlaceholders: useCallback((text) => {
|
|
304
|
+
return managerRef.current?.expandLongTextPlaceholders(text) || text;
|
|
305
|
+
}, []),
|
|
306
|
+
clearLongTextMap: useCallback(() => {
|
|
307
|
+
managerRef.current?.clearLongTextMap();
|
|
308
|
+
}, []),
|
|
309
|
+
// Main input handler
|
|
310
|
+
handleInput: useCallback(async (input, key, attachedImages, isLoading = false, isCommandRunning = false, clearImages) => {
|
|
311
|
+
return ((await managerRef.current?.handleInput(input, key, attachedImages, isLoading, isCommandRunning, clearImages)) || false);
|
|
312
|
+
}, []),
|
|
313
|
+
// Direct state setters (for React compatibility)
|
|
314
|
+
setInputText: setInputTextDirect,
|
|
315
|
+
setCursorPosition: setCursorPositionDirect,
|
|
316
|
+
// Manager reference for advanced usage
|
|
317
|
+
manager: managerRef.current,
|
|
318
|
+
};
|
|
319
|
+
};
|
package/dist/index.js
CHANGED
|
@@ -15,9 +15,9 @@ export async function main() {
|
|
|
15
15
|
description: "Continue from last session",
|
|
16
16
|
type: "boolean",
|
|
17
17
|
})
|
|
18
|
-
.option("
|
|
18
|
+
.option("print", {
|
|
19
19
|
alias: "p",
|
|
20
|
-
description: "
|
|
20
|
+
description: "Print response without interactive mode",
|
|
21
21
|
type: "string",
|
|
22
22
|
})
|
|
23
23
|
.option("list-sessions", {
|
|
@@ -29,8 +29,8 @@ export async function main() {
|
|
|
29
29
|
.example("$0", "Start CLI with default settings")
|
|
30
30
|
.example("$0 --restore session_123", "Restore specific session")
|
|
31
31
|
.example("$0 --continue", "Continue from last session")
|
|
32
|
-
.example("$0 --
|
|
33
|
-
.example("$0 -p 'Hello'", "Send message in
|
|
32
|
+
.example("$0 --print 'Hello'", "Send message in print mode")
|
|
33
|
+
.example("$0 -p 'Hello'", "Send message in print mode (short)")
|
|
34
34
|
.example("$0 --list-sessions", "List all available sessions")
|
|
35
35
|
.help("h")
|
|
36
36
|
.parseAsync();
|
|
@@ -62,13 +62,13 @@ export async function main() {
|
|
|
62
62
|
process.exit(1);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
// Handle
|
|
66
|
-
if (argv.
|
|
67
|
-
const {
|
|
68
|
-
return
|
|
65
|
+
// Handle print mode directly
|
|
66
|
+
if (argv.print !== undefined) {
|
|
67
|
+
const { startPrintCli } = await import("./print-cli.js");
|
|
68
|
+
return startPrintCli({
|
|
69
69
|
restoreSessionId: argv.restore,
|
|
70
70
|
continueLastSession: argv.continue,
|
|
71
|
-
message: argv.
|
|
71
|
+
message: argv.print,
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
74
|
await startCli({
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { FileItem } from "../components/FileSelector.js";
|
|
2
|
+
import type { Key } from "ink";
|
|
3
|
+
export interface AttachedImage {
|
|
4
|
+
id: number;
|
|
5
|
+
path: string;
|
|
6
|
+
mimeType: string;
|
|
7
|
+
}
|
|
8
|
+
export interface InputManagerCallbacks {
|
|
9
|
+
onInputTextChange?: (text: string) => void;
|
|
10
|
+
onCursorPositionChange?: (position: number) => void;
|
|
11
|
+
onFileSelectorStateChange?: (show: boolean, files: FileItem[], query: string, position: number) => void;
|
|
12
|
+
onCommandSelectorStateChange?: (show: boolean, query: string, position: number) => void;
|
|
13
|
+
onBashHistorySelectorStateChange?: (show: boolean, query: string, position: number) => void;
|
|
14
|
+
onMemoryTypeSelectorStateChange?: (show: boolean, message: string) => void;
|
|
15
|
+
onShowBashManager?: () => void;
|
|
16
|
+
onShowMcpManager?: () => void;
|
|
17
|
+
onBashManagerStateChange?: (show: boolean) => void;
|
|
18
|
+
onMcpManagerStateChange?: (show: boolean) => void;
|
|
19
|
+
onImagesStateChange?: (images: AttachedImage[]) => void;
|
|
20
|
+
onSendMessage?: (content: string, images?: Array<{
|
|
21
|
+
path: string;
|
|
22
|
+
mimeType: string;
|
|
23
|
+
}>) => void | Promise<void>;
|
|
24
|
+
onHasSlashCommand?: (commandId: string) => boolean;
|
|
25
|
+
onSaveMemory?: (message: string, type: "project" | "user") => Promise<void>;
|
|
26
|
+
onAbortMessage?: () => void;
|
|
27
|
+
onResetHistoryNavigation?: () => void;
|
|
28
|
+
}
|
|
29
|
+
export declare class InputManager {
|
|
30
|
+
private inputText;
|
|
31
|
+
private cursorPosition;
|
|
32
|
+
private showFileSelector;
|
|
33
|
+
private atPosition;
|
|
34
|
+
private fileSearchQuery;
|
|
35
|
+
private filteredFiles;
|
|
36
|
+
private fileSearchDebounceTimer;
|
|
37
|
+
private showCommandSelector;
|
|
38
|
+
private slashPosition;
|
|
39
|
+
private commandSearchQuery;
|
|
40
|
+
private showBashHistorySelector;
|
|
41
|
+
private exclamationPosition;
|
|
42
|
+
private bashHistorySearchQuery;
|
|
43
|
+
private showMemoryTypeSelector;
|
|
44
|
+
private memoryMessage;
|
|
45
|
+
private userInputHistory;
|
|
46
|
+
private historyIndex;
|
|
47
|
+
private historyBuffer;
|
|
48
|
+
private pasteDebounceTimer;
|
|
49
|
+
private pasteBuffer;
|
|
50
|
+
private initialPasteCursorPosition;
|
|
51
|
+
private isPasting;
|
|
52
|
+
private longTextCounter;
|
|
53
|
+
private longTextMap;
|
|
54
|
+
private attachedImages;
|
|
55
|
+
private imageIdCounter;
|
|
56
|
+
private showBashManager;
|
|
57
|
+
private showMcpManager;
|
|
58
|
+
private selectorJustUsed;
|
|
59
|
+
private callbacks;
|
|
60
|
+
constructor(callbacks?: InputManagerCallbacks);
|
|
61
|
+
updateCallbacks(callbacks: Partial<InputManagerCallbacks>): void;
|
|
62
|
+
getInputText(): string;
|
|
63
|
+
setInputText(text: string): void;
|
|
64
|
+
getCursorPosition(): number;
|
|
65
|
+
setCursorPosition(position: number): void;
|
|
66
|
+
insertTextAtCursor(text: string, callback?: (newText: string, newCursorPosition: number) => void): void;
|
|
67
|
+
deleteCharAtCursor(callback?: (newText: string, newCursorPosition: number) => void): void;
|
|
68
|
+
clearInput(): void;
|
|
69
|
+
moveCursorLeft(): void;
|
|
70
|
+
moveCursorRight(): void;
|
|
71
|
+
moveCursorToStart(): void;
|
|
72
|
+
moveCursorToEnd(): void;
|
|
73
|
+
private searchFiles;
|
|
74
|
+
private debouncedSearchFiles;
|
|
75
|
+
activateFileSelector(position: number): void;
|
|
76
|
+
updateFileSearchQuery(query: string): void;
|
|
77
|
+
handleFileSelect(filePath: string): {
|
|
78
|
+
newInput: string;
|
|
79
|
+
newCursorPosition: number;
|
|
80
|
+
};
|
|
81
|
+
handleCancelFileSelect(): void;
|
|
82
|
+
checkForAtDeletion(cursorPosition: number): boolean;
|
|
83
|
+
activateCommandSelector(position: number): void;
|
|
84
|
+
updateCommandSearchQuery(query: string): void;
|
|
85
|
+
handleCommandSelect(command: string): {
|
|
86
|
+
newInput: string;
|
|
87
|
+
newCursorPosition: number;
|
|
88
|
+
};
|
|
89
|
+
handleCommandInsert(command: string): {
|
|
90
|
+
newInput: string;
|
|
91
|
+
newCursorPosition: number;
|
|
92
|
+
};
|
|
93
|
+
handleCancelCommandSelect(): void;
|
|
94
|
+
checkForSlashDeletion(cursorPosition: number): boolean;
|
|
95
|
+
activateBashHistorySelector(position: number): void;
|
|
96
|
+
updateBashHistorySearchQuery(query: string): void;
|
|
97
|
+
handleBashHistorySelect(command: string): {
|
|
98
|
+
newInput: string;
|
|
99
|
+
newCursorPosition: number;
|
|
100
|
+
};
|
|
101
|
+
handleCancelBashHistorySelect(): void;
|
|
102
|
+
handleBashHistoryExecute(command: string): string;
|
|
103
|
+
checkForExclamationDeletion(cursorPosition: number): boolean;
|
|
104
|
+
activateMemoryTypeSelector(message: string): void;
|
|
105
|
+
handleMemoryTypeSelect(type: "project" | "user"): void;
|
|
106
|
+
handleCancelMemoryTypeSelect(): void;
|
|
107
|
+
setUserInputHistory(history: string[]): void;
|
|
108
|
+
navigateHistory(direction: "up" | "down", currentInput: string): {
|
|
109
|
+
newInput: string;
|
|
110
|
+
newCursorPosition: number;
|
|
111
|
+
};
|
|
112
|
+
resetHistoryNavigation(): void;
|
|
113
|
+
isFileSelectorActive(): boolean;
|
|
114
|
+
isCommandSelectorActive(): boolean;
|
|
115
|
+
isBashHistorySelectorActive(): boolean;
|
|
116
|
+
isMemoryTypeSelectorActive(): boolean;
|
|
117
|
+
getFileSelectorState(): {
|
|
118
|
+
show: boolean;
|
|
119
|
+
files: FileItem[];
|
|
120
|
+
query: string;
|
|
121
|
+
position: number;
|
|
122
|
+
};
|
|
123
|
+
getCommandSelectorState(): {
|
|
124
|
+
show: boolean;
|
|
125
|
+
query: string;
|
|
126
|
+
position: number;
|
|
127
|
+
};
|
|
128
|
+
getBashHistorySelectorState(): {
|
|
129
|
+
show: boolean;
|
|
130
|
+
query: string;
|
|
131
|
+
position: number;
|
|
132
|
+
};
|
|
133
|
+
getMemoryTypeSelectorState(): {
|
|
134
|
+
show: boolean;
|
|
135
|
+
message: string;
|
|
136
|
+
};
|
|
137
|
+
handleSpecialCharInput(char: string): void;
|
|
138
|
+
generateCompressedText(originalText: string): string;
|
|
139
|
+
expandLongTextPlaceholders(text: string): string;
|
|
140
|
+
clearLongTextMap(): void;
|
|
141
|
+
handlePasteInput(input: string): void;
|
|
142
|
+
addImage(imagePath: string, mimeType: string): AttachedImage;
|
|
143
|
+
removeImage(imageId: number): void;
|
|
144
|
+
clearImages(): void;
|
|
145
|
+
getAttachedImages(): AttachedImage[];
|
|
146
|
+
handlePasteImage(): Promise<boolean>;
|
|
147
|
+
getShowBashManager(): boolean;
|
|
148
|
+
setShowBashManager(show: boolean): void;
|
|
149
|
+
getShowMcpManager(): boolean;
|
|
150
|
+
setShowMcpManager(show: boolean): void;
|
|
151
|
+
handleSubmit(attachedImages: Array<{
|
|
152
|
+
id: number;
|
|
153
|
+
path: string;
|
|
154
|
+
mimeType: string;
|
|
155
|
+
}>, isLoading?: boolean, isCommandRunning?: boolean): Promise<void>;
|
|
156
|
+
handleSelectorInput(input: string, key: Key): boolean;
|
|
157
|
+
handleNormalInput(input: string, key: Key, attachedImages: Array<{
|
|
158
|
+
id: number;
|
|
159
|
+
path: string;
|
|
160
|
+
mimeType: string;
|
|
161
|
+
}>, isLoading?: boolean, isCommandRunning?: boolean, clearImages?: () => void): Promise<boolean>;
|
|
162
|
+
handleInput(input: string, key: Key, attachedImages: Array<{
|
|
163
|
+
id: number;
|
|
164
|
+
path: string;
|
|
165
|
+
mimeType: string;
|
|
166
|
+
}>, isLoading?: boolean, isCommandRunning?: boolean, clearImages?: () => void): Promise<boolean>;
|
|
167
|
+
destroy(): void;
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=InputManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputManager.d.ts","sourceRoot":"","sources":["../../src/managers/InputManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAGzD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,yBAAyB,CAAC,EAAE,CAC1B,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,KACb,IAAI,CAAC;IACV,4BAA4B,CAAC,EAAE,CAC7B,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,KACb,IAAI,CAAC;IACV,gCAAgC,CAAC,EAAE,CACjC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,KACb,IAAI,CAAC;IACV,+BAA+B,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,wBAAwB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IACxD,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,KAC/C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;CACvC;AAED,qBAAa,YAAY;IAEvB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,cAAc,CAAa;IAGnC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,uBAAuB,CAA+B;IAG9D,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,kBAAkB,CAAc;IAGxC,OAAO,CAAC,uBAAuB,CAAkB;IACjD,OAAO,CAAC,mBAAmB,CAAc;IACzC,OAAO,CAAC,sBAAsB,CAAc;IAG5C,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,aAAa,CAAc;IAGnC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,aAAa,CAAc;IAGnC,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,0BAA0B,CAAa;IAC/C,OAAO,CAAC,SAAS,CAAkB;IAGnC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,WAAW,CAAkC;IAGrD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,cAAc,CAAa;IAGnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAkB;IAGxC,OAAO,CAAC,gBAAgB,CAAkB;IAE1C,OAAO,CAAC,SAAS,CAAwB;gBAE7B,SAAS,GAAE,qBAA0B;IAKjD,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAKzD,YAAY,IAAI,MAAM;IAItB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,iBAAiB,IAAI,MAAM;IAI3B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQzC,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI,GAC9D,IAAI;IAeP,kBAAkB,CAChB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI,GAC9D,IAAI;IAiBP,UAAU,IAAI,IAAI;IAOlB,cAAc,IAAI,IAAI;IAItB,eAAe,IAAI,IAAI;IAIvB,iBAAiB,IAAI,IAAI;IAIzB,eAAe,IAAI,IAAI;YAKT,WAAW;IAsBzB,OAAO,CAAC,oBAAoB;IAc5B,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAiB5C,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAClC,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IA4BD,sBAAsB,IAAI,IAAI;IAS9B,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IASnD,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ/C,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS7C,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;QACpC,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IAyDD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;QACpC,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IA0BD,yBAAyB,IAAI,IAAI;IAQjC,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAStD,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQnD,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASjD,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG;QACxC,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IA6BD,6BAA6B,IAAI,IAAI;IAQrC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAUjD,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAY5D,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOjD,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI;IAStD,4BAA4B,IAAI,IAAI;IAQpC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAI5C,eAAe,CACb,SAAS,EAAE,IAAI,GAAG,MAAM,EACxB,YAAY,EAAE,MAAM,GACnB;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE;IA+ClD,sBAAsB,IAAI,IAAI;IAM9B,oBAAoB,IAAI,OAAO;IAI/B,uBAAuB,IAAI,OAAO;IAIlC,2BAA2B,IAAI,OAAO;IAItC,0BAA0B,IAAI,OAAO;IAIrC,oBAAoB;;;;;;IASpB,uBAAuB;;;;;IAQvB,2BAA2B;;;;;IAQ3B,0BAA0B;;;;IAQ1B,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAmC1C,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAOpD,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAgBhD,gBAAgB,IAAI,IAAI;IAKxB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAoErC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa;IAY5D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlC,WAAW,IAAI,IAAI;IAKnB,iBAAiB,IAAI,aAAa,EAAE;IAI9B,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAsB1C,kBAAkB,IAAI,OAAO;IAI7B,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKvC,iBAAiB,IAAI,OAAO;IAI5B,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAMhC,YAAY,CAChB,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACrE,SAAS,GAAE,OAAe,EAC1B,gBAAgB,GAAE,OAAe,GAChC,OAAO,CAAC,IAAI,CAAC;IA+ChB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IA4C/C,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,GAAG,EACR,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACrE,SAAS,GAAE,OAAe,EAC1B,gBAAgB,GAAE,OAAe,EACjC,WAAW,CAAC,EAAE,MAAM,IAAI,GACvB,OAAO,CAAC,OAAO,CAAC;IAwGb,WAAW,CACf,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,GAAG,EACR,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACrE,SAAS,GAAE,OAAe,EAC1B,gBAAgB,GAAE,OAAe,EACjC,WAAW,CAAC,EAAE,MAAM,IAAI,GACvB,OAAO,CAAC,OAAO,CAAC;IA4CnB,OAAO,IAAI,IAAI;CAUhB"}
|