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

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 (209) hide show
  1. package/README.md +199 -132
  2. package/dist/package.json +4 -2
  3. package/dist/src/acp/acpPeer.js +72 -64
  4. package/dist/src/acp/acpPeer.js.map +1 -1
  5. package/dist/src/commands/mcp/add.d.ts +7 -0
  6. package/dist/src/commands/mcp/add.js +155 -0
  7. package/dist/src/commands/mcp/add.js.map +1 -0
  8. package/dist/src/commands/mcp/list.d.ts +8 -0
  9. package/dist/src/commands/mcp/list.js +110 -0
  10. package/dist/src/commands/mcp/list.js.map +1 -0
  11. package/dist/src/commands/mcp/remove.d.ts +7 -0
  12. package/dist/src/commands/mcp/remove.js +44 -0
  13. package/dist/src/commands/mcp/remove.js.map +1 -0
  14. package/dist/src/commands/mcp.d.ts +7 -0
  15. package/dist/src/commands/mcp.js +23 -0
  16. package/dist/src/commands/mcp.js.map +1 -0
  17. package/dist/src/config/config.d.ts +1 -2
  18. package/dist/src/config/config.js +114 -52
  19. package/dist/src/config/config.js.map +1 -1
  20. package/dist/src/config/keyBindings.d.ts +66 -0
  21. package/dist/src/config/keyBindings.js +136 -0
  22. package/dist/src/config/keyBindings.js.map +1 -0
  23. package/dist/src/config/settings.d.ts +3 -50
  24. package/dist/src/config/settings.js +17 -1
  25. package/dist/src/config/settings.js.map +1 -1
  26. package/dist/src/config/settingsSchema.d.ts +488 -0
  27. package/dist/src/config/settingsSchema.js +461 -0
  28. package/dist/src/config/settingsSchema.js.map +1 -0
  29. package/dist/src/gemini.js +9 -28
  30. package/dist/src/gemini.js.map +1 -1
  31. package/dist/src/generated/git-commit.d.ts +1 -1
  32. package/dist/src/generated/git-commit.js +1 -1
  33. package/dist/src/nonInteractiveCli.js +0 -1
  34. package/dist/src/nonInteractiveCli.js.map +1 -1
  35. package/dist/src/services/BuiltinCommandLoader.js +3 -2
  36. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  37. package/dist/src/ui/App.js +107 -36
  38. package/dist/src/ui/App.js.map +1 -1
  39. package/dist/src/ui/IdeIntegrationNudge.d.ts +16 -0
  40. package/dist/src/ui/IdeIntegrationNudge.js +52 -0
  41. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -0
  42. package/dist/src/ui/commands/chatCommand.js +15 -0
  43. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  44. package/dist/src/ui/commands/ideCommand.js +59 -5
  45. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  46. package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
  47. package/dist/src/ui/commands/settingsCommand.js +16 -0
  48. package/dist/src/ui/commands/settingsCommand.js.map +1 -0
  49. package/dist/src/ui/commands/setupGithubCommand.js +86 -19
  50. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  51. package/dist/src/ui/commands/types.d.ts +13 -2
  52. package/dist/src/ui/commands/types.js.map +1 -1
  53. package/dist/src/ui/components/AsciiArt.d.ts +1 -0
  54. package/dist/src/ui/components/AsciiArt.js +10 -0
  55. package/dist/src/ui/components/AsciiArt.js.map +1 -1
  56. package/dist/src/ui/components/AuthDialog.js +5 -4
  57. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  58. package/dist/src/ui/components/AuthInProgress.js +6 -5
  59. package/dist/src/ui/components/AuthInProgress.js.map +1 -1
  60. package/dist/src/ui/components/ContextSummaryDisplay.js +21 -24
  61. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  62. package/dist/src/ui/components/ContextUsageDisplay.d.ts +9 -0
  63. package/dist/src/ui/components/ContextUsageDisplay.js +14 -0
  64. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
  65. package/dist/src/ui/components/DebugProfiler.js +5 -4
  66. package/dist/src/ui/components/DebugProfiler.js.map +1 -1
  67. package/dist/src/ui/components/EditorSettingsDialog.js +6 -5
  68. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  69. package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
  70. package/dist/src/ui/components/FolderTrustDialog.js +39 -0
  71. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
  72. package/dist/src/ui/components/Footer.js +14 -5
  73. package/dist/src/ui/components/Footer.js.map +1 -1
  74. package/dist/src/ui/components/Header.d.ts +0 -1
  75. package/dist/src/ui/components/Header.js +13 -5
  76. package/dist/src/ui/components/Header.js.map +1 -1
  77. package/dist/src/ui/components/InputPrompt.d.ts +1 -0
  78. package/dist/src/ui/components/InputPrompt.js +90 -34
  79. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  80. package/dist/src/ui/components/LoadingIndicator.js +10 -5
  81. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  82. package/dist/src/ui/components/SettingsDialog.d.ts +14 -0
  83. package/dist/src/ui/components/SettingsDialog.js +249 -0
  84. package/dist/src/ui/components/SettingsDialog.js.map +1 -0
  85. package/dist/src/ui/components/ShellConfirmationDialog.js +5 -4
  86. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  87. package/dist/src/ui/components/SuggestionsDisplay.js +1 -1
  88. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  89. package/dist/src/ui/components/ThemeDialog.js +10 -20
  90. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  91. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +34 -13
  92. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  93. package/dist/src/ui/components/shared/RadioButtonSelect.js +10 -8
  94. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  95. package/dist/src/ui/components/shared/text-buffer.d.ts +17 -4
  96. package/dist/src/ui/components/shared/text-buffer.js +224 -70
  97. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  98. package/dist/src/ui/components/shared/vim-buffer-actions.js +137 -151
  99. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -1
  100. package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
  101. package/dist/src/ui/contexts/SettingsContext.js +15 -0
  102. package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
  103. package/dist/src/ui/hooks/atCommandProcessor.js +7 -4
  104. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  105. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -2
  106. package/dist/src/ui/hooks/slashCommandProcessor.js +34 -3
  107. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  108. package/dist/src/ui/hooks/useAtCompletion.js +4 -1
  109. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  110. package/dist/src/ui/hooks/useAutoAcceptIndicator.js +5 -5
  111. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -1
  112. package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
  113. package/dist/src/ui/hooks/useFolderTrust.js +22 -0
  114. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
  115. package/dist/src/ui/hooks/useGeminiStream.d.ts +2 -1
  116. package/dist/src/ui/hooks/useGeminiStream.js +33 -19
  117. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  118. package/dist/src/ui/hooks/usePhraseCycler.js +2 -2
  119. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  120. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +1 -1
  121. package/dist/src/ui/hooks/useReactToolScheduler.js +15 -15
  122. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  123. package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
  124. package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
  125. package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
  126. package/dist/src/ui/keyMatchers.d.ts +26 -0
  127. package/dist/src/ui/keyMatchers.js +68 -0
  128. package/dist/src/ui/keyMatchers.js.map +1 -0
  129. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +5 -4
  130. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
  131. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js +5 -4
  132. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js.map +1 -1
  133. package/dist/src/ui/privacy/GeminiPrivacyNotice.js +5 -4
  134. package/dist/src/ui/privacy/GeminiPrivacyNotice.js.map +1 -1
  135. package/dist/src/ui/semantic-colors.d.ts +7 -0
  136. package/dist/src/ui/semantic-colors.js +24 -0
  137. package/dist/src/ui/semantic-colors.js.map +1 -0
  138. package/dist/src/ui/themes/ansi-light.js +2 -1
  139. package/dist/src/ui/themes/ansi-light.js.map +1 -1
  140. package/dist/src/ui/themes/ansi.js +2 -1
  141. package/dist/src/ui/themes/ansi.js.map +1 -1
  142. package/dist/src/ui/themes/atom-one-dark.js +2 -1
  143. package/dist/src/ui/themes/atom-one-dark.js.map +1 -1
  144. package/dist/src/ui/themes/ayu-light.js +2 -1
  145. package/dist/src/ui/themes/ayu-light.js.map +1 -1
  146. package/dist/src/ui/themes/ayu.js +2 -1
  147. package/dist/src/ui/themes/ayu.js.map +1 -1
  148. package/dist/src/ui/themes/default-light.js +2 -1
  149. package/dist/src/ui/themes/default-light.js.map +1 -1
  150. package/dist/src/ui/themes/default.js +2 -1
  151. package/dist/src/ui/themes/default.js.map +1 -1
  152. package/dist/src/ui/themes/dracula.js +2 -1
  153. package/dist/src/ui/themes/dracula.js.map +1 -1
  154. package/dist/src/ui/themes/github-dark.js +2 -1
  155. package/dist/src/ui/themes/github-dark.js.map +1 -1
  156. package/dist/src/ui/themes/github-light.js +2 -1
  157. package/dist/src/ui/themes/github-light.js.map +1 -1
  158. package/dist/src/ui/themes/googlecode.js +2 -1
  159. package/dist/src/ui/themes/googlecode.js.map +1 -1
  160. package/dist/src/ui/themes/no-color.js +30 -1
  161. package/dist/src/ui/themes/no-color.js.map +1 -1
  162. package/dist/src/ui/themes/semantic-tokens.d.ts +37 -0
  163. package/dist/src/ui/themes/semantic-tokens.js +94 -0
  164. package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
  165. package/dist/src/ui/themes/shades-of-purple.js +2 -1
  166. package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
  167. package/dist/src/ui/themes/theme-manager.d.ts +6 -0
  168. package/dist/src/ui/themes/theme-manager.js +7 -0
  169. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  170. package/dist/src/ui/themes/theme.d.ts +45 -2
  171. package/dist/src/ui/themes/theme.js +92 -107
  172. package/dist/src/ui/themes/theme.js.map +1 -1
  173. package/dist/src/ui/themes/xcode.js +2 -1
  174. package/dist/src/ui/themes/xcode.js.map +1 -1
  175. package/dist/src/ui/types.d.ts +1 -1
  176. package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
  177. package/dist/src/ui/utils/CodeColorizer.js +4 -3
  178. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  179. package/dist/src/ui/utils/ConsolePatcher.d.ts +1 -0
  180. package/dist/src/ui/utils/ConsolePatcher.js +3 -0
  181. package/dist/src/ui/utils/ConsolePatcher.js.map +1 -1
  182. package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
  183. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  184. package/dist/src/ui/utils/commandUtils.d.ts +1 -0
  185. package/dist/src/ui/utils/commandUtils.js +22 -1
  186. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  187. package/dist/src/ui/utils/isNarrowWidth.d.ts +6 -0
  188. package/dist/src/ui/utils/isNarrowWidth.js +9 -0
  189. package/dist/src/ui/utils/isNarrowWidth.js.map +1 -0
  190. package/dist/src/utils/cleanup.d.ts +2 -2
  191. package/dist/src/utils/cleanup.js +2 -2
  192. package/dist/src/utils/cleanup.js.map +1 -1
  193. package/dist/src/utils/dialogScopeUtils.d.ts +31 -0
  194. package/dist/src/utils/dialogScopeUtils.js +48 -0
  195. package/dist/src/utils/dialogScopeUtils.js.map +1 -0
  196. package/dist/src/utils/gitUtils.d.ts +21 -1
  197. package/dist/src/utils/gitUtils.js +68 -3
  198. package/dist/src/utils/gitUtils.js.map +1 -1
  199. package/dist/src/utils/sandbox.js +426 -405
  200. package/dist/src/utils/sandbox.js.map +1 -1
  201. package/dist/src/utils/settingsUtils.d.ts +126 -0
  202. package/dist/src/utils/settingsUtils.js +327 -0
  203. package/dist/src/utils/settingsUtils.js.map +1 -0
  204. package/dist/tsconfig.tsbuildinfo +1 -1
  205. package/package.json +5 -3
  206. package/dist/google-gemini-cli-0.1.17.tgz +0 -0
  207. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
  208. package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -12
  209. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +0 -1
