@vybestack/llxprt-code 0.1.14 → 0.1.15
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/README.md +53 -0
- package/dist/package.json +4 -5
- package/dist/src/config/extension.d.ts +1 -0
- package/dist/src/config/extension.js +4 -0
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/settings.d.ts +2 -1
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/gemini.d.ts +1 -0
- package/dist/src/gemini.js +35 -15
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/services/BuiltinCommandLoader.js +2 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/CommandService.d.ts +8 -4
- package/dist/src/services/CommandService.js +24 -8
- package/dist/src/services/CommandService.js.map +1 -1
- package/dist/src/services/FileCommandLoader.d.ts +15 -3
- package/dist/src/services/FileCommandLoader.js +94 -42
- package/dist/src/services/FileCommandLoader.js.map +1 -1
- package/dist/src/services/McpPromptLoader.d.ts +25 -0
- package/dist/src/services/McpPromptLoader.js +192 -0
- package/dist/src/services/McpPromptLoader.js.map +1 -0
- package/dist/src/services/prompt-processors/shellProcessor.d.ts +32 -0
- package/dist/src/services/prompt-processors/shellProcessor.js +77 -0
- package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -0
- package/dist/src/services/prompt-processors/types.d.ts +4 -0
- package/dist/src/services/prompt-processors/types.js +4 -0
- package/dist/src/services/prompt-processors/types.js.map +1 -1
- package/dist/src/ui/App.js +312 -195
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +39 -1
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/initCommand.d.ts +7 -0
- package/dist/src/ui/commands/initCommand.js +76 -0
- package/dist/src/ui/commands/initCommand.js.map +1 -0
- package/dist/src/ui/commands/mcpCommand.js +53 -8
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +22 -3
- package/dist/src/ui/commands/types.js +1 -0
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/commands/vimCommand.js +0 -7
- package/dist/src/ui/commands/vimCommand.js.map +1 -1
- package/dist/src/ui/components/ContextSummaryDisplay.d.ts +3 -3
- package/dist/src/ui/components/ContextSummaryDisplay.js +8 -8
- package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
- package/dist/src/ui/components/Footer.d.ts +1 -0
- package/dist/src/ui/components/Footer.js +2 -2
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/Header.js +1 -1
- package/dist/src/ui/components/Header.js.map +1 -1
- package/dist/src/ui/components/Help.js +2 -2
- package/dist/src/ui/components/Help.js.map +1 -1
- package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +4 -4
- package/dist/src/ui/components/IDEContextDetailDisplay.js +5 -7
- package/dist/src/ui/components/IDEContextDetailDisplay.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.d.ts +2 -0
- package/dist/src/ui/components/InputPrompt.js +5 -1
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.d.ts +15 -0
- package/dist/src/ui/components/ShellConfirmationDialog.js +45 -0
- package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -0
- package/dist/src/ui/components/Tips.js +1 -1
- package/dist/src/ui/components/Tips.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.d.ts +270 -2
- package/dist/src/ui/components/shared/text-buffer.js +415 -70
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +72 -0
- package/dist/src/ui/components/shared/vim-buffer-actions.js +565 -0
- package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -0
- package/dist/src/ui/contexts/VimModeContext.js +2 -2
- package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -0
- package/dist/src/ui/hooks/shellCommandProcessor.js +139 -200
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +7 -3
- package/dist/src/ui/hooks/slashCommandProcessor.js +208 -129
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useCompletion.js +7 -2
- package/dist/src/ui/hooks/useCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useConsoleMessages.js +53 -37
- package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +14 -2
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useKeypress.js +5 -2
- package/dist/src/ui/hooks/useKeypress.js.map +1 -1
- package/dist/src/ui/hooks/useReactToolScheduler.js +0 -1
- package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
- package/dist/src/ui/hooks/vim.d.ts +28 -0
- package/dist/src/ui/hooks/vim.js +630 -0
- package/dist/src/ui/hooks/vim.js.map +1 -0
- package/dist/src/ui/themes/theme-manager.js +10 -1
- package/dist/src/ui/themes/theme-manager.js.map +1 -1
- package/dist/src/ui/themes/theme.d.ts +1 -0
- package/dist/src/ui/themes/theme.js +19 -4
- package/dist/src/ui/themes/theme.js.map +1 -1
- package/dist/src/ui/utils/textUtils.d.ts +0 -8
- package/dist/src/ui/utils/textUtils.js +0 -22
- package/dist/src/ui/utils/textUtils.js.map +1 -1
- package/dist/src/ui/utils/updateCheck.d.ts +7 -1
- package/dist/src/ui/utils/updateCheck.js +17 -28
- package/dist/src/ui/utils/updateCheck.js.map +1 -1
- package/dist/src/utils/events.d.ts +11 -0
- package/dist/src/utils/events.js +13 -0
- package/dist/src/utils/events.js.map +1 -0
- package/dist/src/utils/handleAutoUpdate.d.ts +10 -0
- package/dist/src/utils/handleAutoUpdate.js +97 -0
- package/dist/src/utils/handleAutoUpdate.js.map +1 -0
- package/dist/src/utils/installationInfo.d.ts +23 -0
- package/dist/src/utils/installationInfo.js +154 -0
- package/dist/src/utils/installationInfo.js.map +1 -0
- package/dist/src/utils/updateEventEmitter.d.ts +11 -0
- package/dist/src/utils/updateEventEmitter.js +12 -0
- package/dist/src/utils/updateEventEmitter.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -5
@@ -0,0 +1,565 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import { findNextWordStart, findPrevWordStart, findWordEnd, getOffsetFromPosition, getPositionFromOffsets, getLineRangeOffsets, replaceRangeInternal, pushUndo, } from './text-buffer.js';
|
7
|
+
import { cpLen } from '../../utils/textUtils.js';
|
8
|
+
export function handleVimAction(state, action) {
|
9
|
+
const { lines, cursorRow, cursorCol } = state;
|
10
|
+
// Cache text join to avoid repeated calculations for word operations
|
11
|
+
let text = null;
|
12
|
+
const getText = () => text ?? (text = lines.join('\n'));
|
13
|
+
switch (action.type) {
|
14
|
+
case 'vim_delete_word_forward': {
|
15
|
+
const { count } = action.payload;
|
16
|
+
const currentOffset = getOffsetFromPosition(cursorRow, cursorCol, lines);
|
17
|
+
let endOffset = currentOffset;
|
18
|
+
let searchOffset = currentOffset;
|
19
|
+
for (let i = 0; i < count; i++) {
|
20
|
+
const nextWordOffset = findNextWordStart(getText(), searchOffset);
|
21
|
+
if (nextWordOffset > searchOffset) {
|
22
|
+
searchOffset = nextWordOffset;
|
23
|
+
endOffset = nextWordOffset;
|
24
|
+
}
|
25
|
+
else {
|
26
|
+
// If no next word, delete to end of current word
|
27
|
+
const wordEndOffset = findWordEnd(getText(), searchOffset);
|
28
|
+
endOffset = Math.min(wordEndOffset + 1, getText().length);
|
29
|
+
break;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
if (endOffset > currentOffset) {
|
33
|
+
const nextState = pushUndo(state);
|
34
|
+
const { startRow, startCol, endRow, endCol } = getPositionFromOffsets(currentOffset, endOffset, nextState.lines);
|
35
|
+
return replaceRangeInternal(nextState, startRow, startCol, endRow, endCol, '');
|
36
|
+
}
|
37
|
+
return state;
|
38
|
+
}
|
39
|
+
case 'vim_delete_word_backward': {
|
40
|
+
const { count } = action.payload;
|
41
|
+
const currentOffset = getOffsetFromPosition(cursorRow, cursorCol, lines);
|
42
|
+
let startOffset = currentOffset;
|
43
|
+
let searchOffset = currentOffset;
|
44
|
+
for (let i = 0; i < count; i++) {
|
45
|
+
const prevWordOffset = findPrevWordStart(getText(), searchOffset);
|
46
|
+
if (prevWordOffset < searchOffset) {
|
47
|
+
searchOffset = prevWordOffset;
|
48
|
+
startOffset = prevWordOffset;
|
49
|
+
}
|
50
|
+
else {
|
51
|
+
break;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
if (startOffset < currentOffset) {
|
55
|
+
const nextState = pushUndo(state);
|
56
|
+
const { startRow, startCol, endRow, endCol } = getPositionFromOffsets(startOffset, currentOffset, nextState.lines);
|
57
|
+
const newState = replaceRangeInternal(nextState, startRow, startCol, endRow, endCol, '');
|
58
|
+
// Cursor is already at the correct position after deletion
|
59
|
+
return newState;
|
60
|
+
}
|
61
|
+
return state;
|
62
|
+
}
|
63
|
+
case 'vim_delete_word_end': {
|
64
|
+
const { count } = action.payload;
|
65
|
+
const currentOffset = getOffsetFromPosition(cursorRow, cursorCol, lines);
|
66
|
+
let offset = currentOffset;
|
67
|
+
let endOffset = currentOffset;
|
68
|
+
for (let i = 0; i < count; i++) {
|
69
|
+
const wordEndOffset = findWordEnd(getText(), offset);
|
70
|
+
if (wordEndOffset >= offset) {
|
71
|
+
endOffset = wordEndOffset + 1; // Include the character at word end
|
72
|
+
// For next iteration, move to start of next word
|
73
|
+
if (i < count - 1) {
|
74
|
+
const nextWordStart = findNextWordStart(getText(), wordEndOffset + 1);
|
75
|
+
offset = nextWordStart;
|
76
|
+
if (nextWordStart <= wordEndOffset) {
|
77
|
+
break; // No more words
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
else {
|
82
|
+
break;
|
83
|
+
}
|
84
|
+
}
|
85
|
+
endOffset = Math.min(endOffset, getText().length);
|
86
|
+
if (endOffset > currentOffset) {
|
87
|
+
const nextState = pushUndo(state);
|
88
|
+
const { startRow, startCol, endRow, endCol } = getPositionFromOffsets(currentOffset, endOffset, nextState.lines);
|
89
|
+
return replaceRangeInternal(nextState, startRow, startCol, endRow, endCol, '');
|
90
|
+
}
|
91
|
+
return state;
|
92
|
+
}
|
93
|
+
case 'vim_change_word_forward': {
|
94
|
+
const { count } = action.payload;
|
95
|
+
const currentOffset = getOffsetFromPosition(cursorRow, cursorCol, lines);
|
96
|
+
let searchOffset = currentOffset;
|
97
|
+
let endOffset = currentOffset;
|
98
|
+
for (let i = 0; i < count; i++) {
|
99
|
+
const nextWordOffset = findNextWordStart(getText(), searchOffset);
|
100
|
+
if (nextWordOffset > searchOffset) {
|
101
|
+
searchOffset = nextWordOffset;
|
102
|
+
endOffset = nextWordOffset;
|
103
|
+
}
|
104
|
+
else {
|
105
|
+
// If no next word, change to end of current word
|
106
|
+
const wordEndOffset = findWordEnd(getText(), searchOffset);
|
107
|
+
endOffset = Math.min(wordEndOffset + 1, getText().length);
|
108
|
+
break;
|
109
|
+
}
|
110
|
+
}
|
111
|
+
if (endOffset > currentOffset) {
|
112
|
+
const nextState = pushUndo(state);
|
113
|
+
const { startRow, startCol, endRow, endCol } = getPositionFromOffsets(currentOffset, endOffset, nextState.lines);
|
114
|
+
return replaceRangeInternal(nextState, startRow, startCol, endRow, endCol, '');
|
115
|
+
}
|
116
|
+
return state;
|
117
|
+
}
|
118
|
+
case 'vim_change_word_backward': {
|
119
|
+
const { count } = action.payload;
|
120
|
+
const currentOffset = getOffsetFromPosition(cursorRow, cursorCol, lines);
|
121
|
+
let startOffset = currentOffset;
|
122
|
+
let searchOffset = currentOffset;
|
123
|
+
for (let i = 0; i < count; i++) {
|
124
|
+
const prevWordOffset = findPrevWordStart(getText(), searchOffset);
|
125
|
+
if (prevWordOffset < searchOffset) {
|
126
|
+
searchOffset = prevWordOffset;
|
127
|
+
startOffset = prevWordOffset;
|
128
|
+
}
|
129
|
+
else {
|
130
|
+
break;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
if (startOffset < currentOffset) {
|
134
|
+
const nextState = pushUndo(state);
|
135
|
+
const { startRow, startCol, endRow, endCol } = getPositionFromOffsets(startOffset, currentOffset, nextState.lines);
|
136
|
+
return replaceRangeInternal(nextState, startRow, startCol, endRow, endCol, '');
|
137
|
+
}
|
138
|
+
return state;
|
139
|
+
}
|
140
|
+
case 'vim_change_word_end': {
|
141
|
+
const { count } = action.payload;
|
142
|
+
const currentOffset = getOffsetFromPosition(cursorRow, cursorCol, lines);
|
143
|
+
let offset = currentOffset;
|
144
|
+
let endOffset = currentOffset;
|
145
|
+
for (let i = 0; i < count; i++) {
|
146
|
+
const wordEndOffset = findWordEnd(getText(), offset);
|
147
|
+
if (wordEndOffset >= offset) {
|
148
|
+
endOffset = wordEndOffset + 1; // Include the character at word end
|
149
|
+
// For next iteration, move to start of next word
|
150
|
+
if (i < count - 1) {
|
151
|
+
const nextWordStart = findNextWordStart(getText(), wordEndOffset + 1);
|
152
|
+
offset = nextWordStart;
|
153
|
+
if (nextWordStart <= wordEndOffset) {
|
154
|
+
break; // No more words
|
155
|
+
}
|
156
|
+
}
|
157
|
+
}
|
158
|
+
else {
|
159
|
+
break;
|
160
|
+
}
|
161
|
+
}
|
162
|
+
endOffset = Math.min(endOffset, getText().length);
|
163
|
+
if (endOffset !== currentOffset) {
|
164
|
+
const nextState = pushUndo(state);
|
165
|
+
const { startRow, startCol, endRow, endCol } = getPositionFromOffsets(Math.min(currentOffset, endOffset), Math.max(currentOffset, endOffset), nextState.lines);
|
166
|
+
return replaceRangeInternal(nextState, startRow, startCol, endRow, endCol, '');
|
167
|
+
}
|
168
|
+
return state;
|
169
|
+
}
|
170
|
+
case 'vim_delete_line': {
|
171
|
+
const { count } = action.payload;
|
172
|
+
if (lines.length === 0)
|
173
|
+
return state;
|
174
|
+
const linesToDelete = Math.min(count, lines.length - cursorRow);
|
175
|
+
const totalLines = lines.length;
|
176
|
+
if (totalLines === 1 || linesToDelete >= totalLines) {
|
177
|
+
// If there's only one line, or we're deleting all remaining lines,
|
178
|
+
// clear the content but keep one empty line (text editors should never be completely empty)
|
179
|
+
const nextState = pushUndo(state);
|
180
|
+
return {
|
181
|
+
...nextState,
|
182
|
+
lines: [''],
|
183
|
+
cursorRow: 0,
|
184
|
+
cursorCol: 0,
|
185
|
+
preferredCol: null,
|
186
|
+
};
|
187
|
+
}
|
188
|
+
const nextState = pushUndo(state);
|
189
|
+
const newLines = [...nextState.lines];
|
190
|
+
newLines.splice(cursorRow, linesToDelete);
|
191
|
+
// Adjust cursor position
|
192
|
+
const newCursorRow = Math.min(cursorRow, newLines.length - 1);
|
193
|
+
const newCursorCol = 0; // Vim places cursor at beginning of line after dd
|
194
|
+
return {
|
195
|
+
...nextState,
|
196
|
+
lines: newLines,
|
197
|
+
cursorRow: newCursorRow,
|
198
|
+
cursorCol: newCursorCol,
|
199
|
+
preferredCol: null,
|
200
|
+
};
|
201
|
+
}
|
202
|
+
case 'vim_change_line': {
|
203
|
+
const { count } = action.payload;
|
204
|
+
if (lines.length === 0)
|
205
|
+
return state;
|
206
|
+
const linesToChange = Math.min(count, lines.length - cursorRow);
|
207
|
+
const nextState = pushUndo(state);
|
208
|
+
const { startOffset, endOffset } = getLineRangeOffsets(cursorRow, linesToChange, nextState.lines);
|
209
|
+
const { startRow, startCol, endRow, endCol } = getPositionFromOffsets(startOffset, endOffset, nextState.lines);
|
210
|
+
return replaceRangeInternal(nextState, startRow, startCol, endRow, endCol, '');
|
211
|
+
}
|
212
|
+
case 'vim_delete_to_end_of_line': {
|
213
|
+
const currentLine = lines[cursorRow] || '';
|
214
|
+
if (cursorCol < currentLine.length) {
|
215
|
+
const nextState = pushUndo(state);
|
216
|
+
return replaceRangeInternal(nextState, cursorRow, cursorCol, cursorRow, currentLine.length, '');
|
217
|
+
}
|
218
|
+
return state;
|
219
|
+
}
|
220
|
+
case 'vim_change_to_end_of_line': {
|
221
|
+
const currentLine = lines[cursorRow] || '';
|
222
|
+
if (cursorCol < currentLine.length) {
|
223
|
+
const nextState = pushUndo(state);
|
224
|
+
return replaceRangeInternal(nextState, cursorRow, cursorCol, cursorRow, currentLine.length, '');
|
225
|
+
}
|
226
|
+
return state;
|
227
|
+
}
|
228
|
+
case 'vim_change_movement': {
|
229
|
+
const { movement, count } = action.payload;
|
230
|
+
const totalLines = lines.length;
|
231
|
+
switch (movement) {
|
232
|
+
case 'h': {
|
233
|
+
// Left
|
234
|
+
// Change N characters to the left
|
235
|
+
const startCol = Math.max(0, cursorCol - count);
|
236
|
+
return replaceRangeInternal(pushUndo(state), cursorRow, startCol, cursorRow, cursorCol, '');
|
237
|
+
}
|
238
|
+
case 'j': {
|
239
|
+
// Down
|
240
|
+
const linesToChange = Math.min(count, totalLines - cursorRow);
|
241
|
+
if (linesToChange > 0) {
|
242
|
+
if (totalLines === 1) {
|
243
|
+
const currentLine = state.lines[0] || '';
|
244
|
+
return replaceRangeInternal(pushUndo(state), 0, 0, 0, cpLen(currentLine), '');
|
245
|
+
}
|
246
|
+
else {
|
247
|
+
const nextState = pushUndo(state);
|
248
|
+
const { startOffset, endOffset } = getLineRangeOffsets(cursorRow, linesToChange, nextState.lines);
|
249
|
+
const { startRow, startCol, endRow, endCol } = getPositionFromOffsets(startOffset, endOffset, nextState.lines);
|
250
|
+
return replaceRangeInternal(nextState, startRow, startCol, endRow, endCol, '');
|
251
|
+
}
|
252
|
+
}
|
253
|
+
return state;
|
254
|
+
}
|
255
|
+
case 'k': {
|
256
|
+
// Up
|
257
|
+
const upLines = Math.min(count, cursorRow + 1);
|
258
|
+
if (upLines > 0) {
|
259
|
+
if (state.lines.length === 1) {
|
260
|
+
const currentLine = state.lines[0] || '';
|
261
|
+
return replaceRangeInternal(pushUndo(state), 0, 0, 0, cpLen(currentLine), '');
|
262
|
+
}
|
263
|
+
else {
|
264
|
+
const startRow = Math.max(0, cursorRow - count + 1);
|
265
|
+
const linesToChange = cursorRow - startRow + 1;
|
266
|
+
const nextState = pushUndo(state);
|
267
|
+
const { startOffset, endOffset } = getLineRangeOffsets(startRow, linesToChange, nextState.lines);
|
268
|
+
const { startRow: newStartRow, startCol, endRow, endCol, } = getPositionFromOffsets(startOffset, endOffset, nextState.lines);
|
269
|
+
const resultState = replaceRangeInternal(nextState, newStartRow, startCol, endRow, endCol, '');
|
270
|
+
return {
|
271
|
+
...resultState,
|
272
|
+
cursorRow: startRow,
|
273
|
+
cursorCol: 0,
|
274
|
+
};
|
275
|
+
}
|
276
|
+
}
|
277
|
+
return state;
|
278
|
+
}
|
279
|
+
case 'l': {
|
280
|
+
// Right
|
281
|
+
// Change N characters to the right
|
282
|
+
return replaceRangeInternal(pushUndo(state), cursorRow, cursorCol, cursorRow, Math.min(cpLen(lines[cursorRow] || ''), cursorCol + count), '');
|
283
|
+
}
|
284
|
+
default:
|
285
|
+
return state;
|
286
|
+
}
|
287
|
+
}
|
288
|
+
case 'vim_move_left': {
|
289
|
+
const { count } = action.payload;
|
290
|
+
const { cursorRow, cursorCol, lines } = state;
|
291
|
+
let newRow = cursorRow;
|
292
|
+
let newCol = cursorCol;
|
293
|
+
for (let i = 0; i < count; i++) {
|
294
|
+
if (newCol > 0) {
|
295
|
+
newCol--;
|
296
|
+
}
|
297
|
+
else if (newRow > 0) {
|
298
|
+
// Move to end of previous line
|
299
|
+
newRow--;
|
300
|
+
const prevLine = lines[newRow] || '';
|
301
|
+
const prevLineLength = cpLen(prevLine);
|
302
|
+
// Position on last character, or column 0 for empty lines
|
303
|
+
newCol = prevLineLength === 0 ? 0 : prevLineLength - 1;
|
304
|
+
}
|
305
|
+
}
|
306
|
+
return {
|
307
|
+
...state,
|
308
|
+
cursorRow: newRow,
|
309
|
+
cursorCol: newCol,
|
310
|
+
preferredCol: null,
|
311
|
+
};
|
312
|
+
}
|
313
|
+
case 'vim_move_right': {
|
314
|
+
const { count } = action.payload;
|
315
|
+
const { cursorRow, cursorCol, lines } = state;
|
316
|
+
let newRow = cursorRow;
|
317
|
+
let newCol = cursorCol;
|
318
|
+
for (let i = 0; i < count; i++) {
|
319
|
+
const currentLine = lines[newRow] || '';
|
320
|
+
const lineLength = cpLen(currentLine);
|
321
|
+
// Don't move past the last character of the line
|
322
|
+
// For empty lines, stay at column 0; for non-empty lines, don't go past last character
|
323
|
+
if (lineLength === 0) {
|
324
|
+
// Empty line - try to move to next line
|
325
|
+
if (newRow < lines.length - 1) {
|
326
|
+
newRow++;
|
327
|
+
newCol = 0;
|
328
|
+
}
|
329
|
+
}
|
330
|
+
else if (newCol < lineLength - 1) {
|
331
|
+
newCol++;
|
332
|
+
}
|
333
|
+
else if (newRow < lines.length - 1) {
|
334
|
+
// At end of line - move to beginning of next line
|
335
|
+
newRow++;
|
336
|
+
newCol = 0;
|
337
|
+
}
|
338
|
+
}
|
339
|
+
return {
|
340
|
+
...state,
|
341
|
+
cursorRow: newRow,
|
342
|
+
cursorCol: newCol,
|
343
|
+
preferredCol: null,
|
344
|
+
};
|
345
|
+
}
|
346
|
+
case 'vim_move_up': {
|
347
|
+
const { count } = action.payload;
|
348
|
+
const { cursorRow, cursorCol, lines } = state;
|
349
|
+
const newRow = Math.max(0, cursorRow - count);
|
350
|
+
const newCol = Math.min(cursorCol, cpLen(lines[newRow] || ''));
|
351
|
+
return {
|
352
|
+
...state,
|
353
|
+
cursorRow: newRow,
|
354
|
+
cursorCol: newCol,
|
355
|
+
preferredCol: null,
|
356
|
+
};
|
357
|
+
}
|
358
|
+
case 'vim_move_down': {
|
359
|
+
const { count } = action.payload;
|
360
|
+
const { cursorRow, cursorCol, lines } = state;
|
361
|
+
const newRow = Math.min(lines.length - 1, cursorRow + count);
|
362
|
+
const newCol = Math.min(cursorCol, cpLen(lines[newRow] || ''));
|
363
|
+
return {
|
364
|
+
...state,
|
365
|
+
cursorRow: newRow,
|
366
|
+
cursorCol: newCol,
|
367
|
+
preferredCol: null,
|
368
|
+
};
|
369
|
+
}
|
370
|
+
case 'vim_move_word_forward': {
|
371
|
+
const { count } = action.payload;
|
372
|
+
let offset = getOffsetFromPosition(cursorRow, cursorCol, lines);
|
373
|
+
for (let i = 0; i < count; i++) {
|
374
|
+
const nextWordOffset = findNextWordStart(getText(), offset);
|
375
|
+
if (nextWordOffset > offset) {
|
376
|
+
offset = nextWordOffset;
|
377
|
+
}
|
378
|
+
else {
|
379
|
+
// No more words to move to
|
380
|
+
break;
|
381
|
+
}
|
382
|
+
}
|
383
|
+
const { startRow, startCol } = getPositionFromOffsets(offset, offset, lines);
|
384
|
+
return {
|
385
|
+
...state,
|
386
|
+
cursorRow: startRow,
|
387
|
+
cursorCol: startCol,
|
388
|
+
preferredCol: null,
|
389
|
+
};
|
390
|
+
}
|
391
|
+
case 'vim_move_word_backward': {
|
392
|
+
const { count } = action.payload;
|
393
|
+
let offset = getOffsetFromPosition(cursorRow, cursorCol, lines);
|
394
|
+
for (let i = 0; i < count; i++) {
|
395
|
+
offset = findPrevWordStart(getText(), offset);
|
396
|
+
}
|
397
|
+
const { startRow, startCol } = getPositionFromOffsets(offset, offset, lines);
|
398
|
+
return {
|
399
|
+
...state,
|
400
|
+
cursorRow: startRow,
|
401
|
+
cursorCol: startCol,
|
402
|
+
preferredCol: null,
|
403
|
+
};
|
404
|
+
}
|
405
|
+
case 'vim_move_word_end': {
|
406
|
+
const { count } = action.payload;
|
407
|
+
let offset = getOffsetFromPosition(cursorRow, cursorCol, lines);
|
408
|
+
for (let i = 0; i < count; i++) {
|
409
|
+
offset = findWordEnd(getText(), offset);
|
410
|
+
}
|
411
|
+
const { startRow, startCol } = getPositionFromOffsets(offset, offset, lines);
|
412
|
+
return {
|
413
|
+
...state,
|
414
|
+
cursorRow: startRow,
|
415
|
+
cursorCol: startCol,
|
416
|
+
preferredCol: null,
|
417
|
+
};
|
418
|
+
}
|
419
|
+
case 'vim_delete_char': {
|
420
|
+
const { count } = action.payload;
|
421
|
+
const { cursorRow, cursorCol, lines } = state;
|
422
|
+
const currentLine = lines[cursorRow] || '';
|
423
|
+
const lineLength = cpLen(currentLine);
|
424
|
+
if (cursorCol < lineLength) {
|
425
|
+
const deleteCount = Math.min(count, lineLength - cursorCol);
|
426
|
+
const nextState = pushUndo(state);
|
427
|
+
return replaceRangeInternal(nextState, cursorRow, cursorCol, cursorRow, cursorCol + deleteCount, '');
|
428
|
+
}
|
429
|
+
return state;
|
430
|
+
}
|
431
|
+
case 'vim_insert_at_cursor': {
|
432
|
+
// Just return state - mode change is handled elsewhere
|
433
|
+
return state;
|
434
|
+
}
|
435
|
+
case 'vim_append_at_cursor': {
|
436
|
+
const { cursorRow, cursorCol, lines } = state;
|
437
|
+
const currentLine = lines[cursorRow] || '';
|
438
|
+
const newCol = cursorCol < cpLen(currentLine) ? cursorCol + 1 : cursorCol;
|
439
|
+
return {
|
440
|
+
...state,
|
441
|
+
cursorCol: newCol,
|
442
|
+
preferredCol: null,
|
443
|
+
};
|
444
|
+
}
|
445
|
+
case 'vim_open_line_below': {
|
446
|
+
const { cursorRow, lines } = state;
|
447
|
+
const nextState = pushUndo(state);
|
448
|
+
// Insert newline at end of current line
|
449
|
+
const endOfLine = cpLen(lines[cursorRow] || '');
|
450
|
+
return replaceRangeInternal(nextState, cursorRow, endOfLine, cursorRow, endOfLine, '\n');
|
451
|
+
}
|
452
|
+
case 'vim_open_line_above': {
|
453
|
+
const { cursorRow } = state;
|
454
|
+
const nextState = pushUndo(state);
|
455
|
+
// Insert newline at beginning of current line
|
456
|
+
const resultState = replaceRangeInternal(nextState, cursorRow, 0, cursorRow, 0, '\n');
|
457
|
+
// Move cursor to the new line above
|
458
|
+
return {
|
459
|
+
...resultState,
|
460
|
+
cursorRow,
|
461
|
+
cursorCol: 0,
|
462
|
+
};
|
463
|
+
}
|
464
|
+
case 'vim_append_at_line_end': {
|
465
|
+
const { cursorRow, lines } = state;
|
466
|
+
const lineLength = cpLen(lines[cursorRow] || '');
|
467
|
+
return {
|
468
|
+
...state,
|
469
|
+
cursorCol: lineLength,
|
470
|
+
preferredCol: null,
|
471
|
+
};
|
472
|
+
}
|
473
|
+
case 'vim_insert_at_line_start': {
|
474
|
+
const { cursorRow, lines } = state;
|
475
|
+
const currentLine = lines[cursorRow] || '';
|
476
|
+
let col = 0;
|
477
|
+
// Find first non-whitespace character using proper Unicode handling
|
478
|
+
const lineCodePoints = [...currentLine]; // Proper Unicode iteration
|
479
|
+
while (col < lineCodePoints.length && /\s/.test(lineCodePoints[col])) {
|
480
|
+
col++;
|
481
|
+
}
|
482
|
+
return {
|
483
|
+
...state,
|
484
|
+
cursorCol: col,
|
485
|
+
preferredCol: null,
|
486
|
+
};
|
487
|
+
}
|
488
|
+
case 'vim_move_to_line_start': {
|
489
|
+
return {
|
490
|
+
...state,
|
491
|
+
cursorCol: 0,
|
492
|
+
preferredCol: null,
|
493
|
+
};
|
494
|
+
}
|
495
|
+
case 'vim_move_to_line_end': {
|
496
|
+
const { cursorRow, lines } = state;
|
497
|
+
const lineLength = cpLen(lines[cursorRow] || '');
|
498
|
+
return {
|
499
|
+
...state,
|
500
|
+
cursorCol: lineLength > 0 ? lineLength - 1 : 0,
|
501
|
+
preferredCol: null,
|
502
|
+
};
|
503
|
+
}
|
504
|
+
case 'vim_move_to_first_nonwhitespace': {
|
505
|
+
const { cursorRow, lines } = state;
|
506
|
+
const currentLine = lines[cursorRow] || '';
|
507
|
+
let col = 0;
|
508
|
+
// Find first non-whitespace character using proper Unicode handling
|
509
|
+
const lineCodePoints = [...currentLine]; // Proper Unicode iteration
|
510
|
+
while (col < lineCodePoints.length && /\s/.test(lineCodePoints[col])) {
|
511
|
+
col++;
|
512
|
+
}
|
513
|
+
return {
|
514
|
+
...state,
|
515
|
+
cursorCol: col,
|
516
|
+
preferredCol: null,
|
517
|
+
};
|
518
|
+
}
|
519
|
+
case 'vim_move_to_first_line': {
|
520
|
+
return {
|
521
|
+
...state,
|
522
|
+
cursorRow: 0,
|
523
|
+
cursorCol: 0,
|
524
|
+
preferredCol: null,
|
525
|
+
};
|
526
|
+
}
|
527
|
+
case 'vim_move_to_last_line': {
|
528
|
+
const { lines } = state;
|
529
|
+
const lastRow = lines.length - 1;
|
530
|
+
return {
|
531
|
+
...state,
|
532
|
+
cursorRow: lastRow,
|
533
|
+
cursorCol: 0,
|
534
|
+
preferredCol: null,
|
535
|
+
};
|
536
|
+
}
|
537
|
+
case 'vim_move_to_line': {
|
538
|
+
const { lineNumber } = action.payload;
|
539
|
+
const { lines } = state;
|
540
|
+
const targetRow = Math.min(Math.max(0, lineNumber - 1), lines.length - 1);
|
541
|
+
return {
|
542
|
+
...state,
|
543
|
+
cursorRow: targetRow,
|
544
|
+
cursorCol: 0,
|
545
|
+
preferredCol: null,
|
546
|
+
};
|
547
|
+
}
|
548
|
+
case 'vim_escape_insert_mode': {
|
549
|
+
// Move cursor left if not at beginning of line (vim behavior when exiting insert mode)
|
550
|
+
const { cursorCol } = state;
|
551
|
+
const newCol = cursorCol > 0 ? cursorCol - 1 : 0;
|
552
|
+
return {
|
553
|
+
...state,
|
554
|
+
cursorCol: newCol,
|
555
|
+
preferredCol: null,
|
556
|
+
};
|
557
|
+
}
|
558
|
+
default: {
|
559
|
+
// This should never happen if TypeScript is working correctly
|
560
|
+
const _exhaustiveCheck = action;
|
561
|
+
return state;
|
562
|
+
}
|
563
|
+
}
|
564
|
+
}
|
565
|
+
//# sourceMappingURL=vim-buffer-actions.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"vim-buffer-actions.js","sourceRoot":"","sources":["../../../../../src/ui/components/shared/vim-buffer-actions.ts"],"names":[],"mappings":"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"}
|
@@ -43,8 +43,8 @@ export const VimModeProvider = ({ children, settings, }) => {
|
|
43
43
|
};
|
44
44
|
export const useVimMode = () => {
|
45
45
|
const context = useContext(VimModeContext);
|
46
|
-
if (
|
47
|
-
throw new Error('useVimMode must be used within VimModeProvider');
|
46
|
+
if (context === undefined) {
|
47
|
+
throw new Error('useVimMode must be used within a VimModeProvider');
|
48
48
|
}
|
49
49
|
return context;
|
50
50
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"VimModeContext.js","sourceRoot":"","sources":["../../../../src/ui/contexts/VimModeContext.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,EACR,OAAO,GACR,MAAM,OAAO,CAAC;AACf,OAAO,EAAkB,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAWxE,MAAM,cAAc,GAAG,aAAa,CAAiC,SAAS,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,QAAQ,EACR,QAAQ,GAIT,EAAE,EAAE;IACH,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;IAC3D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CACpC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CACxC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,+CAA+C;QAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QACjD,aAAa,CAAC,OAAO,CAAC,CAAC;QACvB,wDAAwD;QACxD,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9B,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC;QAC7B,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxB,+CAA+C;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE3B,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE;QACvD,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,CAAC;QACL,UAAU;QACV,OAAO;QACP,gBAAgB;QAChB,UAAU,EAAE,kBAAkB;KAC/B,CAAC,EACF,CAAC,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAC5D,CAAC;IAEF,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YACzC,QAAQ,GACe,CAC3B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3C,IAAI,
|
1
|
+
{"version":3,"file":"VimModeContext.js","sourceRoot":"","sources":["../../../../src/ui/contexts/VimModeContext.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,EACR,OAAO,GACR,MAAM,OAAO,CAAC;AACf,OAAO,EAAkB,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAWxE,MAAM,cAAc,GAAG,aAAa,CAAiC,SAAS,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,QAAQ,EACR,QAAQ,GAIT,EAAE,EAAE;IACH,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;IAC3D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CACpC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CACxC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,+CAA+C;QAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QACjD,aAAa,CAAC,OAAO,CAAC,CAAC;QACvB,wDAAwD;QACxD,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9B,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC;QAC7B,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxB,+CAA+C;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE3B,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE;QACvD,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,CAAC;QACL,UAAU;QACV,OAAO;QACP,gBAAgB;QAChB,UAAU,EAAE,kBAAkB;KAC/B,CAAC,EACF,CAAC,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAC5D,CAAC;IAEF,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YACzC,QAAQ,GACe,CAC3B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
@@ -7,6 +7,7 @@ import { HistoryItemWithoutId } from '../types.js';
|
|
7
7
|
import { Config, GeminiClient } from '@vybestack/llxprt-code-core';
|
8
8
|
import { type PartListUnion } from '@google/genai';
|
9
9
|
import { UseHistoryManagerReturn } from './useHistoryManager.js';
|
10
|
+
export declare const OUTPUT_UPDATE_INTERVAL_MS = 1000;
|
10
11
|
/**
|
11
12
|
* Hook to process shell commands.
|
12
13
|
* Orchestrates command execution and updates history and agent context.
|