@google/gemini-cli 0.1.20 → 0.1.22

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 (328) hide show
  1. package/README.md +27 -29
  2. package/dist/package.json +4 -4
  3. package/dist/src/commands/mcp/add.js +21 -10
  4. package/dist/src/commands/mcp/add.js.map +1 -1
  5. package/dist/src/commands/mcp/remove.js +2 -2
  6. package/dist/src/commands/mcp/remove.js.map +1 -1
  7. package/dist/src/config/auth.js +4 -3
  8. package/dist/src/config/auth.js.map +1 -1
  9. package/dist/src/config/auth.test.d.ts +6 -0
  10. package/dist/src/config/auth.test.js +57 -0
  11. package/dist/src/config/auth.test.js.map +1 -0
  12. package/dist/src/config/config.d.ts +2 -1
  13. package/dist/src/config/config.js +28 -18
  14. package/dist/src/config/config.js.map +1 -1
  15. package/dist/src/config/keyBindings.js +7 -2
  16. package/dist/src/config/keyBindings.js.map +1 -1
  17. package/dist/src/config/keyBindings.test.d.ts +6 -0
  18. package/dist/src/config/keyBindings.test.js +51 -0
  19. package/dist/src/config/keyBindings.test.js.map +1 -0
  20. package/dist/src/config/sandboxConfig.js +3 -3
  21. package/dist/src/config/sandboxConfig.js.map +1 -1
  22. package/dist/src/config/settings.js +7 -7
  23. package/dist/src/config/settings.js.map +1 -1
  24. package/dist/src/config/settingsSchema.test.d.ts +6 -0
  25. package/dist/src/config/settingsSchema.test.js +195 -0
  26. package/dist/src/config/settingsSchema.test.js.map +1 -0
  27. package/dist/src/config/trustedFolders.d.ts +37 -0
  28. package/dist/src/config/trustedFolders.js +118 -0
  29. package/dist/src/config/trustedFolders.js.map +1 -0
  30. package/dist/src/config/trustedFolders.test.d.ts +6 -0
  31. package/dist/src/config/trustedFolders.test.js +160 -0
  32. package/dist/src/config/trustedFolders.test.js.map +1 -0
  33. package/dist/src/gemini.js +23 -10
  34. package/dist/src/gemini.js.map +1 -1
  35. package/dist/src/gemini.test.d.ts +6 -0
  36. package/dist/src/gemini.test.js +193 -0
  37. package/dist/src/gemini.test.js.map +1 -0
  38. package/dist/src/generated/git-commit.d.ts +2 -1
  39. package/dist/src/generated/git-commit.js +2 -1
  40. package/dist/src/generated/git-commit.js.map +1 -1
  41. package/dist/src/nonInteractiveCli.js +1 -4
  42. package/dist/src/nonInteractiveCli.js.map +1 -1
  43. package/dist/src/services/BuiltinCommandLoader.js +2 -0
  44. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  45. package/dist/src/services/BuiltinCommandLoader.test.d.ts +6 -0
  46. package/dist/src/services/BuiltinCommandLoader.test.js +108 -0
  47. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -0
  48. package/dist/src/services/CommandService.test.d.ts +6 -0
  49. package/dist/src/services/CommandService.test.js +232 -0
  50. package/dist/src/services/CommandService.test.js.map +1 -0
  51. package/dist/src/services/FileCommandLoader.js +10 -8
  52. package/dist/src/services/FileCommandLoader.js.map +1 -1
  53. package/dist/src/services/McpPromptLoader.js +3 -3
  54. package/dist/src/services/McpPromptLoader.js.map +1 -1
  55. package/dist/src/services/prompt-processors/argumentProcessor.d.ts +2 -7
  56. package/dist/src/services/prompt-processors/argumentProcessor.js +2 -10
  57. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -1
  58. package/dist/src/services/prompt-processors/shellProcessor.d.ts +16 -13
  59. package/dist/src/services/prompt-processors/shellProcessor.js +133 -40
  60. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -1
  61. package/dist/src/services/prompt-processors/types.d.ts +2 -0
  62. package/dist/src/services/prompt-processors/types.js +2 -0
  63. package/dist/src/services/prompt-processors/types.js.map +1 -1
  64. package/dist/src/test-utils/customMatchers.d.ts +14 -0
  65. package/dist/src/test-utils/customMatchers.js +46 -0
  66. package/dist/src/test-utils/customMatchers.js.map +1 -0
  67. package/dist/src/test-utils/mockCommandContext.d.ts +18 -0
  68. package/dist/src/test-utils/mockCommandContext.js +86 -0
  69. package/dist/src/test-utils/mockCommandContext.js.map +1 -0
  70. package/dist/src/test-utils/mockCommandContext.test.d.ts +6 -0
  71. package/dist/src/test-utils/mockCommandContext.test.js +51 -0
  72. package/dist/src/test-utils/mockCommandContext.test.js.map +1 -0
  73. package/dist/src/test-utils/render.d.ts +8 -0
  74. package/dist/src/test-utils/render.js +10 -0
  75. package/dist/src/test-utils/render.js.map +1 -0
  76. package/dist/src/ui/App.js +14 -6
  77. package/dist/src/ui/App.js.map +1 -1
  78. package/dist/src/ui/IdeIntegrationNudge.js +3 -3
  79. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  80. package/dist/src/ui/commands/aboutCommand.js +8 -5
  81. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  82. package/dist/src/ui/commands/bugCommand.js +6 -4
  83. package/dist/src/ui/commands/bugCommand.js.map +1 -1
  84. package/dist/src/ui/commands/chatCommand.js +8 -6
  85. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  86. package/dist/src/ui/commands/directoryCommand.js +2 -4
  87. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  88. package/dist/src/ui/commands/docsCommand.js +1 -1
  89. package/dist/src/ui/commands/docsCommand.js.map +1 -1
  90. package/dist/src/ui/commands/ideCommand.js +2 -2
  91. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  92. package/dist/src/ui/commands/mcpCommand.js +4 -0
  93. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  94. package/dist/src/ui/commands/setupGithubCommand.test.d.ts +6 -0
  95. package/dist/src/ui/commands/setupGithubCommand.test.js +74 -0
  96. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -0
  97. package/dist/src/ui/commands/terminalSetupCommand.d.ts +13 -0
  98. package/dist/src/ui/commands/terminalSetupCommand.js +41 -0
  99. package/dist/src/ui/commands/terminalSetupCommand.js.map +1 -0
  100. package/dist/src/ui/commands/types.d.ts +1 -0
  101. package/dist/src/ui/commands/types.js.map +1 -1
  102. package/dist/src/ui/components/AboutBox.d.ts +1 -0
  103. package/dist/src/ui/components/AboutBox.js +1 -1
  104. package/dist/src/ui/components/AboutBox.js.map +1 -1
  105. package/dist/src/ui/components/AuthDialog.js +8 -8
  106. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  107. package/dist/src/ui/components/AuthDialog.test.d.ts +6 -0
  108. package/dist/src/ui/components/AuthDialog.test.js +242 -0
  109. package/dist/src/ui/components/AuthDialog.test.js.map +1 -0
  110. package/dist/src/ui/components/ContextSummaryDisplay.js +1 -1
  111. package/dist/src/ui/components/FolderTrustDialog.test.d.ts +6 -0
  112. package/dist/src/ui/components/FolderTrustDialog.test.js +26 -0
  113. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -0
  114. package/dist/src/ui/components/Footer.d.ts +1 -0
  115. package/dist/src/ui/components/Footer.js +3 -2
  116. package/dist/src/ui/components/Footer.js.map +1 -1
  117. package/dist/src/ui/components/Header.test.d.ts +6 -0
  118. package/dist/src/ui/components/Header.test.js +37 -0
  119. package/dist/src/ui/components/Header.test.js.map +1 -0
  120. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  121. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  122. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +6 -0
  123. package/dist/src/ui/components/HistoryItemDisplay.test.js +91 -0
  124. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -0
  125. package/dist/src/ui/components/InputPrompt.js +3 -1
  126. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  127. package/dist/src/ui/components/LoadingIndicator.test.d.ts +6 -0
  128. package/dist/src/ui/components/LoadingIndicator.test.js +190 -0
  129. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -0
  130. package/dist/src/ui/components/SettingsDialog.test.d.ts +6 -0
  131. package/dist/src/ui/components/SettingsDialog.test.js +555 -0
  132. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -0
  133. package/dist/src/ui/components/ShellConfirmationDialog.js +2 -1
  134. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  135. package/dist/src/ui/components/ShellConfirmationDialog.test.d.ts +6 -0
  136. package/dist/src/ui/components/ShellConfirmationDialog.test.js +40 -0
  137. package/dist/src/ui/components/ShellConfirmationDialog.test.js.map +1 -0
  138. package/dist/src/ui/components/StatsDisplay.js +1 -1
  139. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  140. package/dist/src/ui/components/messages/DiffRenderer.js +10 -1
  141. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  142. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +6 -0
  143. package/dist/src/ui/components/messages/DiffRenderer.test.js +239 -0
  144. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -0
  145. package/dist/src/ui/components/messages/InfoMessage.js +2 -1
  146. package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
  147. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +2 -1
  148. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  149. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +6 -0
  150. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +37 -0
  151. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -0
  152. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +6 -0
  153. package/dist/src/ui/components/messages/ToolMessage.test.js +118 -0
  154. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -0
  155. package/dist/src/ui/components/shared/MaxSizedBox.js +1 -1
  156. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  157. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +6 -0
  158. package/dist/src/ui/components/shared/MaxSizedBox.test.js +154 -0
  159. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -0
  160. package/dist/src/ui/components/shared/RadioButtonSelect.js +1 -1
  161. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  162. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +6 -0
  163. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +111 -0
  164. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -0
  165. package/dist/src/ui/components/shared/text-buffer.js +32 -10
  166. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  167. package/dist/src/ui/components/shared/vim-buffer-actions.js +2 -1
  168. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -1
  169. package/dist/src/ui/contexts/KeypressContext.d.ts +30 -0
  170. package/dist/src/ui/contexts/KeypressContext.js +310 -0
  171. package/dist/src/ui/contexts/KeypressContext.js.map +1 -0
  172. package/dist/src/ui/contexts/KeypressContext.test.d.ts +6 -0
  173. package/dist/src/ui/contexts/KeypressContext.test.js +220 -0
  174. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -0
  175. package/dist/src/ui/contexts/SessionContext.d.ts +1 -0
  176. package/dist/src/ui/contexts/SessionContext.js +2 -1
  177. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  178. package/dist/src/ui/hooks/atCommandProcessor.js +9 -9
  179. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  180. package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +6 -0
  181. package/dist/src/ui/hooks/atCommandProcessor.test.js +802 -0
  182. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -0
  183. package/dist/src/ui/hooks/shellCommandProcessor.test.d.ts +6 -0
  184. package/dist/src/ui/hooks/shellCommandProcessor.test.js +328 -0
  185. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -0
  186. package/dist/src/ui/hooks/slashCommandProcessor.js +74 -53
  187. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  188. package/dist/src/ui/hooks/useAtCompletion.js +3 -5
  189. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  190. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.d.ts +6 -0
  191. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +191 -0
  192. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -0
  193. package/dist/src/ui/hooks/useEditorSettings.test.d.ts +6 -0
  194. package/dist/src/ui/hooks/useEditorSettings.test.js +164 -0
  195. package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -0
  196. package/dist/src/ui/hooks/useFocus.d.ts +4 -0
  197. package/dist/src/ui/hooks/useFocus.js +4 -4
  198. package/dist/src/ui/hooks/useFocus.js.map +1 -1
  199. package/dist/src/ui/hooks/useFolderTrust.d.ts +3 -2
  200. package/dist/src/ui/hooks/useFolderTrust.js +43 -10
  201. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  202. package/dist/src/ui/hooks/useGeminiStream.js +1 -2
  203. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  204. package/dist/src/ui/hooks/useGitBranchName.test.d.ts +6 -0
  205. package/dist/src/ui/hooks/useGitBranchName.test.js +175 -0
  206. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -0
  207. package/dist/src/ui/hooks/useHistoryManager.test.d.ts +6 -0
  208. package/dist/src/ui/hooks/useHistoryManager.test.js +171 -0
  209. package/dist/src/ui/hooks/useHistoryManager.test.js.map +1 -0
  210. package/dist/src/ui/hooks/useInputHistory.test.d.ts +6 -0
  211. package/dist/src/ui/hooks/useInputHistory.test.js +207 -0
  212. package/dist/src/ui/hooks/useInputHistory.test.js.map +1 -0
  213. package/dist/src/ui/hooks/useKeypress.d.ts +4 -16
  214. package/dist/src/ui/hooks/useKeypress.js +8 -140
  215. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  216. package/dist/src/ui/hooks/useKittyKeyboardProtocol.d.ts +15 -0
  217. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js +20 -0
  218. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js.map +1 -0
  219. package/dist/src/ui/hooks/useLoadingIndicator.test.d.ts +6 -0
  220. package/dist/src/ui/hooks/useLoadingIndicator.test.js +91 -0
  221. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -0
  222. package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +6 -0
  223. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +163 -0
  224. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +1 -0
  225. package/dist/src/ui/hooks/useShellHistory.test.d.ts +6 -0
  226. package/dist/src/ui/hooks/useShellHistory.test.js +162 -0
  227. package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -0
  228. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +6 -0
  229. package/dist/src/ui/hooks/useSlashCompletion.test.js +272 -0
  230. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -0
  231. package/dist/src/ui/hooks/useThemeCommand.js +1 -1
  232. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  233. package/dist/src/ui/hooks/useTimer.test.d.ts +6 -0
  234. package/dist/src/ui/hooks/useTimer.test.js +90 -0
  235. package/dist/src/ui/hooks/useTimer.test.js.map +1 -0
  236. package/dist/src/ui/hooks/useToolScheduler.test.d.ts +6 -0
  237. package/dist/src/ui/hooks/useToolScheduler.test.js +841 -0
  238. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -0
  239. package/dist/src/ui/keyMatchers.test.d.ts +6 -0
  240. package/dist/src/ui/keyMatchers.test.js +276 -0
  241. package/dist/src/ui/keyMatchers.test.js.map +1 -0
  242. package/dist/src/ui/themes/color-utils.test.d.ts +6 -0
  243. package/dist/src/ui/themes/color-utils.test.js +197 -0
  244. package/dist/src/ui/themes/color-utils.test.js.map +1 -0
  245. package/dist/src/ui/themes/theme-manager.js +1 -1
  246. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  247. package/dist/src/ui/themes/theme-manager.test.d.ts +6 -0
  248. package/dist/src/ui/themes/theme-manager.test.js +83 -0
  249. package/dist/src/ui/themes/theme-manager.test.js.map +1 -0
  250. package/dist/src/ui/types.d.ts +2 -0
  251. package/dist/src/ui/types.js.map +1 -1
  252. package/dist/src/ui/utils/CodeColorizer.js +1 -1
  253. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  254. package/dist/src/ui/utils/InlineMarkdownRenderer.js +8 -1
  255. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  256. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +6 -0
  257. package/dist/src/ui/utils/MarkdownDisplay.test.js +151 -0
  258. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -0
  259. package/dist/src/ui/utils/clipboardUtils.test.d.ts +6 -0
  260. package/dist/src/ui/utils/clipboardUtils.test.js +65 -0
  261. package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -0
  262. package/dist/src/ui/utils/commandUtils.test.d.ts +6 -0
  263. package/dist/src/ui/utils/commandUtils.test.js +294 -0
  264. package/dist/src/ui/utils/commandUtils.test.js.map +1 -0
  265. package/dist/src/ui/utils/displayUtils.test.d.ts +6 -0
  266. package/dist/src/ui/utils/displayUtils.test.js +42 -0
  267. package/dist/src/ui/utils/displayUtils.test.js.map +1 -0
  268. package/dist/src/ui/utils/formatters.test.d.ts +6 -0
  269. package/dist/src/ui/utils/formatters.test.js +56 -0
  270. package/dist/src/ui/utils/formatters.test.js.map +1 -0
  271. package/dist/src/ui/utils/kittyProtocolDetector.d.ts +13 -0
  272. package/dist/src/ui/utils/kittyProtocolDetector.js +88 -0
  273. package/dist/src/ui/utils/kittyProtocolDetector.js.map +1 -0
  274. package/dist/src/ui/utils/markdownUtilities.test.d.ts +6 -0
  275. package/dist/src/ui/utils/markdownUtilities.test.js +42 -0
  276. package/dist/src/ui/utils/markdownUtilities.test.js.map +1 -0
  277. package/dist/src/ui/utils/platformConstants.d.ts +43 -0
  278. package/dist/src/ui/utils/platformConstants.js +44 -0
  279. package/dist/src/ui/utils/platformConstants.js.map +1 -0
  280. package/dist/src/ui/utils/terminalSetup.d.ts +30 -0
  281. package/dist/src/ui/utils/terminalSetup.js +281 -0
  282. package/dist/src/ui/utils/terminalSetup.js.map +1 -0
  283. package/dist/src/ui/utils/updateCheck.js +1 -1
  284. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  285. package/dist/src/ui/utils/updateCheck.test.d.ts +6 -0
  286. package/dist/src/ui/utils/updateCheck.test.js +145 -0
  287. package/dist/src/ui/utils/updateCheck.test.js.map +1 -0
  288. package/dist/src/utils/checks.d.ts +19 -0
  289. package/dist/src/utils/checks.js +24 -0
  290. package/dist/src/utils/checks.js.map +1 -0
  291. package/dist/src/utils/gitUtils.test.d.ts +6 -0
  292. package/dist/src/utils/gitUtils.test.js +113 -0
  293. package/dist/src/utils/gitUtils.test.js.map +1 -0
  294. package/dist/src/utils/installationInfo.test.d.ts +6 -0
  295. package/dist/src/utils/installationInfo.test.js +242 -0
  296. package/dist/src/utils/installationInfo.test.js.map +1 -0
  297. package/dist/src/utils/readStdin.js +10 -0
  298. package/dist/src/utils/readStdin.js.map +1 -1
  299. package/dist/src/utils/sandbox.js +62 -60
  300. package/dist/src/utils/sandbox.js.map +1 -1
  301. package/dist/src/utils/settingsUtils.test.d.ts +6 -0
  302. package/dist/src/utils/settingsUtils.test.js +514 -0
  303. package/dist/src/utils/settingsUtils.test.js.map +1 -0
  304. package/dist/src/utils/userStartupWarnings.test.d.ts +6 -0
  305. package/dist/src/utils/userStartupWarnings.test.js +67 -0
  306. package/dist/src/utils/userStartupWarnings.test.js.map +1 -0
  307. package/dist/src/utils/version.js +1 -1
  308. package/dist/src/utils/version.js.map +1 -1
  309. package/dist/src/validateNonInterActiveAuth.js +3 -3
  310. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  311. package/dist/src/zed-integration/acp.d.ts +63 -0
  312. package/dist/src/{acp → zed-integration}/acp.js +76 -44
  313. package/dist/src/zed-integration/acp.js.map +1 -0
  314. package/dist/src/zed-integration/schema.d.ts +11679 -0
  315. package/dist/src/zed-integration/schema.js +305 -0
  316. package/dist/src/zed-integration/schema.js.map +1 -0
  317. package/dist/src/zed-integration/zedIntegration.d.ts +10 -0
  318. package/dist/src/{acp/acpPeer.js → zed-integration/zedIntegration.js} +333 -187
  319. package/dist/src/zed-integration/zedIntegration.js.map +1 -0
  320. package/dist/tsconfig.tsbuildinfo +1 -1
  321. package/package.json +5 -5
  322. package/dist/src/acp/acp.d.ts +0 -208
  323. package/dist/src/acp/acp.js.map +0 -1
  324. package/dist/src/acp/acpPeer.d.ts +0 -8
  325. package/dist/src/acp/acpPeer.js.map +0 -1
  326. package/dist/src/ui/utils/errorParsing.d.ts +0 -7
  327. package/dist/src/ui/utils/errorParsing.js +0 -90
  328. package/dist/src/ui/utils/errorParsing.js.map +0 -1
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Terminal Platform Constants
8
+ *
9
+ * This file contains terminal-related constants used throughout the application,
10
+ * specifically for handling keyboard inputs and terminal protocols.
11
+ */
12
+ /**
13
+ * Kitty keyboard protocol sequences for enhanced keyboard input.
14
+ * @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/
15
+ */
16
+ export const KITTY_CTRL_C = '[99;5u';
17
+ /**
18
+ * Kitty keyboard protocol keycodes
19
+ */
20
+ export const KITTY_KEYCODE_ENTER = 13;
21
+ export const KITTY_KEYCODE_NUMPAD_ENTER = 57414;
22
+ /**
23
+ * Timing constants for terminal interactions
24
+ */
25
+ export const CTRL_EXIT_PROMPT_DURATION_MS = 1000;
26
+ /**
27
+ * VS Code terminal integration constants
28
+ */
29
+ export const VSCODE_SHIFT_ENTER_SEQUENCE = '\\\r\n';
30
+ /**
31
+ * Backslash + Enter detection window in milliseconds.
32
+ * Used to detect Shift+Enter pattern where backslash
33
+ * is followed by Enter within this timeframe.
34
+ */
35
+ export const BACKSLASH_ENTER_DETECTION_WINDOW_MS = 5;
36
+ /**
37
+ * Maximum expected length of a Kitty keyboard protocol sequence.
38
+ * Format: ESC [ <keycode> ; <modifiers> u/~
39
+ * Example: \x1b[13;2u (Shift+Enter) = 8 chars
40
+ * Longest reasonable: \x1b[127;15~ = 11 chars (Del with all modifiers)
41
+ * We use 12 to provide a small buffer.
42
+ */
43
+ export const MAX_KITTY_SEQUENCE_LENGTH = 12;
44
+ //# sourceMappingURL=platformConstants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformConstants.js","sourceRoot":"","sources":["../../../../src/ui/utils/platformConstants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AACtC,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,QAAQ,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export interface TerminalSetupResult {
7
+ success: boolean;
8
+ message: string;
9
+ requiresRestart?: boolean;
10
+ }
11
+ /**
12
+ * Main terminal setup function that detects and configures the current terminal.
13
+ *
14
+ * This function:
15
+ * 1. Detects the current terminal emulator
16
+ * 2. Applies appropriate configuration for Shift+Enter and Ctrl+Enter support
17
+ * 3. Creates backups of configuration files before modifying them
18
+ *
19
+ * @returns Promise<TerminalSetupResult> Result object with success status and message
20
+ *
21
+ * @example
22
+ * const result = await terminalSetup();
23
+ * if (result.success) {
24
+ * console.log(result.message);
25
+ * if (result.requiresRestart) {
26
+ * console.log('Please restart your terminal');
27
+ * }
28
+ * }
29
+ */
30
+ export declare function terminalSetup(): Promise<TerminalSetupResult>;
@@ -0,0 +1,281 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Terminal setup utility for configuring Shift+Enter and Ctrl+Enter support.
8
+ *
9
+ * This module provides automatic detection and configuration of various terminal
10
+ * emulators to support multiline input through modified Enter keys.
11
+ *
12
+ * Supported terminals:
13
+ * - VS Code: Configures keybindings.json to send \\\r\n
14
+ * - Cursor: Configures keybindings.json to send \\\r\n (VS Code fork)
15
+ * - Windsurf: Configures keybindings.json to send \\\r\n (VS Code fork)
16
+ *
17
+ * For VS Code and its forks:
18
+ * - Shift+Enter: Sends \\\r\n (backslash followed by CRLF)
19
+ * - Ctrl+Enter: Sends \\\r\n (backslash followed by CRLF)
20
+ *
21
+ * The module will not modify existing shift+enter or ctrl+enter keybindings
22
+ * to avoid conflicts with user customizations.
23
+ */
24
+ import { promises as fs } from 'fs';
25
+ import * as os from 'os';
26
+ import * as path from 'path';
27
+ import { exec } from 'child_process';
28
+ import { promisify } from 'util';
29
+ import { isKittyProtocolEnabled } from './kittyProtocolDetector.js';
30
+ import { VSCODE_SHIFT_ENTER_SEQUENCE } from './platformConstants.js';
31
+ const execAsync = promisify(exec);
32
+ /**
33
+ * Removes single-line JSON comments (// ...) from a string to allow parsing
34
+ * VS Code style JSON files that may contain comments.
35
+ */
36
+ function stripJsonComments(content) {
37
+ // Remove single-line comments (// ...)
38
+ return content.replace(/^\s*\/\/.*$/gm, '');
39
+ }
40
+ // Terminal detection
41
+ async function detectTerminal() {
42
+ const termProgram = process.env['TERM_PROGRAM'];
43
+ // Check VS Code and its forks - check forks first to avoid false positives
44
+ // Check for Cursor-specific indicators
45
+ if (process.env['CURSOR_TRACE_ID'] ||
46
+ process.env['VSCODE_GIT_ASKPASS_MAIN']?.toLowerCase().includes('cursor')) {
47
+ return 'cursor';
48
+ }
49
+ // Check for Windsurf-specific indicators
50
+ if (process.env['VSCODE_GIT_ASKPASS_MAIN']?.toLowerCase().includes('windsurf')) {
51
+ return 'windsurf';
52
+ }
53
+ // Check VS Code last since forks may also set VSCODE env vars
54
+ if (termProgram === 'vscode' || process.env['VSCODE_GIT_IPC_HANDLE']) {
55
+ return 'vscode';
56
+ }
57
+ // Check parent process name
58
+ if (os.platform() !== 'win32') {
59
+ try {
60
+ const { stdout } = await execAsync('ps -o comm= -p $PPID');
61
+ const parentName = stdout.trim();
62
+ // Check forks before VS Code to avoid false positives
63
+ if (parentName.includes('windsurf') || parentName.includes('Windsurf'))
64
+ return 'windsurf';
65
+ if (parentName.includes('cursor') || parentName.includes('Cursor'))
66
+ return 'cursor';
67
+ if (parentName.includes('code') || parentName.includes('Code'))
68
+ return 'vscode';
69
+ }
70
+ catch (error) {
71
+ // Continue detection even if process check fails
72
+ console.debug('Parent process detection failed:', error);
73
+ }
74
+ }
75
+ return null;
76
+ }
77
+ // Backup file helper
78
+ async function backupFile(filePath) {
79
+ try {
80
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
81
+ const backupPath = `${filePath}.backup.${timestamp}`;
82
+ await fs.copyFile(filePath, backupPath);
83
+ }
84
+ catch (error) {
85
+ // Log backup errors but continue with operation
86
+ console.warn(`Failed to create backup of ${filePath}:`, error);
87
+ }
88
+ }
89
+ // Helper function to get VS Code-style config directory
90
+ function getVSCodeStyleConfigDir(appName) {
91
+ const platform = os.platform();
92
+ if (platform === 'darwin') {
93
+ return path.join(os.homedir(), 'Library', 'Application Support', appName, 'User');
94
+ }
95
+ else if (platform === 'win32') {
96
+ if (!process.env['APPDATA']) {
97
+ return null;
98
+ }
99
+ return path.join(process.env['APPDATA'], appName, 'User');
100
+ }
101
+ else {
102
+ return path.join(os.homedir(), '.config', appName, 'User');
103
+ }
104
+ }
105
+ // Generic VS Code-style terminal configuration
106
+ async function configureVSCodeStyle(terminalName, appName) {
107
+ const configDir = getVSCodeStyleConfigDir(appName);
108
+ if (!configDir) {
109
+ return {
110
+ success: false,
111
+ message: `Could not determine ${terminalName} config path on Windows: APPDATA environment variable is not set.`,
112
+ };
113
+ }
114
+ const keybindingsFile = path.join(configDir, 'keybindings.json');
115
+ try {
116
+ await fs.mkdir(configDir, { recursive: true });
117
+ let keybindings = [];
118
+ try {
119
+ const content = await fs.readFile(keybindingsFile, 'utf8');
120
+ await backupFile(keybindingsFile);
121
+ try {
122
+ const cleanContent = stripJsonComments(content);
123
+ const parsedContent = JSON.parse(cleanContent);
124
+ if (!Array.isArray(parsedContent)) {
125
+ return {
126
+ success: false,
127
+ message: `${terminalName} keybindings.json exists but is not a valid JSON array. ` +
128
+ `Please fix the file manually or delete it to allow automatic configuration.\n` +
129
+ `File: ${keybindingsFile}`,
130
+ };
131
+ }
132
+ keybindings = parsedContent;
133
+ }
134
+ catch (parseError) {
135
+ return {
136
+ success: false,
137
+ message: `Failed to parse ${terminalName} keybindings.json. The file contains invalid JSON.\n` +
138
+ `Please fix the file manually or delete it to allow automatic configuration.\n` +
139
+ `File: ${keybindingsFile}\n` +
140
+ `Error: ${parseError}`,
141
+ };
142
+ }
143
+ }
144
+ catch {
145
+ // File doesn't exist, will create new one
146
+ }
147
+ const shiftEnterBinding = {
148
+ key: 'shift+enter',
149
+ command: 'workbench.action.terminal.sendSequence',
150
+ when: 'terminalFocus',
151
+ args: { text: VSCODE_SHIFT_ENTER_SEQUENCE },
152
+ };
153
+ const ctrlEnterBinding = {
154
+ key: 'ctrl+enter',
155
+ command: 'workbench.action.terminal.sendSequence',
156
+ when: 'terminalFocus',
157
+ args: { text: VSCODE_SHIFT_ENTER_SEQUENCE },
158
+ };
159
+ // Check if ANY shift+enter or ctrl+enter bindings already exist
160
+ const existingShiftEnter = keybindings.find((kb) => {
161
+ const binding = kb;
162
+ return binding.key === 'shift+enter';
163
+ });
164
+ const existingCtrlEnter = keybindings.find((kb) => {
165
+ const binding = kb;
166
+ return binding.key === 'ctrl+enter';
167
+ });
168
+ if (existingShiftEnter || existingCtrlEnter) {
169
+ const messages = [];
170
+ if (existingShiftEnter) {
171
+ messages.push(`- Shift+Enter binding already exists`);
172
+ }
173
+ if (existingCtrlEnter) {
174
+ messages.push(`- Ctrl+Enter binding already exists`);
175
+ }
176
+ return {
177
+ success: false,
178
+ message: `Existing keybindings detected. Will not modify to avoid conflicts.\n` +
179
+ messages.join('\n') +
180
+ '\n' +
181
+ `Please check and modify manually if needed: ${keybindingsFile}`,
182
+ };
183
+ }
184
+ // Check if our specific bindings already exist
185
+ const hasOurShiftEnter = keybindings.some((kb) => {
186
+ const binding = kb;
187
+ return (binding.key === 'shift+enter' &&
188
+ binding.command === 'workbench.action.terminal.sendSequence' &&
189
+ binding.args?.text === '\\\r\n');
190
+ });
191
+ const hasOurCtrlEnter = keybindings.some((kb) => {
192
+ const binding = kb;
193
+ return (binding.key === 'ctrl+enter' &&
194
+ binding.command === 'workbench.action.terminal.sendSequence' &&
195
+ binding.args?.text === '\\\r\n');
196
+ });
197
+ if (!hasOurShiftEnter || !hasOurCtrlEnter) {
198
+ if (!hasOurShiftEnter)
199
+ keybindings.unshift(shiftEnterBinding);
200
+ if (!hasOurCtrlEnter)
201
+ keybindings.unshift(ctrlEnterBinding);
202
+ await fs.writeFile(keybindingsFile, JSON.stringify(keybindings, null, 4));
203
+ return {
204
+ success: true,
205
+ message: `Added Shift+Enter and Ctrl+Enter keybindings to ${terminalName}.\nModified: ${keybindingsFile}`,
206
+ requiresRestart: true,
207
+ };
208
+ }
209
+ else {
210
+ return {
211
+ success: true,
212
+ message: `${terminalName} keybindings already configured.`,
213
+ };
214
+ }
215
+ }
216
+ catch (error) {
217
+ return {
218
+ success: false,
219
+ message: `Failed to configure ${terminalName}.\nFile: ${keybindingsFile}\nError: ${error}`,
220
+ };
221
+ }
222
+ }
223
+ // Terminal-specific configuration functions
224
+ async function configureVSCode() {
225
+ return configureVSCodeStyle('VS Code', 'Code');
226
+ }
227
+ async function configureCursor() {
228
+ return configureVSCodeStyle('Cursor', 'Cursor');
229
+ }
230
+ async function configureWindsurf() {
231
+ return configureVSCodeStyle('Windsurf', 'Windsurf');
232
+ }
233
+ /**
234
+ * Main terminal setup function that detects and configures the current terminal.
235
+ *
236
+ * This function:
237
+ * 1. Detects the current terminal emulator
238
+ * 2. Applies appropriate configuration for Shift+Enter and Ctrl+Enter support
239
+ * 3. Creates backups of configuration files before modifying them
240
+ *
241
+ * @returns Promise<TerminalSetupResult> Result object with success status and message
242
+ *
243
+ * @example
244
+ * const result = await terminalSetup();
245
+ * if (result.success) {
246
+ * console.log(result.message);
247
+ * if (result.requiresRestart) {
248
+ * console.log('Please restart your terminal');
249
+ * }
250
+ * }
251
+ */
252
+ export async function terminalSetup() {
253
+ // Check if terminal already has optimal keyboard support
254
+ if (isKittyProtocolEnabled()) {
255
+ return {
256
+ success: true,
257
+ message: 'Your terminal is already configured for an optimal experience with multiline input (Shift+Enter and Ctrl+Enter).',
258
+ };
259
+ }
260
+ const terminal = await detectTerminal();
261
+ if (!terminal) {
262
+ return {
263
+ success: false,
264
+ message: 'Could not detect terminal type. Supported terminals: VS Code, Cursor, and Windsurf.',
265
+ };
266
+ }
267
+ switch (terminal) {
268
+ case 'vscode':
269
+ return configureVSCode();
270
+ case 'cursor':
271
+ return configureCursor();
272
+ case 'windsurf':
273
+ return configureWindsurf();
274
+ default:
275
+ return {
276
+ success: false,
277
+ message: `Terminal "${terminal}" is not supported yet.`,
278
+ };
279
+ }
280
+ }
281
+ //# sourceMappingURL=terminalSetup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminalSetup.js","sourceRoot":"","sources":["../../../../src/ui/utils/terminalSetup.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ function getBestAvailableUpdate(nightly, stable) {
26
26
  export async function checkForUpdates() {
27
27
  try {
28
28
  // Skip update check when running from source (development mode)
29
- if (process.env.DEV === 'true') {
29
+ if (process.env['DEV'] === 'true') {
30
30
  return null;
31
31
  }
32
32
  const packageJson = await getPackageJson();
@@ -1 +1 @@
1
- {"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../../../src/ui/utils/updateCheck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../../../src/ui/utils/updateCheck.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,cAA8B,MAAM,iBAAiB,CAAC;AAC7D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAOrC;;;GAGG;AACH,SAAS,sBAAsB,CAC7B,OAAoB,EACpB,MAAmB;IAEnB,IAAI,CAAC,OAAO;QAAE,OAAO,MAAM,IAAI,IAAI,CAAC;IACpC,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,IAAI,IAAI,CAAC;IAEpC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IAEhC,IACE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EACxE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,gEAAgE;QAChE,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,WAAW,CAAC;QACtD,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,CAAC,OAA6B,EAAE,EAAE,CACvD,cAAc,CAAC;YACb,GAAG,EAAE;gBACH,IAAI;gBACJ,OAAO,EAAE,cAAc;aACxB;YACD,mBAAmB,EAAE,CAAC;YACtB,uBAAuB,EAAE,IAAI;YAC7B,OAAO;SACR,CAAC,CAAC;QAEL,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC9D,cAAc,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE;gBACrC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE;aACrC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,sBAAsB,CACvC,iBAAiB,EACjB,gBAAgB,CACjB,CAAC;YAEF,IAAI,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;gBAC/D,MAAM,OAAO,GAAG,6CAA6C,cAAc,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;gBACrG,OAAO;oBACL,OAAO;oBACP,MAAM,EAAE,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE;iBACnD,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;YAE9D,IAAI,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;gBAC/D,MAAM,OAAO,GAAG,gCAAgC,cAAc,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;gBACxF,OAAO;oBACL,OAAO;oBACP,MAAM,EAAE,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE;iBACnD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,+BAA+B,GAAG,CAAC,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,145 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { vi, describe, it, expect, beforeEach } from 'vitest';
7
+ import { checkForUpdates } from './updateCheck.js';
8
+ const getPackageJson = vi.hoisted(() => vi.fn());
9
+ vi.mock('../../utils/package.js', () => ({
10
+ getPackageJson,
11
+ }));
12
+ const updateNotifier = vi.hoisted(() => vi.fn());
13
+ vi.mock('update-notifier', () => ({
14
+ default: updateNotifier,
15
+ }));
16
+ describe('checkForUpdates', () => {
17
+ beforeEach(() => {
18
+ vi.useFakeTimers();
19
+ vi.resetAllMocks();
20
+ // Clear DEV environment variable before each test
21
+ delete process.env['DEV'];
22
+ });
23
+ afterEach(() => {
24
+ vi.useRealTimers();
25
+ vi.restoreAllMocks();
26
+ });
27
+ it('should return null when running from source (DEV=true)', async () => {
28
+ process.env['DEV'] = 'true';
29
+ getPackageJson.mockResolvedValue({
30
+ name: 'test-package',
31
+ version: '1.0.0',
32
+ });
33
+ updateNotifier.mockReturnValue({
34
+ fetchInfo: vi
35
+ .fn()
36
+ .mockResolvedValue({ current: '1.0.0', latest: '1.1.0' }),
37
+ });
38
+ const result = await checkForUpdates();
39
+ expect(result).toBeNull();
40
+ expect(getPackageJson).not.toHaveBeenCalled();
41
+ expect(updateNotifier).not.toHaveBeenCalled();
42
+ });
43
+ it('should return null if package.json is missing', async () => {
44
+ getPackageJson.mockResolvedValue(null);
45
+ const result = await checkForUpdates();
46
+ expect(result).toBeNull();
47
+ });
48
+ it('should return null if there is no update', async () => {
49
+ getPackageJson.mockResolvedValue({
50
+ name: 'test-package',
51
+ version: '1.0.0',
52
+ });
53
+ updateNotifier.mockReturnValue({
54
+ fetchInfo: vi.fn().mockResolvedValue(null),
55
+ });
56
+ const result = await checkForUpdates();
57
+ expect(result).toBeNull();
58
+ });
59
+ it('should return a message if a newer version is available', async () => {
60
+ getPackageJson.mockResolvedValue({
61
+ name: 'test-package',
62
+ version: '1.0.0',
63
+ });
64
+ updateNotifier.mockReturnValue({
65
+ fetchInfo: vi
66
+ .fn()
67
+ .mockResolvedValue({ current: '1.0.0', latest: '1.1.0' }),
68
+ });
69
+ const result = await checkForUpdates();
70
+ expect(result?.message).toContain('1.0.0 → 1.1.0');
71
+ expect(result?.update).toEqual({ current: '1.0.0', latest: '1.1.0' });
72
+ });
73
+ it('should return null if the latest version is the same as the current version', async () => {
74
+ getPackageJson.mockResolvedValue({
75
+ name: 'test-package',
76
+ version: '1.0.0',
77
+ });
78
+ updateNotifier.mockReturnValue({
79
+ fetchInfo: vi
80
+ .fn()
81
+ .mockResolvedValue({ current: '1.0.0', latest: '1.0.0' }),
82
+ });
83
+ const result = await checkForUpdates();
84
+ expect(result).toBeNull();
85
+ });
86
+ it('should return null if the latest version is older than the current version', async () => {
87
+ getPackageJson.mockResolvedValue({
88
+ name: 'test-package',
89
+ version: '1.1.0',
90
+ });
91
+ updateNotifier.mockReturnValue({
92
+ fetchInfo: vi
93
+ .fn()
94
+ .mockResolvedValue({ current: '1.1.0', latest: '1.0.0' }),
95
+ });
96
+ const result = await checkForUpdates();
97
+ expect(result).toBeNull();
98
+ });
99
+ it('should return null if fetchInfo rejects', async () => {
100
+ getPackageJson.mockResolvedValue({
101
+ name: 'test-package',
102
+ version: '1.0.0',
103
+ });
104
+ updateNotifier.mockReturnValue({
105
+ fetchInfo: vi.fn().mockRejectedValue(new Error('Timeout')),
106
+ });
107
+ const result = await checkForUpdates();
108
+ expect(result).toBeNull();
109
+ });
110
+ it('should handle errors gracefully', async () => {
111
+ getPackageJson.mockRejectedValue(new Error('test error'));
112
+ const result = await checkForUpdates();
113
+ expect(result).toBeNull();
114
+ });
115
+ describe('nightly updates', () => {
116
+ it('should notify for a newer nightly version when current is nightly', async () => {
117
+ getPackageJson.mockResolvedValue({
118
+ name: 'test-package',
119
+ version: '1.2.3-nightly.1',
120
+ });
121
+ const fetchInfoMock = vi.fn().mockImplementation(({ distTag }) => {
122
+ if (distTag === 'nightly') {
123
+ return Promise.resolve({
124
+ latest: '1.2.3-nightly.2',
125
+ current: '1.2.3-nightly.1',
126
+ });
127
+ }
128
+ if (distTag === 'latest') {
129
+ return Promise.resolve({
130
+ latest: '1.2.3',
131
+ current: '1.2.3-nightly.1',
132
+ });
133
+ }
134
+ return Promise.resolve(null);
135
+ });
136
+ updateNotifier.mockImplementation(({ pkg, distTag }) => ({
137
+ fetchInfo: () => fetchInfoMock({ pkg, distTag }),
138
+ }));
139
+ const result = await checkForUpdates();
140
+ expect(result?.message).toContain('1.2.3-nightly.1 → 1.2.3-nightly.2');
141
+ expect(result?.update.latest).toBe('1.2.3-nightly.2');
142
+ });
143
+ });
144
+ });
145
+ //# sourceMappingURL=updateCheck.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateCheck.test.js","sourceRoot":"","sources":["../../../../src/ui/utils/updateCheck.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare function assumeExhaustive(_value: never): void;
7
+ /**
8
+ * Throws an exception on unexpected values.
9
+ *
10
+ * A common use case is switch statements:
11
+ * switch(enumValue) {
12
+ * case Enum.A:
13
+ * case Enum.B:
14
+ * break;
15
+ * default:
16
+ * checkExhaustive(enumValue);
17
+ * }
18
+ */
19
+ export declare function checkExhaustive(value: never, msg?: string): never;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /* Fail to compile on unexpected values. */
7
+ export function assumeExhaustive(_value) { }
8
+ /**
9
+ * Throws an exception on unexpected values.
10
+ *
11
+ * A common use case is switch statements:
12
+ * switch(enumValue) {
13
+ * case Enum.A:
14
+ * case Enum.B:
15
+ * break;
16
+ * default:
17
+ * checkExhaustive(enumValue);
18
+ * }
19
+ */
20
+ export function checkExhaustive(value, msg = `unexpected value ${value}!`) {
21
+ assumeExhaustive(value);
22
+ throw new Error(msg);
23
+ }
24
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/utils/checks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,2CAA2C;AAC3C,MAAM,UAAU,gBAAgB,CAAC,MAAa,IAAS,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAY,EACZ,GAAG,GAAG,oBAAoB,KAAK,GAAG;IAElC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};