@vybestack/llxprt-code 0.1.19-gamma → 0.1.20
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 +9 -0
- package/dist/package.json +5 -5
- package/dist/src/auth/oauth-manager.d.ts +1 -0
- package/dist/src/auth/oauth-manager.js +24 -13
- package/dist/src/auth/oauth-manager.js.map +1 -1
- package/dist/src/auth/oauth-manager.spec.js +4 -4
- package/dist/src/auth/oauth-manager.spec.js.map +1 -1
- package/dist/src/commands/mcp/list.js +1 -1
- package/dist/src/commands/mcp/list.js.map +1 -1
- package/dist/src/config/config.d.ts +2 -1
- package/dist/src/config/config.js +183 -25
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/keyBindings.js +4 -0
- package/dist/src/config/keyBindings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +18 -9
- package/dist/src/config/settingsSchema.js +18 -9
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/trustedFolders.d.ts +36 -0
- package/dist/src/config/trustedFolders.js +112 -0
- package/dist/src/config/trustedFolders.js.map +1 -0
- package/dist/src/gemini.js +28 -18
- 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/nonInteractiveCli.js +3 -4
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/providers/logging/git-stats.js +0 -1
- package/dist/src/providers/logging/git-stats.js.map +1 -1
- package/dist/src/providers/providerConfigUtils.js +1 -1
- package/dist/src/providers/providerConfigUtils.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/todo-continuation/todoContinuationService.d.ts +0 -1
- package/dist/src/services/todo-continuation/todoContinuationService.js +2 -1
- package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -1
- package/dist/src/ui/App.js +50 -34
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/IdeIntegrationNudge.d.ts +7 -4
- package/dist/src/ui/IdeIntegrationNudge.js +31 -10
- package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
- package/dist/src/ui/commands/authCommand.js +16 -8
- package/dist/src/ui/commands/authCommand.js.map +1 -1
- package/dist/src/ui/commands/directoryCommand.js +2 -4
- package/dist/src/ui/commands/directoryCommand.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.js +11 -8
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/keyCommand.js +1 -1
- package/dist/src/ui/commands/keyCommand.js.map +1 -1
- package/dist/src/ui/commands/keyfileCommand.js +1 -1
- package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.js +10 -6
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/setCommand.js +43 -3
- package/dist/src/ui/commands/setCommand.js.map +1 -1
- package/dist/src/ui/commands/setupGithubCommand.js +5 -16
- package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
- package/dist/src/ui/commands/terminalSetupCommand.d.ts +13 -0
- package/dist/src/ui/commands/terminalSetupCommand.js +41 -0
- package/dist/src/ui/commands/terminalSetupCommand.js.map +1 -0
- package/dist/src/ui/commands/types.d.ts +1 -0
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.js +56 -29
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/AuthInProgress.js +5 -4
- package/dist/src/ui/components/AuthInProgress.js.map +1 -1
- package/dist/src/ui/components/DebugProfiler.js +5 -4
- package/dist/src/ui/components/DebugProfiler.js.map +1 -1
- package/dist/src/ui/components/DetailedMessagesDisplay.js +4 -4
- package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
- package/dist/src/ui/components/EditorSettingsDialog.js +6 -5
- package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
- package/dist/src/ui/components/ErrorBoundary.js +2 -2
- package/dist/src/ui/components/ErrorBoundary.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.js +5 -4
- package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +7 -1
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/LoggingDialog.js +5 -1
- package/dist/src/ui/components/LoggingDialog.js.map +1 -1
- package/dist/src/ui/components/OAuthCodeDialog.js +12 -14
- package/dist/src/ui/components/OAuthCodeDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.js +12 -10
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.js +5 -4
- package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
- package/dist/src/ui/components/ThemeDialog.js +6 -5
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/TodoPanel.js +2 -2
- package/dist/src/ui/components/TodoPanel.js.map +1 -1
- package/dist/src/ui/components/messages/InfoMessage.js +1 -1
- package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +8 -7
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js +11 -9
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.d.ts +17 -4
- package/dist/src/ui/components/shared/text-buffer.js +256 -80
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/components/shared/vim-buffer-actions.js +139 -152
- package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -1
- package/dist/src/ui/containers/SessionController.js +23 -23
- package/dist/src/ui/containers/SessionController.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/slashCommandProcessor.js +7 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAuthCommand.js +8 -60
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useAutoAcceptIndicator.js +5 -5
- package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -1
- package/dist/src/ui/hooks/useFocus.d.ts +4 -0
- package/dist/src/ui/hooks/useFocus.js +4 -4
- package/dist/src/ui/hooks/useFocus.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.d.ts +3 -2
- package/dist/src/ui/hooks/useFolderTrust.js +24 -9
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -0
- package/dist/src/ui/hooks/useGeminiStream.js +126 -40
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useKeypress.d.ts +9 -1
- package/dist/src/ui/hooks/useKeypress.js +191 -8
- package/dist/src/ui/hooks/useKeypress.js.map +1 -1
- package/dist/src/ui/hooks/useKittyKeyboardProtocol.d.ts +15 -0
- package/dist/src/ui/hooks/useKittyKeyboardProtocol.js +20 -0
- package/dist/src/ui/hooks/useKittyKeyboardProtocol.js.map +1 -0
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +5 -4
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
- package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js +5 -4
- package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js.map +1 -1
- package/dist/src/ui/privacy/GeminiPrivacyNotice.js +5 -4
- package/dist/src/ui/privacy/GeminiPrivacyNotice.js.map +1 -1
- package/dist/src/ui/reducers/sessionReducer.js +1 -0
- package/dist/src/ui/reducers/sessionReducer.js.map +1 -1
- package/dist/src/ui/utils/kittyProtocolDetector.d.ts +13 -0
- package/dist/src/ui/utils/kittyProtocolDetector.js +88 -0
- package/dist/src/ui/utils/kittyProtocolDetector.js.map +1 -0
- package/dist/src/ui/utils/platformConstants.d.ts +38 -0
- package/dist/src/ui/utils/platformConstants.js +39 -0
- package/dist/src/ui/utils/platformConstants.js.map +1 -0
- package/dist/src/ui/utils/renderLoopDetector.js +3 -3
- package/dist/src/ui/utils/renderLoopDetector.js.map +1 -1
- package/dist/src/ui/utils/terminalSetup.d.ts +30 -0
- package/dist/src/ui/utils/terminalSetup.js +281 -0
- package/dist/src/ui/utils/terminalSetup.js.map +1 -0
- package/dist/src/utils/checks.d.ts +19 -0
- package/dist/src/utils/checks.js +24 -0
- package/dist/src/utils/checks.js.map +1 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +0 -2
- package/dist/src/utils/privacy/ConversationDataRedactor.js +4 -37
- package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -1
- package/dist/src/zed-integration/acp.d.ts +63 -0
- package/dist/src/{acp → zed-integration}/acp.js +76 -44
- package/dist/src/zed-integration/acp.js.map +1 -0
- package/dist/src/zed-integration/schema.d.ts +11679 -0
- package/dist/src/zed-integration/schema.js +305 -0
- package/dist/src/zed-integration/schema.js.map +1 -0
- package/dist/src/zed-integration/zedIntegration.d.ts +10 -0
- package/dist/src/{acp/acpPeer.js → zed-integration/zedIntegration.js} +333 -188
- package/dist/src/zed-integration/zedIntegration.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/dist/src/acp/acp.d.ts +0 -208
- package/dist/src/acp/acp.js.map +0 -1
- package/dist/src/acp/acpPeer.d.ts +0 -8
- package/dist/src/acp/acpPeer.js.map +0 -1
- package/dist/src/ui/utils/errorParsing.d.ts +0 -7
- package/dist/src/ui/utils/errorParsing.js +0 -106
- package/dist/src/ui/utils/errorParsing.js.map +0 -1
@@ -7,6 +7,11 @@ import { useEffect, useRef } from 'react';
|
|
7
7
|
import { useStdin } from 'ink';
|
8
8
|
import readline from 'readline';
|
9
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~`;
|
10
15
|
/**
|
11
16
|
* A hook that listens for keypress events from stdin, providing a
|
12
17
|
* key object that mirrors the one from Node's `readline` module,
|
@@ -19,8 +24,10 @@ import { PassThrough } from 'stream';
|
|
19
24
|
* @param onKeypress - The callback function to execute on each keypress.
|
20
25
|
* @param options - Options to control the hook's behavior.
|
21
26
|
* @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.
|
22
29
|
*/
|
23
|
-
export function useKeypress(onKeypress, { isActive }) {
|
30
|
+
export function useKeypress(onKeypress, { isActive, kittyProtocolEnabled = false, config, }) {
|
24
31
|
const { stdin, setRawMode } = useStdin();
|
25
32
|
const onKeypressRef = useRef(onKeypress);
|
26
33
|
useEffect(() => {
|
@@ -43,7 +50,178 @@ export function useKeypress(onKeypress, { isActive }) {
|
|
43
50
|
}
|
44
51
|
let isPaste = false;
|
45
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
|
+
};
|
46
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
|
+
}
|
47
225
|
if (key.name === 'paste-start') {
|
48
226
|
isPaste = true;
|
49
227
|
}
|
@@ -65,7 +243,7 @@ export function useKeypress(onKeypress, { isActive }) {
|
|
65
243
|
}
|
66
244
|
else {
|
67
245
|
// Handle special keys
|
68
|
-
if (key.name === 'return' && key.sequence ===
|
246
|
+
if (key.name === 'return' && key.sequence === `${ESC}\r`) {
|
69
247
|
key.meta = true;
|
70
248
|
}
|
71
249
|
onKeypressRef.current({ ...key, paste: isPaste });
|
@@ -73,12 +251,12 @@ export function useKeypress(onKeypress, { isActive }) {
|
|
73
251
|
}
|
74
252
|
};
|
75
253
|
const handleRawKeypress = (data) => {
|
76
|
-
const
|
77
|
-
const
|
254
|
+
const pasteModePrefixBuffer = Buffer.from(PASTE_MODE_PREFIX);
|
255
|
+
const pasteModeSuffixBuffer = Buffer.from(PASTE_MODE_SUFFIX);
|
78
256
|
let pos = 0;
|
79
257
|
while (pos < data.length) {
|
80
|
-
const prefixPos = data.indexOf(
|
81
|
-
const suffixPos = data.indexOf(
|
258
|
+
const prefixPos = data.indexOf(pasteModePrefixBuffer, pos);
|
259
|
+
const suffixPos = data.indexOf(pasteModeSuffixBuffer, pos);
|
82
260
|
// Determine which marker comes first, if any.
|
83
261
|
const isPrefixNext = prefixPos !== -1 && (suffixPos === -1 || prefixPos < suffixPos);
|
84
262
|
const isSuffixNext = suffixPos !== -1 && (prefixPos === -1 || suffixPos < prefixPos);
|
@@ -90,7 +268,7 @@ export function useKeypress(onKeypress, { isActive }) {
|
|
90
268
|
else if (isSuffixNext) {
|
91
269
|
nextMarkerPos = suffixPos;
|
92
270
|
}
|
93
|
-
markerLength =
|
271
|
+
markerLength = pasteModeSuffixBuffer.length;
|
94
272
|
if (nextMarkerPos === -1) {
|
95
273
|
keypressStream.write(data.slice(pos));
|
96
274
|
return;
|
@@ -147,6 +325,11 @@ export function useKeypress(onKeypress, { isActive }) {
|
|
147
325
|
}
|
148
326
|
rl.close();
|
149
327
|
setRawMode(false);
|
328
|
+
// Clean up any pending backslash timeout
|
329
|
+
if (backslashTimeout) {
|
330
|
+
clearTimeout(backslashTimeout);
|
331
|
+
backslashTimeout = null;
|
332
|
+
}
|
150
333
|
// If we are in the middle of a paste, send what we have.
|
151
334
|
if (isPaste) {
|
152
335
|
onKeypressRef.current({
|
@@ -160,6 +343,6 @@ export function useKeypress(onKeypress, { isActive }) {
|
|
160
343
|
pasteBuffer = Buffer.alloc(0);
|
161
344
|
}
|
162
345
|
};
|
163
|
-
}, [isActive, stdin, setRawMode]);
|
346
|
+
}, [isActive, stdin, setRawMode, kittyProtocolEnabled, config]);
|
164
347
|
}
|
165
348
|
//# 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,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;
|
1
|
+
{"version":3,"file":"useKeypress.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useKeypress.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
export interface KittyProtocolStatus {
|
7
|
+
supported: boolean;
|
8
|
+
enabled: boolean;
|
9
|
+
checking: boolean;
|
10
|
+
}
|
11
|
+
/**
|
12
|
+
* Hook that returns the cached Kitty keyboard protocol status.
|
13
|
+
* Detection is done once at app startup to avoid repeated queries.
|
14
|
+
*/
|
15
|
+
export declare function useKittyKeyboardProtocol(): KittyProtocolStatus;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import { useState } from 'react';
|
7
|
+
import { isKittyProtocolEnabled, isKittyProtocolSupported, } from '../utils/kittyProtocolDetector.js';
|
8
|
+
/**
|
9
|
+
* Hook that returns the cached Kitty keyboard protocol status.
|
10
|
+
* Detection is done once at app startup to avoid repeated queries.
|
11
|
+
*/
|
12
|
+
export function useKittyKeyboardProtocol() {
|
13
|
+
const [status] = useState({
|
14
|
+
supported: isKittyProtocolSupported(),
|
15
|
+
enabled: isKittyProtocolEnabled(),
|
16
|
+
checking: false,
|
17
|
+
});
|
18
|
+
return status;
|
19
|
+
}
|
20
|
+
//# sourceMappingURL=useKittyKeyboardProtocol.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"useKittyKeyboardProtocol.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useKittyKeyboardProtocol.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;AAQ3C;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAsB;QAC7C,SAAS,EAAE,wBAAwB,EAAE;QACrC,OAAO,EAAE,sBAAsB,EAAE;QACjC,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
@@ -4,12 +4,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
4
|
* Copyright 2025 Google LLC
|
5
5
|
* SPDX-License-Identifier: Apache-2.0
|
6
6
|
*/
|
7
|
-
import { Box, Newline, Text
|
7
|
+
import { Box, Newline, Text } from 'ink';
|
8
8
|
import { useCallback } from 'react';
|
9
9
|
import { RadioButtonSelect } from '../components/shared/RadioButtonSelect.js';
|
10
10
|
import { usePrivacySettings } from '../hooks/usePrivacySettings.js';
|
11
11
|
import { CloudPaidPrivacyNotice } from './CloudPaidPrivacyNotice.js';
|
12
12
|
import { Colors } from '../colors.js';
|
13
|
+
import { useKeypress } from '../hooks/useKeypress.js';
|
13
14
|
export const CloudFreePrivacyNotice = ({ config, onExit, }) => {
|
14
15
|
const { privacyState, updateDataCollectionOptIn } = usePrivacySettings(config);
|
15
16
|
const handleSelect = useCallback((value) => {
|
@@ -19,11 +20,11 @@ export const CloudFreePrivacyNotice = ({ config, onExit, }) => {
|
|
19
20
|
onExit();
|
20
21
|
}
|
21
22
|
}, [updateDataCollectionOptIn, privacyState.error, onExit]);
|
22
|
-
|
23
|
-
if (privacyState.error && key.escape) {
|
23
|
+
useKeypress((key) => {
|
24
|
+
if (privacyState.error && key.name === 'escape') {
|
24
25
|
onExit();
|
25
26
|
}
|
26
|
-
});
|
27
|
+
}, { isActive: true });
|
27
28
|
if (privacyState.isLoading) {
|
28
29
|
return _jsx(Text, { color: Colors.Gray, children: "Loading..." });
|
29
30
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CloudFreePrivacyNotice.js","sourceRoot":"","sources":["../../../../src/ui/privacy/CloudFreePrivacyNotice.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,
|
1
|
+
{"version":3,"file":"CloudFreePrivacyNotice.js","sourceRoot":"","sources":["../../../../src/ui/privacy/CloudFreePrivacyNotice.tsx"],"names":[],"mappings":"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"}
|
@@ -4,14 +4,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
4
|
* Copyright 2025 Google LLC
|
5
5
|
* SPDX-License-Identifier: Apache-2.0
|
6
6
|
*/
|
7
|
-
import { Box, Newline, Text
|
7
|
+
import { Box, Newline, Text } from 'ink';
|
8
8
|
import { Colors } from '../colors.js';
|
9
|
+
import { useKeypress } from '../hooks/useKeypress.js';
|
9
10
|
export const CloudPaidPrivacyNotice = ({ onExit, }) => {
|
10
|
-
|
11
|
-
if (key.escape) {
|
11
|
+
useKeypress((key) => {
|
12
|
+
if (key.name === 'escape') {
|
12
13
|
onExit();
|
13
14
|
}
|
14
|
-
});
|
15
|
+
}, { isActive: true });
|
15
16
|
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, color: Colors.AccentPurple, children: "Vertex AI Notice" }), _jsx(Newline, {}), _jsxs(Text, { children: ["Service Specific Terms", _jsx(Text, { color: Colors.AccentBlue, children: "[1]" }), " are incorporated into the agreement under which Google has agreed to provide Google Cloud Platform", _jsx(Text, { color: Colors.AccentGreen, children: "[2]" }), " to Customer (the \u201CAgreement\u201D). If the Agreement authorizes the resale or supply of Google Cloud Platform under a Google Cloud partner or reseller program, then except for in the section entitled \u201CPartner-Specific Terms\u201D, all references to Customer in the Service Specific Terms mean Partner or Reseller (as applicable), and all references to Customer Data in the Service Specific Terms mean Partner Data. Capitalized terms used but not defined in the Service Specific Terms have the meaning given to them in the Agreement."] }), _jsx(Newline, {}), _jsxs(Text, { children: [_jsx(Text, { color: Colors.AccentBlue, children: "[1]" }), ' ', "https://cloud.google.com/terms/service-terms"] }), _jsxs(Text, { children: [_jsx(Text, { color: Colors.AccentGreen, children: "[2]" }), ' ', "https://cloud.google.com/terms/services"] }), _jsx(Newline, {}), _jsx(Text, { color: Colors.Gray, children: "Press Esc to exit." })] }));
|
16
17
|
};
|
17
18
|
//# sourceMappingURL=CloudPaidPrivacyNotice.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CloudPaidPrivacyNotice.js","sourceRoot":"","sources":["../../../../src/ui/privacy/CloudPaidPrivacyNotice.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,
|
1
|
+
{"version":3,"file":"CloudPaidPrivacyNotice.js","sourceRoot":"","sources":["../../../../src/ui/privacy/CloudPaidPrivacyNotice.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EACrC,MAAM,GACsB,EAAE,EAAE;IAChC,WAAW,CACT,CAAC,GAAG,EAAE,EAAE;QACN,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,MAAM,CAAC,YAAY,iCAE9B,EACP,KAAC,OAAO,KAAG,EACX,MAAC,IAAI,yCACmB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,UAAU,oBAAY,yGAE3C,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,WAAW,oBAAY,uiBAS3D,EACP,KAAC,OAAO,KAAG,EACX,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,UAAU,oBAAY,EAAC,GAAG,oDAEzC,EACP,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,WAAW,oBAAY,EAAC,GAAG,+CAE1C,EACP,KAAC,OAAO,KAAG,EACX,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,mCAA2B,IAC/C,CACP,CAAC;AACJ,CAAC,CAAC"}
|
@@ -4,14 +4,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
4
|
* Copyright 2025 Google LLC
|
5
5
|
* SPDX-License-Identifier: Apache-2.0
|
6
6
|
*/
|
7
|
-
import { Box, Newline, Text
|
7
|
+
import { Box, Newline, Text } from 'ink';
|
8
8
|
import { Colors } from '../colors.js';
|
9
|
+
import { useKeypress } from '../hooks/useKeypress.js';
|
9
10
|
export const GeminiPrivacyNotice = ({ onExit }) => {
|
10
|
-
|
11
|
-
if (key.escape) {
|
11
|
+
useKeypress((key) => {
|
12
|
+
if (key.name === 'escape') {
|
12
13
|
onExit();
|
13
14
|
}
|
14
|
-
});
|
15
|
+
}, { isActive: true });
|
15
16
|
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, color: Colors.AccentPurple, children: "Gemini API Key Notice" }), _jsx(Newline, {}), _jsxs(Text, { children: ["By using the Gemini API", _jsx(Text, { color: Colors.AccentBlue, children: "[1]" }), ", Google AI Studio", _jsx(Text, { color: Colors.AccentRed, children: "[2]" }), ", and the other Google developer services that reference these terms (collectively, the \"APIs\" or \"Services\"), you are agreeing to Google APIs Terms of Service (the \"API Terms\")", _jsx(Text, { color: Colors.AccentGreen, children: "[3]" }), ", and the Gemini API Additional Terms of Service (the \"Additional Terms\")", _jsx(Text, { color: Colors.AccentPurple, children: "[4]" }), "."] }), _jsx(Newline, {}), _jsxs(Text, { children: [_jsx(Text, { color: Colors.AccentBlue, children: "[1]" }), ' ', "https://ai.google.dev/docs/gemini_api_overview"] }), _jsxs(Text, { children: [_jsx(Text, { color: Colors.AccentRed, children: "[2]" }), " https://aistudio.google.com/"] }), _jsxs(Text, { children: [_jsx(Text, { color: Colors.AccentGreen, children: "[3]" }), ' ', "https://developers.google.com/terms"] }), _jsxs(Text, { children: [_jsx(Text, { color: Colors.AccentPurple, children: "[4]" }), ' ', "https://ai.google.dev/gemini-api/terms"] }), _jsx(Newline, {}), _jsx(Text, { color: Colors.Gray, children: "Press Esc to exit." })] }));
|
16
17
|
};
|
17
18
|
//# sourceMappingURL=GeminiPrivacyNotice.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"GeminiPrivacyNotice.js","sourceRoot":"","sources":["../../../../src/ui/privacy/GeminiPrivacyNotice.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,
|
1
|
+
{"version":3,"file":"GeminiPrivacyNotice.js","sourceRoot":"","sources":["../../../../src/ui/privacy/GeminiPrivacyNotice.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAE,MAAM,EAA4B,EAAE,EAAE;IAC1E,WAAW,CACT,CAAC,GAAG,EAAE,EAAE;QACN,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,MAAM,CAAC,YAAY,sCAE9B,EACP,KAAC,OAAO,KAAG,EACX,MAAC,IAAI,0CACoB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,UAAU,oBAAY,wBAEjE,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,oBAAY,6LAIzC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,WAAW,oBAAY,iFAE3C,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,oBAAY,SACvC,EACP,KAAC,OAAO,KAAG,EACX,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,UAAU,oBAAY,EAAC,GAAG,sDAEzC,EACP,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,oBAAY,qCACpC,EACP,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,WAAW,oBAAY,EAAC,GAAG,2CAE1C,EACP,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,oBAAY,EAAC,GAAG,8CAE3C,EACP,KAAC,OAAO,KAAG,EACX,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,mCAA2B,IAC/C,CACP,CAAC;AACJ,CAAC,CAAC"}
|
@@ -23,6 +23,7 @@ export const sessionReducer = (state, action) => {
|
|
23
23
|
default: {
|
24
24
|
// Exhaustive check - this ensures all action types are handled
|
25
25
|
const _exhaustiveCheck = action;
|
26
|
+
void _exhaustiveCheck; // Explicitly acknowledge the variable for TypeScript
|
26
27
|
return state;
|
27
28
|
}
|
28
29
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sessionReducer.js","sourceRoot":"","sources":["../../../../src/ui/reducers/sessionReducer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH,yCAAyC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,KAAmB,EACnB,MAAqB,EACP,EAAE;IAChB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,mBAAmB;YACtB,OAAO,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACpD,KAAK,eAAe;YAClB,OAAO,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAClD,KAAK,mBAAmB;YACtB,OAAO,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACpD,KAAK,qCAAqC;YACxC,OAAO,EAAE,GAAG,KAAK,EAAE,2BAA2B,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACnE,KAAK,eAAe;YAClB,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAChD,KAAK,wBAAwB;YAC3B,OAAO,EAAE,GAAG,KAAK,EAAE,iBAAiB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACzD,KAAK,0BAA0B;YAC7B,OAAO,EAAE,GAAG,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC;QAC7C,OAAO,CAAC,CAAC,CAAC;YACR,+DAA+D;YAC/D,MAAM,gBAAgB,GAAU,MAAM,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
|
1
|
+
{"version":3,"file":"sessionReducer.js","sourceRoot":"","sources":["../../../../src/ui/reducers/sessionReducer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH,yCAAyC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,KAAmB,EACnB,MAAqB,EACP,EAAE;IAChB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,mBAAmB;YACtB,OAAO,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACpD,KAAK,eAAe;YAClB,OAAO,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAClD,KAAK,mBAAmB;YACtB,OAAO,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACpD,KAAK,qCAAqC;YACxC,OAAO,EAAE,GAAG,KAAK,EAAE,2BAA2B,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACnE,KAAK,eAAe;YAClB,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAChD,KAAK,wBAAwB;YAC3B,OAAO,EAAE,GAAG,KAAK,EAAE,iBAAiB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACzD,KAAK,0BAA0B;YAC7B,OAAO,EAAE,GAAG,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC;QAC7C,OAAO,CAAC,CAAC,CAAC;YACR,+DAA+D;YAC/D,MAAM,gBAAgB,GAAU,MAAM,CAAC;YACvC,KAAK,gBAAgB,CAAC,CAAC,qDAAqD;YAC5E,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
/**
|
7
|
+
* Detects Kitty keyboard protocol support.
|
8
|
+
* Definitive document about this protocol lives at https://sw.kovidgoyal.net/kitty/keyboard-protocol/
|
9
|
+
* This function should be called once at app startup.
|
10
|
+
*/
|
11
|
+
export declare function detectAndEnableKittyProtocol(): Promise<boolean>;
|
12
|
+
export declare function isKittyProtocolEnabled(): boolean;
|
13
|
+
export declare function isKittyProtocolSupported(): boolean;
|
@@ -0,0 +1,88 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
let detectionComplete = false;
|
7
|
+
let protocolSupported = false;
|
8
|
+
let protocolEnabled = false;
|
9
|
+
/**
|
10
|
+
* Detects Kitty keyboard protocol support.
|
11
|
+
* Definitive document about this protocol lives at https://sw.kovidgoyal.net/kitty/keyboard-protocol/
|
12
|
+
* This function should be called once at app startup.
|
13
|
+
*/
|
14
|
+
export async function detectAndEnableKittyProtocol() {
|
15
|
+
if (detectionComplete) {
|
16
|
+
return protocolSupported;
|
17
|
+
}
|
18
|
+
return new Promise((resolve) => {
|
19
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
20
|
+
detectionComplete = true;
|
21
|
+
resolve(false);
|
22
|
+
return;
|
23
|
+
}
|
24
|
+
const originalRawMode = process.stdin.isRaw;
|
25
|
+
if (!originalRawMode) {
|
26
|
+
process.stdin.setRawMode(true);
|
27
|
+
}
|
28
|
+
let responseBuffer = '';
|
29
|
+
let progressiveEnhancementReceived = false;
|
30
|
+
let checkFinished = false;
|
31
|
+
const handleData = (data) => {
|
32
|
+
responseBuffer += data.toString();
|
33
|
+
// Check for progressive enhancement response (CSI ? <flags> u)
|
34
|
+
if (responseBuffer.includes('\x1b[?') && responseBuffer.includes('u')) {
|
35
|
+
progressiveEnhancementReceived = true;
|
36
|
+
}
|
37
|
+
// Check for device attributes response (CSI ? <attrs> c)
|
38
|
+
if (responseBuffer.includes('\x1b[?') && responseBuffer.includes('c')) {
|
39
|
+
if (!checkFinished) {
|
40
|
+
checkFinished = true;
|
41
|
+
process.stdin.removeListener('data', handleData);
|
42
|
+
if (!originalRawMode) {
|
43
|
+
process.stdin.setRawMode(false);
|
44
|
+
}
|
45
|
+
if (progressiveEnhancementReceived) {
|
46
|
+
// Enable the protocol
|
47
|
+
process.stdout.write('\x1b[>1u');
|
48
|
+
protocolSupported = true;
|
49
|
+
protocolEnabled = true;
|
50
|
+
// Set up cleanup on exit
|
51
|
+
process.on('exit', disableProtocol);
|
52
|
+
process.on('SIGTERM', disableProtocol);
|
53
|
+
}
|
54
|
+
detectionComplete = true;
|
55
|
+
resolve(protocolSupported);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
};
|
59
|
+
process.stdin.on('data', handleData);
|
60
|
+
// Send queries
|
61
|
+
process.stdout.write('\x1b[?u'); // Query progressive enhancement
|
62
|
+
process.stdout.write('\x1b[c'); // Query device attributes
|
63
|
+
// Timeout after 50ms
|
64
|
+
setTimeout(() => {
|
65
|
+
if (!checkFinished) {
|
66
|
+
process.stdin.removeListener('data', handleData);
|
67
|
+
if (!originalRawMode) {
|
68
|
+
process.stdin.setRawMode(false);
|
69
|
+
}
|
70
|
+
detectionComplete = true;
|
71
|
+
resolve(false);
|
72
|
+
}
|
73
|
+
}, 50);
|
74
|
+
});
|
75
|
+
}
|
76
|
+
function disableProtocol() {
|
77
|
+
if (protocolEnabled) {
|
78
|
+
process.stdout.write('\x1b[<u');
|
79
|
+
protocolEnabled = false;
|
80
|
+
}
|
81
|
+
}
|
82
|
+
export function isKittyProtocolEnabled() {
|
83
|
+
return protocolEnabled;
|
84
|
+
}
|
85
|
+
export function isKittyProtocolSupported() {
|
86
|
+
return protocolSupported;
|
87
|
+
}
|
88
|
+
//# sourceMappingURL=kittyProtocolDetector.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"kittyProtocolDetector.js","sourceRoot":"","sources":["../../../../src/ui/utils/kittyProtocolDetector.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
/**
|
7
|
+
* Terminal Platform Constants
|
8
|
+
*
|
9
|
+
* This file contains terminal-related constants used throughout the application,
|
10
|
+
* specifically for handling keyboard inputs and terminal protocols.
|
11
|
+
*/
|
12
|
+
/**
|
13
|
+
* Kitty keyboard protocol sequences for enhanced keyboard input.
|
14
|
+
* @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/
|
15
|
+
*/
|
16
|
+
export declare const KITTY_CTRL_C = "[99;5u";
|
17
|
+
/**
|
18
|
+
* Timing constants for terminal interactions
|
19
|
+
*/
|
20
|
+
export declare const CTRL_EXIT_PROMPT_DURATION_MS = 1000;
|
21
|
+
/**
|
22
|
+
* VS Code terminal integration constants
|
23
|
+
*/
|
24
|
+
export declare const VSCODE_SHIFT_ENTER_SEQUENCE = "\\\r\n";
|
25
|
+
/**
|
26
|
+
* Backslash + Enter detection window in milliseconds.
|
27
|
+
* Used to detect Shift+Enter pattern where backslash
|
28
|
+
* is followed by Enter within this timeframe.
|
29
|
+
*/
|
30
|
+
export declare const BACKSLASH_ENTER_DETECTION_WINDOW_MS = 5;
|
31
|
+
/**
|
32
|
+
* Maximum expected length of a Kitty keyboard protocol sequence.
|
33
|
+
* Format: ESC [ <keycode> ; <modifiers> u/~
|
34
|
+
* Example: \x1b[13;2u (Shift+Enter) = 8 chars
|
35
|
+
* Longest reasonable: \x1b[127;15~ = 11 chars (Del with all modifiers)
|
36
|
+
* We use 12 to provide a small buffer.
|
37
|
+
*/
|
38
|
+
export declare const MAX_KITTY_SEQUENCE_LENGTH = 12;
|