wave-code 0.8.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/components/ChatInterface.js +1 -1
  2. package/dist/components/CommandSelector.d.ts.map +1 -1
  3. package/dist/components/CommandSelector.js +1 -38
  4. package/dist/components/ConfirmationSelector.d.ts.map +1 -1
  5. package/dist/components/ConfirmationSelector.js +11 -3
  6. package/dist/components/HelpView.d.ts +2 -0
  7. package/dist/components/HelpView.d.ts.map +1 -1
  8. package/dist/components/HelpView.js +49 -5
  9. package/dist/components/InputBox.d.ts.map +1 -1
  10. package/dist/components/InputBox.js +1 -1
  11. package/dist/components/MessageList.d.ts +2 -2
  12. package/dist/components/MessageList.d.ts.map +1 -1
  13. package/dist/components/MessageList.js +5 -6
  14. package/dist/constants/commands.d.ts +3 -0
  15. package/dist/constants/commands.d.ts.map +1 -0
  16. package/dist/constants/commands.js +38 -0
  17. package/dist/contexts/useChat.d.ts.map +1 -1
  18. package/dist/contexts/useChat.js +2 -17
  19. package/dist/hooks/useInputManager.d.ts +7 -8
  20. package/dist/hooks/useInputManager.d.ts.map +1 -1
  21. package/dist/hooks/useInputManager.js +224 -232
  22. package/dist/managers/inputHandlers.d.ts +28 -0
  23. package/dist/managers/inputHandlers.d.ts.map +1 -0
  24. package/dist/managers/inputHandlers.js +378 -0
  25. package/dist/managers/inputReducer.d.ts +157 -0
  26. package/dist/managers/inputReducer.d.ts.map +1 -0
  27. package/dist/managers/inputReducer.js +242 -0
  28. package/dist/utils/highlightUtils.d.ts.map +1 -1
  29. package/dist/utils/highlightUtils.js +66 -42
  30. package/package.json +2 -2
  31. package/src/components/ChatInterface.tsx +1 -1
  32. package/src/components/CommandSelector.tsx +1 -40
  33. package/src/components/ConfirmationSelector.tsx +13 -3
  34. package/src/components/HelpView.tsx +129 -16
  35. package/src/components/InputBox.tsx +3 -1
  36. package/src/components/MessageList.tsx +5 -6
  37. package/src/constants/commands.ts +41 -0
  38. package/src/contexts/useChat.tsx +2 -17
  39. package/src/hooks/useInputManager.ts +352 -299
  40. package/src/managers/inputHandlers.ts +560 -0
  41. package/src/managers/inputReducer.ts +367 -0
  42. package/src/utils/highlightUtils.ts +66 -42
  43. package/dist/managers/InputManager.d.ts +0 -156
  44. package/dist/managers/InputManager.d.ts.map +0 -1
  45. package/dist/managers/InputManager.js +0 -749
  46. package/src/managers/InputManager.ts +0 -1024
