@google/gemini-cli 0.1.19-nightly.250813.9d023be1 → 0.1.19-nightly.250814.514e883a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.md +1 -1
  2. package/dist/package.json +3 -3
  3. package/dist/src/config/config.d.ts +1 -1
  4. package/dist/src/config/config.js +11 -8
  5. package/dist/src/config/config.js.map +1 -1
  6. package/dist/src/config/keyBindings.js +4 -0
  7. package/dist/src/config/keyBindings.js.map +1 -1
  8. package/dist/src/config/trustedFolders.d.ts +36 -0
  9. package/dist/src/config/trustedFolders.js +112 -0
  10. package/dist/src/config/trustedFolders.js.map +1 -0
  11. package/dist/src/gemini.js +6 -3
  12. package/dist/src/gemini.js.map +1 -1
  13. package/dist/src/generated/git-commit.d.ts +1 -1
  14. package/dist/src/generated/git-commit.js +1 -1
  15. package/dist/src/nonInteractiveCli.js +2 -3
  16. package/dist/src/nonInteractiveCli.js.map +1 -1
  17. package/dist/src/services/BuiltinCommandLoader.js +2 -0
  18. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  19. package/dist/src/ui/App.js +8 -2
  20. package/dist/src/ui/App.js.map +1 -1
  21. package/dist/src/ui/commands/directoryCommand.js +2 -4
  22. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  23. package/dist/src/ui/commands/mcpCommand.js +4 -0
  24. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  25. package/dist/src/ui/commands/terminalSetupCommand.d.ts +13 -0
  26. package/dist/src/ui/commands/terminalSetupCommand.js +41 -0
  27. package/dist/src/ui/commands/terminalSetupCommand.js.map +1 -0
  28. package/dist/src/ui/commands/types.d.ts +1 -0
  29. package/dist/src/ui/commands/types.js.map +1 -1
  30. package/dist/src/ui/components/InputPrompt.js +7 -1
  31. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  32. package/dist/src/ui/components/shared/vim-buffer-actions.js +2 -1
  33. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -1
  34. package/dist/src/ui/hooks/slashCommandProcessor.js +67 -46
  35. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  36. package/dist/src/ui/hooks/useFocus.d.ts +4 -0
  37. package/dist/src/ui/hooks/useFocus.js +4 -4
  38. package/dist/src/ui/hooks/useFocus.js.map +1 -1
  39. package/dist/src/ui/hooks/useFolderTrust.d.ts +3 -2
  40. package/dist/src/ui/hooks/useFolderTrust.js +24 -9
  41. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  42. package/dist/src/ui/hooks/useGeminiStream.js +1 -2
  43. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  44. package/dist/src/ui/hooks/useKeypress.d.ts +9 -1
  45. package/dist/src/ui/hooks/useKeypress.js +197 -8
  46. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  47. package/dist/src/ui/hooks/useKittyKeyboardProtocol.d.ts +15 -0
  48. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js +20 -0
  49. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js.map +1 -0
  50. package/dist/src/ui/utils/kittyProtocolDetector.d.ts +13 -0
  51. package/dist/src/ui/utils/kittyProtocolDetector.js +88 -0
  52. package/dist/src/ui/utils/kittyProtocolDetector.js.map +1 -0
  53. package/dist/src/ui/utils/platformConstants.d.ts +38 -0
  54. package/dist/src/ui/utils/platformConstants.js +39 -0
  55. package/dist/src/ui/utils/platformConstants.js.map +1 -0
  56. package/dist/src/ui/utils/terminalSetup.d.ts +30 -0
  57. package/dist/src/ui/utils/terminalSetup.js +281 -0
  58. package/dist/src/ui/utils/terminalSetup.js.map +1 -0
  59. package/dist/src/utils/checks.d.ts +19 -0
  60. package/dist/src/utils/checks.js +24 -0
  61. package/dist/src/utils/checks.js.map +1 -0
  62. package/dist/src/zed-integration/acp.d.ts +63 -0
  63. package/dist/src/{acp → zed-integration}/acp.js +76 -44
  64. package/dist/src/zed-integration/acp.js.map +1 -0
  65. package/dist/src/zed-integration/schema.d.ts +11679 -0
  66. package/dist/src/zed-integration/schema.js +305 -0
  67. package/dist/src/zed-integration/schema.js.map +1 -0
  68. package/dist/src/zed-integration/zedIntegration.d.ts +10 -0
  69. package/dist/src/{acp/acpPeer.js → zed-integration/zedIntegration.js} +333 -187
  70. package/dist/src/zed-integration/zedIntegration.js.map +1 -0
  71. package/dist/tsconfig.tsbuildinfo +1 -1
  72. package/package.json +4 -4
  73. package/dist/src/acp/acp.d.ts +0 -208
  74. package/dist/src/acp/acp.js.map +0 -1
  75. package/dist/src/acp/acpPeer.d.ts +0 -8
  76. package/dist/src/acp/acpPeer.js.map +0 -1
  77. package/dist/src/ui/utils/errorParsing.d.ts +0 -7
  78. package/dist/src/ui/utils/errorParsing.js +0 -90
  79. package/dist/src/ui/utils/errorParsing.js.map +0 -1