@@ -5,23 +5,24 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  * SPDX-License-Identifier: Apache-2.0
6
6
  */
7
7
  import { useState } from 'react';
8
- import { Box, Text, useInput } from 'ink';
8
+ import { Box, Text } from 'ink';
9
9
  import { Colors } from '../colors.js';
10
10
  import { EDITOR_DISPLAY_NAMES, editorSettingsManager, } from '../editors/editorSettingsManager.js';
11
11
  import { RadioButtonSelect } from './shared/RadioButtonSelect.js';
12
12
  import { SettingScope } from '../../config/settings.js';
13
13
  import { isEditorAvailable } from '@google/gemini-cli-core';
14
+ import { useKeypress } from '../hooks/useKeypress.js';
14
15
  export function EditorSettingsDialog({ onSelect, settings, onExit, }) {
15
16
  const [selectedScope, setSelectedScope] = useState(SettingScope.User);
16
17
  const [focusedSection, setFocusedSection] = useState('editor');
17
- useInput((_, key) => {
18
- if (key.tab) {
18
+ useKeypress((key) => {
19
+ if (key.name === 'tab') {
19
20
  setFocusedSection((prev) => (prev === 'editor' ? 'scope' : 'editor'));
20
21
  }
21
- if (key.escape) {
22
+ if (key.name === 'escape') {
22
23
  onExit();
23
24
  }
24
- });
25
+ }, { isActive: true });
25
26
  const editorItems = editorSettingsManager.getAvailableEditorDisplays();
26
27
  const currentPreference = settings.forScope(selectedScope).settings.preferredEditor;
27
28
  let editorIndex = currentPreference
@@ -1 +1 @@
1
- {"version":3,"file":"EditorSettingsDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/EditorSettingsDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EditorSettingsDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/EditorSettingsDialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import React from 'react';
7
+ export declare enum FolderTrustChoice {
8
+ TRUST_FOLDER = "trust_folder",
9
+ TRUST_PARENT = "trust_parent",
10
+ DO_NOT_TRUST = "do_not_trust"
11
+ }
12
+ interface FolderTrustDialogProps {
13
+ onSelect: (choice: FolderTrustChoice) => void;
14
+ }
15
+ export declare const FolderTrustDialog: React.FC<FolderTrustDialogProps>;
16
+ export {};
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { Box, Text } from 'ink';
8
+ import { Colors } from '../colors.js';
9
+ import { RadioButtonSelect, } from './shared/RadioButtonSelect.js';
10
+ import { useKeypress } from '../hooks/useKeypress.js';
11
+ export var FolderTrustChoice;
12
+ (function (FolderTrustChoice) {
13
+ FolderTrustChoice["TRUST_FOLDER"] = "trust_folder";
14
+ FolderTrustChoice["TRUST_PARENT"] = "trust_parent";
15
+ FolderTrustChoice["DO_NOT_TRUST"] = "do_not_trust";
16
+ })(FolderTrustChoice || (FolderTrustChoice = {}));
17
+ export const FolderTrustDialog = ({ onSelect, }) => {
18
+ useKeypress((key) => {
19
+ if (key.name === 'escape') {
20
+ onSelect(FolderTrustChoice.DO_NOT_TRUST);
21
+ }
22
+ }, { isActive: true });
23
+ const options = [
24
+ {
25
+ label: 'Trust folder',
26
+ value: FolderTrustChoice.TRUST_FOLDER,
27
+ },
28
+ {
29
+ label: 'Trust parent folder',
30
+ value: FolderTrustChoice.TRUST_PARENT,
31
+ },
32
+ {
33
+ label: "Don't trust (esc)",
34
+ value: FolderTrustChoice.DO_NOT_TRUST,
35
+ },
36
+ ];
37
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: Colors.AccentYellow, padding: 1, width: "100%", marginLeft: 1, children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Do you trust this folder?" }), _jsx(Text, { children: "Trusting a folder allows Gemini to execute commands it suggests. This is a security feature to prevent accidental execution in untrusted directories." })] }), _jsx(RadioButtonSelect, { items: options, onSelect: onSelect, isFocused: true })] }));
38
+ };
39
+ //# sourceMappingURL=FolderTrustDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FolderTrustDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/FolderTrustDialog.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,iBAAiB,GAElB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,kDAA6B,CAAA;IAC7B,kDAA6B,CAAA;IAC7B,kDAA6B,CAAA;AAC/B,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAMD,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EAClE,QAAQ,GACT,EAAE,EAAE;IACH,WAAW,CACT,CAAC,GAAG,EAAE,EAAE;QACN,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;IAEF,MAAM,OAAO,GAA8C;QACzD;YACE,KAAK,EAAE,cAAc;YACrB,KAAK,EAAE,iBAAiB,CAAC,YAAY;SACtC;QACD;YACE,KAAK,EAAE,qBAAqB;YAC5B,KAAK,EAAE,iBAAiB,CAAC,YAAY;SACtC;QACD;YACE,KAAK,EAAE,mBAAmB;YAC1B,KAAK,EAAE,iBAAiB,CAAC,YAAY;SACtC;KACF,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,MAAM,CAAC,YAAY,EAChC,OAAO,EAAE,CAAC,EACV,KAAK,EAAC,MAAM,EACZ,UAAU,EAAE,CAAC,aAEb,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,IAAI,IAAC,IAAI,gDAAiC,EAC3C,KAAC,IAAI,wKAIE,IACH,EAEN,KAAC,iBAAiB,IAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,SAAG,IAC/D,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1,15 +1,24 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text } from 'ink';
3
- import { Colors } from '../colors.js';
4
- import { shortenPath, tildeifyPath, tokenLimit } from '@google/gemini-cli-core';
3
+ import { theme } from '../semantic-colors.js';
4
+ import { shortenPath, tildeifyPath } from '@google/gemini-cli-core';
5
5
  import { ConsoleSummaryDisplay } from './ConsoleSummaryDisplay.js';
6
6
  import process from 'node:process';
7
+ import path from 'node:path';
7
8
  import Gradient from 'ink-gradient';
8
9
  import { MemoryUsageDisplay } from './MemoryUsageDisplay.js';
10
+ import { ContextUsageDisplay } from './ContextUsageDisplay.js';
9
11
  import { DebugProfiler } from './DebugProfiler.js';
12
+ import { useTerminalSize } from '../hooks/useTerminalSize.js';
13
+ import { isNarrowWidth } from '../utils/isNarrowWidth.js';
10
14
  export const Footer = ({ model, targetDir, branchName, debugMode, debugMessage, corgiMode, errorCount, showErrorDetails, showMemoryUsage, promptTokenCount, nightly, vimMode, }) => {
11
- const limit = tokenLimit(model);
12
- const percentage = promptTokenCount / limit;
13
- return (_jsxs(Box, { justifyContent: "space-between", width: "100%", children: [_jsxs(Box, { children: [debugMode && _jsx(DebugProfiler, {}), vimMode && _jsxs(Text, { color: Colors.Gray, children: ["[", vimMode, "] "] }), nightly ? (_jsx(Gradient, { colors: Colors.GradientColors, children: _jsxs(Text, { children: [shortenPath(tildeifyPath(targetDir), 70), branchName && _jsxs(Text, { children: [" (", branchName, "*)"] })] }) })) : (_jsxs(Text, { color: Colors.LightBlue, children: [shortenPath(tildeifyPath(targetDir), 70), branchName && _jsxs(Text, { color: Colors.Gray, children: [" (", branchName, "*)"] })] })), debugMode && (_jsx(Text, { color: Colors.AccentRed, children: ' ' + (debugMessage || '--debug') }))] }), _jsx(Box, { flexGrow: 1, alignItems: "center", justifyContent: "center", display: "flex", children: process.env.SANDBOX && process.env.SANDBOX !== 'sandbox-exec' ? (_jsx(Text, { color: "green", children: process.env.SANDBOX.replace(/^gemini-(?:cli-)?/, '') })) : process.env.SANDBOX === 'sandbox-exec' ? (_jsxs(Text, { color: Colors.AccentYellow, children: ["macOS Seatbelt", ' ', _jsxs(Text, { color: Colors.Gray, children: ["(", process.env.SEATBELT_PROFILE, ")"] })] })) : (_jsxs(Text, { color: Colors.AccentRed, children: ["no sandbox ", _jsx(Text, { color: Colors.Gray, children: "(see /docs)" })] })) }), _jsxs(Box, { alignItems: "center", children: [_jsxs(Text, { color: Colors.AccentBlue, children: [' ', model, ' ', _jsxs(Text, { color: Colors.Gray, children: ["(", ((1 - percentage) * 100).toFixed(0), "% context left)"] })] }), corgiMode && (_jsxs(Text, { children: [_jsx(Text, { color: Colors.Gray, children: "| " }), _jsx(Text, { color: Colors.AccentRed, children: "\u25BC" }), _jsx(Text, { color: Colors.Foreground, children: "(\u00B4" }), _jsx(Text, { color: Colors.AccentRed, children: "\u1D25" }), _jsx(Text, { color: Colors.Foreground, children: "`)" }), _jsx(Text, { color: Colors.AccentRed, children: "\u25BC " })] })), !showErrorDetails && errorCount > 0 && (_jsxs(Box, { children: [_jsx(Text, { color: Colors.Gray, children: "| " }), _jsx(ConsoleSummaryDisplay, { errorCount: errorCount })] })), showMemoryUsage && _jsx(MemoryUsageDisplay, {})] })] }));
15
+ const { columns: terminalWidth } = useTerminalSize();
16
+ const isNarrow = isNarrowWidth(terminalWidth);
17
+ // Adjust path length based on terminal width
18
+ const pathLength = Math.max(20, Math.floor(terminalWidth * 0.4));
19
+ const displayPath = isNarrow
20
+ ? path.basename(tildeifyPath(targetDir))
21
+ : shortenPath(tildeifyPath(targetDir), pathLength);
22
+ return (_jsxs(Box, { justifyContent: "space-between", width: "100%", flexDirection: isNarrow ? 'column' : 'row', alignItems: isNarrow ? 'flex-start' : 'center', children: [_jsxs(Box, { children: [debugMode && _jsx(DebugProfiler, {}), vimMode && _jsxs(Text, { color: theme.text.secondary, children: ["[", vimMode, "] "] }), nightly ? (_jsx(Gradient, { colors: theme.ui.gradient, children: _jsxs(Text, { children: [displayPath, branchName && _jsxs(Text, { children: [" (", branchName, "*)"] })] }) })) : (_jsxs(Text, { color: theme.text.link, children: [displayPath, branchName && (_jsxs(Text, { color: theme.text.secondary, children: [" (", branchName, "*)"] }))] })), debugMode && (_jsx(Text, { color: theme.status.error, children: ' ' + (debugMessage || '--debug') }))] }), _jsx(Box, { flexGrow: isNarrow ? 0 : 1, alignItems: "center", justifyContent: isNarrow ? 'flex-start' : 'center', display: "flex", paddingX: isNarrow ? 0 : 1, paddingTop: isNarrow ? 1 : 0, children: process.env.SANDBOX && process.env.SANDBOX !== 'sandbox-exec' ? (_jsx(Text, { color: "green", children: process.env.SANDBOX.replace(/^gemini-(?:cli-)?/, '') })) : process.env.SANDBOX === 'sandbox-exec' ? (_jsxs(Text, { color: theme.status.warning, children: ["macOS Seatbelt", ' ', _jsxs(Text, { color: theme.text.secondary, children: ["(", process.env.SEATBELT_PROFILE, ")"] })] })) : (_jsxs(Text, { color: theme.status.error, children: ["no sandbox ", _jsx(Text, { color: theme.text.secondary, children: "(see /docs)" })] })) }), _jsxs(Box, { alignItems: "center", paddingTop: isNarrow ? 1 : 0, children: [_jsxs(Text, { color: theme.text.accent, children: [isNarrow ? '' : ' ', model, ' ', _jsx(ContextUsageDisplay, { promptTokenCount: promptTokenCount, model: model })] }), corgiMode && (_jsxs(Text, { children: [_jsx(Text, { color: theme.ui.symbol, children: "| " }), _jsx(Text, { color: theme.status.error, children: "\u25BC" }), _jsx(Text, { color: theme.text.primary, children: "(\u00B4" }), _jsx(Text, { color: theme.status.error, children: "\u1D25" }), _jsx(Text, { color: theme.text.primary, children: "`)" }), _jsx(Text, { color: theme.status.error, children: "\u25BC " })] })), !showErrorDetails && errorCount > 0 && (_jsxs(Box, { children: [_jsx(Text, { color: theme.ui.symbol, children: "| " }), _jsx(ConsoleSummaryDisplay, { errorCount: errorCount })] })), showMemoryUsage && _jsx(MemoryUsageDisplay, {})] })] }));
14
23
  };
15
24
  //# sourceMappingURL=Footer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"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"}
@@ -6,7 +6,6 @@
6
6
  import React from 'react';
7
7
  interface HeaderProps {
8
8
  customAsciiArt?: string;
9
- terminalWidth: number;
10
9
  version: string;
11
10
  nightly: boolean;
12
11
  }
@@ -2,19 +2,27 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text } from 'ink';
3
3
  import Gradient from 'ink-gradient';
4
4
  import { Colors } from '../colors.js';
5
- import { shortAsciiLogo, longAsciiLogo } from './AsciiArt.js';
5
+ import { shortAsciiLogo, longAsciiLogo, tinyAsciiLogo } from './AsciiArt.js';
6
6
  import { getAsciiArtWidth } from '../utils/textUtils.js';
7
- export const Header = ({ customAsciiArt, terminalWidth, version, nightly, }) => {
7
+ import { useTerminalSize } from '../hooks/useTerminalSize.js';
8
+ export const Header = ({ customAsciiArt, version, nightly, }) => {
9
+ const { columns: terminalWidth } = useTerminalSize();
8
10
  let displayTitle;
9
11
  const widthOfLongLogo = getAsciiArtWidth(longAsciiLogo);
12
+ const widthOfShortLogo = getAsciiArtWidth(shortAsciiLogo);
10
13
  if (customAsciiArt) {
11
14
  displayTitle = customAsciiArt;
12
15
  }
16
+ else if (terminalWidth >= widthOfLongLogo) {
17
+ displayTitle = longAsciiLogo;
18
+ }
19
+ else if (terminalWidth >= widthOfShortLogo) {
20
+ displayTitle = shortAsciiLogo;
21
+ }
13
22
  else {
14
- displayTitle =
15
- terminalWidth >= widthOfLongLogo ? longAsciiLogo : shortAsciiLogo;
23
+ displayTitle = tinyAsciiLogo;
16
24
  }
17
25
  const artWidth = getAsciiArtWidth(displayTitle);
18
- return (_jsxs(Box, { alignItems: "flex-start", width: artWidth, flexShrink: 0, flexDirection: "column", children: [Colors.GradientColors ? (_jsx(Gradient, { colors: Colors.GradientColors, children: _jsx(Text, { children: displayTitle }) })) : (_jsx(Text, { children: displayTitle })), nightly && (_jsx(Box, { width: "100%", flexDirection: "row", justifyContent: "flex-end", children: _jsx(Gradient, { colors: Colors.GradientColors, children: _jsxs(Text, { children: ["v", version] }) }) }))] }));
26
+ return (_jsxs(Box, { alignItems: "flex-start", width: artWidth, flexShrink: 0, flexDirection: "column", children: [Colors.GradientColors ? (_jsx(Gradient, { colors: Colors.GradientColors, children: _jsx(Text, { children: displayTitle }) })) : (_jsx(Text, { children: displayTitle })), nightly && (_jsx(Box, { width: "100%", flexDirection: "row", justifyContent: "flex-end", children: Colors.GradientColors ? (_jsx(Gradient, { colors: Colors.GradientColors, children: _jsxs(Text, { children: ["v", version] }) })) : (_jsxs(Text, { children: ["v", version] })) }))] }));
19
27
  };
20
28
  //# sourceMappingURL=Header.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../../src/ui/components/Header.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,QAAQ,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AASzD,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAC5C,cAAc,EACd,aAAa,EACb,OAAO,EACP,OAAO,GACR,EAAE,EAAE;IACH,IAAI,YAAY,CAAC;IACjB,MAAM,eAAe,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAExD,IAAI,cAAc,EAAE,CAAC;QACnB,YAAY,GAAG,cAAc,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,YAAY;YACV,aAAa,IAAI,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAEhD,OAAO,CACL,MAAC,GAAG,IACF,UAAU,EAAC,YAAY,EACvB,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,CAAC,EACb,aAAa,EAAC,QAAQ,aAErB,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CACvB,KAAC,QAAQ,IAAC,MAAM,EAAE,MAAM,CAAC,cAAc,YACrC,KAAC,IAAI,cAAE,YAAY,GAAQ,GAClB,CACZ,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,cAAE,YAAY,GAAQ,CAC5B,EACA,OAAO,IAAI,CACV,KAAC,GAAG,IAAC,KAAK,EAAC,MAAM,EAAC,aAAa,EAAC,KAAK,EAAC,cAAc,EAAC,UAAU,YAC7D,KAAC,QAAQ,IAAC,MAAM,EAAE,MAAM,CAAC,cAAc,YACrC,MAAC,IAAI,oBAAG,OAAO,IAAQ,GACd,GACP,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../../src/ui/components/Header.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,QAAQ,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAQ9D,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAC5C,cAAc,EACd,OAAO,EACP,OAAO,GACR,EAAE,EAAE;IACH,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,eAAe,EAAE,CAAC;IACrD,IAAI,YAAY,CAAC;IACjB,MAAM,eAAe,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAE1D,IAAI,cAAc,EAAE,CAAC;QACnB,YAAY,GAAG,cAAc,CAAC;IAChC,CAAC;SAAM,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;QAC5C,YAAY,GAAG,aAAa,CAAC;IAC/B,CAAC;SAAM,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAAC;QAC7C,YAAY,GAAG,cAAc,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,aAAa,CAAC;IAC/B,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAEhD,OAAO,CACL,MAAC,GAAG,IACF,UAAU,EAAC,YAAY,EACvB,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,CAAC,EACb,aAAa,EAAC,QAAQ,aAErB,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CACvB,KAAC,QAAQ,IAAC,MAAM,EAAE,MAAM,CAAC,cAAc,YACrC,KAAC,IAAI,cAAE,YAAY,GAAQ,GAClB,CACZ,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,cAAE,YAAY,GAAQ,CAC5B,EACA,OAAO,IAAI,CACV,KAAC,GAAG,IAAC,KAAK,EAAC,MAAM,EAAC,aAAa,EAAC,KAAK,EAAC,cAAc,EAAC,UAAU,YAC5D,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CACvB,KAAC,QAAQ,IAAC,MAAM,EAAE,MAAM,CAAC,cAAc,YACrC,MAAC,IAAI,oBAAG,OAAO,IAAQ,GACd,CACZ,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,oBAAG,OAAO,IAAQ,CACxB,GACG,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -22,6 +22,7 @@ export interface InputPromptProps {
22
22
  suggestionsWidth: number;
23
23
  shellModeActive: boolean;
24
24
  setShellModeActive: (value: boolean) => void;
25
+ onEscapePromptChange?: (showPrompt: boolean) => void;
25
26
  vimHandleInput?: (key: Key) => boolean;
26
27
  }
27
28
  export declare const InputPrompt: React.FC<InputPromptProps>;
@@ -4,9 +4,9 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
4
4
  * Copyright 2025 Google LLC
5
5
  * SPDX-License-Identifier: Apache-2.0
6
6
  */
7
- import { useCallback, useEffect, useState } from 'react';
7
+ import { useCallback, useEffect, useState, useRef } from 'react';
8
8
  import { Box, Text } from 'ink';
9
- import { Colors } from '../colors.js';
9
+ import { theme } from '../semantic-colors.js';
10
10
  import { SuggestionsDisplay } from './SuggestionsDisplay.js';
11
11
  import { useInputHistory } from '../hooks/useInputHistory.js';
12
12
  import { logicalPosToOffset } from './shared/text-buffer.js';
@@ -17,10 +17,14 @@ import { useShellHistory } from '../hooks/useShellHistory.js';
17
17
  import { useReverseSearchCompletion } from '../hooks/useReverseSearchCompletion.js';
18
18
  import { useCommandCompletion } from '../hooks/useCommandCompletion.js';
19
19
  import { useKeypress } from '../hooks/useKeypress.js';
20
+ import { keyMatchers, Command } from '../keyMatchers.js';
20
21
  import { clipboardHasImage, saveClipboardImage, cleanupOldClipboardImages, } from '../utils/clipboardUtils.js';
21
22
  import * as path from 'path';
22
- export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, config, slashCommands, commandContext, placeholder = ' Type your message or @path/to/file', focus = true, inputWidth, suggestionsWidth, shellModeActive, setShellModeActive, vimHandleInput, }) => {
23
+ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, config, slashCommands, commandContext, placeholder = ' Type your message or @path/to/file', focus = true, inputWidth, suggestionsWidth, shellModeActive, setShellModeActive, onEscapePromptChange, vimHandleInput, }) => {
23
24
  const [justNavigatedHistory, setJustNavigatedHistory] = useState(false);
25
+ const [escPressCount, setEscPressCount] = useState(0);
26
+ const [showEscapePrompt, setShowEscapePrompt] = useState(false);
27
+ const escapeTimerRef = useRef(null);
24
28
  const [dirs, setDirs] = useState(config.getWorkspaceContext().getDirectories());
25
29
  const dirsChanged = config.getWorkspaceContext().getDirectories();
26
30
  useEffect(() => {
@@ -39,6 +43,26 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
39
43
  const reverseSearchCompletion = useReverseSearchCompletion(buffer, historyData, reverseSearchActive);
40
44
  const resetCompletionState = completion.resetCompletionState;
41
45
  const resetReverseSearchCompletionState = reverseSearchCompletion.resetCompletionState;
46
+ const resetEscapeState = useCallback(() => {
47
+ if (escapeTimerRef.current) {
48
+ clearTimeout(escapeTimerRef.current);
49
+ escapeTimerRef.current = null;
50
+ }
51
+ setEscPressCount(0);
52
+ setShowEscapePrompt(false);
53
+ }, []);
54
+ // Notify parent component about escape prompt state changes
55
+ useEffect(() => {
56
+ if (onEscapePromptChange) {
57
+ onEscapePromptChange(showEscapePrompt);
58
+ }
59
+ }, [showEscapePrompt, onEscapePromptChange]);
60
+ // Clear escape prompt timer on unmount
61
+ useEffect(() => () => {
62
+ if (escapeTimerRef.current) {
63
+ clearTimeout(escapeTimerRef.current);
64
+ }
65
+ }, []);
42
66
  const handleSubmitAndClear = useCallback((submittedValue) => {
43
67
  if (shellModeActive) {
44
68
  shellHistory.addCommandToHistory(submittedValue);
@@ -132,6 +156,12 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
132
156
  if (vimHandleInput && vimHandleInput(key)) {
133
157
  return;
134
158
  }
159
+ // Reset ESC count and hide prompt on any non-ESC key
160
+ if (key.name !== 'escape') {
161
+ if (escPressCount > 0 || showEscapePrompt) {
162
+ resetEscapeState();
163
+ }
164
+ }
135
165
  if (key.sequence === '!' &&
136
166
  buffer.text === '' &&
137
167
  !completion.showSuggestions) {
@@ -139,7 +169,7 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
139
169
  buffer.setText(''); // Clear the '!' from input
140
170
  return;
141
171
  }
142
- if (key.name === 'escape') {
172
+ if (keyMatchers[Command.ESCAPE](key)) {
143
173
  if (reverseSearchActive) {
144
174
  setReverseSearchActive(false);
145
175
  reverseSearchCompletion.resetCompletionState();
@@ -150,42 +180,65 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
150
180
  }
151
181
  if (shellModeActive) {
152
182
  setShellModeActive(false);
183
+ resetEscapeState();
153
184
  return;
154
185
  }
155
186
  if (completion.showSuggestions) {
156
187
  completion.resetCompletionState();
188
+ resetEscapeState();
157
189
  return;
158
190
  }
191
+ // Handle double ESC for clearing input
192
+ if (escPressCount === 0) {
193
+ if (buffer.text === '') {
194
+ return;
195
+ }
196
+ setEscPressCount(1);
197
+ setShowEscapePrompt(true);
198
+ if (escapeTimerRef.current) {
199
+ clearTimeout(escapeTimerRef.current);
200
+ }
201
+ escapeTimerRef.current = setTimeout(() => {
202
+ resetEscapeState();
203
+ }, 500);
204
+ }
205
+ else {
206
+ // clear input and immediately reset state
207
+ buffer.setText('');
208
+ resetCompletionState();
209
+ resetEscapeState();
210
+ }
211
+ return;
159
212
  }
160
- if (shellModeActive && key.ctrl && key.name === 'r') {
213
+ if (shellModeActive && keyMatchers[Command.REVERSE_SEARCH](key)) {
161
214
  setReverseSearchActive(true);
162
215
  setTextBeforeReverseSearch(buffer.text);
163
216
  setCursorPosition(buffer.cursor);
164
217
  return;
165
218
  }
166
- if (key.ctrl && key.name === 'l') {
219
+ if (keyMatchers[Command.CLEAR_SCREEN](key)) {
167
220
  onClearScreen();
168
221
  return;
169
222
  }
170
223
  if (reverseSearchActive) {
171
224
  const { activeSuggestionIndex, navigateUp, navigateDown, showSuggestions, suggestions, } = reverseSearchCompletion;
172
225
  if (showSuggestions) {
173
- if (key.name === 'up') {
226
+ if (keyMatchers[Command.NAVIGATION_UP](key)) {
174
227
  navigateUp();
175
228
  return;
176
229
  }
177
- if (key.name === 'down') {
230
+ if (keyMatchers[Command.NAVIGATION_DOWN](key)) {
178
231
  navigateDown();
179
232
  return;
180
233
  }
181
- if (key.name === 'tab') {
234
+ if (keyMatchers[Command.ACCEPT_SUGGESTION_REVERSE_SEARCH](key)) {
182
235
  reverseSearchCompletion.handleAutocomplete(activeSuggestionIndex);
183
236
  reverseSearchCompletion.resetCompletionState();
184
237
  setReverseSearchActive(false);
185
238
  return;
186
239
  }
187
240
  }
188
- if (key.name === 'return' && !key.ctrl) {
241
+ if (keyMatchers[Command.SUBMIT_REVERSE_SEARCH](key)) {
189
242
  const textToSubmit = showSuggestions && activeSuggestionIndex > -1
190
243
  ? suggestions[activeSuggestionIndex].value
191
244
  : buffer.text;
@@ -195,27 +248,28 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
195
248
  return;
196
249
  }
197
250
  // Prevent up/down from falling through to regular history navigation
198
- if (key.name === 'up' || key.name === 'down') {
251
+ if (keyMatchers[Command.NAVIGATION_UP](key) ||
252
+ keyMatchers[Command.NAVIGATION_DOWN](key)) {
199
253
  return;
200
254
  }
201
255
  }
202
256
  // If the command is a perfect match, pressing enter should execute it.
203
- if (completion.isPerfectMatch && key.name === 'return') {
257
+ if (completion.isPerfectMatch && keyMatchers[Command.RETURN](key)) {
204
258
  handleSubmitAndClear(buffer.text);
205
259
  return;
206
260
  }
207
261
  if (completion.showSuggestions) {
208
262
  if (completion.suggestions.length > 1) {
209
- if (key.name === 'up' || (key.ctrl && key.name === 'p')) {
263
+ if (keyMatchers[Command.COMPLETION_UP](key)) {
210
264
  completion.navigateUp();
211
265
  return;
212
266
  }
213
- if (key.name === 'down' || (key.ctrl && key.name === 'n')) {
267
+ if (keyMatchers[Command.COMPLETION_DOWN](key)) {
214
268
  completion.navigateDown();
215
269
  return;
216
270
  }
217
271
  }
218
- if (key.name === 'tab' || (key.name === 'return' && !key.ctrl)) {
272
+ if (keyMatchers[Command.ACCEPT_SUGGESTION](key)) {
219
273
  if (completion.suggestions.length > 0) {
220
274
  const targetIndex = completion.activeSuggestionIndex === -1
221
275
  ? 0 // Default to the first if none is active
@@ -228,22 +282,22 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
228
282
  }
229
283
  }
230
284
  if (!shellModeActive) {
231
- if (key.ctrl && key.name === 'p') {
285
+ if (keyMatchers[Command.HISTORY_UP](key)) {
232
286
  inputHistory.navigateUp();
233
287
  return;
234
288
  }
235
- if (key.ctrl && key.name === 'n') {
289
+ if (keyMatchers[Command.HISTORY_DOWN](key)) {
236
290
  inputHistory.navigateDown();
237
291
  return;
238
292
  }
239
293
  // Handle arrow-up/down for history on single-line or at edges
240
- if (key.name === 'up' &&
294
+ if (keyMatchers[Command.NAVIGATION_UP](key) &&
241
295
  (buffer.allVisualLines.length === 1 ||
242
296
  (buffer.visualCursor[0] === 0 && buffer.visualScrollRow === 0))) {
243
297
  inputHistory.navigateUp();
244
298
  return;
245
299
  }
246
- if (key.name === 'down' &&
300
+ if (keyMatchers[Command.NAVIGATION_DOWN](key) &&
247
301
  (buffer.allVisualLines.length === 1 ||
248
302
  buffer.visualCursor[0] === buffer.allVisualLines.length - 1)) {
249
303
  inputHistory.navigateDown();
@@ -251,20 +305,21 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
251
305
  }
252
306
  }
253
307
  else {
254
- if (key.name === 'up') {
308
+ // Shell History Navigation
309
+ if (keyMatchers[Command.NAVIGATION_UP](key)) {
255
310
  const prevCommand = shellHistory.getPreviousCommand();
256
311
  if (prevCommand !== null)
257
312
  buffer.setText(prevCommand);
258
313
  return;
259
314
  }
260
- if (key.name === 'down') {
315
+ if (keyMatchers[Command.NAVIGATION_DOWN](key)) {
261
316
  const nextCommand = shellHistory.getNextCommand();
262
317
  if (nextCommand !== null)
263
318
  buffer.setText(nextCommand);
264
319
  return;
265
320
  }
266
321
  }
267
- if (key.name === 'return' && !key.ctrl && !key.meta && !key.paste) {
322
+ if (keyMatchers[Command.SUBMIT](key)) {
268
323
  if (buffer.text.trim()) {
269
324
  const [row, col] = buffer.cursor;
270
325
  const line = buffer.lines[row];
@@ -280,46 +335,44 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
280
335
  return;
281
336
  }
282
337
  // Newline insertion
283
- if (key.name === 'return' && (key.ctrl || key.meta || key.paste)) {
338
+ if (keyMatchers[Command.NEWLINE](key)) {
284
339
  buffer.newline();
285
340
  return;
286
341
  }
287
342
  // Ctrl+A (Home) / Ctrl+E (End)
288
- if (key.ctrl && key.name === 'a') {
343
+ if (keyMatchers[Command.HOME](key)) {
289
344
  buffer.move('home');
290
345
  return;
291
346
  }
292
- if (key.ctrl && key.name === 'e') {
347
+ if (keyMatchers[Command.END](key)) {
293
348
  buffer.move('end');
294
349
  buffer.moveToOffset(cpLen(buffer.text));
295
350
  return;
296
351
  }
297
352
  // Ctrl+C (Clear input)
298
- if (key.ctrl && key.name === 'c') {
353
+ if (keyMatchers[Command.CLEAR_INPUT](key)) {
299
354
  if (buffer.text.length > 0) {
300
355
  buffer.setText('');
301
356
  resetCompletionState();
302
- return;
303
357
  }
304
358
  return;
305
359
  }
306
360
  // Kill line commands
307
- if (key.ctrl && key.name === 'k') {
361
+ if (keyMatchers[Command.KILL_LINE_RIGHT](key)) {
308
362
  buffer.killLineRight();
309
363
  return;
310
364
  }
311
- if (key.ctrl && key.name === 'u') {
365
+ if (keyMatchers[Command.KILL_LINE_LEFT](key)) {
312
366
  buffer.killLineLeft();
313
367
  return;
314
368
  }
315
369
  // External editor
316
- const isCtrlX = key.ctrl && (key.name === 'x' || key.sequence === '\x18');
317
- if (isCtrlX) {
370
+ if (keyMatchers[Command.OPEN_EXTERNAL_EDITOR](key)) {
318
371
  buffer.openInExternalEditor();
319
372
  return;
320
373
  }
321
374
  // Ctrl+V for clipboard image paste
322
- if (key.ctrl && key.name === 'v') {
375
+ if (keyMatchers[Command.PASTE_CLIPBOARD_IMAGE](key)) {
323
376
  handleClipboardImage();
324
377
  return;
325
378
  }
@@ -338,6 +391,9 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
338
391
  reverseSearchCompletion,
339
392
  handleClipboardImage,
340
393
  resetCompletionState,
394
+ escPressCount,
395
+ showEscapePrompt,
396
+ resetEscapeState,
341
397
  vimHandleInput,
342
398
  reverseSearchActive,
343
399
  textBeforeReverseSearch,
@@ -347,7 +403,7 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
347
403
  const linesToRender = buffer.viewportVisualLines;
348
404
  const [cursorVisualRowAbsolute, cursorVisualColAbsolute] = buffer.visualCursor;
349
405
  const scrollVisualRow = buffer.visualScrollRow;
350
- return (_jsxs(_Fragment, { children: [_jsxs(Box, { borderStyle: "round", borderColor: shellModeActive ? Colors.AccentYellow : Colors.AccentBlue, paddingX: 1, children: [_jsx(Text, { color: shellModeActive ? Colors.AccentYellow : Colors.AccentPurple, children: shellModeActive ? (reverseSearchActive ? (_jsx(Text, { color: Colors.AccentCyan, children: "(r:) " })) : ('! ')) : ('> ') }), _jsx(Box, { flexGrow: 1, flexDirection: "column", children: buffer.text.length === 0 && placeholder ? (focus ? (_jsxs(Text, { children: [chalk.inverse(placeholder.slice(0, 1)), _jsx(Text, { color: Colors.Gray, children: placeholder.slice(1) })] })) : (_jsx(Text, { color: Colors.Gray, children: placeholder }))) : (linesToRender.map((lineText, visualIdxInRenderedSet) => {
406
+ return (_jsxs(_Fragment, { children: [_jsxs(Box, { borderStyle: "round", borderColor: shellModeActive ? theme.status.warning : theme.border.focused, paddingX: 1, children: [_jsx(Text, { color: shellModeActive ? theme.status.warning : theme.text.accent, children: shellModeActive ? (reverseSearchActive ? (_jsx(Text, { color: theme.text.link, children: "(r:) " })) : ('! ')) : ('> ') }), _jsx(Box, { flexGrow: 1, flexDirection: "column", children: buffer.text.length === 0 && placeholder ? (focus ? (_jsxs(Text, { children: [chalk.inverse(placeholder.slice(0, 1)), _jsx(Text, { color: theme.text.secondary, children: placeholder.slice(1) })] })) : (_jsx(Text, { color: theme.text.secondary, children: placeholder }))) : (linesToRender.map((lineText, visualIdxInRenderedSet) => {
351
407
  const cursorVisualRow = cursorVisualRowAbsolute - scrollVisualRow;
352
408
  let display = cpSlice(lineText, 0, inputWidth);
353
409
  const currentVisualWidth = stringWidth(display);
@@ -372,6 +428,6 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
372
428
  }
373
429
  }
374
430
  return (_jsx(Text, { children: display }, `line-${visualIdxInRenderedSet}`));
375
- })) })] }), completion.showSuggestions && (_jsx(Box, { children: _jsx(SuggestionsDisplay, { suggestions: completion.suggestions, activeIndex: completion.activeSuggestionIndex, isLoading: completion.isLoadingSuggestions, width: suggestionsWidth, scrollOffset: completion.visibleStartIndex, userInput: buffer.text }) })), reverseSearchActive && (_jsx(Box, { children: _jsx(SuggestionsDisplay, { suggestions: reverseSearchCompletion.suggestions, activeIndex: reverseSearchCompletion.activeSuggestionIndex, isLoading: reverseSearchCompletion.isLoadingSuggestions, width: suggestionsWidth, scrollOffset: reverseSearchCompletion.visibleStartIndex, userInput: buffer.text }) }))] }));
431
+ })) })] }), completion.showSuggestions && (_jsx(Box, { paddingRight: 2, children: _jsx(SuggestionsDisplay, { suggestions: completion.suggestions, activeIndex: completion.activeSuggestionIndex, isLoading: completion.isLoadingSuggestions, width: suggestionsWidth, scrollOffset: completion.visibleStartIndex, userInput: buffer.text }) })), reverseSearchActive && (_jsx(Box, { paddingRight: 2, children: _jsx(SuggestionsDisplay, { suggestions: reverseSearchCompletion.suggestions, activeIndex: reverseSearchCompletion.activeSuggestionIndex, isLoading: reverseSearchCompletion.isLoadingSuggestions, width: suggestionsWidth, scrollOffset: reverseSearchCompletion.visibleStartIndex, userInput: buffer.text }) }))] }));
376
432
  };
377
433
  //# sourceMappingURL=InputPrompt.js.map