@@ -0,0 +1,367 @@
1
+ import { FileItem, PermissionMode, Logger } from "wave-agent-sdk";
2
+
3
+ export interface AttachedImage {
4
+ id: number;
5
+ path: string;
6
+ mimeType: string;
7
+ }
8
+
9
+ export interface InputManagerCallbacks {
10
+ onInputTextChange?: (text: string) => void;
11
+ onCursorPositionChange?: (position: number) => void;
12
+ onFileSelectorStateChange?: (
13
+ show: boolean,
14
+ files: FileItem[],
15
+ query: string,
16
+ position: number,
17
+ ) => void;
18
+ onCommandSelectorStateChange?: (
19
+ show: boolean,
20
+ query: string,
21
+ position: number,
22
+ ) => void;
23
+ onHistorySearchStateChange?: (show: boolean, query: string) => void;
24
+ onBackgroundTaskManagerStateChange?: (show: boolean) => void;
25
+ onMcpManagerStateChange?: (show: boolean) => void;
26
+ onRewindManagerStateChange?: (show: boolean) => void;
27
+ onHelpStateChange?: (show: boolean) => void;
28
+ onStatusCommandStateChange?: (show: boolean) => void;
29
+ onImagesStateChange?: (images: AttachedImage[]) => void;
30
+ onSendMessage?: (
31
+ content: string,
32
+ images?: Array<{ path: string; mimeType: string }>,
33
+ ) => void | Promise<void>;
34
+ onHasSlashCommand?: (commandId: string) => boolean;
35
+ onAbortMessage?: () => void;
36
+ onClearMessages?: () => void;
37
+ onBackgroundCurrentTask?: () => void;
38
+ onResetHistoryNavigation?: () => void;
39
+ onPermissionModeChange?: (mode: PermissionMode) => void;
40
+ logger?: Logger;
41
+ }
42
+
43
+ export interface InputState {
44
+ inputText: string;
45
+ cursorPosition: number;
46
+ showFileSelector: boolean;
47
+ atPosition: number;
48
+ fileSearchQuery: string;
49
+ filteredFiles: FileItem[];
50
+ showCommandSelector: boolean;
51
+ slashPosition: number;
52
+ commandSearchQuery: string;
53
+ showHistorySearch: boolean;
54
+ historySearchQuery: string;
55
+ longTextCounter: number;
56
+ longTextMap: Record<string, string>;
57
+ attachedImages: AttachedImage[];
58
+ imageIdCounter: number;
59
+ showBackgroundTaskManager: boolean;
60
+ showMcpManager: boolean;
61
+ showRewindManager: boolean;
62
+ showHelp: boolean;
63
+ showStatusCommand: boolean;
64
+ permissionMode: PermissionMode;
65
+ selectorJustUsed: boolean;
66
+ isPasting: boolean;
67
+ pasteBuffer: string;
68
+ initialPasteCursorPosition: number;
69
+ }
70
+
71
+ export const initialState: InputState = {
72
+ inputText: "",
73
+ cursorPosition: 0,
74
+ showFileSelector: false,
75
+ atPosition: -1,
76
+ fileSearchQuery: "",
77
+ filteredFiles: [],
78
+ showCommandSelector: false,
79
+ slashPosition: -1,
80
+ commandSearchQuery: "",
81
+ showHistorySearch: false,
82
+ historySearchQuery: "",
83
+ longTextCounter: 0,
84
+ longTextMap: {},
85
+ attachedImages: [],
86
+ imageIdCounter: 1,
87
+ showBackgroundTaskManager: false,
88
+ showMcpManager: false,
89
+ showRewindManager: false,
90
+ showHelp: false,
91
+ showStatusCommand: false,
92
+ permissionMode: "default",
93
+ selectorJustUsed: false,
94
+ isPasting: false,
95
+ pasteBuffer: "",
96
+ initialPasteCursorPosition: 0,
97
+ };
98
+
99
+ export type InputAction =
100
+ | { type: "SET_INPUT_TEXT"; payload: string }
101
+ | { type: "SET_CURSOR_POSITION"; payload: number }
102
+ | { type: "INSERT_TEXT"; payload: string }
103
+ | { type: "DELETE_CHAR" }
104
+ | { type: "MOVE_CURSOR"; payload: number }
105
+ | { type: "ACTIVATE_FILE_SELECTOR"; payload: number }
106
+ | { type: "SET_FILE_SEARCH_QUERY"; payload: string }
107
+ | { type: "SET_FILTERED_FILES"; payload: FileItem[] }
108
+ | { type: "CANCEL_FILE_SELECTOR" }
109
+ | { type: "ACTIVATE_COMMAND_SELECTOR"; payload: number }
110
+ | { type: "SET_COMMAND_SEARCH_QUERY"; payload: string }
111
+ | { type: "CANCEL_COMMAND_SELECTOR" }
112
+ | { type: "ACTIVATE_HISTORY_SEARCH" }
113
+ | { type: "SET_HISTORY_SEARCH_QUERY"; payload: string }
114
+ | { type: "CANCEL_HISTORY_SEARCH" }
115
+ | { type: "ADD_IMAGE"; payload: { path: string; mimeType: string } }
116
+ | { type: "REMOVE_IMAGE"; payload: number }
117
+ | { type: "CLEAR_IMAGES" }
118
+ | { type: "SET_SHOW_BACKGROUND_TASK_MANAGER"; payload: boolean }
119
+ | { type: "SET_SHOW_MCP_MANAGER"; payload: boolean }
120
+ | { type: "SET_SHOW_REWIND_MANAGER"; payload: boolean }
121
+ | { type: "SET_SHOW_HELP"; payload: boolean }
122
+ | { type: "SET_SHOW_STATUS_COMMAND"; payload: boolean }
123
+ | { type: "SET_PERMISSION_MODE"; payload: PermissionMode }
124
+ | { type: "SET_SELECTOR_JUST_USED"; payload: boolean }
125
+ | { type: "COMPRESS_AND_INSERT_TEXT"; payload: string }
126
+ | { type: "CLEAR_LONG_TEXT_MAP" }
127
+ | { type: "CLEAR_INPUT" }
128
+ | { type: "START_PASTE"; payload: { buffer: string; cursorPosition: number } }
129
+ | { type: "APPEND_PASTE_BUFFER"; payload: string }
130
+ | { type: "END_PASTE" }
131
+ | {
132
+ type: "ADD_IMAGE_AND_INSERT_PLACEHOLDER";
133
+ payload: { path: string; mimeType: string };
134
+ };
135
+
136
+ export function inputReducer(
137
+ state: InputState,
138
+ action: InputAction,
139
+ ): InputState {
140
+ switch (action.type) {
141
+ case "SET_INPUT_TEXT":
142
+ return { ...state, inputText: action.payload };
143
+ case "SET_CURSOR_POSITION":
144
+ return {
145
+ ...state,
146
+ cursorPosition: Math.max(
147
+ 0,
148
+ Math.min(state.inputText.length, action.payload),
149
+ ),
150
+ };
151
+ case "INSERT_TEXT": {
152
+ const beforeCursor = state.inputText.substring(0, state.cursorPosition);
153
+ const afterCursor = state.inputText.substring(state.cursorPosition);
154
+ const newText = beforeCursor + action.payload + afterCursor;
155
+ const newCursorPosition = state.cursorPosition + action.payload.length;
156
+ return {
157
+ ...state,
158
+ inputText: newText,
159
+ cursorPosition: newCursorPosition,
160
+ };
161
+ }
162
+ case "DELETE_CHAR": {
163
+ if (state.cursorPosition > 0) {
164
+ const beforeCursor = state.inputText.substring(
165
+ 0,
166
+ state.cursorPosition - 1,
167
+ );
168
+ const afterCursor = state.inputText.substring(state.cursorPosition);
169
+ const newText = beforeCursor + afterCursor;
170
+ const newCursorPosition = state.cursorPosition - 1;
171
+ return {
172
+ ...state,
173
+ inputText: newText,
174
+ cursorPosition: newCursorPosition,
175
+ };
176
+ }
177
+ return state;
178
+ }
179
+ case "MOVE_CURSOR": {
180
+ const newCursorPosition = Math.max(
181
+ 0,
182
+ Math.min(state.inputText.length, state.cursorPosition + action.payload),
183
+ );
184
+ return { ...state, cursorPosition: newCursorPosition };
185
+ }
186
+ case "ACTIVATE_FILE_SELECTOR":
187
+ return {
188
+ ...state,
189
+ showFileSelector: true,
190
+ atPosition: action.payload,
191
+ fileSearchQuery: "",
192
+ filteredFiles: [],
193
+ };
194
+ case "SET_FILE_SEARCH_QUERY":
195
+ return { ...state, fileSearchQuery: action.payload };
196
+ case "SET_FILTERED_FILES":
197
+ return { ...state, filteredFiles: action.payload };
198
+ case "CANCEL_FILE_SELECTOR":
199
+ return {
200
+ ...state,
201
+ showFileSelector: false,
202
+ atPosition: -1,
203
+ fileSearchQuery: "",
204
+ filteredFiles: [],
205
+ selectorJustUsed: true,
206
+ };
207
+ case "ACTIVATE_COMMAND_SELECTOR":
208
+ return {
209
+ ...state,
210
+ showCommandSelector: true,
211
+ slashPosition: action.payload,
212
+ commandSearchQuery: "",
213
+ };
214
+ case "SET_COMMAND_SEARCH_QUERY":
215
+ return { ...state, commandSearchQuery: action.payload };
216
+ case "CANCEL_COMMAND_SELECTOR":
217
+ return {
218
+ ...state,
219
+ showCommandSelector: false,
220
+ slashPosition: -1,
221
+ commandSearchQuery: "",
222
+ selectorJustUsed: true,
223
+ };
224
+ case "ACTIVATE_HISTORY_SEARCH":
225
+ return {
226
+ ...state,
227
+ showHistorySearch: true,
228
+ historySearchQuery: "",
229
+ };
230
+ case "SET_HISTORY_SEARCH_QUERY":
231
+ return { ...state, historySearchQuery: action.payload };
232
+ case "CANCEL_HISTORY_SEARCH":
233
+ return {
234
+ ...state,
235
+ showHistorySearch: false,
236
+ historySearchQuery: "",
237
+ selectorJustUsed: true,
238
+ };
239
+ case "ADD_IMAGE": {
240
+ const newImage: AttachedImage = {
241
+ id: state.imageIdCounter,
242
+ path: action.payload.path,
243
+ mimeType: action.payload.mimeType,
244
+ };
245
+ return {
246
+ ...state,
247
+ attachedImages: [...state.attachedImages, newImage],
248
+ imageIdCounter: state.imageIdCounter + 1,
249
+ };
250
+ }
251
+ case "REMOVE_IMAGE":
252
+ return {
253
+ ...state,
254
+ attachedImages: state.attachedImages.filter(
255
+ (img) => img.id !== action.payload,
256
+ ),
257
+ };
258
+ case "CLEAR_IMAGES":
259
+ return { ...state, attachedImages: [] };
260
+ case "SET_SHOW_BACKGROUND_TASK_MANAGER":
261
+ return {
262
+ ...state,
263
+ showBackgroundTaskManager: action.payload,
264
+ selectorJustUsed: !action.payload ? true : state.selectorJustUsed,
265
+ };
266
+ case "SET_SHOW_MCP_MANAGER":
267
+ return {
268
+ ...state,
269
+ showMcpManager: action.payload,
270
+ selectorJustUsed: !action.payload ? true : state.selectorJustUsed,
271
+ };
272
+ case "SET_SHOW_REWIND_MANAGER":
273
+ return {
274
+ ...state,
275
+ showRewindManager: action.payload,
276
+ selectorJustUsed: !action.payload ? true : state.selectorJustUsed,
277
+ };
278
+ case "SET_SHOW_HELP":
279
+ return {
280
+ ...state,
281
+ showHelp: action.payload,
282
+ selectorJustUsed: !action.payload ? true : state.selectorJustUsed,
283
+ };
284
+ case "SET_SHOW_STATUS_COMMAND":
285
+ return {
286
+ ...state,
287
+ showStatusCommand: action.payload,
288
+ selectorJustUsed: !action.payload ? true : state.selectorJustUsed,
289
+ };
290
+ case "SET_PERMISSION_MODE":
291
+ return { ...state, permissionMode: action.payload };
292
+ case "SET_SELECTOR_JUST_USED":
293
+ return { ...state, selectorJustUsed: action.payload };
294
+ case "COMPRESS_AND_INSERT_TEXT": {
295
+ let textToInsert = action.payload;
296
+ let newLongTextCounter = state.longTextCounter;
297
+ const newLongTextMap = { ...state.longTextMap };
298
+
299
+ if (textToInsert.length > 200) {
300
+ newLongTextCounter += 1;
301
+ const compressedLabel = `[LongText#${newLongTextCounter}]`;
302
+ newLongTextMap[compressedLabel] = textToInsert;
303
+ textToInsert = compressedLabel;
304
+ }
305
+
306
+ const beforeCursor = state.inputText.substring(0, state.cursorPosition);
307
+ const afterCursor = state.inputText.substring(state.cursorPosition);
308
+ const newText = beforeCursor + textToInsert + afterCursor;
309
+ const newCursorPosition = state.cursorPosition + textToInsert.length;
310
+
311
+ return {
312
+ ...state,
313
+ inputText: newText,
314
+ cursorPosition: newCursorPosition,
315
+ longTextCounter: newLongTextCounter,
316
+ longTextMap: newLongTextMap,
317
+ };
318
+ }
319
+ case "CLEAR_LONG_TEXT_MAP":
320
+ return { ...state, longTextMap: {} };
321
+ case "CLEAR_INPUT":
322
+ return {
323
+ ...state,
324
+ inputText: "",
325
+ cursorPosition: 0,
326
+ };
327
+ case "START_PASTE":
328
+ return {
329
+ ...state,
330
+ isPasting: true,
331
+ pasteBuffer: action.payload.buffer,
332
+ initialPasteCursorPosition: action.payload.cursorPosition,
333
+ };
334
+ case "APPEND_PASTE_BUFFER":
335
+ return {
336
+ ...state,
337
+ pasteBuffer: state.pasteBuffer + action.payload,
338
+ };
339
+ case "END_PASTE":
340
+ return {
341
+ ...state,
342
+ isPasting: false,
343
+ pasteBuffer: "",
344
+ };
345
+ case "ADD_IMAGE_AND_INSERT_PLACEHOLDER": {
346
+ const newImage: AttachedImage = {
347
+ id: state.imageIdCounter,
348
+ path: action.payload.path,
349
+ mimeType: action.payload.mimeType,
350
+ };
351
+ const placeholder = `[Image #${newImage.id}]`;
352
+ const beforeCursor = state.inputText.substring(0, state.cursorPosition);
353
+ const afterCursor = state.inputText.substring(state.cursorPosition);
354
+ const newText = beforeCursor + placeholder + afterCursor;
355
+ const newCursorPosition = state.cursorPosition + placeholder.length;
356
+ return {
357
+ ...state,
358
+ attachedImages: [...state.attachedImages, newImage],
359
+ imageIdCounter: state.imageIdCounter + 1,
360
+ inputText: newText,
361
+ cursorPosition: newCursorPosition,
362
+ };
363
+ }
364
+ default:
365
+ return state;
366
+ }
367
+ }
@@ -1,41 +1,41 @@
1
- import hljs from 'highlight.js';
2
- import { parse, Node, HTMLElement, TextNode } from 'node-html-parser';
3
- import chalk from 'chalk';
1
+ import hljs from "highlight.js";
2
+ import { parse, Node, HTMLElement, TextNode } from "node-html-parser";
3
+ import chalk from "chalk";
4
4
 
