@agi-cli/web-sdk 0.1.84 → 0.1.86

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ChatInput.tsx"],"names":[],"mappings":"AAkBA,UAAU,cAAc;IACvB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,SAAS;WACD,MAAM,IAAI;GA+nB9B,CAAC"}
1
+ {"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ChatInput.tsx"],"names":[],"mappings":"AAuBA,UAAU,cAAc;IACvB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,SAAS;WACD,MAAM,IAAI;GA8T9B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useRef, useEffect, useCallback, memo, forwardRef, useImperativeHandle, } from 'react';
2
+ import { useState, useRef, useEffect, useCallback, memo, forwardRef, useImperativeHandle, useMemo, } from 'react';
3
3
  import { ArrowUp, MoreVertical } from 'lucide-react';
4
4
  import { Textarea } from '../ui/Textarea';
5
5
  import { FileMentionPopup } from './FileMentionPopup';
@@ -7,25 +7,35 @@ import { CommandSuggestionsPopup } from './CommandSuggestionsPopup';
7
7
  import { ShortcutsModal } from './ShortcutsModal';
8
8
  import { useFiles } from '../../hooks/useFiles';
9
9
  import { usePreferences } from '../../hooks/usePreferences';
10
+ import { useVimMode } from '../../hooks/useVimMode';
11
+ import { useFileMention } from '../../hooks/useFileMention';
12
+ import { useCommandSuggestions } from '../../hooks/useCommandSuggestions';
13
+ import { createChatInputKeyHandler } from './ChatInputKeyHandler';
10
14
  export const ChatInput = memo(forwardRef(function ChatInput({ onSend, onCommand, disabled, onConfigClick, onPlanModeToggle, isPlanMode: externalIsPlanMode, }, ref) {
11
15
  const [message, setMessage] = useState('');
12
16
  const [isPlanMode, setIsPlanMode] = useState(externalIsPlanMode || false);
13
- const [showFileMention, setShowFileMention] = useState(false);
14
- const [mentionQuery, setMentionQuery] = useState('');
15
- const [mentionSelectedIndex, setMentionSelectedIndex] = useState(0);
16
- const [showCommandSuggestions, setShowCommandSuggestions] = useState(false);
17
- const [commandQuery, setCommandQuery] = useState('');
18
- const [commandSelectedIndex, setCommandSelectedIndex] = useState(0);
19
17
  const [showShortcutsModal, setShowShortcutsModal] = useState(false);
20
- const [currentFileToSelect, setCurrentFileToSelect] = useState();
21
- const [currentCommandToSelect, setCurrentCommandToSelect] = useState();
22
- const [vimMode, setVimMode] = useState('insert');
23
- const [vimPendingKey, setVimPendingKey] = useState('');
24
18
  const textareaRef = useRef(null);
25
19
  const { data: filesData, isLoading: filesLoading } = useFiles();
26
20
  const { preferences, updatePreferences } = usePreferences();
27
21
  const files = filesData?.files || [];
28
22
  const changedFiles = filesData?.changedFiles || [];
23
+ const handleSendRef = useRef(() => { });
24
+ const { showFileMention, mentionQuery, mentionSelectedIndex, currentFileToSelect, setShowFileMention, setMentionSelectedIndex, setCurrentFileToSelect, handleFileSelect: selectFile, handleEnterSelect: handleMentionEnterSelect, checkForMention, } = useFileMention();
25
+ const { showCommandSuggestions, commandQuery, commandSelectedIndex, currentCommandToSelect, setShowCommandSuggestions, setCommandSelectedIndex, setCurrentCommandToSelect, handleCommandSelect, handleCommandEnterSelect, checkForCommand, } = useCommandSuggestions({
26
+ onCommand,
27
+ updatePreferences,
28
+ vimModeEnabled: preferences.vimMode,
29
+ textareaRef,
30
+ setMessage,
31
+ setShowShortcutsModal,
32
+ });
33
+ const { vimMode, setVimMode, handleVimNormalMode } = useVimMode({
34
+ enabled: preferences.vimMode,
35
+ onSend: () => handleSendRef.current(),
36
+ textareaRef,
37
+ setMessage,
38
+ });
29
39
  useEffect(() => {
30
40
  textareaRef.current?.focus();
31
41
  }, []);
@@ -34,14 +44,6 @@ export const ChatInput = memo(forwardRef(function ChatInput({ onSend, onCommand,
34
44
  setIsPlanMode(externalIsPlanMode);
35
45
  }
36
46
  }, [externalIsPlanMode]);
37
- useEffect(() => {
38
- if (preferences.vimMode) {
39
- setVimMode('normal');
40
- }
41
- else {
42
- setVimMode('insert');
43
- }
44
- }, [preferences.vimMode]);
45
47
  useImperativeHandle(ref, () => ({
46
48
  focus: () => {
47
49
  textareaRef.current?.focus();
@@ -49,443 +51,135 @@ export const ChatInput = memo(forwardRef(function ChatInput({ onSend, onCommand,
49
51
  }));
50
52
  const adjustTextareaHeight = useCallback(() => {
51
53
  const textarea = textareaRef.current;
52
- if (textarea) {
53
- textarea.style.height = 'auto';
54
- textarea.style.height = `${textarea.scrollHeight}px`;
55
- }
54
+ if (!textarea)
55
+ return;
56
+ textarea.style.height = 'auto';
57
+ textarea.style.height = `${textarea.scrollHeight}px`;
56
58
  }, []);
57
59
  // biome-ignore lint/correctness/useExhaustiveDependencies: message dependency required for adjusting textarea height on content change
58
60
  useEffect(() => {
59
61
  adjustTextareaHeight();
60
62
  }, [adjustTextareaHeight, message]);
61
- const handleSend = useCallback(() => {
62
- if (message.trim() && !disabled) {
63
- onSend(message);
64
- setMessage('');
65
- if (textareaRef.current) {
66
- textareaRef.current.style.height = 'auto';
67
- }
68
- if (preferences.vimMode) {
69
- setVimMode('normal');
70
- }
71
- textareaRef.current?.focus();
72
- }
73
- }, [message, disabled, onSend, preferences.vimMode]);
74
- const handleFileSelect = useCallback((filePath) => {
75
- const textarea = textareaRef.current;
76
- if (!textarea)
77
- return;
78
- const value = textarea.value;
79
- const cursorPos = textarea.selectionStart;
80
- const textBeforeCursor = value.slice(0, cursorPos);
81
- const match = textBeforeCursor.match(/@(\S*)$/);
82
- if (!match)
83
- return;
84
- const atPos = cursorPos - match[0].length;
85
- const newValue = `${value.slice(0, atPos)}@${filePath} ${value.slice(cursorPos)}`;
86
- setMessage(newValue);
63
+ const handleMentionClose = useCallback(() => {
87
64
  setShowFileMention(false);
88
- setTimeout(() => {
89
- const newCursorPos = atPos + filePath.length + 2;
90
- textarea.setSelectionRange(newCursorPos, newCursorPos);
91
- textarea.focus();
92
- }, 0);
93
- }, []);
94
- const handleEnterSelect = useCallback((file) => {
95
- setCurrentFileToSelect(file);
96
- }, []);
97
- const handleCommandEnterSelect = useCallback((commandId) => {
98
- setCurrentCommandToSelect(commandId);
99
- }, []);
100
- const handleCommandSelect = useCallback((commandId) => {
101
- if (commandId === 'help') {
102
- setShowShortcutsModal(true);
103
- setMessage('');
104
- setShowCommandSuggestions(false);
105
- if (textareaRef.current) {
106
- textareaRef.current.style.height = 'auto';
107
- }
108
- textareaRef.current?.focus();
109
- return;
110
- }
111
- if (commandId === 'vim') {
112
- const newVimMode = !preferences.vimMode;
113
- updatePreferences({ vimMode: newVimMode });
114
- setMessage('');
115
- setShowCommandSuggestions(false);
116
- if (textareaRef.current) {
117
- textareaRef.current.style.height = 'auto';
118
- }
119
- textareaRef.current?.focus();
65
+ setCurrentFileToSelect(undefined);
66
+ }, [setShowFileMention, setCurrentFileToSelect]);
67
+ const handleCommandClose = useCallback(() => {
68
+ setShowCommandSuggestions(false);
69
+ setCurrentCommandToSelect(undefined);
70
+ }, [setShowCommandSuggestions, setCurrentCommandToSelect]);
71
+ const handleMentionSelect = useCallback((filePath) => {
72
+ selectFile(filePath, textareaRef, setMessage);
73
+ }, [selectFile]);
74
+ const handleSend = useCallback(() => {
75
+ if (!message.trim() || disabled)
120
76
  return;
121
- }
122
- if (onCommand) {
123
- onCommand(commandId);
124
- }
77
+ onSend(message);
125
78
  setMessage('');
79
+ setShowFileMention(false);
126
80
  setShowCommandSuggestions(false);
81
+ setCurrentFileToSelect(undefined);
82
+ setCurrentCommandToSelect(undefined);
127
83
  if (textareaRef.current) {
128
84
  textareaRef.current.style.height = 'auto';
129
85
  }
86
+ if (preferences.vimMode) {
87
+ setVimMode('normal');
88
+ }
130
89
  textareaRef.current?.focus();
131
- }, [onCommand, preferences.vimMode, updatePreferences]);
90
+ }, [
91
+ message,
92
+ disabled,
93
+ onSend,
94
+ preferences.vimMode,
95
+ setShowFileMention,
96
+ setShowCommandSuggestions,
97
+ setCurrentFileToSelect,
98
+ setCurrentCommandToSelect,
99
+ setVimMode,
100
+ ]);
101
+ useEffect(() => {
102
+ handleSendRef.current = handleSend;
103
+ }, [handleSend]);
132
104
  const handleChange = useCallback((e) => {
133
105
  if (preferences.vimMode && vimMode === 'normal') {
134
106
  return;
135
107
  }
136
- setMessage(e.target.value);
137
108
  const value = e.target.value;
109
+ setMessage(value);
110
+ checkForCommand(value);
138
111
  if (value.startsWith('/') && !value.includes(' ')) {
139
- setShowCommandSuggestions(true);
140
- setCommandQuery(value.slice(1));
141
- setCommandSelectedIndex(0);
142
112
  setShowFileMention(false);
113
+ setCurrentFileToSelect(undefined);
143
114
  }
144
115
  else {
145
116
  setShowCommandSuggestions(false);
146
- const cursorPos = e.target.selectionStart;
147
- const textBeforeCursor = value.slice(0, cursorPos);
148
- const match = textBeforeCursor.match(/@(\S*)$/);
149
- if (match) {
150
- setShowFileMention(true);
151
- setMentionQuery(match[1]);
152
- setMentionSelectedIndex(0);
153
- }
154
- else {
155
- setShowFileMention(false);
156
- }
157
- }
158
- }, [preferences.vimMode, vimMode]);
159
- const handleVimNormalMode = useCallback((e) => {
160
- const textarea = textareaRef.current;
161
- if (!textarea)
162
- return false;
163
- const key = e.key;
164
- // Helper function to find word boundaries
165
- const findNextWordStart = (text, pos) => {
166
- // Skip current word
167
- while (pos < text.length && /\S/.test(text[pos]))
168
- pos++;
169
- // Skip whitespace
170
- while (pos < text.length && /\s/.test(text[pos]))
171
- pos++;
172
- return Math.min(pos, text.length);
173
- };
174
- const findNextWordEnd = (text, pos) => {
175
- // Move forward one if at word end
176
- if (pos < text.length && /\S/.test(text[pos]))
177
- pos++;
178
- // Skip whitespace
179
- while (pos < text.length && /\s/.test(text[pos]))
180
- pos++;
181
- // Find end of word
182
- while (pos < text.length && /\S/.test(text[pos]))
183
- pos++;
184
- return Math.max(0, pos - 1);
185
- };
186
- const findPrevWordStart = (text, pos) => {
187
- // Move back one
188
- pos = Math.max(0, pos - 1);
189
- // Skip whitespace
190
- while (pos > 0 && /\s/.test(text[pos]))
191
- pos--;
192
- // Find start of word
193
- while (pos > 0 && /\S/.test(text[pos - 1]))
194
- pos--;
195
- return pos;
196
- };
197
- if (key === 'i') {
198
- e.preventDefault();
199
- setVimMode('insert');
200
- return true;
201
- }
202
- if (key === 'a') {
203
- e.preventDefault();
204
- setVimMode('insert');
205
- const pos = textarea.selectionStart;
206
- setTimeout(() => {
207
- textarea.setSelectionRange(pos + 1, pos + 1);
208
- }, 0);
209
- return true;
210
- }
211
- if (key === 'I') {
212
- e.preventDefault();
213
- setVimMode('insert');
214
- const text = textarea.value;
215
- const lineStart = text.lastIndexOf('\n', textarea.selectionStart - 1) + 1;
216
- setTimeout(() => {
217
- textarea.setSelectionRange(lineStart, lineStart);
218
- }, 0);
219
- return true;
220
- }
221
- if (key === 'A') {
222
- e.preventDefault();
223
- setVimMode('insert');
224
- const text = textarea.value;
225
- let lineEnd = text.indexOf('\n', textarea.selectionStart);
226
- if (lineEnd === -1)
227
- lineEnd = text.length;
228
- setTimeout(() => {
229
- textarea.setSelectionRange(lineEnd, lineEnd);
230
- }, 0);
231
- return true;
232
- }
233
- if (key === '0') {
234
- e.preventDefault();
235
- const text = textarea.value;
236
- const lineStart = text.lastIndexOf('\n', textarea.selectionStart - 1) + 1;
237
- textarea.setSelectionRange(lineStart, lineStart);
238
- return true;
239
- }
240
- if (key === '$') {
241
- e.preventDefault();
242
- const text = textarea.value;
243
- let lineEnd = text.indexOf('\n', textarea.selectionStart);
244
- if (lineEnd === -1)
245
- lineEnd = text.length;
246
- textarea.setSelectionRange(lineEnd, lineEnd);
247
- return true;
248
- }
249
- if (key === 'o') {
250
- e.preventDefault();
251
- setVimMode('insert');
252
- const text = textarea.value;
253
- let lineEnd = text.indexOf('\n', textarea.selectionStart);
254
- if (lineEnd === -1)
255
- lineEnd = text.length;
256
- const newValue = `${text.slice(0, lineEnd)}\n${text.slice(lineEnd)}`;
257
- setMessage(newValue);
258
- setTimeout(() => {
259
- textarea.setSelectionRange(lineEnd + 1, lineEnd + 1);
260
- }, 0);
261
- return true;
262
- }
263
- if (key === 'O') {
264
- e.preventDefault();
265
- setVimMode('insert');
266
- const text = textarea.value;
267
- const lineStart = text.lastIndexOf('\n', textarea.selectionStart - 1) + 1;
268
- const newValue = `${text.slice(0, lineStart)}\n${text.slice(lineStart)}`;
269
- setMessage(newValue);
270
- setTimeout(() => {
271
- textarea.setSelectionRange(lineStart, lineStart);
272
- }, 0);
273
- return true;
274
- }
275
- // Handle f{char} - find character
276
- if (vimPendingKey === 'f' && key.length === 1 && key !== 'Escape') {
277
- e.preventDefault();
278
- const text = textarea.value;
279
- const currentLine = text.slice(text.lastIndexOf('\n', textarea.selectionStart - 1) + 1, text.indexOf('\n', textarea.selectionStart) === -1
280
- ? text.length
281
- : text.indexOf('\n', textarea.selectionStart));
282
- const posInLine = textarea.selectionStart -
283
- text.lastIndexOf('\n', textarea.selectionStart - 1) -
284
- 1;
285
- const charIndex = currentLine.indexOf(key, posInLine + 1);
286
- if (charIndex !== -1) {
287
- const newPos = text.lastIndexOf('\n', textarea.selectionStart - 1) +
288
- 1 +
289
- charIndex;
290
- textarea.setSelectionRange(newPos, newPos);
291
- }
292
- setVimPendingKey('');
293
- return true;
294
- }
295
- if (key === 'f') {
296
- e.preventDefault();
297
- setVimPendingKey('f');
298
- setTimeout(() => setVimPendingKey(''), 2000);
299
- return true;
300
- }
301
- if (key === 'd') {
302
- if (vimPendingKey === 'd') {
303
- e.preventDefault();
304
- const text = textarea.value;
305
- const lineStart = text.lastIndexOf('\n', textarea.selectionStart - 1) + 1;
306
- let lineEnd = text.indexOf('\n', textarea.selectionStart);
307
- if (lineEnd === -1)
308
- lineEnd = text.length;
309
- else
310
- lineEnd += 1;
311
- const newValue = text.slice(0, lineStart) + text.slice(lineEnd);
312
- setMessage(newValue);
313
- setVimPendingKey('');
314
- setTimeout(() => {
315
- textarea.setSelectionRange(lineStart, lineStart);
316
- }, 0);
317
- return true;
318
- }
319
- e.preventDefault();
320
- setVimPendingKey('d');
321
- setTimeout(() => setVimPendingKey(''), 1000);
322
- return true;
323
- }
324
- if (key === 'Enter') {
325
- e.preventDefault();
326
- handleSend();
327
- return true;
328
- }
329
- if (key === 'Escape') {
330
- e.preventDefault();
331
- return true;
332
- }
333
- if (key === 'w') {
334
- e.preventDefault();
335
- const text = textarea.value;
336
- const newPos = findNextWordStart(text, textarea.selectionStart);
337
- textarea.setSelectionRange(newPos, newPos);
338
- return true;
339
- }
340
- if (key === 'e') {
341
- e.preventDefault();
342
- const text = textarea.value;
343
- const newPos = findNextWordEnd(text, textarea.selectionStart);
344
- textarea.setSelectionRange(newPos, newPos);
345
- return true;
346
- }
347
- if (key === 'b') {
348
- e.preventDefault();
349
- const text = textarea.value;
350
- const newPos = findPrevWordStart(text, textarea.selectionStart);
351
- textarea.setSelectionRange(newPos, newPos);
352
- return true;
353
- }
354
- if (key === 'x') {
355
- e.preventDefault();
356
- const text = textarea.value;
357
- const pos = textarea.selectionStart;
358
- if (pos < text.length) {
359
- const newValue = text.slice(0, pos) + text.slice(pos + 1);
360
- setMessage(newValue);
361
- setTimeout(() => {
362
- textarea.setSelectionRange(pos, pos);
363
- }, 0);
364
- }
365
- return true;
366
- }
367
- if (key === 's') {
368
- e.preventDefault();
369
- const text = textarea.value;
370
- const pos = textarea.selectionStart;
371
- if (pos < text.length) {
372
- const newValue = text.slice(0, pos) + text.slice(pos + 1);
373
- setMessage(newValue);
374
- setVimMode('insert');
375
- setTimeout(() => {
376
- textarea.setSelectionRange(pos, pos);
377
- }, 0);
378
- }
379
- else {
380
- setVimMode('insert');
381
- }
382
- return true;
383
- }
384
- if (key === 'S') {
385
- e.preventDefault();
386
- const text = textarea.value;
387
- const lineStart = text.lastIndexOf('\n', textarea.selectionStart - 1) + 1;
388
- let lineEnd = text.indexOf('\n', textarea.selectionStart);
389
- if (lineEnd === -1)
390
- lineEnd = text.length;
391
- const newValue = text.slice(0, lineStart) + text.slice(lineEnd);
392
- setMessage(newValue);
393
- setVimMode('insert');
394
- setTimeout(() => {
395
- textarea.setSelectionRange(lineStart, lineStart);
396
- }, 0);
397
- return true;
398
- }
399
- return false;
400
- }, [vimPendingKey, handleSend]);
401
- const handleKeyDown = useCallback((e) => {
402
- if (showCommandSuggestions) {
403
- if (e.key === 'ArrowDown' || (e.ctrlKey && e.key === 'j')) {
404
- e.preventDefault();
405
- setCommandSelectedIndex((prev) => (prev + 1) % 5);
406
- }
407
- else if (e.key === 'ArrowUp' || (e.ctrlKey && e.key === 'k')) {
408
- e.preventDefault();
409
- setCommandSelectedIndex((prev) => (prev - 1 + 5) % 5);
410
- }
411
- else if (e.key === 'Enter') {
412
- e.preventDefault();
413
- if (currentCommandToSelect) {
414
- handleCommandSelect(currentCommandToSelect);
415
- }
416
- }
417
- else if (e.key === 'Escape') {
418
- e.preventDefault();
419
- setShowCommandSuggestions(false);
420
- }
421
- return;
422
- }
423
- if (showFileMention) {
424
- if (e.key === 'ArrowDown' || (e.ctrlKey && e.key === 'j')) {
425
- e.preventDefault();
426
- setMentionSelectedIndex((prev) => (prev + 1) % 20);
427
- }
428
- else if (e.key === 'ArrowUp' || (e.ctrlKey && e.key === 'k')) {
429
- e.preventDefault();
430
- setMentionSelectedIndex((prev) => (prev - 1 + 20) % 20);
431
- }
432
- else if (e.key === 'Enter') {
433
- e.preventDefault();
434
- if (currentFileToSelect) {
435
- handleFileSelect(currentFileToSelect);
436
- }
437
- }
438
- else if (e.key === 'Escape') {
439
- e.preventDefault();
440
- setShowFileMention(false);
441
- if (preferences.vimMode) {
442
- setVimMode('normal');
443
- }
444
- }
445
- return;
446
- }
447
- if (preferences.vimMode && vimMode === 'normal') {
448
- const handled = handleVimNormalMode(e);
449
- if (handled)
450
- return;
451
- }
452
- if (preferences.vimMode && vimMode === 'insert' && e.key === 'Escape') {
453
- e.preventDefault();
454
- setVimMode('normal');
455
- return;
456
- }
457
- if (e.key === 'Tab') {
458
- e.preventDefault();
459
- const newPlanMode = !isPlanMode;
460
- setIsPlanMode(newPlanMode);
461
- onPlanModeToggle?.(newPlanMode);
462
- }
463
- else if (e.key === 'Enter' &&
464
- !e.shiftKey &&
465
- (!preferences.vimMode || vimMode === 'normal')) {
466
- e.preventDefault();
467
- handleSend();
117
+ setCurrentCommandToSelect(undefined);
118
+ checkForMention(value, e.target.selectionStart);
468
119
  }
469
120
  }, [
121
+ preferences.vimMode,
122
+ vimMode,
123
+ checkForCommand,
124
+ setShowFileMention,
125
+ setCurrentFileToSelect,
126
+ setShowCommandSuggestions,
127
+ setCurrentCommandToSelect,
128
+ checkForMention,
129
+ ]);
130
+ const handleKeyDown = useMemo(() => createChatInputKeyHandler({
470
131
  showFileMention,
471
132
  showCommandSuggestions,
472
- handleSend,
133
+ mentionSelectedIndex,
134
+ commandSelectedIndex,
135
+ currentFileToSelect,
136
+ currentCommandToSelect,
473
137
  isPlanMode,
138
+ vimModeEnabled: preferences.vimMode,
139
+ vimMode,
140
+ setMentionSelectedIndex,
141
+ setCommandSelectedIndex,
142
+ setShowFileMention,
143
+ setShowCommandSuggestions,
144
+ setIsPlanMode,
145
+ setVimMode,
146
+ handleFileSelect: handleMentionSelect,
147
+ handleCommandSelect,
148
+ handleSend,
149
+ handleVimNormalMode,
474
150
  onPlanModeToggle,
151
+ }), [
152
+ showFileMention,
153
+ showCommandSuggestions,
154
+ mentionSelectedIndex,
155
+ commandSelectedIndex,
475
156
  currentFileToSelect,
476
- handleFileSelect,
477
157
  currentCommandToSelect,
478
- handleCommandSelect,
158
+ isPlanMode,
479
159
  preferences.vimMode,
480
160
  vimMode,
161
+ setMentionSelectedIndex,
162
+ setCommandSelectedIndex,
163
+ setShowFileMention,
164
+ setShowCommandSuggestions,
165
+ setVimMode,
166
+ handleMentionSelect,
167
+ handleCommandSelect,
168
+ handleSend,
481
169
  handleVimNormalMode,
170
+ onPlanModeToggle,
482
171
  ]);
172
+ useEffect(() => {
173
+ if (!preferences.vimMode) {
174
+ setVimMode('insert');
175
+ }
176
+ }, [preferences.vimMode, setVimMode]);
483
177
  return (_jsx("div", { className: "absolute bottom-0 left-0 right-0 pt-16 pb-6 md:pb-8 px-2 md:px-4 bg-gradient-to-t from-background via-background to-transparent pointer-events-none z-20 safe-area-inset-bottom", children: _jsxs("div", { className: "max-w-3xl mx-auto pointer-events-auto mb-2 md:mb-0 relative", children: [preferences.vimMode && vimMode === 'normal' && (_jsx("div", { className: "absolute -top-6 right-0 px-2 py-0.5 text-xs font-mono font-semibold bg-amber-500/90 text-white rounded shadow-sm", children: "NORMAL" })), preferences.vimMode && vimMode === 'insert' && (_jsx("div", { className: "absolute -top-6 right-0 px-2 py-0.5 text-xs font-mono font-semibold bg-green-500/90 text-white rounded shadow-sm", children: "INSERT" })), _jsxs("div", { className: `flex items-end gap-1 rounded-3xl p-1 transition-all touch-manipulation ${isPlanMode
484
178
  ? 'bg-slate-100 dark:bg-slate-900/40 border border-slate-300 dark:border-slate-700 focus-within:border-slate-400 dark:focus-within:border-slate-600 focus-within:ring-1 focus-within:ring-slate-300 dark:focus-within:ring-slate-700'
485
179
  : 'bg-card border border-border focus-within:border-primary/60 focus-within:ring-1 focus-within:ring-primary/40'}`, children: [onConfigClick && (_jsx("button", { type: "button", onClick: onConfigClick, className: "flex items-center justify-center w-10 h-10 rounded-full hover:bg-background/50 active:bg-background/70 transition-colors text-muted-foreground hover:text-foreground flex-shrink-0 touch-manipulation", children: _jsx(MoreVertical, { className: "w-4 h-4" }) })), _jsx(Textarea, { ref: textareaRef, value: message, onChange: handleChange, onKeyDown: handleKeyDown, placeholder: isPlanMode
486
180
  ? 'Plan mode - Type a message...'
487
181
  : 'Type a message...', disabled: disabled, rows: 1, className: `border-0 bg-transparent pl-1 pr-2 py-2 max-h-[200px] overflow-y-auto leading-normal resize-none scrollbar-hide text-base ${preferences.vimMode && vimMode === 'normal' ? 'caret-[6px]' : ''}`, style: { height: '2.5rem' } }), _jsx("button", { type: "button", onClick: handleSend, disabled: disabled || !message.trim(), className: `flex items-center justify-center w-10 h-10 rounded-full transition-colors flex-shrink-0 touch-manipulation ${message.trim()
488
182
  ? 'bg-primary hover:bg-primary/90 active:bg-primary/80 text-primary-foreground'
489
- : 'bg-transparent text-muted-foreground'}`, children: _jsx(ArrowUp, { className: "w-4 h-4" }) })] }), showFileMention && !filesLoading && (_jsx(FileMentionPopup, { files: files, changedFiles: changedFiles, query: mentionQuery, selectedIndex: mentionSelectedIndex, onSelect: handleFileSelect, onEnterSelect: handleEnterSelect, onClose: () => setShowFileMention(false) })), showCommandSuggestions && (_jsx(CommandSuggestionsPopup, { query: commandQuery, selectedIndex: commandSelectedIndex, onSelect: handleCommandSelect, onEnterSelect: handleCommandEnterSelect, onClose: () => setShowCommandSuggestions(false) })), _jsx(ShortcutsModal, { isOpen: showShortcutsModal, onClose: () => setShowShortcutsModal(false) })] }) }));
183
+ : 'bg-transparent text-muted-foreground'}`, children: _jsx(ArrowUp, { className: "w-4 h-4" }) })] }), showFileMention && !filesLoading && (_jsx(FileMentionPopup, { files: files, changedFiles: changedFiles, query: mentionQuery, selectedIndex: mentionSelectedIndex, onSelect: handleMentionSelect, onEnterSelect: handleMentionEnterSelect, onClose: handleMentionClose })), showCommandSuggestions && (_jsx(CommandSuggestionsPopup, { query: commandQuery, selectedIndex: commandSelectedIndex, onSelect: handleCommandSelect, onEnterSelect: handleCommandEnterSelect, onClose: handleCommandClose })), _jsx(ShortcutsModal, { isOpen: showShortcutsModal, onClose: () => setShowShortcutsModal(false) })] }) }));
490
184
  }));
491
185
  //# sourceMappingURL=ChatInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatInput.js","sourceRoot":"","sources":["../../../src/components/chat/ChatInput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatInput.js","sourceRoot":"","sources":["../../../src/components/chat/ChatInput.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { KeyboardEvent } from 'react';
2
+ import type { VimMode } from '../../hooks/useVimMode';
3
+ interface ChatInputKeyHandlerOptions {
4
+ showFileMention: boolean;
5
+ showCommandSuggestions: boolean;
6
+ mentionSelectedIndex: number;
7
+ commandSelectedIndex: number;
8
+ currentFileToSelect: string | undefined;
9
+ currentCommandToSelect: string | undefined;
10
+ isPlanMode: boolean;
11
+ vimModeEnabled: boolean;
12
+ vimMode: VimMode;
13
+ setMentionSelectedIndex: (index: number) => void;
14
+ setCommandSelectedIndex: (index: number) => void;
15
+ setShowFileMention: (show: boolean) => void;
16
+ setShowCommandSuggestions: (show: boolean) => void;
17
+ setIsPlanMode: (mode: boolean) => void;
18
+ setVimMode: (mode: VimMode) => void;
19
+ handleFileSelect: (file: string) => void;
20
+ handleCommandSelect: (commandId: string) => void;
21
+ handleSend: () => void;
22
+ handleVimNormalMode: (e: KeyboardEvent<HTMLTextAreaElement>) => boolean;
23
+ onPlanModeToggle?: (isPlanMode: boolean) => void;
24
+ }
25
+ export declare function createChatInputKeyHandler(options: ChatInputKeyHandlerOptions): (e: KeyboardEvent<HTMLTextAreaElement>) => void;
26
+ export {};
27
+ //# sourceMappingURL=ChatInputKeyHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatInputKeyHandler.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ChatInputKeyHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,UAAU,0BAA0B;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,sBAAsB,EAAE,OAAO,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,uBAAuB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,yBAAyB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,mBAAmB,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC;IACxE,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,IACpE,GAAG,aAAa,CAAC,mBAAmB,CAAC,UA0F7C"}
@@ -0,0 +1,73 @@
1
+ export function createChatInputKeyHandler(options) {
2
+ return (e) => {
3
+ const { showFileMention, showCommandSuggestions, mentionSelectedIndex, commandSelectedIndex, currentFileToSelect, currentCommandToSelect, isPlanMode, vimModeEnabled, vimMode, setMentionSelectedIndex, setCommandSelectedIndex, setShowFileMention, setShowCommandSuggestions, setIsPlanMode, setVimMode, handleFileSelect, handleCommandSelect, handleSend, handleVimNormalMode, onPlanModeToggle, } = options;
4
+ if (showCommandSuggestions) {
5
+ if (e.key === 'ArrowDown' || (e.ctrlKey && e.key === 'j')) {
6
+ e.preventDefault();
7
+ setCommandSelectedIndex((commandSelectedIndex + 1) % 5);
8
+ }
9
+ else if (e.key === 'ArrowUp' || (e.ctrlKey && e.key === 'k')) {
10
+ e.preventDefault();
11
+ setCommandSelectedIndex((commandSelectedIndex - 1 + 5) % 5);
12
+ }
13
+ else if (e.key === 'Enter') {
14
+ e.preventDefault();
15
+ if (currentCommandToSelect) {
16
+ handleCommandSelect(currentCommandToSelect);
17
+ }
18
+ }
19
+ else if (e.key === 'Escape') {
20
+ e.preventDefault();
21
+ setShowCommandSuggestions(false);
22
+ }
23
+ return;
24
+ }
25
+ if (showFileMention) {
26
+ if (e.key === 'ArrowDown' || (e.ctrlKey && e.key === 'j')) {
27
+ e.preventDefault();
28
+ setMentionSelectedIndex((mentionSelectedIndex + 1) % 20);
29
+ }
30
+ else if (e.key === 'ArrowUp' || (e.ctrlKey && e.key === 'k')) {
31
+ e.preventDefault();
32
+ setMentionSelectedIndex((mentionSelectedIndex - 1 + 20) % 20);
33
+ }
34
+ else if (e.key === 'Enter') {
35
+ e.preventDefault();
36
+ if (currentFileToSelect) {
37
+ handleFileSelect(currentFileToSelect);
38
+ }
39
+ }
40
+ else if (e.key === 'Escape') {
41
+ e.preventDefault();
42
+ setShowFileMention(false);
43
+ if (vimModeEnabled) {
44
+ setVimMode('normal');
45
+ }
46
+ }
47
+ return;
48
+ }
49
+ if (vimModeEnabled && vimMode === 'normal') {
50
+ const handled = handleVimNormalMode(e);
51
+ if (handled)
52
+ return;
53
+ }
54
+ if (vimModeEnabled && vimMode === 'insert' && e.key === 'Escape') {
55
+ e.preventDefault();
56
+ setVimMode('normal');
57
+ return;
58
+ }
59
+ if (e.key === 'Tab') {
60
+ e.preventDefault();
61
+ const newPlanMode = !isPlanMode;
62
+ setIsPlanMode(newPlanMode);
63
+ onPlanModeToggle?.(newPlanMode);
64
+ }
65
+ else if (e.key === 'Enter' &&
66
+ !e.shiftKey &&
67
+ (!vimModeEnabled || vimMode === 'normal')) {
68
+ e.preventDefault();
69
+ handleSend();
70
+ }
71
+ };
72
+ }
73
+ //# sourceMappingURL=ChatInputKeyHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatInputKeyHandler.js","sourceRoot":"","sources":["../../../src/components/chat/ChatInputKeyHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ interface UseCommandSuggestionsOptions {
2
+ onCommand?: (commandId: string) => void;
3
+ updatePreferences: (prefs: {
4
+ vimMode: boolean;
5
+ }) => void;
6
+ vimModeEnabled: boolean;
7
+ textareaRef: React.RefObject<HTMLTextAreaElement>;
8
+ setMessage: (msg: string) => void;
9
+ setShowShortcutsModal: (show: boolean) => void;
10
+ }
11
+ interface UseCommandSuggestionsReturn {
12
+ showCommandSuggestions: boolean;
13
+ commandQuery: string;
14
+ commandSelectedIndex: number;
15
+ currentCommandToSelect: string | undefined;
16
+ setShowCommandSuggestions: (show: boolean) => void;
17
+ setCommandQuery: (query: string) => void;
18
+ setCommandSelectedIndex: (index: number) => void;
19
+ setCurrentCommandToSelect: (commandId: string | undefined) => void;
20
+ handleCommandSelect: (commandId: string) => void;
21
+ handleCommandEnterSelect: (commandId: string | undefined) => void;
22
+ checkForCommand: (value: string) => void;
23
+ }
24
+ export declare function useCommandSuggestions({ onCommand, updatePreferences, vimModeEnabled, textareaRef, setMessage, setShowShortcutsModal, }: UseCommandSuggestionsOptions): UseCommandSuggestionsReturn;
25
+ export {};
26
+ //# sourceMappingURL=useCommandSuggestions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCommandSuggestions.d.ts","sourceRoot":"","sources":["../../src/hooks/useCommandSuggestions.ts"],"names":[],"mappings":"AAEA,UAAU,4BAA4B;IACrC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iBAAiB,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACzD,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAClD,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,qBAAqB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAED,UAAU,2BAA2B;IACpC,sBAAsB,EAAE,OAAO,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,yBAAyB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,uBAAuB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,yBAAyB,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACnE,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,wBAAwB,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAClE,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,wBAAgB,qBAAqB,CAAC,EACrC,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,UAAU,EACV,qBAAqB,GACrB,EAAE,4BAA4B,GAAG,2BAA2B,CAiF5D"}
@@ -0,0 +1,73 @@
1
+ import { useState, useCallback } from 'react';
2
+ export function useCommandSuggestions({ onCommand, updatePreferences, vimModeEnabled, textareaRef, setMessage, setShowShortcutsModal, }) {
3
+ const [showCommandSuggestions, setShowCommandSuggestions] = useState(false);
4
+ const [commandQuery, setCommandQuery] = useState('');
5
+ const [commandSelectedIndex, setCommandSelectedIndex] = useState(0);
6
+ const [currentCommandToSelect, setCurrentCommandToSelect] = useState();
7
+ const handleCommandSelect = useCallback((commandId) => {
8
+ if (commandId === 'help') {
9
+ setShowShortcutsModal(true);
10
+ setMessage('');
11
+ setShowCommandSuggestions(false);
12
+ if (textareaRef.current) {
13
+ textareaRef.current.style.height = 'auto';
14
+ }
15
+ textareaRef.current?.focus();
16
+ return;
17
+ }
18
+ if (commandId === 'vim') {
19
+ const newVimMode = !vimModeEnabled;
20
+ updatePreferences({ vimMode: newVimMode });
21
+ setMessage('');
22
+ setShowCommandSuggestions(false);
23
+ if (textareaRef.current) {
24
+ textareaRef.current.style.height = 'auto';
25
+ }
26
+ textareaRef.current?.focus();
27
+ return;
28
+ }
29
+ if (onCommand) {
30
+ onCommand(commandId);
31
+ }
32
+ setMessage('');
33
+ setShowCommandSuggestions(false);
34
+ if (textareaRef.current) {
35
+ textareaRef.current.style.height = 'auto';
36
+ }
37
+ textareaRef.current?.focus();
38
+ }, [
39
+ onCommand,
40
+ vimModeEnabled,
41
+ updatePreferences,
42
+ textareaRef,
43
+ setMessage,
44
+ setShowShortcutsModal,
45
+ ]);
46
+ const handleCommandEnterSelect = useCallback((commandId) => {
47
+ setCurrentCommandToSelect(commandId);
48
+ }, []);
49
+ const checkForCommand = useCallback((value) => {
50
+ if (value.startsWith('/') && !value.includes(' ')) {
51
+ setShowCommandSuggestions(true);
52
+ setCommandQuery(value.slice(1));
53
+ setCommandSelectedIndex(0);
54
+ }
55
+ else {
56
+ setShowCommandSuggestions(false);
57
+ }
58
+ }, []);
59
+ return {
60
+ showCommandSuggestions,
61
+ commandQuery,
62
+ commandSelectedIndex,
63
+ currentCommandToSelect,
64
+ setShowCommandSuggestions,
65
+ setCommandQuery,
66
+ setCommandSelectedIndex,
67
+ setCurrentCommandToSelect,
68
+ handleCommandSelect,
69
+ handleCommandEnterSelect,
70
+ checkForCommand,
71
+ };
72
+ }
73
+ //# sourceMappingURL=useCommandSuggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCommandSuggestions.js","sourceRoot":"","sources":["../../src/hooks/useCommandSuggestions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ interface UseFileMentionReturn {
2
+ showFileMention: boolean;
3
+ mentionQuery: string;
4
+ mentionSelectedIndex: number;
5
+ currentFileToSelect: string | undefined;
6
+ setShowFileMention: (show: boolean) => void;
7
+ setMentionQuery: (query: string) => void;
8
+ setMentionSelectedIndex: (index: number) => void;
9
+ setCurrentFileToSelect: (file: string | undefined) => void;
10
+ handleFileSelect: (filePath: string, textareaRef: React.RefObject<HTMLTextAreaElement>, setMessage: (msg: string) => void) => void;
11
+ handleEnterSelect: (file: string | undefined) => void;
12
+ checkForMention: (value: string, cursorPos: number) => void;
13
+ }
14
+ export declare function useFileMention(): UseFileMentionReturn;
15
+ export {};
16
+ //# sourceMappingURL=useFileMention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFileMention.d.ts","sourceRoot":"","sources":["../../src/hooks/useFileMention.ts"],"names":[],"mappings":"AAEA,UAAU,oBAAoB;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,uBAAuB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,sBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC3D,gBAAgB,EAAE,CACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,EACjD,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,KAC7B,IAAI,CAAC;IACV,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACtD,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5D;AAED,wBAAgB,cAAc,IAAI,oBAAoB,CAqErD"}
@@ -0,0 +1,56 @@
1
+ import { useState, useCallback } from 'react';
2
+ export function useFileMention() {
3
+ const [showFileMention, setShowFileMention] = useState(false);
4
+ const [mentionQuery, setMentionQuery] = useState('');
5
+ const [mentionSelectedIndex, setMentionSelectedIndex] = useState(0);
6
+ const [currentFileToSelect, setCurrentFileToSelect] = useState();
7
+ const handleFileSelect = useCallback((filePath, textareaRef, setMessage) => {
8
+ const textarea = textareaRef.current;
9
+ if (!textarea)
10
+ return;
11
+ const value = textarea.value;
12
+ const cursorPos = textarea.selectionStart;
13
+ const textBeforeCursor = value.slice(0, cursorPos);
14
+ const match = textBeforeCursor.match(/@(\S*)$/);
15
+ if (!match)
16
+ return;
17
+ const atPos = cursorPos - match[0].length;
18
+ const newValue = `${value.slice(0, atPos)}@${filePath} ${value.slice(cursorPos)}`;
19
+ setMessage(newValue);
20
+ setShowFileMention(false);
21
+ setTimeout(() => {
22
+ const newCursorPos = atPos + filePath.length + 2;
23
+ textarea.setSelectionRange(newCursorPos, newCursorPos);
24
+ textarea.focus();
25
+ }, 0);
26
+ }, []);
27
+ const handleEnterSelect = useCallback((file) => {
28
+ setCurrentFileToSelect(file);
29
+ }, []);
30
+ const checkForMention = useCallback((value, cursorPos) => {
31
+ const textBeforeCursor = value.slice(0, cursorPos);
32
+ const match = textBeforeCursor.match(/@(\S*)$/);
33
+ if (match) {
34
+ setShowFileMention(true);
35
+ setMentionQuery(match[1]);
36
+ setMentionSelectedIndex(0);
37
+ }
38
+ else {
39
+ setShowFileMention(false);
40
+ }
41
+ }, []);
42
+ return {
43
+ showFileMention,
44
+ mentionQuery,
45
+ mentionSelectedIndex,
46
+ currentFileToSelect,
47
+ setShowFileMention,
48
+ setMentionQuery,
49
+ setMentionSelectedIndex,
50
+ setCurrentFileToSelect,
51
+ handleFileSelect,
52
+ handleEnterSelect,
53
+ checkForMention,
54
+ };
55
+ }
56
+ //# sourceMappingURL=useFileMention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFileMention.js","sourceRoot":"","sources":["../../src/hooks/useFileMention.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAoB9C,MAAM,UAAU,cAAc;IAC7B,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,EAE3D,CAAC;IAEJ,MAAM,gBAAgB,GAAG,WAAW,CACnC,CACC,QAAgB,EAChB,WAAiD,EACjD,UAAiC,EAChC,EAAE;QACH,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC;QAC1C,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAEnD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1C,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAElF,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrB,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAE1B,UAAU,CAAC,GAAG,EAAE;YACf,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACjD,QAAQ,CAAC,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YACvD,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC,EAAE,CAAC,CAAC,CAAC;IACP,CAAC,EACD,EAAE,CACF,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,IAAwB,EAAE,EAAE;QAClE,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,SAAiB,EAAE,EAAE;QACxE,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,KAAK,EAAE,CAAC;YACX,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACP,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACF,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACN,eAAe;QACf,YAAY;QACZ,oBAAoB;QACpB,mBAAmB;QACnB,kBAAkB;QAClB,eAAe;QACf,uBAAuB;QACvB,sBAAsB;QACtB,gBAAgB;QAChB,iBAAiB;QACjB,eAAe;KACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { KeyboardEvent } from 'react';
2
+ export type VimMode = 'normal' | 'insert';
3
+ interface UseVimModeOptions {
4
+ enabled: boolean;
5
+ onSend: () => void;
6
+ textareaRef: React.RefObject<HTMLTextAreaElement>;
7
+ setMessage: (message: string) => void;
8
+ }
9
+ interface UseVimModeReturn {
10
+ vimMode: VimMode;
11
+ setVimMode: (mode: VimMode) => void;
12
+ handleVimNormalMode: (e: KeyboardEvent<HTMLTextAreaElement>) => boolean;
13
+ }
14
+ export declare function useVimMode({ enabled, onSend, textareaRef, setMessage, }: UseVimModeOptions): UseVimModeReturn;
15
+ export {};
16
+ //# sourceMappingURL=useVimMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVimMode.d.ts","sourceRoot":"","sources":["../../src/hooks/useVimMode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1C,UAAU,iBAAiB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAClD,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,UAAU,gBAAgB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,mBAAmB,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC;CACxE;AAED,wBAAgB,UAAU,CAAC,EAC1B,OAAO,EACP,MAAM,EACN,WAAW,EACX,UAAU,GACV,EAAE,iBAAiB,GAAG,gBAAgB,CA0RtC"}
@@ -0,0 +1,249 @@
1
+ import { useState, useCallback } from 'react';
2
+ export function useVimMode({ enabled, onSend, textareaRef, setMessage, }) {
3
+ const [vimMode, setVimMode] = useState(enabled ? 'normal' : 'insert');
4
+ const [vimPendingKey, setVimPendingKey] = useState('');
5
+ const findNextWordStart = useCallback((text, pos) => {
6
+ while (pos < text.length && /\S/.test(text[pos]))
7
+ pos++;
8
+ while (pos < text.length && /\s/.test(text[pos]))
9
+ pos++;
10
+ return Math.min(pos, text.length);
11
+ }, []);
12
+ const findNextWordEnd = useCallback((text, pos) => {
13
+ if (pos < text.length && /\S/.test(text[pos]))
14
+ pos++;
15
+ while (pos < text.length && /\s/.test(text[pos]))
16
+ pos++;
17
+ while (pos < text.length && /\S/.test(text[pos]))
18
+ pos++;
19
+ return Math.max(0, pos - 1);
20
+ }, []);
21
+ const findPrevWordStart = useCallback((text, pos) => {
22
+ pos = Math.max(0, pos - 1);
23
+ while (pos > 0 && /\s/.test(text[pos]))
24
+ pos--;
25
+ while (pos > 0 && /\S/.test(text[pos - 1]))
26
+ pos--;
27
+ return pos;
28
+ }, []);
29
+ const handleVimNormalMode = useCallback((e) => {
30
+ const textarea = textareaRef.current;
31
+ if (!textarea)
32
+ return false;
33
+ const key = e.key;
34
+ if (key === 'i') {
35
+ e.preventDefault();
36
+ setVimMode('insert');
37
+ return true;
38
+ }
39
+ if (key === 'a') {
40
+ e.preventDefault();
41
+ setVimMode('insert');
42
+ const pos = textarea.selectionStart;
43
+ setTimeout(() => {
44
+ textarea.setSelectionRange(pos + 1, pos + 1);
45
+ }, 0);
46
+ return true;
47
+ }
48
+ if (key === 'I') {
49
+ e.preventDefault();
50
+ setVimMode('insert');
51
+ const text = textarea.value;
52
+ const lineStart = text.lastIndexOf('\n', textarea.selectionStart - 1) + 1;
53
+ setTimeout(() => {
54
+ textarea.setSelectionRange(lineStart, lineStart);
55
+ }, 0);
56
+ return true;
57
+ }
58
+ if (key === 'A') {
59
+ e.preventDefault();
60
+ setVimMode('insert');
61
+ const text = textarea.value;
62
+ let lineEnd = text.indexOf('\n', textarea.selectionStart);
63
+ if (lineEnd === -1)
64
+ lineEnd = text.length;
65
+ setTimeout(() => {
66
+ textarea.setSelectionRange(lineEnd, lineEnd);
67
+ }, 0);
68
+ return true;
69
+ }
70
+ if (key === '0') {
71
+ e.preventDefault();
72
+ const text = textarea.value;
73
+ const lineStart = text.lastIndexOf('\n', textarea.selectionStart - 1) + 1;
74
+ textarea.setSelectionRange(lineStart, lineStart);
75
+ return true;
76
+ }
77
+ if (key === '$') {
78
+ e.preventDefault();
79
+ const text = textarea.value;
80
+ let lineEnd = text.indexOf('\n', textarea.selectionStart);
81
+ if (lineEnd === -1)
82
+ lineEnd = text.length;
83
+ textarea.setSelectionRange(lineEnd, lineEnd);
84
+ return true;
85
+ }
86
+ if (key === 'o') {
87
+ e.preventDefault();
88
+ setVimMode('insert');
89
+ const text = textarea.value;
90
+ let lineEnd = text.indexOf('\n', textarea.selectionStart);
91
+ if (lineEnd === -1)
92
+ lineEnd = text.length;
93
+ const newValue = `${text.slice(0, lineEnd)}\n${text.slice(lineEnd)}`;
94
+ setMessage(newValue);
95
+ setTimeout(() => {
96
+ textarea.setSelectionRange(lineEnd + 1, lineEnd + 1);
97
+ }, 0);
98
+ return true;
99
+ }
100
+ if (key === 'O') {
101
+ e.preventDefault();
102
+ setVimMode('insert');
103
+ const text = textarea.value;
104
+ const lineStart = text.lastIndexOf('\n', textarea.selectionStart - 1) + 1;
105
+ const newValue = `${text.slice(0, lineStart)}\n${text.slice(lineStart)}`;
106
+ setMessage(newValue);
107
+ setTimeout(() => {
108
+ textarea.setSelectionRange(lineStart, lineStart);
109
+ }, 0);
110
+ return true;
111
+ }
112
+ if (vimPendingKey === 'f' && key.length === 1 && key !== 'Escape') {
113
+ e.preventDefault();
114
+ const text = textarea.value;
115
+ const currentLine = text.slice(text.lastIndexOf('\n', textarea.selectionStart - 1) + 1, text.indexOf('\n', textarea.selectionStart) === -1
116
+ ? text.length
117
+ : text.indexOf('\n', textarea.selectionStart));
118
+ const posInLine = textarea.selectionStart -
119
+ text.lastIndexOf('\n', textarea.selectionStart - 1) -
120
+ 1;
121
+ const charIndex = currentLine.indexOf(key, posInLine + 1);
122
+ if (charIndex !== -1) {
123
+ const newPos = text.lastIndexOf('\n', textarea.selectionStart - 1) + 1 + charIndex;
124
+ textarea.setSelectionRange(newPos, newPos);
125
+ }
126
+ setVimPendingKey('');
127
+ return true;
128
+ }
129
+ if (key === 'f') {
130
+ e.preventDefault();
131
+ setVimPendingKey('f');
132
+ setTimeout(() => setVimPendingKey(''), 2000);
133
+ return true;
134
+ }
135
+ if (key === 'd') {
136
+ if (vimPendingKey === 'd') {
137
+ e.preventDefault();
138
+ const text = textarea.value;
139
+ const lineStart = text.lastIndexOf('\n', textarea.selectionStart - 1) + 1;
140
+ let lineEnd = text.indexOf('\n', textarea.selectionStart);
141
+ if (lineEnd === -1)
142
+ lineEnd = text.length;
143
+ else
144
+ lineEnd += 1;
145
+ const newValue = text.slice(0, lineStart) + text.slice(lineEnd);
146
+ setMessage(newValue);
147
+ setVimPendingKey('');
148
+ setTimeout(() => {
149
+ textarea.setSelectionRange(lineStart, lineStart);
150
+ }, 0);
151
+ return true;
152
+ }
153
+ e.preventDefault();
154
+ setVimPendingKey('d');
155
+ setTimeout(() => setVimPendingKey(''), 1000);
156
+ return true;
157
+ }
158
+ if (key === 'Enter') {
159
+ e.preventDefault();
160
+ onSend();
161
+ return true;
162
+ }
163
+ if (key === 'Escape') {
164
+ e.preventDefault();
165
+ return true;
166
+ }
167
+ if (key === 'w') {
168
+ e.preventDefault();
169
+ const text = textarea.value;
170
+ const newPos = findNextWordStart(text, textarea.selectionStart);
171
+ textarea.setSelectionRange(newPos, newPos);
172
+ return true;
173
+ }
174
+ if (key === 'e') {
175
+ e.preventDefault();
176
+ const text = textarea.value;
177
+ const newPos = findNextWordEnd(text, textarea.selectionStart);
178
+ textarea.setSelectionRange(newPos, newPos);
179
+ return true;
180
+ }
181
+ if (key === 'b') {
182
+ e.preventDefault();
183
+ const text = textarea.value;
184
+ const newPos = findPrevWordStart(text, textarea.selectionStart);
185
+ textarea.setSelectionRange(newPos, newPos);
186
+ return true;
187
+ }
188
+ if (key === 'x') {
189
+ e.preventDefault();
190
+ const text = textarea.value;
191
+ const pos = textarea.selectionStart;
192
+ if (pos < text.length) {
193
+ const newValue = text.slice(0, pos) + text.slice(pos + 1);
194
+ setMessage(newValue);
195
+ setTimeout(() => {
196
+ textarea.setSelectionRange(pos, pos);
197
+ }, 0);
198
+ }
199
+ return true;
200
+ }
201
+ if (key === 's') {
202
+ e.preventDefault();
203
+ const text = textarea.value;
204
+ const pos = textarea.selectionStart;
205
+ if (pos < text.length) {
206
+ const newValue = text.slice(0, pos) + text.slice(pos + 1);
207
+ setMessage(newValue);
208
+ setVimMode('insert');
209
+ setTimeout(() => {
210
+ textarea.setSelectionRange(pos, pos);
211
+ }, 0);
212
+ }
213
+ else {
214
+ setVimMode('insert');
215
+ }
216
+ return true;
217
+ }
218
+ if (key === 'S') {
219
+ e.preventDefault();
220
+ const text = textarea.value;
221
+ const lineStart = text.lastIndexOf('\n', textarea.selectionStart - 1) + 1;
222
+ let lineEnd = text.indexOf('\n', textarea.selectionStart);
223
+ if (lineEnd === -1)
224
+ lineEnd = text.length;
225
+ const newValue = text.slice(0, lineStart) + text.slice(lineEnd);
226
+ setMessage(newValue);
227
+ setVimMode('insert');
228
+ setTimeout(() => {
229
+ textarea.setSelectionRange(lineStart, lineStart);
230
+ }, 0);
231
+ return true;
232
+ }
233
+ return false;
234
+ }, [
235
+ vimPendingKey,
236
+ onSend,
237
+ textareaRef,
238
+ setMessage,
239
+ findNextWordStart,
240
+ findNextWordEnd,
241
+ findPrevWordStart,
242
+ ]);
243
+ return {
244
+ vimMode,
245
+ setVimMode,
246
+ handleVimNormalMode,
247
+ };
248
+ }
249
+ //# sourceMappingURL=useVimMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVimMode.js","sourceRoot":"","sources":["../../src/hooks/useVimMode.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agi-cli/web-sdk",
3
- "version": "0.1.84",
3
+ "version": "0.1.86",
4
4
  "description": "Reusable React components, hooks, and utilities for building AGI CLI web interfaces",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -58,7 +58,7 @@
58
58
  "directory": "packages/web-sdk"
59
59
  },
60
60
  "dependencies": {
61
- "@agi-cli/api": "0.1.84",
61
+ "@agi-cli/api": "0.1.86",
62
62
  "axios": "^1.7.9",
63
63
  "fuse.js": "^7.1.0"
64
64
  },