@vybestack/llxprt-code 0.1.21 → 0.1.23-nightly.250823.4e884e4a
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 +19 -0
- package/dist/package.json +3 -3
- package/dist/src/commands/mcp/add.js +11 -0
- package/dist/src/commands/mcp/add.js.map +1 -1
- package/dist/src/config/config.js +1 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/keyBindings.js +1 -0
- package/dist/src/config/keyBindings.js.map +1 -1
- package/dist/src/config/settings.d.ts +3 -0
- package/dist/src/config/settings.js +56 -39
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +24 -6
- package/dist/src/config/settingsSchema.js +24 -6
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/settingsSchema.test.js +1 -1
- package/dist/src/config/settingsSchema.test.js.map +1 -1
- package/dist/src/gemini.js +1 -1
- 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/integration-tests/ephemeral-settings.integration.test.js +47 -19
- package/dist/src/integration-tests/ephemeral-settings.integration.test.js.map +1 -1
- package/dist/src/nonInteractiveCli.js +3 -7
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/providers/providerManagerInstance.d.ts +2 -1
- package/dist/src/providers/providerManagerInstance.js +27 -22
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.js +2 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/FileCommandLoader.js +10 -8
- package/dist/src/services/FileCommandLoader.js.map +1 -1
- package/dist/src/services/prompt-processors/argumentProcessor.d.ts +2 -7
- package/dist/src/services/prompt-processors/argumentProcessor.js +2 -10
- package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -1
- package/dist/src/services/prompt-processors/shellProcessor.d.ts +16 -13
- package/dist/src/services/prompt-processors/shellProcessor.js +125 -40
- package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -1
- package/dist/src/services/prompt-processors/types.d.ts +2 -0
- package/dist/src/services/prompt-processors/types.js +2 -0
- package/dist/src/services/prompt-processors/types.js.map +1 -1
- package/dist/src/test-utils/render.d.ts +8 -0
- package/dist/src/test-utils/render.js +10 -0
- package/dist/src/test-utils/render.js.map +1 -0
- package/dist/src/ui/App.js +10 -7
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/colors.js +25 -2
- package/dist/src/ui/colors.js.map +1 -1
- package/dist/src/ui/commands/aboutCommand.js +4 -0
- package/dist/src/ui/commands/aboutCommand.js.map +1 -1
- package/dist/src/ui/commands/authCommand.js +3 -2
- package/dist/src/ui/commands/authCommand.js.map +1 -1
- package/dist/src/ui/commands/bugCommand.js +7 -1
- package/dist/src/ui/commands/bugCommand.js.map +1 -1
- package/dist/src/ui/commands/debugCommands.d.ts +22 -0
- package/dist/src/ui/commands/debugCommands.js +397 -0
- package/dist/src/ui/commands/debugCommands.js.map +1 -0
- package/dist/src/ui/commands/ideCommand.js +4 -7
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.js +6 -6
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/setCommand.js +41 -0
- package/dist/src/ui/commands/setCommand.js.map +1 -1
- package/dist/src/ui/commands/setCommand.test.js +4 -4
- package/dist/src/ui/commands/setCommand.test.js.map +1 -1
- package/dist/src/ui/components/AboutBox.d.ts +1 -0
- package/dist/src/ui/components/AboutBox.js +1 -1
- package/dist/src/ui/components/AboutBox.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.js +16 -5
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.test.js +11 -11
- package/dist/src/ui/components/AuthDialog.test.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.test.js +3 -3
- package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.test.js +1 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +14 -17
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.paste.test.js +10 -4
- package/dist/src/ui/components/InputPrompt.paste.test.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.js +332 -62
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js +72 -59
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.js +2 -1
- package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.test.js +5 -5
- package/dist/src/ui/components/ShellConfirmationDialog.test.js.map +1 -1
- package/dist/src/ui/components/StatsDisplay.js +10 -5
- package/dist/src/ui/components/StatsDisplay.js.map +1 -1
- package/dist/src/ui/components/TodoPanel.js +34 -6
- package/dist/src/ui/components/TodoPanel.js.map +1 -1
- package/dist/src/ui/components/messages/DiffRenderer.js +7 -3
- package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
- package/dist/src/ui/components/messages/DiffRenderer.test.js +27 -0
- package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -1
- package/dist/src/ui/components/messages/InfoMessage.js +2 -1
- package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +2 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.js +15 -14
- package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +3 -3
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js +14 -13
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.js +4 -4
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.d.ts +30 -0
- package/dist/src/ui/contexts/KeypressContext.js +313 -0
- package/dist/src/ui/contexts/KeypressContext.js.map +1 -0
- package/dist/src/ui/contexts/KeypressContext.test.d.ts +6 -0
- package/dist/src/ui/contexts/KeypressContext.test.js +219 -0
- package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -0
- package/dist/src/ui/contexts/SessionContext.d.ts +3 -0
- package/dist/src/ui/contexts/SessionContext.js +1 -0
- package/dist/src/ui/contexts/SessionContext.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.js +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.test.js +10 -3
- package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/index.d.ts +1 -0
- package/dist/src/ui/hooks/index.js +1 -0
- package/dist/src/ui/hooks/index.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.js +8 -13
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.test.js +7 -5
- package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js +30 -9
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAtCompletion.js +3 -5
- package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +28 -1
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useKeypress.d.ts +4 -24
- package/dist/src/ui/hooks/useKeypress.js +9 -330
- package/dist/src/ui/hooks/useKeypress.js.map +1 -1
- package/dist/src/ui/hooks/useKeypress.test.js +5 -0
- package/dist/src/ui/hooks/useKeypress.test.js.map +1 -1
- package/dist/src/ui/hooks/usePhraseCycler.js +1 -0
- package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.js +6 -2
- package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.test.d.ts +6 -0
- package/dist/src/ui/hooks/usePrivacySettings.test.js +154 -0
- package/dist/src/ui/hooks/usePrivacySettings.test.js.map +1 -0
- package/dist/src/ui/hooks/useToolScheduler.test.d.ts +6 -0
- package/dist/src/ui/hooks/useToolScheduler.test.js +841 -0
- package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -0
- package/dist/src/ui/themes/semantic-resolver.js +16 -7
- package/dist/src/ui/themes/semantic-resolver.js.map +1 -1
- package/dist/src/ui/themes/semantic-resolver.test.js +68 -32
- package/dist/src/ui/themes/semantic-resolver.test.js.map +1 -1
- package/dist/src/ui/themes/semantic-tokens.d.ts +18 -33
- package/dist/src/ui/themes/semantic-tokens.js +88 -1
- package/dist/src/ui/themes/semantic-tokens.js.map +1 -1
- package/dist/src/ui/themes/semantic-tokens.test.js +22 -5
- package/dist/src/ui/themes/semantic-tokens.test.js.map +1 -1
- package/dist/src/ui/themes/theme-compat.d.ts +1 -1
- package/dist/src/ui/themes/theme-compat.js +7 -2
- package/dist/src/ui/themes/theme-compat.js.map +1 -1
- package/dist/src/ui/themes/theme-manager.test.js +10 -1
- package/dist/src/ui/themes/theme-manager.test.js.map +1 -1
- package/dist/src/ui/types.d.ts +12 -1
- package/dist/src/ui/types.js +1 -0
- package/dist/src/ui/types.js.map +1 -1
- package/dist/src/ui/utils/InlineMarkdownRenderer.js +8 -1
- package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
- package/dist/src/ui/utils/computeStats.js +3 -1
- package/dist/src/ui/utils/computeStats.js.map +1 -1
- package/dist/src/ui/utils/platformConstants.d.ts +5 -0
- package/dist/src/ui/utils/platformConstants.js +5 -0
- package/dist/src/ui/utils/platformConstants.js.map +1 -1
- package/dist/src/utils/settingsUtils.d.ts +8 -0
- package/dist/src/utils/settingsUtils.js +16 -7
- package/dist/src/utils/settingsUtils.js.map +1 -1
- package/dist/src/utils/settingsUtils.test.js +6 -6
- package/dist/src/utils/settingsUtils.test.js.map +1 -1
- package/dist/src/zed-integration/fileSystemService.d.ts +19 -0
- package/dist/src/zed-integration/fileSystemService.js +43 -0
- package/dist/src/zed-integration/fileSystemService.js.map +1 -0
- package/dist/src/zed-integration/schema.d.ts +16 -16
- package/dist/src/zed-integration/zedIntegration.js +17 -4
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
@@ -3,346 +3,25 @@
|
|
3
3
|
* Copyright 2025 Google LLC
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
5
5
|
*/
|
6
|
-
import { useEffect
|
7
|
-
import {
|
8
|
-
import readline from 'readline';
|
9
|
-
import { PassThrough } from 'stream';
|
10
|
-
import { KITTY_CTRL_C, BACKSLASH_ENTER_DETECTION_WINDOW_MS, MAX_KITTY_SEQUENCE_LENGTH, } from '../utils/platformConstants.js';
|
11
|
-
import { FOCUS_IN, FOCUS_OUT } from './useFocus.js';
|
12
|
-
const ESC = '\u001B';
|
13
|
-
export const PASTE_MODE_PREFIX = `${ESC}[200~`;
|
14
|
-
export const PASTE_MODE_SUFFIX = `${ESC}[201~`;
|
6
|
+
import { useEffect } from 'react';
|
7
|
+
import { useKeypressContext, } from '../contexts/KeypressContext.js';
|
15
8
|
/**
|
16
|
-
* A hook that listens for keypress events from stdin
|
17
|
-
* key object that mirrors the one from Node's `readline` module,
|
18
|
-
* adding a 'paste' flag for characters input as part of a bracketed
|
19
|
-
* paste (when enabled).
|
20
|
-
*
|
21
|
-
* Pastes are currently sent as a single key event where the full paste
|
22
|
-
* is in the sequence field.
|
9
|
+
* A hook that listens for keypress events from stdin.
|
23
10
|
*
|
24
11
|
* @param onKeypress - The callback function to execute on each keypress.
|
25
12
|
* @param options - Options to control the hook's behavior.
|
26
13
|
* @param options.isActive - Whether the hook should be actively listening for input.
|
27
|
-
* @param options.kittyProtocolEnabled - Whether Kitty keyboard protocol is enabled.
|
28
|
-
* @param options.config - Optional config for telemetry logging.
|
29
14
|
*/
|
30
|
-
export function useKeypress(onKeypress, { isActive
|
31
|
-
const {
|
32
|
-
const onKeypressRef = useRef(onKeypress);
|
33
|
-
useEffect(() => {
|
34
|
-
onKeypressRef.current = onKeypress;
|
35
|
-
}, [onKeypress]);
|
15
|
+
export function useKeypress(onKeypress, { isActive }) {
|
16
|
+
const { subscribe, unsubscribe } = useKeypressContext();
|
36
17
|
useEffect(() => {
|
37
|
-
if (!isActive
|
18
|
+
if (!isActive) {
|
38
19
|
return;
|
39
20
|
}
|
40
|
-
|
41
|
-
const keypressStream = new PassThrough();
|
42
|
-
let usePassthrough = false;
|
43
|
-
const nodeMajorVersion = parseInt(process.versions.node.split('.')[0], 10);
|
44
|
-
if (nodeMajorVersion < 20 ||
|
45
|
-
process.env['PASTE_WORKAROUND'] === '1' ||
|
46
|
-
process.env['PASTE_WORKAROUND'] === 'true') {
|
47
|
-
// Prior to node 20, node's built-in readline does not support bracketed
|
48
|
-
// paste mode. We hack by detecting it with our own handler.
|
49
|
-
usePassthrough = true;
|
50
|
-
}
|
51
|
-
let isPaste = false;
|
52
|
-
let pasteBuffer = Buffer.alloc(0);
|
53
|
-
let kittySequenceBuffer = '';
|
54
|
-
let backslashTimeout = null;
|
55
|
-
let waitingForEnterAfterBackslash = false;
|
56
|
-
// Parse Kitty protocol sequences
|
57
|
-
const parseKittySequence = (sequence) => {
|
58
|
-
// Match CSI <number> ; <modifiers> u or ~
|
59
|
-
// Format: ESC [ <keycode> ; <modifiers> u/~
|
60
|
-
const kittyPattern = new RegExp(`^${ESC}\\[(\\d+)(;(\\d+))?([u~])$`);
|
61
|
-
const match = sequence.match(kittyPattern);
|
62
|
-
if (!match)
|
63
|
-
return null;
|
64
|
-
const keyCode = parseInt(match[1], 10);
|
65
|
-
const modifiers = match[3] ? parseInt(match[3], 10) : 1;
|
66
|
-
// Decode modifiers (subtract 1 as per Kitty protocol spec)
|
67
|
-
const modifierBits = modifiers - 1;
|
68
|
-
const shift = (modifierBits & 1) === 1;
|
69
|
-
const alt = (modifierBits & 2) === 2;
|
70
|
-
const ctrl = (modifierBits & 4) === 4;
|
71
|
-
// Handle Escape key (code 27)
|
72
|
-
if (keyCode === 27) {
|
73
|
-
return {
|
74
|
-
name: 'escape',
|
75
|
-
ctrl,
|
76
|
-
meta: alt,
|
77
|
-
shift,
|
78
|
-
paste: false,
|
79
|
-
sequence,
|
80
|
-
kittyProtocol: true,
|
81
|
-
};
|
82
|
-
}
|
83
|
-
// Handle Enter key (code 13)
|
84
|
-
if (keyCode === 13) {
|
85
|
-
return {
|
86
|
-
name: 'return',
|
87
|
-
ctrl,
|
88
|
-
meta: alt,
|
89
|
-
shift,
|
90
|
-
paste: false,
|
91
|
-
sequence,
|
92
|
-
kittyProtocol: true,
|
93
|
-
};
|
94
|
-
}
|
95
|
-
// Handle Ctrl+letter combinations (a-z)
|
96
|
-
// ASCII codes: a=97, b=98, c=99, ..., z=122
|
97
|
-
if (keyCode >= 97 && keyCode <= 122 && ctrl) {
|
98
|
-
const letter = String.fromCharCode(keyCode);
|
99
|
-
return {
|
100
|
-
name: letter,
|
101
|
-
ctrl: true,
|
102
|
-
meta: alt,
|
103
|
-
shift,
|
104
|
-
paste: false,
|
105
|
-
sequence,
|
106
|
-
kittyProtocol: true,
|
107
|
-
};
|
108
|
-
}
|
109
|
-
// Handle other keys as needed
|
110
|
-
return null;
|
111
|
-
};
|
112
|
-
const handleKeypress = (_, key) => {
|
113
|
-
// Handle VS Code's backslash+return pattern (Shift+Enter)
|
114
|
-
if (key.name === 'return' && waitingForEnterAfterBackslash) {
|
115
|
-
// Cancel the timeout since we got the Enter
|
116
|
-
if (backslashTimeout) {
|
117
|
-
clearTimeout(backslashTimeout);
|
118
|
-
backslashTimeout = null;
|
119
|
-
}
|
120
|
-
waitingForEnterAfterBackslash = false;
|
121
|
-
// Convert to Shift+Enter
|
122
|
-
onKeypressRef.current({
|
123
|
-
...key,
|
124
|
-
shift: true,
|
125
|
-
sequence: '\\\r', // VS Code's Shift+Enter representation
|
126
|
-
});
|
127
|
-
return;
|
128
|
-
}
|
129
|
-
// Handle backslash - hold it to see if Enter follows
|
130
|
-
if (key.sequence === '\\' && !key.name) {
|
131
|
-
// Don't pass through the backslash yet - wait to see if Enter follows
|
132
|
-
waitingForEnterAfterBackslash = true;
|
133
|
-
// Set up a timeout to pass through the backslash if no Enter follows
|
134
|
-
backslashTimeout = setTimeout(() => {
|
135
|
-
waitingForEnterAfterBackslash = false;
|
136
|
-
backslashTimeout = null;
|
137
|
-
// Pass through the backslash since no Enter followed
|
138
|
-
onKeypressRef.current(key);
|
139
|
-
}, BACKSLASH_ENTER_DETECTION_WINDOW_MS);
|
140
|
-
return;
|
141
|
-
}
|
142
|
-
// If we're waiting for Enter after backslash but got something else,
|
143
|
-
// pass through the backslash first, then the new key
|
144
|
-
if (waitingForEnterAfterBackslash && key.name !== 'return') {
|
145
|
-
if (backslashTimeout) {
|
146
|
-
clearTimeout(backslashTimeout);
|
147
|
-
backslashTimeout = null;
|
148
|
-
}
|
149
|
-
waitingForEnterAfterBackslash = false;
|
150
|
-
// Pass through the backslash that was held
|
151
|
-
onKeypressRef.current({
|
152
|
-
name: '',
|
153
|
-
sequence: '\\',
|
154
|
-
ctrl: false,
|
155
|
-
meta: false,
|
156
|
-
shift: false,
|
157
|
-
paste: false,
|
158
|
-
});
|
159
|
-
// Then continue processing the current key normally
|
160
|
-
}
|
161
|
-
// If readline has already identified an arrow key, pass it through
|
162
|
-
// immediately, bypassing the Kitty protocol sequence buffering.
|
163
|
-
if (['up', 'down', 'left', 'right'].includes(key.name)) {
|
164
|
-
onKeypressRef.current(key);
|
165
|
-
return;
|
166
|
-
}
|
167
|
-
// Always pass through Ctrl+C immediately, regardless of protocol state
|
168
|
-
// Check both standard format and Kitty protocol sequence
|
169
|
-
if ((key.ctrl && key.name === 'c') ||
|
170
|
-
key.sequence === `${ESC}${KITTY_CTRL_C}`) {
|
171
|
-
kittySequenceBuffer = '';
|
172
|
-
// If it's the Kitty sequence, create a proper key object
|
173
|
-
if (key.sequence === `${ESC}${KITTY_CTRL_C}`) {
|
174
|
-
onKeypressRef.current({
|
175
|
-
name: 'c',
|
176
|
-
ctrl: true,
|
177
|
-
meta: false,
|
178
|
-
shift: false,
|
179
|
-
paste: false,
|
180
|
-
sequence: key.sequence,
|
181
|
-
kittyProtocol: true,
|
182
|
-
});
|
183
|
-
}
|
184
|
-
else {
|
185
|
-
onKeypressRef.current(key);
|
186
|
-
}
|
187
|
-
return;
|
188
|
-
}
|
189
|
-
// If Kitty protocol is enabled, handle CSI sequences
|
190
|
-
if (kittyProtocolEnabled) {
|
191
|
-
// If we have a buffer or this starts a CSI sequence
|
192
|
-
if (kittySequenceBuffer ||
|
193
|
-
(key.sequence.startsWith(`${ESC}[`) &&
|
194
|
-
!key.sequence.startsWith(PASTE_MODE_PREFIX) &&
|
195
|
-
!key.sequence.startsWith(PASTE_MODE_SUFFIX) &&
|
196
|
-
!key.sequence.startsWith(FOCUS_IN) &&
|
197
|
-
!key.sequence.startsWith(FOCUS_OUT))) {
|
198
|
-
kittySequenceBuffer += key.sequence;
|
199
|
-
// Try to parse the buffer as a Kitty sequence
|
200
|
-
const kittyKey = parseKittySequence(kittySequenceBuffer);
|
201
|
-
if (kittyKey) {
|
202
|
-
kittySequenceBuffer = '';
|
203
|
-
onKeypressRef.current(kittyKey);
|
204
|
-
return;
|
205
|
-
}
|
206
|
-
if (config?.getDebugMode()) {
|
207
|
-
const codes = Array.from(kittySequenceBuffer).map((ch) => ch.charCodeAt(0));
|
208
|
-
// Unless the user is sshing over a slow connection, this likely
|
209
|
-
// indicates this is not a kitty sequence but we have incorrectly
|
210
|
-
// interpreted it as such. See the examples above for sequences
|
211
|
-
// such as FOCUS_IN that are not Kitty sequences.
|
212
|
-
console.warn('Kitty sequence buffer has char codes:', codes);
|
213
|
-
}
|
214
|
-
// If buffer doesn't match expected pattern and is getting long, flush it
|
215
|
-
if (kittySequenceBuffer.length > MAX_KITTY_SEQUENCE_LENGTH) {
|
216
|
-
// Not a Kitty sequence, treat as regular key
|
217
|
-
kittySequenceBuffer = '';
|
218
|
-
}
|
219
|
-
else {
|
220
|
-
// Wait for more characters
|
221
|
-
return;
|
222
|
-
}
|
223
|
-
}
|
224
|
-
}
|
225
|
-
if (key.name === 'paste-start') {
|
226
|
-
isPaste = true;
|
227
|
-
}
|
228
|
-
else if (key.name === 'paste-end') {
|
229
|
-
isPaste = false;
|
230
|
-
onKeypressRef.current({
|
231
|
-
name: '',
|
232
|
-
ctrl: false,
|
233
|
-
meta: false,
|
234
|
-
shift: false,
|
235
|
-
paste: true,
|
236
|
-
sequence: pasteBuffer.toString(),
|
237
|
-
});
|
238
|
-
pasteBuffer = Buffer.alloc(0);
|
239
|
-
}
|
240
|
-
else {
|
241
|
-
if (isPaste) {
|
242
|
-
pasteBuffer = Buffer.concat([pasteBuffer, Buffer.from(key.sequence)]);
|
243
|
-
}
|
244
|
-
else {
|
245
|
-
// Handle special keys
|
246
|
-
if (key.name === 'return' && key.sequence === `${ESC}\r`) {
|
247
|
-
key.meta = true;
|
248
|
-
}
|
249
|
-
onKeypressRef.current({ ...key, paste: isPaste });
|
250
|
-
}
|
251
|
-
}
|
252
|
-
};
|
253
|
-
const handleRawKeypress = (data) => {
|
254
|
-
const pasteModePrefixBuffer = Buffer.from(PASTE_MODE_PREFIX);
|
255
|
-
const pasteModeSuffixBuffer = Buffer.from(PASTE_MODE_SUFFIX);
|
256
|
-
let pos = 0;
|
257
|
-
while (pos < data.length) {
|
258
|
-
const prefixPos = data.indexOf(pasteModePrefixBuffer, pos);
|
259
|
-
const suffixPos = data.indexOf(pasteModeSuffixBuffer, pos);
|
260
|
-
// Determine which marker comes first, if any.
|
261
|
-
const isPrefixNext = prefixPos !== -1 && (suffixPos === -1 || prefixPos < suffixPos);
|
262
|
-
const isSuffixNext = suffixPos !== -1 && (prefixPos === -1 || suffixPos < prefixPos);
|
263
|
-
let nextMarkerPos = -1;
|
264
|
-
let markerLength = 0;
|
265
|
-
if (isPrefixNext) {
|
266
|
-
nextMarkerPos = prefixPos;
|
267
|
-
}
|
268
|
-
else if (isSuffixNext) {
|
269
|
-
nextMarkerPos = suffixPos;
|
270
|
-
}
|
271
|
-
markerLength = pasteModeSuffixBuffer.length;
|
272
|
-
if (nextMarkerPos === -1) {
|
273
|
-
keypressStream.write(data.slice(pos));
|
274
|
-
return;
|
275
|
-
}
|
276
|
-
const nextData = data.slice(pos, nextMarkerPos);
|
277
|
-
if (nextData.length > 0) {
|
278
|
-
if (isPaste) {
|
279
|
-
// Accumulate raw bytes into the paste buffer while inside a bracketed paste.
|
280
|
-
pasteBuffer = Buffer.concat([pasteBuffer, nextData]);
|
281
|
-
}
|
282
|
-
else {
|
283
|
-
keypressStream.write(nextData);
|
284
|
-
}
|
285
|
-
}
|
286
|
-
const createPasteKeyEvent = (name) => ({
|
287
|
-
name,
|
288
|
-
ctrl: false,
|
289
|
-
meta: false,
|
290
|
-
shift: false,
|
291
|
-
paste: false,
|
292
|
-
sequence: '',
|
293
|
-
});
|
294
|
-
if (isPrefixNext) {
|
295
|
-
handleKeypress(undefined, createPasteKeyEvent('paste-start'));
|
296
|
-
}
|
297
|
-
else if (isSuffixNext) {
|
298
|
-
handleKeypress(undefined, createPasteKeyEvent('paste-end'));
|
299
|
-
}
|
300
|
-
pos = nextMarkerPos + markerLength;
|
301
|
-
}
|
302
|
-
};
|
303
|
-
let rl;
|
304
|
-
if (usePassthrough) {
|
305
|
-
rl = readline.createInterface({
|
306
|
-
input: keypressStream,
|
307
|
-
escapeCodeTimeout: 0,
|
308
|
-
});
|
309
|
-
readline.emitKeypressEvents(keypressStream, rl);
|
310
|
-
keypressStream.on('keypress', handleKeypress);
|
311
|
-
stdin.on('data', handleRawKeypress);
|
312
|
-
}
|
313
|
-
else {
|
314
|
-
rl = readline.createInterface({ input: stdin, escapeCodeTimeout: 0 });
|
315
|
-
readline.emitKeypressEvents(stdin, rl);
|
316
|
-
stdin.on('keypress', handleKeypress);
|
317
|
-
}
|
21
|
+
subscribe(onKeypress);
|
318
22
|
return () => {
|
319
|
-
|
320
|
-
keypressStream.removeListener('keypress', handleKeypress);
|
321
|
-
stdin.removeListener('data', handleRawKeypress);
|
322
|
-
}
|
323
|
-
else {
|
324
|
-
stdin.removeListener('keypress', handleKeypress);
|
325
|
-
}
|
326
|
-
rl.close();
|
327
|
-
setRawMode(false);
|
328
|
-
// Clean up any pending backslash timeout
|
329
|
-
if (backslashTimeout) {
|
330
|
-
clearTimeout(backslashTimeout);
|
331
|
-
backslashTimeout = null;
|
332
|
-
}
|
333
|
-
// If we are in the middle of a paste, send what we have.
|
334
|
-
if (isPaste) {
|
335
|
-
onKeypressRef.current({
|
336
|
-
name: '',
|
337
|
-
ctrl: false,
|
338
|
-
meta: false,
|
339
|
-
shift: false,
|
340
|
-
paste: true,
|
341
|
-
sequence: pasteBuffer.toString(),
|
342
|
-
});
|
343
|
-
pasteBuffer = Buffer.alloc(0);
|
344
|
-
}
|
23
|
+
unsubscribe(onKeypress);
|
345
24
|
};
|
346
|
-
}, [isActive,
|
25
|
+
}, [isActive, onKeypress, subscribe, unsubscribe]);
|
347
26
|
}
|
348
27
|
//# sourceMappingURL=useKeypress.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useKeypress.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useKeypress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"useKeypress.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useKeypress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EACL,kBAAkB,GAGnB,MAAM,gCAAgC,CAAC;AAIxC;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,UAA2B,EAC3B,EAAE,QAAQ,EAAyB;IAEnC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,SAAS,CAAC,UAAU,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
1
2
|
/**
|
2
3
|
* @license
|
3
4
|
* Copyright 2025 Google LLC
|
@@ -7,6 +8,7 @@ import { renderHook, waitFor } from '@testing-library/react';
|
|
7
8
|
import { EventEmitter } from 'events';
|
8
9
|
import { useKeypress } from './useKeypress.js';
|
9
10
|
import { vi } from 'vitest';
|
11
|
+
import { KeypressProvider } from '../contexts/KeypressContext.js';
|
10
12
|
// Mock ink module at the top level
|
11
13
|
vi.mock('ink', () => ({
|
12
14
|
useStdin: vi.fn(),
|
@@ -41,6 +43,7 @@ describe('useKeypress', () => {
|
|
41
43
|
it('should handle multi-line paste with bracketed paste mode', async () => {
|
42
44
|
renderHook(({ onKeypress, isActive }) => useKeypress(onKeypress, { isActive }), {
|
43
45
|
initialProps: { onKeypress, isActive: true },
|
46
|
+
wrapper: ({ children }) => (_jsx(KeypressProvider, { kittyProtocolEnabled: true, children: children })),
|
44
47
|
});
|
45
48
|
// Simulate paste-start event
|
46
49
|
stdin.emit('keypress', undefined, {
|
@@ -109,6 +112,7 @@ describe('useKeypress', () => {
|
|
109
112
|
});
|
110
113
|
renderHook(({ onKeypress, isActive }) => useKeypress(onKeypress, { isActive }), {
|
111
114
|
initialProps: { onKeypress, isActive: true },
|
115
|
+
wrapper: ({ children }) => (_jsx(KeypressProvider, { kittyProtocolEnabled: true, children: children })),
|
112
116
|
});
|
113
117
|
// Simulate bracketed paste with raw data
|
114
118
|
const pasteData = Buffer.concat([
|
@@ -136,6 +140,7 @@ describe('useKeypress', () => {
|
|
136
140
|
it('should handle paste cleanup on unmount', async () => {
|
137
141
|
const { unmount } = renderHook(({ onKeypress, isActive }) => useKeypress(onKeypress, { isActive }), {
|
138
142
|
initialProps: { onKeypress, isActive: true },
|
143
|
+
wrapper: ({ children }) => (_jsx(KeypressProvider, { kittyProtocolEnabled: true, children: children })),
|
139
144
|
});
|
140
145
|
// Start a paste but don't end it
|
141
146
|
stdin.emit('keypress', undefined, {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useKeypress.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useKeypress.test.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAO,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
1
|
+
{"version":3,"file":"useKeypress.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useKeypress.test.tsx"],"names":[],"mappings":"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"}
|
@@ -16,6 +16,7 @@ export const WITTY_LOADING_PHRASES = [
|
|
16
16
|
"We're consumers. We are the by-products of a lifestyle obsession.",
|
17
17
|
'I want you to hit me as hard as you can.',
|
18
18
|
'On a long enough timeline, the survival rate for everybody drops to zero.',
|
19
|
+
"What...what if you're not absolutely right?",
|
19
20
|
// Salvador Dalí quotes
|
20
21
|
"Don't be afraid of perfection—you will never attain it.",
|
21
22
|
"I don't do drugs. I am drugs.",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"usePhraseCycler.js","sourceRoot":"","sources":["../../../../src/ui/hooks/usePhraseCycler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEpD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,oBAAoB;IACpB,oEAAoE;IACpE,qEAAqE;IACrE,uEAAuE;IACvE,uCAAuC;IACvC,yDAAyD;IACzD,0GAA0G;IAC1G,6DAA6D;IAC7D,mEAAmE;IACnE,0CAA0C;IAC1C,2EAA2E;
|
1
|
+
{"version":3,"file":"usePhraseCycler.js","sourceRoot":"","sources":["../../../../src/ui/hooks/usePhraseCycler.ts"],"names":[],"mappings":"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"}
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
5
5
|
*/
|
6
6
|
import { useState, useEffect, useCallback } from 'react';
|
7
|
-
import { CodeAssistServer, UserTierId, } from '@vybestack/llxprt-code-core';
|
7
|
+
import { CodeAssistServer, UserTierId, LoggingContentGenerator, } from '@vybestack/llxprt-code-core';
|
8
8
|
export const usePrivacySettings = (config) => {
|
9
9
|
const [privacyState, setPrivacyState] = useState({
|
10
10
|
isLoading: true,
|
@@ -65,7 +65,11 @@ export const usePrivacySettings = (config) => {
|
|
65
65
|
};
|
66
66
|
};
|
67
67
|
function getCodeAssistServer(config) {
|
68
|
-
|
68
|
+
let server = config.getGeminiClient().getContentGenerator();
|
69
|
+
// Unwrap LoggingContentGenerator if present
|
70
|
+
if (server instanceof LoggingContentGenerator) {
|
71
|
+
server = server.getWrapped();
|
72
|
+
}
|
69
73
|
// Neither of these cases should ever happen.
|
70
74
|
if (!(server instanceof CodeAssistServer)) {
|
71
75
|
throw new Error('Oauth not being used');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"usePrivacySettings.js","sourceRoot":"","sources":["../../../../src/ui/hooks/usePrivacySettings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAEL,gBAAgB,EAChB,UAAU,
|
1
|
+
{"version":3,"file":"usePrivacySettings.js","sourceRoot":"","sources":["../../../../src/ui/hooks/usePrivacySettings.ts"],"names":[],"mappings":"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"}
|