5
5
  const theme: Record<string, (text: string) => string> = {
6
- 'hljs-keyword': chalk.blue,
7
- 'hljs-built_in': chalk.cyan,
8
- 'hljs-type': chalk.cyan,
9
- 'hljs-literal': chalk.magenta,
10
- 'hljs-number': chalk.magenta,
11
- 'hljs-operator': chalk.white,
12
- 'hljs-punctuation': chalk.white,
13
- 'hljs-property': chalk.yellow,
14
- 'hljs-attr': chalk.yellow,
15
- 'hljs-variable': chalk.white,
16
- 'hljs-template-variable': chalk.white,
17
- 'hljs-string': chalk.green,
18
- 'hljs-char': chalk.green,
19
- 'hljs-comment': chalk.gray,
20
- 'hljs-doctag': chalk.gray,
21
- 'hljs-function': chalk.yellow,
22
- 'hljs-title': chalk.yellow,
23
- 'hljs-params': chalk.white,
24
- 'hljs-tag': chalk.blue,
25
- 'hljs-name': chalk.blue,
26
- 'hljs-selector-tag': chalk.blue,
27
- 'hljs-selector-id': chalk.blue,
28
- 'hljs-selector-class': chalk.blue,
29
- 'hljs-selector-attr': chalk.blue,
30
- 'hljs-selector-pseudo': chalk.blue,
31
- 'hljs-subst': chalk.white,
32
- 'hljs-section': chalk.blue.bold,
33
- 'hljs-bullet': chalk.magenta,
34
- 'hljs-emphasis': chalk.italic,
35
- 'hljs-strong': chalk.bold,
36
- 'hljs-addition': chalk.green,
37
- 'hljs-deletion': chalk.red,
38
- 'hljs-link': chalk.blue.underline,
6
+ "hljs-keyword": chalk.blue,
7
+ "hljs-built_in": chalk.cyan,
8
+ "hljs-type": chalk.cyan,
9
+ "hljs-literal": chalk.magenta,
10
+ "hljs-number": chalk.magenta,
11
+ "hljs-operator": chalk.white,
12
+ "hljs-punctuation": chalk.white,
13
+ "hljs-property": chalk.yellow,
14
+ "hljs-attr": chalk.yellow,
15
+ "hljs-variable": chalk.white,
16
+ "hljs-template-variable": chalk.white,
17
+ "hljs-string": chalk.green,
18
+ "hljs-char": chalk.green,
19
+ "hljs-comment": chalk.gray,
20
+ "hljs-doctag": chalk.gray,
21
+ "hljs-function": chalk.yellow,
22
+ "hljs-title": chalk.yellow,
23
+ "hljs-params": chalk.white,
24
+ "hljs-tag": chalk.blue,
25
+ "hljs-name": chalk.blue,
26
+ "hljs-selector-tag": chalk.blue,
27
+ "hljs-selector-id": chalk.blue,
28
+ "hljs-selector-class": chalk.blue,
29
+ "hljs-selector-attr": chalk.blue,
30
+ "hljs-selector-pseudo": chalk.blue,
31
+ "hljs-subst": chalk.white,
32
+ "hljs-section": chalk.blue.bold,
33
+ "hljs-bullet": chalk.magenta,
34
+ "hljs-emphasis": chalk.italic,
35
+ "hljs-strong": chalk.bold,
36
+ "hljs-addition": chalk.green,
37
+ "hljs-deletion": chalk.red,
38
+ "hljs-link": chalk.blue.underline,
39
39
  };