@@ -7,6 +7,12 @@ 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 { KittySequenceOverflowEvent, logKittySequenceOverflow, } from '@google/gemini-cli-core';
12
+ import { FOCUS_IN, FOCUS_OUT } from './useFocus.js';
13
+ const ESC = '\u001B';
14
+ export const PASTE_MODE_PREFIX = `${ESC}[200~`;
15
+ export const PASTE_MODE_SUFFIX = `${ESC}[201~`;
10
16
  /**
11
17
  * A hook that listens for keypress events from stdin, providing a
12
18
  * key object that mirrors the one from Node's `readline` module,
@@ -19,8 +25,10 @@ import { PassThrough } from 'stream';
19
25
  * @param onKeypress - The callback function to execute on each keypress.
20
26
  * @param options - Options to control the hook's behavior.
21
27
  * @param options.isActive - Whether the hook should be actively listening for input.
28
+ * @param options.kittyProtocolEnabled - Whether Kitty keyboard protocol is enabled.
29
+ * @param options.config - Optional config for telemetry logging.
22
30
  */
23
- export function useKeypress(onKeypress, { isActive }) {
31
+ export function useKeypress(onKeypress, { isActive, kittyProtocolEnabled = false, config, }) {
24
32
  const { stdin, setRawMode } = useStdin();
25
33
  const onKeypressRef = useRef(onKeypress);
26
34
  useEffect(() => {
@@ -43,7 +51,183 @@ export function useKeypress(onKeypress, { isActive }) {
43
51
  }
44
52
  let isPaste = false;
45
53
  let pasteBuffer = Buffer.alloc(0);
54
+ let kittySequenceBuffer = '';
55
+ let backslashTimeout = null;
56
+ let waitingForEnterAfterBackslash = false;
57
+ // Parse Kitty protocol sequences
58
+ const parseKittySequence = (sequence) => {
59
+ // Match CSI <number> ; <modifiers> u or ~
60
+ // Format: ESC [ <keycode> ; <modifiers> u/~
61
+ const kittyPattern = new RegExp(`^${ESC}\\[(\\d+)(;(\\d+))?([u~])$`);
62
+ const match = sequence.match(kittyPattern);
63
+ if (!match)
64
+ return null;
65
+ const keyCode = parseInt(match[1], 10);
66
+ const modifiers = match[3] ? parseInt(match[3], 10) : 1;
67
+ // Decode modifiers (subtract 1 as per Kitty protocol spec)
68
+ const modifierBits = modifiers - 1;
69
+ const shift = (modifierBits & 1) === 1;
70
+ const alt = (modifierBits & 2) === 2;
71
+ const ctrl = (modifierBits & 4) === 4;
72
+ // Handle Escape key (code 27)
73
+ if (keyCode === 27) {
74
+ return {
75
+ name: 'escape',
76
+ ctrl,
77
+ meta: alt,
78
+ shift,
79
+ paste: false,
80
+ sequence,
81
+ kittyProtocol: true,
82
+ };
83
+ }
84
+ // Handle Enter key (code 13)
85
+ if (keyCode === 13) {
86
+ return {
87
+ name: 'return',
88
+ ctrl,
89
+ meta: alt,
90
+ shift,
91
+ paste: false,
92
+ sequence,
93
+ kittyProtocol: true,
94
+ };
95
+ }
96
+ // Handle Ctrl+letter combinations (a-z)
97
+ // ASCII codes: a=97, b=98, c=99, ..., z=122
98
+ if (keyCode >= 97 && keyCode <= 122 && ctrl) {
99
+ const letter = String.fromCharCode(keyCode);
100
+ return {
101
+ name: letter,
102
+ ctrl: true,
103
+ meta: alt,
104
+ shift,
105
+ paste: false,
106
+ sequence,
107
+ kittyProtocol: true,
108
+ };
109
+ }
110
+ // Handle other keys as needed
111
+ return null;
112
+ };
46
113
  const handleKeypress = (_, key) => {
114
+ // Handle VS Code's backslash+return pattern (Shift+Enter)
115
+ if (key.name === 'return' && waitingForEnterAfterBackslash) {
116
+ // Cancel the timeout since we got the Enter
117
+ if (backslashTimeout) {
118
+ clearTimeout(backslashTimeout);
119
+ backslashTimeout = null;
120
+ }
121
+ waitingForEnterAfterBackslash = false;
122
+ // Convert to Shift+Enter
123
+ onKeypressRef.current({
124
+ ...key,
125
+ shift: true,
126
+ sequence: '\\\r', // VS Code's Shift+Enter representation
127
+ });
128
+ return;
129
+ }
130
+ // Handle backslash - hold it to see if Enter follows
131
+ if (key.sequence === '\\' && !key.name) {
132
+ // Don't pass through the backslash yet - wait to see if Enter follows
133
+ waitingForEnterAfterBackslash = true;
134
+ // Set up a timeout to pass through the backslash if no Enter follows
135
+ backslashTimeout = setTimeout(() => {
136
+ waitingForEnterAfterBackslash = false;
137
+ backslashTimeout = null;
138
+ // Pass through the backslash since no Enter followed
139
+ onKeypressRef.current(key);
140
+ }, BACKSLASH_ENTER_DETECTION_WINDOW_MS);
141
+ return;
142
+ }
143
+ // If we're waiting for Enter after backslash but got something else,
144
+ // pass through the backslash first, then the new key
145
+ if (waitingForEnterAfterBackslash && key.name !== 'return') {
146
+ if (backslashTimeout) {
147
+ clearTimeout(backslashTimeout);
148
+ backslashTimeout = null;
149
+ }
150
+ waitingForEnterAfterBackslash = false;
151
+ // Pass through the backslash that was held
152
+ onKeypressRef.current({
153
+ name: '',
154
+ sequence: '\\',
155
+ ctrl: false,
156
+ meta: false,
157
+ shift: false,
158
+ paste: false,
159
+ });
160
+ // Then continue processing the current key normally
161
+ }
162
+ // If readline has already identified an arrow key, pass it through
163
+ // immediately, bypassing the Kitty protocol sequence buffering.
164
+ if (['up', 'down', 'left', 'right'].includes(key.name)) {
165
+ onKeypressRef.current(key);
166
+ return;
167
+ }
168
+ // Always pass through Ctrl+C immediately, regardless of protocol state
169
+ // Check both standard format and Kitty protocol sequence
170
+ if ((key.ctrl && key.name === 'c') ||
171
+ key.sequence === `${ESC}${KITTY_CTRL_C}`) {
172
+ kittySequenceBuffer = '';
173
+ // If it's the Kitty sequence, create a proper key object
174
+ if (key.sequence === `${ESC}${KITTY_CTRL_C}`) {
175
+ onKeypressRef.current({
176
+ name: 'c',
177
+ ctrl: true,
178
+ meta: false,
179
+ shift: false,
180
+ paste: false,
181
+ sequence: key.sequence,
182
+ kittyProtocol: true,
183
+ });
184
+ }
185
+ else {
186
+ onKeypressRef.current(key);
187
+ }
188
+ return;
189
+ }
190
+ // If Kitty protocol is enabled, handle CSI sequences
191
+ if (kittyProtocolEnabled) {
192
+ // If we have a buffer or this starts a CSI sequence
193
+ if (kittySequenceBuffer ||
194
+ (key.sequence.startsWith(`${ESC}[`) &&
195
+ !key.sequence.startsWith(PASTE_MODE_PREFIX) &&
196
+ !key.sequence.startsWith(PASTE_MODE_SUFFIX) &&
197
+ !key.sequence.startsWith(FOCUS_IN) &&
198
+ !key.sequence.startsWith(FOCUS_OUT))) {
199
+ kittySequenceBuffer += key.sequence;
200
+ // Try to parse the buffer as a Kitty sequence
201
+ const kittyKey = parseKittySequence(kittySequenceBuffer);
202
+ if (kittyKey) {
203
+ kittySequenceBuffer = '';
204
+ onKeypressRef.current(kittyKey);
205
+ return;
206
+ }
207
+ if (config?.getDebugMode()) {
208
+ const codes = Array.from(kittySequenceBuffer).map((ch) => ch.charCodeAt(0));
209
+ // Unless the user is sshing over a slow connection, this likely
210
+ // indicates this is not a kitty sequence but we have incorrectly
211
+ // interpreted it as such. See the examples above for sequences
212
+ // such as FOCUS_IN that are not Kitty sequences.
213
+ console.warn('Kitty sequence buffer has char codes:', codes);
214
+ }
215
+ // If buffer doesn't match expected pattern and is getting long, flush it
216
+ if (kittySequenceBuffer.length > MAX_KITTY_SEQUENCE_LENGTH) {
217
+ // Log telemetry for buffer overflow
218
+ if (config) {
219
+ const event = new KittySequenceOverflowEvent(kittySequenceBuffer.length, kittySequenceBuffer);
220
+ logKittySequenceOverflow(config, event);
221
+ }
222
+ // Not a Kitty sequence, treat as regular key
223
+ kittySequenceBuffer = '';
224
+ }
225
+ else {
226
+ // Wait for more characters
227
+ return;
228
+ }
229
+ }
230
+ }
47
231
  if (key.name === 'paste-start') {
48
232
  isPaste = true;
49
233
  }
@@ -65,7 +249,7 @@ export function useKeypress(onKeypress, { isActive }) {
65
249
  }
66
250
  else {
67
251
  // Handle special keys
68
- if (key.name === 'return' && key.sequence === '\x1B\r') {
252
+ if (key.name === 'return' && key.sequence === `${ESC}\r`) {
69
253
  key.meta = true;
70
254
  }
71
255
  onKeypressRef.current({ ...key, paste: isPaste });
@@ -73,12 +257,12 @@ export function useKeypress(onKeypress, { isActive }) {
73
257
  }
74
258
  };
75
259
  const handleRawKeypress = (data) => {
76
- const PASTE_MODE_PREFIX = Buffer.from('\x1B[200~');
77
- const PASTE_MODE_SUFFIX = Buffer.from('\x1B[201~');
260
+ const pasteModePrefixBuffer = Buffer.from(PASTE_MODE_PREFIX);
261
+ const pasteModeSuffixBuffer = Buffer.from(PASTE_MODE_SUFFIX);
78
262
  let pos = 0;
79
263
  while (pos < data.length) {
80
- const prefixPos = data.indexOf(PASTE_MODE_PREFIX, pos);
81
- const suffixPos = data.indexOf(PASTE_MODE_SUFFIX, pos);
264
+ const prefixPos = data.indexOf(pasteModePrefixBuffer, pos);
265
+ const suffixPos = data.indexOf(pasteModeSuffixBuffer, pos);
82
266
  // Determine which marker comes first, if any.
83
267
  const isPrefixNext = prefixPos !== -1 && (suffixPos === -1 || prefixPos < suffixPos);
84
268
  const isSuffixNext = suffixPos !== -1 && (prefixPos === -1 || suffixPos < prefixPos);
@@ -90,7 +274,7 @@ export function useKeypress(onKeypress, { isActive }) {
90
274
  else if (isSuffixNext) {
91
275
  nextMarkerPos = suffixPos;
92
276
  }
93
- markerLength = PASTE_MODE_SUFFIX.length;
277
+ markerLength = pasteModeSuffixBuffer.length;
94
278
  if (nextMarkerPos === -1) {
95
279
  keypressStream.write(data.slice(pos));
96
280
  return;
@@ -141,6 +325,11 @@ export function useKeypress(onKeypress, { isActive }) {
141
325
  }
142
326
  rl.close();
143
327
  setRawMode(false);
328
+ // Clean up any pending backslash timeout
329
+ if (backslashTimeout) {
330
+ clearTimeout(backslashTimeout);
331
+ backslashTimeout = null;
332
+ }
144
333
  // If we are in the middle of a paste, send what we have.
145
334
  if (isPaste) {
146
335
  onKeypressRef.current({
@@ -154,6 +343,6 @@ export function useKeypress(onKeypress, { isActive }) {
154
343
  pasteBuffer = Buffer.alloc(0);
155
344
  }
156
345
  };
157
- }, [isActive, stdin, setRawMode]);
346
+ }, [isActive, stdin, setRawMode, kittyProtocolEnabled, config]);
158
347
  }
159
348
  //# sourceMappingURL=useKeypress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useKeypress.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useKeypress.ts"],"names":[],"mappings":"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"}
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"}
@@ -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;
@@ -0,0 +1,39 @@
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 const KITTY_CTRL_C = '[99;5u';
17
+ /**
18
+ * Timing constants for terminal interactions
19
+ */
20
+ export const CTRL_EXIT_PROMPT_DURATION_MS = 1000;
21
+ /**
22
+ * VS Code terminal integration constants
23
+ */
24
+ export 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 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 const MAX_KITTY_SEQUENCE_LENGTH = 12;
39
+ //# sourceMappingURL=platformConstants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformConstants.js","sourceRoot":"","sources":["../../../../src/ui/utils/platformConstants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,QAAQ,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export interface TerminalSetupResult {
7
+ success: boolean;
8
+ message: string;
9
+ requiresRestart?: boolean;
10
+ }
11
+ /**
12
+ * Main terminal setup function that detects and configures the current terminal.
13
+ *
14
+ * This function:
15
+ * 1. Detects the current terminal emulator
16
+ * 2. Applies appropriate configuration for Shift+Enter and Ctrl+Enter support
17
+ * 3. Creates backups of configuration files before modifying them
18
+ *
19
+ * @returns Promise<TerminalSetupResult> Result object with success status and message
20
+ *
21
+ * @example
22
+ * const result = await terminalSetup();
23
+ * if (result.success) {
24
+ * console.log(result.message);
25
+ * if (result.requiresRestart) {
26
+ * console.log('Please restart your terminal');
27
+ * }
28
+ * }
29
+ */
30
+ export declare function terminalSetup(): Promise<TerminalSetupResult>;