@qwen-code/qwen-code 0.0.2 → 0.0.4-nightly.1

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 (262) hide show
  1. package/dist/package.json +6 -4
  2. package/dist/qwen-code-qwen-code-0.0.3.tgz +0 -0
  3. package/dist/src/acp/acp.d.ts +208 -0
  4. package/dist/src/acp/acp.js +193 -0
  5. package/dist/src/acp/acp.js.map +1 -0
  6. package/dist/src/acp/acpPeer.d.ts +8 -0
  7. package/dist/src/acp/acpPeer.js +537 -0
  8. package/dist/src/acp/acpPeer.js.map +1 -0
  9. package/dist/src/config/config.d.ts +5 -2
  10. package/dist/src/config/config.js +70 -28
  11. package/dist/src/config/config.js.map +1 -1
  12. package/dist/src/config/extension.d.ts +2 -2
  13. package/dist/src/config/extension.js +21 -16
  14. package/dist/src/config/extension.js.map +1 -1
  15. package/dist/src/config/settings.d.ts +22 -15
  16. package/dist/src/config/settings.js +25 -10
  17. package/dist/src/config/settings.js.map +1 -1
  18. package/dist/src/gemini.d.ts +1 -0
  19. package/dist/src/gemini.js +31 -49
  20. package/dist/src/gemini.js.map +1 -1
  21. package/dist/src/generated/git-commit.d.ts +1 -1
  22. package/dist/src/generated/git-commit.js +1 -1
  23. package/dist/src/generated/git-commit.js.map +1 -1
  24. package/dist/src/nonInteractiveCli.js +0 -67
  25. package/dist/src/nonInteractiveCli.js.map +1 -1
  26. package/dist/src/patches/is-in-ci.d.ts +7 -0
  27. package/dist/src/patches/is-in-ci.js +15 -0
  28. package/dist/src/patches/is-in-ci.js.map +1 -0
  29. package/dist/src/services/BuiltinCommandLoader.d.ts +24 -0
  30. package/dist/src/services/BuiltinCommandLoader.js +72 -0
  31. package/dist/src/services/BuiltinCommandLoader.js.map +1 -0
  32. package/dist/src/services/CommandService.d.ts +43 -5
  33. package/dist/src/services/CommandService.js +61 -25
  34. package/dist/src/services/CommandService.js.map +1 -1
  35. package/dist/src/services/FileCommandLoader.d.ts +37 -0
  36. package/dist/src/services/FileCommandLoader.js +179 -0
  37. package/dist/src/services/FileCommandLoader.js.map +1 -0
  38. package/dist/src/services/McpPromptLoader.d.ts +25 -0
  39. package/dist/src/services/McpPromptLoader.js +192 -0
  40. package/dist/src/services/McpPromptLoader.js.map +1 -0
  41. package/dist/src/services/prompt-processors/argumentProcessor.d.ts +21 -0
  42. package/dist/src/services/prompt-processors/argumentProcessor.js +28 -0
  43. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -0
  44. package/dist/src/services/prompt-processors/shellProcessor.d.ts +32 -0
  45. package/dist/src/services/prompt-processors/shellProcessor.js +77 -0
  46. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -0
  47. package/dist/src/services/prompt-processors/types.d.ts +38 -0
  48. package/dist/src/services/prompt-processors/types.js +14 -0
  49. package/dist/src/services/prompt-processors/types.js.map +1 -0
  50. package/dist/src/services/types.d.ts +22 -0
  51. package/dist/src/services/types.js +7 -0
  52. package/dist/src/services/types.js.map +1 -0
  53. package/dist/src/ui/App.js +130 -101
  54. package/dist/src/ui/App.js.map +1 -1
  55. package/dist/src/ui/colors.js +6 -0
  56. package/dist/src/ui/colors.js.map +1 -1
  57. package/dist/src/ui/commands/aboutCommand.js +2 -0
  58. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  59. package/dist/src/ui/commands/authCommand.js +2 -0
  60. package/dist/src/ui/commands/authCommand.js.map +1 -1
  61. package/dist/src/ui/commands/bugCommand.d.ts +7 -0
  62. package/dist/src/ui/commands/bugCommand.js +63 -0
  63. package/dist/src/ui/commands/bugCommand.js.map +1 -0
  64. package/dist/src/ui/commands/chatCommand.d.ts +7 -0
  65. package/dist/src/ui/commands/chatCommand.js +179 -0
  66. package/dist/src/ui/commands/chatCommand.js.map +1 -0
  67. package/dist/src/ui/commands/clearCommand.js +14 -2
  68. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  69. package/dist/src/ui/commands/compressCommand.d.ts +7 -0
  70. package/dist/src/ui/commands/compressCommand.js +64 -0
  71. package/dist/src/ui/commands/compressCommand.js.map +1 -0
  72. package/dist/src/ui/commands/copyCommand.d.ts +7 -0
  73. package/dist/src/ui/commands/copyCommand.js +59 -0
  74. package/dist/src/ui/commands/copyCommand.js.map +1 -0
  75. package/dist/src/ui/commands/corgiCommand.d.ts +7 -0
  76. package/dist/src/ui/commands/corgiCommand.js +15 -0
  77. package/dist/src/ui/commands/corgiCommand.js.map +1 -0
  78. package/dist/src/ui/commands/docsCommand.d.ts +7 -0
  79. package/dist/src/ui/commands/docsCommand.js +31 -0
  80. package/dist/src/ui/commands/docsCommand.js.map +1 -0
  81. package/dist/src/ui/commands/editorCommand.d.ts +7 -0
  82. package/dist/src/ui/commands/editorCommand.js +16 -0
  83. package/dist/src/ui/commands/editorCommand.js.map +1 -0
  84. package/dist/src/ui/commands/extensionsCommand.d.ts +7 -0
  85. package/dist/src/ui/commands/extensionsCommand.js +31 -0
  86. package/dist/src/ui/commands/extensionsCommand.js.map +1 -0
  87. package/dist/src/ui/commands/helpCommand.js +4 -2
  88. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  89. package/dist/src/ui/commands/ideCommand.d.ts +8 -0
  90. package/dist/src/ui/commands/ideCommand.js +121 -0
  91. package/dist/src/ui/commands/ideCommand.js.map +1 -0
  92. package/dist/src/ui/commands/mcpCommand.d.ts +7 -0
  93. package/dist/src/ui/commands/mcpCommand.js +425 -0
  94. package/dist/src/ui/commands/mcpCommand.js.map +1 -0
  95. package/dist/src/ui/commands/memoryCommand.js +11 -4
  96. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  97. package/dist/src/ui/commands/privacyCommand.js +2 -0
  98. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  99. package/dist/src/ui/commands/quitCommand.d.ts +7 -0
  100. package/dist/src/ui/commands/quitCommand.js +34 -0
  101. package/dist/src/ui/commands/quitCommand.js.map +1 -0
  102. package/dist/src/ui/commands/restoreCommand.d.ts +8 -0
  103. package/dist/src/ui/commands/restoreCommand.js +128 -0
  104. package/dist/src/ui/commands/restoreCommand.js.map +1 -0
  105. package/dist/src/ui/commands/statsCommand.d.ts +7 -0
  106. package/dist/src/ui/commands/statsCommand.js +54 -0
  107. package/dist/src/ui/commands/statsCommand.js.map +1 -0
  108. package/dist/src/ui/commands/themeCommand.js +2 -0
  109. package/dist/src/ui/commands/themeCommand.js.map +1 -1
  110. package/dist/src/ui/commands/toolsCommand.d.ts +7 -0
  111. package/dist/src/ui/commands/toolsCommand.js +56 -0
  112. package/dist/src/ui/commands/toolsCommand.js.map +1 -0
  113. package/dist/src/ui/commands/types.d.ts +76 -4
  114. package/dist/src/ui/commands/types.js +6 -1
  115. package/dist/src/ui/commands/types.js.map +1 -1
  116. package/dist/src/ui/commands/vimCommand.d.ts +7 -0
  117. package/dist/src/ui/commands/vimCommand.js +23 -0
  118. package/dist/src/ui/commands/vimCommand.js.map +1 -0
  119. package/dist/src/ui/components/AuthDialog.js +0 -1
  120. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  121. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +6 -1
  122. package/dist/src/ui/components/ContextSummaryDisplay.js +46 -19
  123. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  124. package/dist/src/ui/components/Footer.d.ts +1 -0
  125. package/dist/src/ui/components/Footer.js +2 -2
  126. package/dist/src/ui/components/Footer.js.map +1 -1
  127. package/dist/src/ui/components/Header.js +1 -1
  128. package/dist/src/ui/components/Header.js.map +1 -1
  129. package/dist/src/ui/components/Help.d.ts +1 -1
  130. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +11 -0
  131. package/dist/src/ui/components/IDEContextDetailDisplay.js +19 -0
  132. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +1 -0
  133. package/dist/src/ui/components/InputPrompt.d.ts +3 -1
  134. package/dist/src/ui/components/InputPrompt.js +86 -123
  135. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  136. package/dist/src/ui/components/ShellConfirmationDialog.d.ts +15 -0
  137. package/dist/src/ui/components/ShellConfirmationDialog.js +44 -0
  138. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -0
  139. package/dist/src/ui/components/ThemeDialog.js +51 -25
  140. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  141. package/dist/src/ui/components/Tips.js +1 -1
  142. package/dist/src/ui/components/Tips.js.map +1 -1
  143. package/dist/src/ui/components/messages/DiffRenderer.d.ts +1 -0
  144. package/dist/src/ui/components/messages/DiffRenderer.js +12 -11
  145. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  146. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +5 -4
  147. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  148. package/dist/src/ui/components/messages/ToolGroupMessage.js +3 -1
  149. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  150. package/dist/src/ui/components/shared/MaxSizedBox.js +69 -2
  151. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  152. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +3 -1
  153. package/dist/src/ui/components/shared/RadioButtonSelect.js +69 -50
  154. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  155. package/dist/src/ui/components/shared/text-buffer.d.ts +273 -3
  156. package/dist/src/ui/components/shared/text-buffer.js +426 -80
  157. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  158. package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +72 -0
  159. package/dist/src/ui/components/shared/vim-buffer-actions.js +565 -0
  160. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -0
  161. package/dist/src/ui/constants.d.ts +1 -0
  162. package/dist/src/ui/constants.js +1 -0
  163. package/dist/src/ui/constants.js.map +1 -1
  164. package/dist/src/ui/contexts/VimModeContext.d.ts +19 -0
  165. package/dist/src/ui/contexts/VimModeContext.js +48 -0
  166. package/dist/src/ui/contexts/VimModeContext.js.map +1 -0
  167. package/dist/src/ui/hooks/atCommandProcessor.js +54 -15
  168. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  169. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +2 -1
  170. package/dist/src/ui/hooks/shellCommandProcessor.js +154 -177
  171. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  172. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +9 -12
  173. package/dist/src/ui/hooks/slashCommandProcessor.js +203 -880
  174. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  175. package/dist/src/ui/hooks/useAuthCommand.js +2 -1
  176. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  177. package/dist/src/ui/hooks/useCompletion.d.ts +4 -1
  178. package/dist/src/ui/hooks/useCompletion.js +137 -24
  179. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  180. package/dist/src/ui/hooks/useConsoleMessages.js +53 -37
  181. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  182. package/dist/src/ui/hooks/useFocus.d.ts +6 -0
  183. package/dist/src/ui/hooks/useFocus.js +41 -0
  184. package/dist/src/ui/hooks/useFocus.js.map +1 -0
  185. package/dist/src/ui/hooks/useGeminiStream.js +57 -11
  186. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  187. package/dist/src/ui/hooks/useInputHistory.d.ts +1 -1
  188. package/dist/src/ui/hooks/useKeypress.js +5 -2
  189. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  190. package/dist/src/ui/hooks/usePrivacySettings.js +5 -5
  191. package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
  192. package/dist/src/ui/hooks/useShellHistory.d.ts +3 -2
  193. package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
  194. package/dist/src/ui/hooks/useThemeCommand.js +24 -23
  195. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  196. package/dist/src/ui/hooks/vim.d.ts +28 -0
  197. package/dist/src/ui/hooks/vim.js +630 -0
  198. package/dist/src/ui/hooks/vim.js.map +1 -0
  199. package/dist/src/ui/themes/ansi-light.js +3 -1
  200. package/dist/src/ui/themes/ansi-light.js.map +1 -1
  201. package/dist/src/ui/themes/ansi.js +2 -0
  202. package/dist/src/ui/themes/ansi.js.map +1 -1
  203. package/dist/src/ui/themes/atom-one-dark.js +2 -0
  204. package/dist/src/ui/themes/atom-one-dark.js.map +1 -1
  205. package/dist/src/ui/themes/ayu-light.js +3 -1
  206. package/dist/src/ui/themes/ayu-light.js.map +1 -1
  207. package/dist/src/ui/themes/ayu.js +3 -1
  208. package/dist/src/ui/themes/ayu.js.map +1 -1
  209. package/dist/src/ui/themes/color-utils.d.ts +21 -0
  210. package/dist/src/ui/themes/color-utils.js +221 -0
  211. package/dist/src/ui/themes/color-utils.js.map +1 -0
  212. package/dist/src/ui/themes/dracula.js +2 -0
  213. package/dist/src/ui/themes/dracula.js.map +1 -1
  214. package/dist/src/ui/themes/github-dark.js +2 -0
  215. package/dist/src/ui/themes/github-dark.js.map +1 -1
  216. package/dist/src/ui/themes/github-light.js +2 -0
  217. package/dist/src/ui/themes/github-light.js.map +1 -1
  218. package/dist/src/ui/themes/googlecode.js +3 -1
  219. package/dist/src/ui/themes/googlecode.js.map +1 -1
  220. package/dist/src/ui/themes/no-color.js +3 -1
  221. package/dist/src/ui/themes/no-color.js.map +1 -1
  222. package/dist/src/ui/themes/qwen-dark.js +2 -0
  223. package/dist/src/ui/themes/qwen-dark.js.map +1 -1
  224. package/dist/src/ui/themes/qwen-light.js +2 -0
  225. package/dist/src/ui/themes/qwen-light.js.map +1 -1
  226. package/dist/src/ui/themes/shades-of-purple.d.ts +1 -1
  227. package/dist/src/ui/themes/shades-of-purple.js +3 -1
  228. package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
  229. package/dist/src/ui/themes/theme-manager.d.ts +31 -6
  230. package/dist/src/ui/themes/theme-manager.js +114 -37
  231. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  232. package/dist/src/ui/themes/theme.d.ts +23 -3
  233. package/dist/src/ui/themes/theme.js +244 -182
  234. package/dist/src/ui/themes/theme.js.map +1 -1
  235. package/dist/src/ui/themes/xcode.js +3 -1
  236. package/dist/src/ui/themes/xcode.js.map +1 -1
  237. package/dist/src/ui/types.d.ts +9 -1
  238. package/dist/src/ui/utils/CodeColorizer.d.ts +3 -1
  239. package/dist/src/ui/utils/CodeColorizer.js +23 -11
  240. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  241. package/dist/src/ui/utils/commandUtils.d.ts +1 -0
  242. package/dist/src/ui/utils/commandUtils.js +47 -0
  243. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  244. package/dist/src/ui/utils/errorParsing.js.map +1 -1
  245. package/dist/src/ui/utils/markdownUtilities.js +1 -1
  246. package/dist/src/ui/utils/textUtils.d.ts +0 -8
  247. package/dist/src/ui/utils/textUtils.js +0 -22
  248. package/dist/src/ui/utils/textUtils.js.map +1 -1
  249. package/dist/src/ui/utils/updateCheck.js +5 -1
  250. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  251. package/dist/src/utils/events.d.ts +11 -0
  252. package/dist/src/utils/events.js +13 -0
  253. package/dist/src/utils/events.js.map +1 -0
  254. package/dist/src/utils/sandbox.js +7 -3
  255. package/dist/src/utils/sandbox.js.map +1 -1
  256. package/dist/src/utils/userStartupWarnings.js +16 -10
  257. package/dist/src/utils/userStartupWarnings.js.map +1 -1
  258. package/dist/src/validateNonInterActiveAuth.d.ts +7 -0
  259. package/dist/src/validateNonInterActiveAuth.js +38 -0
  260. package/dist/src/validateNonInterActiveAuth.js.map +1 -0
  261. package/dist/tsconfig.tsbuildinfo +1 -1
  262. package/package.json +7 -5