40
40
 
41
41
  function nodeToAnsi(node: Node): string {
@@ -44,8 +44,8 @@ function nodeToAnsi(node: Node): string {
44
44
  }
45
45
 
46
46
  if (node instanceof HTMLElement) {
47
- const content = node.childNodes.map(nodeToAnsi).join('');
48
- const classes = node.getAttribute('class')?.split(/\s+/) || [];
47
+ const content = node.childNodes.map(nodeToAnsi).join("");
48
+ const classes = node.getAttribute("class")?.split(/\s+/) || [];
49
49
 
50
50
  for (const className of classes) {
51
51
  if (theme[className]) {
@@ -56,20 +56,44 @@ function nodeToAnsi(node: Node): string {
56
56
  return content;
57
57
  }
58
58
 
59
- return '';
59
+ return "";
60
60
  }
61
61
 
62
62
  export function highlightToAnsi(code: string, language?: string): string {
63
63
  if (!code) {
64
- return '';
64
+ return "";
65
65
  }
66
66
  try {
67
67
  const highlighted = language
68
68
  ? hljs.highlight(code, { language }).value
69
- : hljs.highlightAuto(code).value;
69
+ : hljs.highlightAuto(code, [
70
+ "javascript",
71
+ "typescript",
72
+ "bash",
73
+ "json",
74
+ "markdown",
75
+ "python",
76
+ "yaml",
77
+ "html",
78
+ "css",
79
+ "sql",
80
+ "xml",
81
+ "rust",
82
+ "go",
83
+ "java",
84
+ "cpp",
85
+ "c",
86
+ "csharp",
87
+ "php",
88
+ "ruby",
89
+ "swift",
90
+ "kotlin",
91
+ "toml",
92
+ "ini",
93
+ ]).value;
70
94
 
71
95
  const root = parse(highlighted);
72
- return root.childNodes.map(nodeToAnsi).join('');
96
+ return root.childNodes.map(nodeToAnsi).join("");
73
97
  } catch {
74
98
  return code;
75
99
  }
@@ -1,156 +0,0 @@
1
- import { FileItem } from "../components/FileSelector.js";
2
- import { PermissionMode, Logger } from "wave-agent-sdk";
3
- import type { Key } from "ink";
4
- export interface AttachedImage {
5
- id: number;
6
- path: string;
7
- mimeType: string;
8
- }
9
- export interface InputManagerCallbacks {
10
- onInputTextChange?: (text: string) => void;
11
- onCursorPositionChange?: (position: number) => void;
12
- onFileSelectorStateChange?: (show: boolean, files: FileItem[], query: string, position: number) => void;
13
- onCommandSelectorStateChange?: (show: boolean, query: string, position: number) => void;
14
- onHistorySearchStateChange?: (show: boolean, query: string) => void;
15
- onBackgroundTaskManagerStateChange?: (show: boolean) => void;
16
- onMcpManagerStateChange?: (show: boolean) => void;
17
- onRewindManagerStateChange?: (show: boolean) => void;
18
- onHelpStateChange?: (show: boolean) => void;
19
- onStatusCommandStateChange?: (show: boolean) => void;
20
- onImagesStateChange?: (images: AttachedImage[]) => void;
21
- onSendMessage?: (content: string, images?: Array<{
22
- path: string;
23
- mimeType: string;
24
- }>) => void | Promise<void>;
25
- onHasSlashCommand?: (commandId: string) => boolean;
26
- onAbortMessage?: () => void;
27
- onClearMessages?: () => void;
28
- onBackgroundCurrentTask?: () => void;
29
- onResetHistoryNavigation?: () => void;
30
- onPermissionModeChange?: (mode: PermissionMode) => void;
31
- logger?: Logger;
32
- }
33
- export declare class InputManager {
34
- private inputText;
35
- private cursorPosition;
36
- private showFileSelector;
37
- private atPosition;
38
- private fileSearchQuery;
39
- private filteredFiles;
40
- private fileSearchDebounceTimer;
41
- private showCommandSelector;
42
- private slashPosition;
43
- private commandSearchQuery;
44
- private showHistorySearch;
45
- private historySearchQuery;
46
- private pasteDebounceTimer;
47
- private pasteBuffer;
48
- private initialPasteCursorPosition;
49
- private isPasting;
50
- private longTextCounter;
51
- private longTextMap;
52
- private attachedImages;
53
- private imageIdCounter;
54
- private showBackgroundTaskManager;
55
- private showMcpManager;
56
- private showRewindManager;
57
- private showHelp;
58
- private showStatusCommand;
59
- private permissionMode;
60
- private selectorJustUsed;
61
- private callbacks;
62
- private logger?;
63
- constructor(callbacks?: InputManagerCallbacks);
64
- updateCallbacks(callbacks: Partial<InputManagerCallbacks>): void;
65
- getInputText(): string;
66
- setInputText(text: string): void;
67
- getCursorPosition(): number;
68
- setCursorPosition(position: number): void;
69
- insertTextAtCursor(text: string, callback?: (newText: string, newCursorPosition: number) => void): void;
70
- deleteCharAtCursor(callback?: (newText: string, newCursorPosition: number) => void): void;
71
- clearInput(): void;
72
- moveCursorLeft(): void;
73
- moveCursorRight(): void;
74
- private searchFiles;
75
- private debouncedSearchFiles;
76
- activateFileSelector(position: number): void;
77
- updateFileSearchQuery(query: string): void;
78
- handleFileSelect(filePath: string): {
79
- newInput: string;
80
- newCursorPosition: number;
81
- };
82
- handleCancelFileSelect(): void;
83
- checkForAtDeletion(cursorPosition: number): boolean;
84
- activateCommandSelector(position: number): void;
85
- updateCommandSearchQuery(query: string): void;
86
- handleCommandSelect(command: string): {
87
- newInput: string;
88
- newCursorPosition: number;
89
- };
90
- handleCommandInsert(command: string): {
91
- newInput: string;
92
- newCursorPosition: number;
93
- };
94
- handleCancelCommandSelect(): void;
95
- checkForSlashDeletion(cursorPosition: number): boolean;
96
- isFileSelectorActive(): boolean;
97
- isCommandSelectorActive(): boolean;
98
- getFileSelectorState(): {
99
- show: boolean;
100
- files: FileItem[];
101
- query: string;
102
- position: number;
103
- };
104
- getCommandSelectorState(): {
105
- show: boolean;
106
- query: string;
107
- position: number;
108
- };
109
- private updateSearchQueriesForActiveSelectors;
110
- handleSpecialCharInput(char: string): void;
111
- generateCompressedText(originalText: string): string;
112
- expandLongTextPlaceholders(text: string): string;
113
- clearLongTextMap(): void;
114
- handlePasteInput(input: string): void;
115
- addImage(imagePath: string, mimeType: string): AttachedImage;
116
- removeImage(imageId: number): void;
117
- clearImages(): void;
118
- getAttachedImages(): AttachedImage[];
119
- handlePasteImage(): Promise<boolean>;
120
- getShowBackgroundTaskManager(): boolean;
121
- setShowBackgroundTaskManager(show: boolean): void;
122
- getShowMcpManager(): boolean;
123
- setShowMcpManager(show: boolean): void;
124
- getShowRewindManager(): boolean;
125
- setShowRewindManager(show: boolean): void;
126
- getShowHelp(): boolean;
127
- setShowHelp(show: boolean): void;
128
- getShowStatusCommand(): boolean;
129
- setShowStatusCommand(show: boolean): void;
130
- getPermissionMode(): PermissionMode;
131
- isAnySelectorOrManagerActive(): boolean;
132
- setPermissionMode(mode: PermissionMode): void;
133
- cyclePermissionMode(): void;
134
- handleSubmit(attachedImages: Array<{
135
- id: number;
136
- path: string;
137
- mimeType: string;
138
- }>, isLoading?: boolean, isCommandRunning?: boolean): Promise<void>;
139
- handleSelectorInput(input: string, key: Key): boolean;
140
- activateHistorySearch(): void;
141
- updateHistorySearchQuery(query: string): void;
142
- handleHistorySearchSelect(prompt: string): void;
143
- handleCancelHistorySearch(): void;
144
- handleNormalInput(input: string, key: Key, attachedImages: Array<{
145
- id: number;
146
- path: string;
147
- mimeType: string;
148
- }>, isLoading?: boolean, isCommandRunning?: boolean, clearImages?: () => void): Promise<boolean>;
149
- handleInput(input: string, key: Key, attachedImages: Array<{
150
- id: number;
151
- path: string;
152
- mimeType: string;
153
- }>, isLoading?: boolean, isCommandRunning?: boolean, clearImages?: () => void): Promise<boolean>;
154
- destroy(): void;
155
- }
156
- //# sourceMappingURL=InputManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InputManager.d.ts","sourceRoot":"","sources":["../../src/managers/InputManager.ts"],"names":[],"mappings":"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"}