@@ -0,0 +1,128 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import * as fs from 'fs/promises';
7
+ import path from 'path';
8
+ import { CommandKind, } from './types.js';
9
+ async function restoreAction(context, args) {
10
+ const { services, ui } = context;
11
+ const { config, git: gitService } = services;
12
+ const { addItem, loadHistory } = ui;
13
+ const checkpointDir = config?.getProjectTempDir()
14
+ ? path.join(config.getProjectTempDir(), 'checkpoints')
15
+ : undefined;
16
+ if (!checkpointDir) {
17
+ return {
18
+ type: 'message',
19
+ messageType: 'error',
20
+ content: 'Could not determine the .gemini directory path.',
21
+ };
22
+ }
23
+ try {
24
+ // Ensure the directory exists before trying to read it.
25
+ await fs.mkdir(checkpointDir, { recursive: true });
26
+ const files = await fs.readdir(checkpointDir);
27
+ const jsonFiles = files.filter((file) => file.endsWith('.json'));
28
+ if (!args) {
29
+ if (jsonFiles.length === 0) {
30
+ return {
31
+ type: 'message',
32
+ messageType: 'info',
33
+ content: 'No restorable tool calls found.',
34
+ };
35
+ }
36
+ const truncatedFiles = jsonFiles.map((file) => {
37
+ const components = file.split('.');
38
+ if (components.length <= 1) {
39
+ return file;
40
+ }
41
+ components.pop();
42
+ return components.join('.');
43
+ });
44
+ const fileList = truncatedFiles.join('\n');
45
+ return {
46
+ type: 'message',
47
+ messageType: 'info',
48
+ content: `Available tool calls to restore:\n\n${fileList}`,
49
+ };
50
+ }
51
+ const selectedFile = args.endsWith('.json') ? args : `${args}.json`;
52
+ if (!jsonFiles.includes(selectedFile)) {
53
+ return {
54
+ type: 'message',
55
+ messageType: 'error',
56
+ content: `File not found: ${selectedFile}`,
57
+ };
58
+ }
59
+ const filePath = path.join(checkpointDir, selectedFile);
60
+ const data = await fs.readFile(filePath, 'utf-8');
61
+ const toolCallData = JSON.parse(data);
62
+ if (toolCallData.history) {
63
+ if (!loadHistory) {
64
+ // This should not happen
65
+ return {
66
+ type: 'message',
67
+ messageType: 'error',
68
+ content: 'loadHistory function is not available.',
69
+ };
70
+ }
71
+ loadHistory(toolCallData.history);
72
+ }
73
+ if (toolCallData.clientHistory) {
74
+ await config?.getGeminiClient()?.setHistory(toolCallData.clientHistory);
75
+ }
76
+ if (toolCallData.commitHash) {
77
+ await gitService?.restoreProjectFromSnapshot(toolCallData.commitHash);
78
+ addItem({
79
+ type: 'info',
80
+ text: 'Restored project to the state before the tool call.',
81
+ }, Date.now());
82
+ }
83
+ return {
84
+ type: 'tool',
85
+ toolName: toolCallData.toolCall.name,
86
+ toolArgs: toolCallData.toolCall.args,
87
+ };
88
+ }
89
+ catch (error) {
90
+ return {
91
+ type: 'message',
92
+ messageType: 'error',
93
+ content: `Could not read restorable tool calls. This is the error: ${error}`,
94
+ };
95
+ }
96
+ }
97
+ async function completion(context, _partialArg) {
98
+ const { services } = context;
99
+ const { config } = services;
100
+ const checkpointDir = config?.getProjectTempDir()
101
+ ? path.join(config.getProjectTempDir(), 'checkpoints')
102
+ : undefined;
103
+ if (!checkpointDir) {
104
+ return [];
105
+ }
106
+ try {
107
+ const files = await fs.readdir(checkpointDir);
108
+ return files
109
+ .filter((file) => file.endsWith('.json'))
110
+ .map((file) => file.replace('.json', ''));
111
+ }
112
+ catch (_err) {
113
+ return [];
114
+ }
115
+ }
116
+ export const restoreCommand = (config) => {
117
+ if (!config?.getCheckpointingEnabled()) {
118
+ return null;
119
+ }
120
+ return {
121
+ name: 'restore',
122
+ description: 'Restore a tool call. This will reset the conversation and file history to the state it was in when the tool call was suggested',
123
+ kind: CommandKind.BUILT_IN,
124
+ action: restoreAction,
125
+ completion,
126
+ };
127
+ };
128
+ //# sourceMappingURL=restoreCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restoreCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/restoreCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAIL,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,KAAK,UAAU,aAAa,CAC1B,OAAuB,EACvB,IAAY;IAEZ,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAEpC,MAAM,aAAa,GAAG,MAAM,EAAE,iBAAiB,EAAE;QAC/C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,aAAa,CAAC;QACtD,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,iDAAiD;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,wDAAwD;QACxD,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAEjE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,MAAM;oBACnB,OAAO,EAAE,iCAAiC;iBAC3C,CAAC;YACJ,CAAC;YACD,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBAC3B,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,UAAU,CAAC,GAAG,EAAE,CAAC;gBACjB,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;gBACnB,OAAO,EAAE,uCAAuC,QAAQ,EAAE;aAC3D,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC;QAEpE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,mBAAmB,YAAY,EAAE;aAC3C,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,yBAAyB;gBACzB,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,OAAO;oBACpB,OAAO,EAAE,wCAAwC;iBAClD,CAAC;YACJ,CAAC;YACD,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,MAAM,EAAE,eAAe,EAAE,EAAE,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;YAC5B,MAAM,UAAU,EAAE,0BAA0B,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YACtE,OAAO,CACL;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,qDAAqD;aAC5D,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI;YACpC,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI;SACrC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,4DAA4D,KAAK,EAAE;SAC7E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,OAAuB,EACvB,WAAmB;IAEnB,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAC5B,MAAM,aAAa,GAAG,MAAM,EAAE,iBAAiB,EAAE;QAC/C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,aAAa,CAAC;QACtD,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC9C,OAAO,KAAK;aACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,IAAI,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAqB,EAAuB,EAAE;IAC3E,IAAI,CAAC,MAAM,EAAE,uBAAuB,EAAE,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,WAAW,EACT,gIAAgI;QAClI,IAAI,EAAE,WAAW,CAAC,QAAQ;QAC1B,MAAM,EAAE,aAAa;QACrB,UAAU;KACX,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type SlashCommand } from './types.js';
7
+ export declare const statsCommand: SlashCommand;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { MessageType } from '../types.js';
7
+ import { formatDuration } from '../utils/formatters.js';
8
+ import { CommandKind, } from './types.js';
9
+ export const statsCommand = {
10
+ name: 'stats',
11
+ altNames: ['usage'],
12
+ description: 'check session stats. Usage: /stats [model|tools]',
13
+ kind: CommandKind.BUILT_IN,
14
+ action: (context) => {
15
+ const now = new Date();
16
+ const { sessionStartTime } = context.session.stats;
17
+ if (!sessionStartTime) {
18
+ context.ui.addItem({
19
+ type: MessageType.ERROR,
20
+ text: 'Session start time is unavailable, cannot calculate stats.',
21
+ }, Date.now());
22
+ return;
23
+ }
24
+ const wallDuration = now.getTime() - sessionStartTime.getTime();
25
+ const statsItem = {
26
+ type: MessageType.STATS,
27
+ duration: formatDuration(wallDuration),
28
+ };
29
+ context.ui.addItem(statsItem, Date.now());
30
+ },
31
+ subCommands: [
32
+ {
33
+ name: 'model',
34
+ description: 'Show model-specific usage statistics.',
35
+ kind: CommandKind.BUILT_IN,
36
+ action: (context) => {
37
+ context.ui.addItem({
38
+ type: MessageType.MODEL_STATS,
39
+ }, Date.now());
40
+ },
41
+ },
42
+ {
43
+ name: 'tools',
44
+ description: 'Show tool-specific usage statistics.',
45
+ kind: CommandKind.BUILT_IN,
46
+ action: (context) => {
47
+ context.ui.addItem({
48
+ type: MessageType.TOOL_STATS,
49
+ }, Date.now());
50
+ },
51
+ },
52
+ ],
53
+ };
54
+ //# sourceMappingURL=statsCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statsCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/statsCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAoB,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAGL,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,CAAC,OAAO,CAAC;IACnB,WAAW,EAAE,kDAAkD;IAC/D,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,CAAC,OAAuB,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QACnD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;gBACE,IAAI,EAAE,WAAW,CAAC,KAAK;gBACvB,IAAI,EAAE,4DAA4D;aACnE,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAEhE,MAAM,SAAS,GAAqB;YAClC,IAAI,EAAE,WAAW,CAAC,KAAK;YACvB,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;SACvC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,WAAW,EAAE;QACX;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,uCAAuC;YACpD,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,MAAM,EAAE,CAAC,OAAuB,EAAE,EAAE;gBAClC,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;oBACE,IAAI,EAAE,WAAW,CAAC,WAAW;iBAC9B,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACJ,CAAC;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,sCAAsC;YACnD,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,MAAM,EAAE,CAAC,OAAuB,EAAE,EAAE;gBAClC,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;oBACE,IAAI,EAAE,WAAW,CAAC,UAAU;iBAC7B,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACJ,CAAC;SACF;KACF;CACF,CAAC"}
@@ -3,9 +3,11 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { CommandKind } from './types.js';
6
7
  export const themeCommand = {
7
8
  name: 'theme',
8
9
  description: 'change the theme',
10
+ kind: CommandKind.BUILT_IN,
9
11
  action: (_context, _args) => ({
10
12
  type: 'dialog',
11
13
  dialog: 'theme',
@@ -1 +1 @@
1
- {"version":3,"file":"themeCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/themeCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,kBAAkB;IAC/B,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAA0B,EAAE,CAAC,CAAC;QACpD,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,OAAO;KAChB,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"themeCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/themeCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAwC,MAAM,YAAY,CAAC;AAE/E,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,kBAAkB;IAC/B,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAA0B,EAAE,CAAC,CAAC;QACpD,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,OAAO;KAChB,CAAC;CACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type SlashCommand } from './types.js';
7
+ export declare const toolsCommand: SlashCommand;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CommandKind, } from './types.js';
7
+ import { MessageType } from '../types.js';
8
+ export const toolsCommand = {
9
+ name: 'tools',
10
+ description: 'list available Qwen Codetools',
11
+ kind: CommandKind.BUILT_IN,
12
+ action: async (context, args) => {
13
+ const subCommand = args?.trim();
14
+ // Default to NOT showing descriptions. The user must opt in with an argument.
15
+ let useShowDescriptions = false;
16
+ if (subCommand === 'desc' || subCommand === 'descriptions') {
17
+ useShowDescriptions = true;
18
+ }
19
+ const toolRegistry = await context.services.config?.getToolRegistry();
20
+ if (!toolRegistry) {
21
+ context.ui.addItem({
22
+ type: MessageType.ERROR,
23
+ text: 'Could not retrieve tool registry.',
24
+ }, Date.now());
25
+ return;
26
+ }
27
+ const tools = toolRegistry.getAllTools();
28
+ // Filter out MCP tools by checking for the absence of a serverName property
29
+ const geminiTools = tools.filter((tool) => !('serverName' in tool));
30
+ let message = 'Available Qwen Code tools:\n\n';
31
+ if (geminiTools.length > 0) {
32
+ geminiTools.forEach((tool) => {
33
+ if (useShowDescriptions && tool.description) {
34
+ message += ` - \u001b[36m${tool.displayName} (${tool.name})\u001b[0m:\n`;
35
+ const greenColor = '\u001b[32m';
36
+ const resetColor = '\u001b[0m';
37
+ // Handle multi-line descriptions
38
+ const descLines = tool.description.trim().split('\n');
39
+ for (const descLine of descLines) {
40
+ message += ` ${greenColor}${descLine}${resetColor}\n`;
41
+ }
42
+ }
43
+ else {
44
+ message += ` - \u001b[36m${tool.displayName}\u001b[0m\n`;
45
+ }
46
+ });
47
+ }
48
+ else {
49
+ message += ' No tools available\n';
50
+ }
51
+ message += '\n';
52
+ message += '\u001b[0m';
53
+ context.ui.addItem({ type: MessageType.INFO, text: message }, Date.now());
54
+ },
55
+ };
56
+ //# sourceMappingURL=toolsCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolsCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/toolsCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,+BAA+B;IAC5C,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EAAE,OAAuB,EAAE,IAAa,EAAiB,EAAE;QACtE,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;QAEhC,8EAA8E;QAC9E,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAChC,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;YAC3D,mBAAmB,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;QACtE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;gBACE,IAAI,EAAE,WAAW,CAAC,KAAK;gBACvB,IAAI,EAAE,mCAAmC;aAC1C,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QACzC,4EAA4E;QAC5E,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC;QAEpE,IAAI,OAAO,GAAG,gCAAgC,CAAC;QAE/C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3B,IAAI,mBAAmB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC5C,OAAO,IAAI,iBAAiB,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI,eAAe,CAAC;oBAE1E,MAAM,UAAU,GAAG,YAAY,CAAC;oBAChC,MAAM,UAAU,GAAG,WAAW,CAAC;oBAE/B,iCAAiC;oBACjC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;wBACjC,OAAO,IAAI,SAAS,UAAU,GAAG,QAAQ,GAAG,UAAU,IAAI,CAAC;oBAC7D,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,iBAAiB,IAAI,CAAC,WAAW,aAAa,CAAC;gBAC5D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,wBAAwB,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,IAAI,CAAC;QAEhB,OAAO,IAAI,WAAW,CAAC;QAEvB,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5E,CAAC;CACF,CAAC"}
@@ -3,11 +3,22 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { Content } from '@google/genai';
7
+ import { HistoryItemWithoutId } from '../types.js';
6
8
  import { Config, GitService, Logger } from '@qwen-code/qwen-code-core';
7
9
  import { LoadedSettings } from '../../config/settings.js';
8
10
  import { UseHistoryManagerReturn } from '../hooks/useHistoryManager.js';
11
+ import type { HistoryItem } from '../types.js';
9
12
  import { SessionStatsState } from '../contexts/SessionContext.js';
10
13
  export interface CommandContext {
14
+ invocation?: {
15
+ /** The raw, untrimmed input string from the user. */
16
+ raw: string;
17
+ /** The primary name of the command that was matched. */
18
+ name: string;
19
+ /** The arguments string that follows the command name. */
20
+ args: string;
21
+ };
11
22
  services: {
12
23
  config: Config | null;
13
24
  settings: LoadedSettings;
@@ -23,10 +34,30 @@ export interface CommandContext {
23
34
  * Sets the transient debug message displayed in the application footer in debug mode.
24
35
  */
25
36
  setDebugMessage: (message: string) => void;
37
+ /** The currently pending history item, if any. */
38
+ pendingItem: HistoryItemWithoutId | null;
39
+ /**
40
+ * Sets a pending item in the history, which is useful for indicating
41
+ * that a long-running operation is in progress.
42
+ *
43
+ * @param item The history item to display as pending, or `null` to clear.
44
+ */
45
+ setPendingItem: (item: HistoryItemWithoutId | null) => void;
46
+ /**
47
+ * Loads a new set of history items, replacing the current history.
48
+ *
49
+ * @param history The array of history items to load.
50
+ */
51
+ loadHistory: UseHistoryManagerReturn['loadHistory'];
52
+ /** Toggles a special display mode. */
53
+ toggleCorgiMode: () => void;
54
+ toggleVimEnabled: () => Promise<boolean>;
26
55
  };
27
56
  session: {
28
57
  stats: SessionStatsState;
29
58
  resetSession: () => void;
59
+ /** A transient list of shell commands the user has approved for this session. */
60
+ sessionShellAllowlist: Set<string>;
30
61
  };
31
62
  }
32
63
  /**
@@ -37,6 +68,11 @@ export interface ToolActionReturn {
37
68
  toolName: string;
38
69
  toolArgs: Record<string, unknown>;
39
70
  }
71
+ /** The return type for a command action that results in the app quitting. */
72
+ export interface QuitActionReturn {
73
+ type: 'quit';
74
+ messages: HistoryItem[];
75
+ }
40
76
  /**
41
77
  * The return type for a command action that results in a simple message
42
78
  * being displayed to the user.
@@ -51,13 +87,49 @@ export interface MessageActionReturn {
51
87
  */
52
88
  export interface OpenDialogActionReturn {
53
89
  type: 'dialog';
54
- dialog: 'help' | 'auth' | 'theme' | 'privacy';
90
+ dialog: 'help' | 'auth' | 'theme' | 'editor' | 'privacy';
91
+ }
92
+ /**
93
+ * The return type for a command action that results in replacing
94
+ * the entire conversation history.
95
+ */
96
+ export interface LoadHistoryActionReturn {
97
+ type: 'load_history';
98
+ history: HistoryItemWithoutId[];
99
+ clientHistory: Content[];
100
+ }
101
+ /**
102
+ * The return type for a command action that should immediately submit
103
+ * content as a prompt to the Gemini model.
104
+ */
105
+ export interface SubmitPromptActionReturn {
106
+ type: 'submit_prompt';
107
+ content: string;
108
+ }
109
+ /**
110
+ * The return type for a command action that needs to pause and request
111
+ * confirmation for a set of shell commands before proceeding.
112
+ */
113
+ export interface ConfirmShellCommandsActionReturn {
114
+ type: 'confirm_shell_commands';
115
+ /** The list of shell commands that require user confirmation. */
116
+ commandsToConfirm: string[];
117
+ /** The original invocation context to be re-run after confirmation. */
118
+ originalInvocation: {
119
+ raw: string;
120
+ };
121
+ }
122
+ export type SlashCommandActionReturn = ToolActionReturn | MessageActionReturn | QuitActionReturn | OpenDialogActionReturn | LoadHistoryActionReturn | SubmitPromptActionReturn | ConfirmShellCommandsActionReturn;
123
+ export declare enum CommandKind {
124
+ BUILT_IN = "built-in",
125
+ FILE = "file",
126
+ MCP_PROMPT = "mcp-prompt"
55
127
  }
56
- export type SlashCommandActionReturn = ToolActionReturn | MessageActionReturn | OpenDialogActionReturn;
57
128
  export interface SlashCommand {
58
129
  name: string;
59
- altName?: string;
60
- description?: string;
130
+ altNames?: string[];
131
+ description: string;
132
+ kind: CommandKind;
61
133
  action?: (context: CommandContext, args: string) => void | SlashCommandActionReturn | Promise<void | SlashCommandActionReturn>;
62
134
  completion?: (context: CommandContext, partialArg: string) => Promise<string[]>;
63
135
  subCommands?: SlashCommand[];
@@ -3,5 +3,10 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- export {};
6
+ export var CommandKind;
7
+ (function (CommandKind) {
8
+ CommandKind["BUILT_IN"] = "built-in";
9
+ CommandKind["FILE"] = "file";
10
+ CommandKind["MCP_PROMPT"] = "mcp-prompt";
11
+ })(CommandKind || (CommandKind = {}));
7
12
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ui/commands/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ui/commands/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8IH,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,4BAAa,CAAA;IACb,wCAAyB,CAAA;AAC3B,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { SlashCommand } from './types.js';
7
+ export declare const vimCommand: SlashCommand;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CommandKind } from './types.js';
7
+ export const vimCommand = {
8
+ name: 'vim',
9
+ description: 'toggle vim mode on/off',
10
+ kind: CommandKind.BUILT_IN,
11
+ action: async (context, _args) => {
12
+ const newVimState = await context.ui.toggleVimEnabled();
13
+ const message = newVimState
14
+ ? 'Entered Vim mode. Run /vim again to exit.'
15
+ : 'Exited Vim mode.';
16
+ return {
17
+ type: 'message',
18
+ messageType: 'info',
19
+ content: message,
20
+ };
21
+ },
22
+ };
23
+ //# sourceMappingURL=vimCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vimCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/vimCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAEvD,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC/B,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAExD,MAAM,OAAO,GAAG,WAAW;YACzB,CAAC,CAAC,2CAA2C;YAC7C,CAAC,CAAC,kBAAkB,CAAC;QACvB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,OAAO;SACjB,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -64,7 +64,6 @@ export function AuthDialog({ onSelect, settings, initialErrorMessage, }) {
64
64
  setErrorMessage('OpenAI API key is required to use OpenAI authentication.');
65
65
  };
66
66
  useInput((_input, key) => {
67
- // 当显示 OpenAIKeyPrompt 时,不处理输入事件
68
67
  if (showOpenAIKeyPrompt) {
69
68
  return;
70
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AuthDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/AuthDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/AuthDialog.tsx"],"names":[],"mappings":"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"}
@@ -4,12 +4,17 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import React from 'react';
7
- import { type MCPServerConfig } from '@qwen-code/qwen-code-core';
7
+ import { type OpenFiles, type MCPServerConfig } from '@qwen-code/qwen-code-core';
8
8
  interface ContextSummaryDisplayProps {
9
9
  geminiMdFileCount: number;
10
10
  contextFileNames: string[];
11
11
  mcpServers?: Record<string, MCPServerConfig>;
12
+ blockedMcpServers?: Array<{
13
+ name: string;
14
+ extensionName: string;
15
+ }>;
12
16
  showToolDescriptions?: boolean;
17
+ openFiles?: OpenFiles;
13
18
  }
14
19
  export declare const ContextSummaryDisplay: React.FC<ContextSummaryDisplayProps>;
15
20
  export {};
@@ -1,11 +1,22 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Text } from 'ink';
3
3
  import { Colors } from '../colors.js';
4
- export const ContextSummaryDisplay = ({ geminiMdFileCount, contextFileNames, mcpServers, showToolDescriptions, }) => {
4
+ export const ContextSummaryDisplay = ({ geminiMdFileCount, contextFileNames, mcpServers, blockedMcpServers, showToolDescriptions, openFiles, }) => {
5
5
  const mcpServerCount = Object.keys(mcpServers || {}).length;
6
- if (geminiMdFileCount === 0 && mcpServerCount === 0) {
6
+ const blockedMcpServerCount = blockedMcpServers?.length || 0;
7
+ if (geminiMdFileCount === 0 &&
8
+ mcpServerCount === 0 &&
9
+ blockedMcpServerCount === 0 &&
10
+ (openFiles?.recentOpenFiles?.length ?? 0) === 0) {
7
11
  return _jsx(Text, { children: " " }); // Render an empty space to reserve height
8
12
  }
13
+ const recentFilesText = (() => {
14
+ const count = openFiles?.recentOpenFiles?.length ?? 0;
15
+ if (count === 0) {
16
+ return '';
17
+ }
18
+ return `${count} recent file${count > 1 ? 's' : ''} (ctrl+e to view)`;
19
+ })();
9
20
  const geminiMdText = (() => {
10
21
  if (geminiMdFileCount === 0) {
11
22
  return '';
@@ -14,26 +25,42 @@ export const ContextSummaryDisplay = ({ geminiMdFileCount, contextFileNames, mcp
14
25
  const name = allNamesTheSame ? contextFileNames[0] : 'context';
15
26
  return `${geminiMdFileCount} ${name} file${geminiMdFileCount > 1 ? 's' : ''}`;
16
27
  })();
17
- const mcpText = mcpServerCount > 0
18
- ? `${mcpServerCount} MCP server${mcpServerCount > 1 ? 's' : ''}`
19
- : '';
20
- let summaryText = 'Using ';
21
- if (geminiMdText) {
22
- summaryText += geminiMdText;
28
+ const mcpText = (() => {
29
+ if (mcpServerCount === 0 && blockedMcpServerCount === 0) {
30
+ return '';
31
+ }
32
+ const parts = [];
33
+ if (mcpServerCount > 0) {
34
+ parts.push(`${mcpServerCount} MCP server${mcpServerCount > 1 ? 's' : ''}`);
35
+ }
36
+ if (blockedMcpServerCount > 0) {
37
+ let blockedText = `${blockedMcpServerCount} Blocked`;
38
+ if (mcpServerCount === 0) {
39
+ blockedText += ` MCP server${blockedMcpServerCount > 1 ? 's' : ''}`;
40
+ }
41
+ parts.push(blockedText);
42
+ }
43
+ return parts.join(', ');
44
+ })();
45
+ let summaryText = 'Using: ';
46
+ const summaryParts = [];
47
+ if (recentFilesText) {
48
+ summaryParts.push(recentFilesText);
23
49
  }
24
- if (geminiMdText && mcpText) {
25
- summaryText += ' and ';
50
+ if (geminiMdText) {
51
+ summaryParts.push(geminiMdText);
26
52
  }
27
53
  if (mcpText) {
28
- summaryText += mcpText;
29
- // Add ctrl+t hint when MCP servers are available
30
- if (mcpServers && Object.keys(mcpServers).length > 0) {
31
- if (showToolDescriptions) {
32
- summaryText += ' (ctrl+t to toggle)';
33
- }
34
- else {
35
- summaryText += ' (ctrl+t to view)';
36
- }
54
+ summaryParts.push(mcpText);
55
+ }
56
+ summaryText += summaryParts.join(' | ');
57
+ // Add ctrl+t hint when MCP servers are available
58
+ if (mcpServers && Object.keys(mcpServers).length > 0) {
59
+ if (showToolDescriptions) {
60
+ summaryText += ' (ctrl+t to toggle)';
61
+ }
62
+ else {
63
+ summaryText += ' (ctrl+t to view)';
37
64
  }
38
65
  }
39
66
  return _jsx(Text, { color: Colors.Gray, children: summaryText });
@@ -1 +1 @@
1
- {"version":3,"file":"ContextSummaryDisplay.js","sourceRoot":"","sources":["../../../../src/ui/components/ContextSummaryDisplay.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAUtC,MAAM,CAAC,MAAM,qBAAqB,GAAyC,CAAC,EAC1E,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,oBAAoB,GACrB,EAAE,EAAE;IACH,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAE5D,IAAI,iBAAiB,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,KAAC,IAAI,oBAAS,CAAC,CAAC,0CAA0C;IACnE,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE;QACzB,IAAI,iBAAiB,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/D,OAAO,GAAG,iBAAiB,IAAI,IAAI,QACjC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAChC,EAAE,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;IAEL,MAAM,OAAO,GACX,cAAc,GAAG,CAAC;QAChB,CAAC,CAAC,GAAG,cAAc,cAAc,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAChE,CAAC,CAAC,EAAE,CAAC;IAET,IAAI,WAAW,GAAG,QAAQ,CAAC;IAC3B,IAAI,YAAY,EAAE,CAAC;QACjB,WAAW,IAAI,YAAY,CAAC;IAC9B,CAAC;IACD,IAAI,YAAY,IAAI,OAAO,EAAE,CAAC;QAC5B,WAAW,IAAI,OAAO,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,WAAW,IAAI,OAAO,CAAC;QACvB,iDAAiD;QACjD,IAAI,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,IAAI,oBAAoB,EAAE,CAAC;gBACzB,WAAW,IAAI,qBAAqB,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,WAAW,IAAI,mBAAmB,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,YAAG,WAAW,GAAQ,CAAC;AACxD,CAAC,CAAC"}
1
+ {"version":3,"file":"ContextSummaryDisplay.js","sourceRoot":"","sources":["../../../../src/ui/components/ContextSummaryDisplay.tsx"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ interface FooterProps {
16
16
  showMemoryUsage?: boolean;
17
17
  promptTokenCount: number;
18
18
  nightly: boolean;
19
+ vimMode?: string;
19
20
  }
20
21
  export declare const Footer: React.FC<FooterProps>;
21
22
  export {};