fss-link 1.0.40 → 1.0.45

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 (428) hide show
  1. package/dist/commands/mcp/add.test.ts +122 -0
  2. package/dist/commands/mcp/add.ts +222 -0
  3. package/dist/commands/mcp/list.test.ts +154 -0
  4. package/dist/commands/mcp/list.ts +139 -0
  5. package/dist/commands/mcp/remove.test.ts +69 -0
  6. package/dist/commands/mcp/remove.ts +60 -0
  7. package/dist/commands/mcp.test.ts +55 -0
  8. package/dist/commands/mcp.ts +27 -0
  9. package/dist/config/apiValidation.test.ts +118 -0
  10. package/dist/config/auth.test.ts +79 -0
  11. package/dist/config/auth.ts +100 -0
  12. package/dist/config/config.integration.test.ts +407 -0
  13. package/dist/config/config.test.ts +1952 -0
  14. package/dist/config/config.ts +690 -0
  15. package/dist/config/database.test.ts +96 -0
  16. package/dist/config/database.ts +752 -0
  17. package/dist/config/extension.test.ts +236 -0
  18. package/dist/config/extension.ts +180 -0
  19. package/dist/config/keyBindings.test.ts +62 -0
  20. package/dist/config/keyBindings.ts +184 -0
  21. package/dist/config/modelManager.ts +275 -0
  22. package/dist/config/providerManager.ts +244 -0
  23. package/dist/config/providerPersistence.test.ts +377 -0
  24. package/dist/config/providerPersistence.ts +105 -0
  25. package/dist/config/sandboxConfig.ts +107 -0
  26. package/dist/config/settings.test.ts +1424 -0
  27. package/dist/config/settings.ts +517 -0
  28. package/dist/config/settingsSchema.test.ts +252 -0
  29. package/dist/config/settingsSchema.ts +728 -0
  30. package/dist/config/trustedFolders.test.ts +208 -0
  31. package/dist/config/trustedFolders.ts +167 -0
  32. package/dist/gemini.test.tsx +252 -0
  33. package/dist/gemini.tsx +357 -0
  34. package/dist/generated/git-commit.ts +10 -0
  35. package/dist/index.ts +21 -0
  36. package/dist/nonInteractiveCli.test.ts +276 -0
  37. package/dist/nonInteractiveCli.ts +143 -0
  38. package/dist/package.json +87 -87
  39. package/dist/patches/is-in-ci.ts +17 -0
  40. package/dist/services/BuiltinCommandLoader.test.ts +127 -0
  41. package/dist/services/BuiltinCommandLoader.ts +95 -0
  42. package/dist/services/CommandService.test.ts +352 -0
  43. package/dist/services/CommandService.ts +103 -0
  44. package/dist/services/FileCommandLoader.test.ts +1002 -0
  45. package/dist/services/FileCommandLoader.ts +289 -0
  46. package/dist/services/McpPromptLoader.ts +231 -0
  47. package/dist/services/SearchEngineConfigProvider.ts +100 -0
  48. package/dist/services/prompt-processors/argumentProcessor.test.ts +41 -0
  49. package/dist/services/prompt-processors/argumentProcessor.ts +23 -0
  50. package/dist/services/prompt-processors/shellProcessor.test.ts +709 -0
  51. package/dist/services/prompt-processors/shellProcessor.ts +248 -0
  52. package/dist/services/prompt-processors/types.ts +44 -0
  53. package/dist/services/types.ts +24 -0
  54. package/dist/src/config/apiValidation.test.d.ts +6 -0
  55. package/dist/src/config/apiValidation.test.js +99 -0
  56. package/dist/src/config/apiValidation.test.js.map +1 -0
  57. package/dist/src/config/database.d.ts +32 -0
  58. package/dist/src/config/database.js +281 -2
  59. package/dist/src/config/database.js.map +1 -1
  60. package/dist/src/config/database.test.d.ts +6 -0
  61. package/dist/src/config/database.test.js +80 -0
  62. package/dist/src/config/database.test.js.map +1 -0
  63. package/dist/src/config/providerManager.d.ts +74 -0
  64. package/dist/src/config/providerManager.js +203 -0
  65. package/dist/src/config/providerManager.js.map +1 -0
  66. package/dist/src/config/providerPersistence.d.ts +75 -0
  67. package/dist/src/config/providerPersistence.js +55 -0
  68. package/dist/src/config/providerPersistence.js.map +1 -0
  69. package/dist/src/config/providerPersistence.test.d.ts +6 -0
  70. package/dist/src/config/providerPersistence.test.js +283 -0
  71. package/dist/src/config/providerPersistence.test.js.map +1 -0
  72. package/dist/src/config/settingsSchema.d.ts +9 -0
  73. package/dist/src/config/settingsSchema.js +9 -0
  74. package/dist/src/config/settingsSchema.js.map +1 -1
  75. package/dist/src/generated/git-commit.d.ts +1 -1
  76. package/dist/src/generated/git-commit.js +1 -1
  77. package/dist/src/services/BuiltinCommandLoader.js +2 -0
  78. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  79. package/dist/src/ui/App.js +14 -2
  80. package/dist/src/ui/App.js.map +1 -1
  81. package/dist/src/ui/commands/contextCommand.d.ts +7 -0
  82. package/dist/src/ui/commands/contextCommand.js +115 -0
  83. package/dist/src/ui/commands/contextCommand.js.map +1 -0
  84. package/dist/src/ui/components/ContextUsageDisplay.d.ts +3 -1
  85. package/dist/src/ui/components/ContextUsageDisplay.js +43 -3
  86. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  87. package/dist/src/ui/components/Footer.d.ts +1 -0
  88. package/dist/src/ui/components/Footer.js +2 -2
  89. package/dist/src/ui/components/Footer.js.map +1 -1
  90. package/dist/src/ui/components/GeminiKeyDialog.d.ts +11 -0
  91. package/dist/src/ui/components/GeminiKeyDialog.js +156 -0
  92. package/dist/src/ui/components/GeminiKeyDialog.js.map +1 -0
  93. package/dist/src/ui/components/OpenAIEndpointDialog.d.ts +19 -0
  94. package/dist/src/ui/components/OpenAIEndpointDialog.js +163 -0
  95. package/dist/src/ui/components/OpenAIEndpointDialog.js.map +1 -0
  96. package/dist/src/ui/components/WelcomeBackDialog.d.ts +36 -0
  97. package/dist/src/ui/components/WelcomeBackDialog.js +109 -0
  98. package/dist/src/ui/components/WelcomeBackDialog.js.map +1 -0
  99. package/dist/src/ui/hooks/useWelcomeBack.d.ts +52 -0
  100. package/dist/src/ui/hooks/useWelcomeBack.js +214 -0
  101. package/dist/src/ui/hooks/useWelcomeBack.js.map +1 -0
  102. package/dist/src/zed-integration/schema.d.ts +1516 -1516
  103. package/dist/test-setup.ts +12 -0
  104. package/dist/test-utils/customMatchers.ts +65 -0
  105. package/dist/test-utils/mockCommandContext.test.ts +62 -0
  106. package/dist/test-utils/mockCommandContext.ts +105 -0
  107. package/dist/test-utils/render.tsx +18 -0
  108. package/dist/tsconfig.tsbuildinfo +1 -1
  109. package/dist/ui/App.test.tsx +2181 -0
  110. package/dist/ui/App.tsx +1344 -0
  111. package/dist/ui/IdeIntegrationNudge.tsx +98 -0
  112. package/dist/ui/__snapshots__/App.test.tsx.snap +124 -0
  113. package/dist/ui/colors.ts +56 -0
  114. package/dist/ui/commands/aboutCommand.test.ts +153 -0
  115. package/dist/ui/commands/aboutCommand.ts +49 -0
  116. package/dist/ui/commands/authCommand.test.ts +36 -0
  117. package/dist/ui/commands/authCommand.ts +17 -0
  118. package/dist/ui/commands/bugCommand.test.ts +114 -0
  119. package/dist/ui/commands/bugCommand.ts +92 -0
  120. package/dist/ui/commands/chatCommand.test.ts +414 -0
  121. package/dist/ui/commands/chatCommand.ts +280 -0
  122. package/dist/ui/commands/clearCommand.test.ts +100 -0
  123. package/dist/ui/commands/clearCommand.ts +29 -0
  124. package/dist/ui/commands/compressCommand.test.ts +129 -0
  125. package/dist/ui/commands/compressCommand.ts +78 -0
  126. package/dist/ui/commands/contextCommand.ts +132 -0
  127. package/dist/ui/commands/copyCommand.test.ts +296 -0
  128. package/dist/ui/commands/copyCommand.ts +67 -0
  129. package/dist/ui/commands/corgiCommand.test.ts +34 -0
  130. package/dist/ui/commands/corgiCommand.ts +16 -0
  131. package/dist/ui/commands/directoryCommand.test.tsx +185 -0
  132. package/dist/ui/commands/directoryCommand.tsx +179 -0
  133. package/dist/ui/commands/docsCommand.test.ts +99 -0
  134. package/dist/ui/commands/docsCommand.ts +42 -0
  135. package/dist/ui/commands/editorCommand.test.ts +30 -0
  136. package/dist/ui/commands/editorCommand.ts +21 -0
  137. package/dist/ui/commands/extensionsCommand.test.ts +67 -0
  138. package/dist/ui/commands/extensionsCommand.ts +46 -0
  139. package/dist/ui/commands/helpCommand.test.ts +52 -0
  140. package/dist/ui/commands/helpCommand.ts +23 -0
  141. package/dist/ui/commands/ideCommand.test.ts +255 -0
  142. package/dist/ui/commands/ideCommand.ts +283 -0
  143. package/dist/ui/commands/initCommand.test.ts +127 -0
  144. package/dist/ui/commands/initCommand.ts +117 -0
  145. package/dist/ui/commands/mcpCommand.test.ts +1057 -0
  146. package/dist/ui/commands/mcpCommand.ts +531 -0
  147. package/dist/ui/commands/memoryCommand.test.ts +344 -0
  148. package/dist/ui/commands/memoryCommand.ts +305 -0
  149. package/dist/ui/commands/privacyCommand.test.ts +38 -0
  150. package/dist/ui/commands/privacyCommand.ts +17 -0
  151. package/dist/ui/commands/quitCommand.test.ts +55 -0
  152. package/dist/ui/commands/quitCommand.ts +36 -0
  153. package/dist/ui/commands/restoreCommand.test.ts +250 -0
  154. package/dist/ui/commands/restoreCommand.ts +157 -0
  155. package/dist/ui/commands/searchEngineSetupCommand.ts +18 -0
  156. package/dist/ui/commands/settingsCommand.test.ts +36 -0
  157. package/dist/ui/commands/settingsCommand.ts +17 -0
  158. package/dist/ui/commands/setupGithubCommand.test.ts +238 -0
  159. package/dist/ui/commands/setupGithubCommand.ts +212 -0
  160. package/dist/ui/commands/speakCommand.ts +175 -0
  161. package/dist/ui/commands/statsCommand.test.ts +78 -0
  162. package/dist/ui/commands/statsCommand.ts +70 -0
  163. package/dist/ui/commands/terminalSetupCommand.test.ts +85 -0
  164. package/dist/ui/commands/terminalSetupCommand.ts +45 -0
  165. package/dist/ui/commands/themeCommand.test.ts +38 -0
  166. package/dist/ui/commands/themeCommand.ts +17 -0
  167. package/dist/ui/commands/toolsCommand.test.ts +105 -0
  168. package/dist/ui/commands/toolsCommand.ts +71 -0
  169. package/dist/ui/commands/ttsCommand.ts +143 -0
  170. package/dist/ui/commands/types.ts +204 -0
  171. package/dist/ui/commands/vimCommand.ts +25 -0
  172. package/dist/ui/commands/voiceCommand.ts +125 -0
  173. package/dist/ui/components/AboutBox.tsx +133 -0
  174. package/dist/ui/components/AsciiArt.ts +54 -0
  175. package/dist/ui/components/AuthDialog.test.tsx +334 -0
  176. package/dist/ui/components/AuthDialog.tsx +289 -0
  177. package/dist/ui/components/AuthInProgress.tsx +62 -0
  178. package/dist/ui/components/AutoAcceptIndicator.tsx +47 -0
  179. package/dist/ui/components/ConsoleSummaryDisplay.tsx +35 -0
  180. package/dist/ui/components/ContextSummaryDisplay.test.tsx +85 -0
  181. package/dist/ui/components/ContextSummaryDisplay.tsx +120 -0
  182. package/dist/ui/components/ContextUsageDisplay.tsx +77 -0
  183. package/dist/ui/components/DebugProfiler.tsx +36 -0
  184. package/dist/ui/components/DetailedMessagesDisplay.tsx +82 -0
  185. package/dist/ui/components/EditorSettingsDialog.tsx +172 -0
  186. package/dist/ui/components/FolderTrustDialog.test.tsx +36 -0
  187. package/dist/ui/components/FolderTrustDialog.tsx +74 -0
  188. package/dist/ui/components/Footer.test.tsx +159 -0
  189. package/dist/ui/components/Footer.tsx +158 -0
  190. package/dist/ui/components/GeminiKeyDialog.tsx +252 -0
  191. package/dist/ui/components/GeminiRespondingSpinner.tsx +34 -0
  192. package/dist/ui/components/Header.test.tsx +44 -0
  193. package/dist/ui/components/Header.tsx +70 -0
  194. package/dist/ui/components/Help.tsx +174 -0
  195. package/dist/ui/components/HistoryItemDisplay.test.tsx +125 -0
  196. package/dist/ui/components/HistoryItemDisplay.tsx +98 -0
  197. package/dist/ui/components/InputPrompt.test.tsx +1467 -0
  198. package/dist/ui/components/InputPrompt.tsx +641 -0
  199. package/dist/ui/components/LMStudioModelPrompt.tsx +215 -0
  200. package/dist/ui/components/LoadingIndicator.test.tsx +296 -0
  201. package/dist/ui/components/LoadingIndicator.tsx +82 -0
  202. package/dist/ui/components/MemoryUsageDisplay.tsx +36 -0
  203. package/dist/ui/components/ModelStatsDisplay.test.tsx +252 -0
  204. package/dist/ui/components/ModelStatsDisplay.tsx +197 -0
  205. package/dist/ui/components/OllamaModelPrompt.tsx +206 -0
  206. package/dist/ui/components/OpenAIEndpointDialog.tsx +261 -0
  207. package/dist/ui/components/OpenAIKeyPrompt.test.tsx +64 -0
  208. package/dist/ui/components/OpenAIKeyPrompt.tsx +197 -0
  209. package/dist/ui/components/PrepareLabel.tsx +48 -0
  210. package/dist/ui/components/SearchEngineConfigDialog.tsx +280 -0
  211. package/dist/ui/components/SessionSummaryDisplay.test.tsx +75 -0
  212. package/dist/ui/components/SessionSummaryDisplay.tsx +18 -0
  213. package/dist/ui/components/SettingsDialog.test.tsx +865 -0
  214. package/dist/ui/components/SettingsDialog.tsx +753 -0
  215. package/dist/ui/components/ShellConfirmationDialog.test.tsx +53 -0
  216. package/dist/ui/components/ShellConfirmationDialog.tsx +103 -0
  217. package/dist/ui/components/ShellModeIndicator.tsx +18 -0
  218. package/dist/ui/components/ShowMoreLines.tsx +40 -0
  219. package/dist/ui/components/StatsDisplay.test.tsx +401 -0
  220. package/dist/ui/components/StatsDisplay.tsx +273 -0
  221. package/dist/ui/components/SuggestionsDisplay.tsx +102 -0
  222. package/dist/ui/components/ThemeDialog.tsx +310 -0
  223. package/dist/ui/components/Tips.tsx +45 -0
  224. package/dist/ui/components/TodoDisplay.test.tsx +97 -0
  225. package/dist/ui/components/TodoDisplay.tsx +72 -0
  226. package/dist/ui/components/ToolStatsDisplay.test.tsx +180 -0
  227. package/dist/ui/components/ToolStatsDisplay.tsx +208 -0
  228. package/dist/ui/components/UpdateNotification.tsx +23 -0
  229. package/dist/ui/components/WelcomeBackDialog.tsx +290 -0
  230. package/dist/ui/components/__snapshots__/IDEContextDetailDisplay.test.tsx.snap +24 -0
  231. package/dist/ui/components/__snapshots__/ModelStatsDisplay.test.tsx.snap +121 -0
  232. package/dist/ui/components/__snapshots__/SessionSummaryDisplay.test.tsx.snap +30 -0
  233. package/dist/ui/components/__snapshots__/ShellConfirmationDialog.test.tsx.snap +21 -0
  234. package/dist/ui/components/__snapshots__/StatsDisplay.test.tsx.snap +264 -0
  235. package/dist/ui/components/__snapshots__/ToolStatsDisplay.test.tsx.snap +91 -0
  236. package/dist/ui/components/messages/CompressionMessage.tsx +49 -0
  237. package/dist/ui/components/messages/DiffRenderer.test.tsx +365 -0
  238. package/dist/ui/components/messages/DiffRenderer.tsx +358 -0
  239. package/dist/ui/components/messages/ErrorMessage.tsx +31 -0
  240. package/dist/ui/components/messages/GeminiMessage.tsx +43 -0
  241. package/dist/ui/components/messages/GeminiMessageContent.tsx +43 -0
  242. package/dist/ui/components/messages/InfoMessage.tsx +32 -0
  243. package/dist/ui/components/messages/ToolConfirmationMessage.test.tsx +58 -0
  244. package/dist/ui/components/messages/ToolConfirmationMessage.tsx +297 -0
  245. package/dist/ui/components/messages/ToolGroupMessage.tsx +126 -0
  246. package/dist/ui/components/messages/ToolMessage.test.tsx +183 -0
  247. package/dist/ui/components/messages/ToolMessage.tsx +296 -0
  248. package/dist/ui/components/messages/UserMessage.tsx +43 -0
  249. package/dist/ui/components/messages/UserShellMessage.tsx +25 -0
  250. package/dist/ui/components/shared/MaxSizedBox.test.tsx +425 -0
  251. package/dist/ui/components/shared/MaxSizedBox.tsx +624 -0
  252. package/dist/ui/components/shared/RadioButtonSelect.test.tsx +181 -0
  253. package/dist/ui/components/shared/RadioButtonSelect.tsx +234 -0
  254. package/dist/ui/components/shared/__snapshots__/RadioButtonSelect.test.tsx.snap +47 -0
  255. package/dist/ui/components/shared/text-buffer.test.ts +1728 -0
  256. package/dist/ui/components/shared/text-buffer.ts +2227 -0
  257. package/dist/ui/components/shared/vim-buffer-actions.test.ts +1119 -0
  258. package/dist/ui/components/shared/vim-buffer-actions.ts +814 -0
  259. package/dist/ui/constants.ts +17 -0
  260. package/dist/ui/contexts/KeypressContext.test.tsx +391 -0
  261. package/dist/ui/contexts/KeypressContext.tsx +440 -0
  262. package/dist/ui/contexts/OverflowContext.tsx +87 -0
  263. package/dist/ui/contexts/SessionContext.test.tsx +132 -0
  264. package/dist/ui/contexts/SessionContext.tsx +143 -0
  265. package/dist/ui/contexts/SettingsContext.tsx +20 -0
  266. package/dist/ui/contexts/StreamingContext.tsx +22 -0
  267. package/dist/ui/contexts/VimModeContext.tsx +79 -0
  268. package/dist/ui/editors/editorSettingsManager.ts +66 -0
  269. package/dist/ui/hooks/atCommandProcessor.test.ts +1102 -0
  270. package/dist/ui/hooks/atCommandProcessor.ts +485 -0
  271. package/dist/ui/hooks/shellCommandProcessor.test.ts +481 -0
  272. package/dist/ui/hooks/shellCommandProcessor.ts +314 -0
  273. package/dist/ui/hooks/slashCommandProcessor.test.ts +1044 -0
  274. package/dist/ui/hooks/slashCommandProcessor.ts +595 -0
  275. package/dist/ui/hooks/useAtCompletion.test.ts +497 -0
  276. package/dist/ui/hooks/useAtCompletion.ts +244 -0
  277. package/dist/ui/hooks/useAuthCommand.ts +129 -0
  278. package/dist/ui/hooks/useAutoAcceptIndicator.test.ts +300 -0
  279. package/dist/ui/hooks/useAutoAcceptIndicator.ts +52 -0
  280. package/dist/ui/hooks/useBracketedPaste.ts +37 -0
  281. package/dist/ui/hooks/useCommandCompletion.test.ts +518 -0
  282. package/dist/ui/hooks/useCommandCompletion.tsx +238 -0
  283. package/dist/ui/hooks/useCompletion.ts +128 -0
  284. package/dist/ui/hooks/useConsoleMessages.test.ts +147 -0
  285. package/dist/ui/hooks/useConsoleMessages.ts +110 -0
  286. package/dist/ui/hooks/useEditorSettings.test.ts +283 -0
  287. package/dist/ui/hooks/useEditorSettings.ts +75 -0
  288. package/dist/ui/hooks/useFocus.test.ts +119 -0
  289. package/dist/ui/hooks/useFocus.ts +48 -0
  290. package/dist/ui/hooks/useFolderTrust.test.ts +159 -0
  291. package/dist/ui/hooks/useFolderTrust.ts +72 -0
  292. package/dist/ui/hooks/useGeminiStream.test.tsx +1998 -0
  293. package/dist/ui/hooks/useGeminiStream.ts +1017 -0
  294. package/dist/ui/hooks/useGitBranchName.test.ts +280 -0
  295. package/dist/ui/hooks/useGitBranchName.ts +79 -0
  296. package/dist/ui/hooks/useHistoryManager.test.ts +202 -0
  297. package/dist/ui/hooks/useHistoryManager.ts +111 -0
  298. package/dist/ui/hooks/useInputHistory.test.ts +261 -0
  299. package/dist/ui/hooks/useInputHistory.ts +111 -0
  300. package/dist/ui/hooks/useKeypress.test.ts +280 -0
  301. package/dist/ui/hooks/useKeypress.ts +39 -0
  302. package/dist/ui/hooks/useKittyKeyboardProtocol.ts +31 -0
  303. package/dist/ui/hooks/useLoadingIndicator.test.ts +139 -0
  304. package/dist/ui/hooks/useLoadingIndicator.ts +57 -0
  305. package/dist/ui/hooks/useLogger.ts +32 -0
  306. package/dist/ui/hooks/useMessageQueue.test.ts +226 -0
  307. package/dist/ui/hooks/useMessageQueue.ts +69 -0
  308. package/dist/ui/hooks/usePhraseCycler.test.ts +145 -0
  309. package/dist/ui/hooks/usePhraseCycler.ts +198 -0
  310. package/dist/ui/hooks/usePrivacySettings.test.ts +242 -0
  311. package/dist/ui/hooks/usePrivacySettings.ts +150 -0
  312. package/dist/ui/hooks/useReactToolScheduler.ts +309 -0
  313. package/dist/ui/hooks/useRefreshMemoryCommand.ts +7 -0
  314. package/dist/ui/hooks/useReverseSearchCompletion.test.tsx +260 -0
  315. package/dist/ui/hooks/useReverseSearchCompletion.tsx +95 -0
  316. package/dist/ui/hooks/useSettingsCommand.ts +25 -0
  317. package/dist/ui/hooks/useShellHistory.test.ts +219 -0
  318. package/dist/ui/hooks/useShellHistory.ts +133 -0
  319. package/dist/ui/hooks/useShowMemoryCommand.ts +75 -0
  320. package/dist/ui/hooks/useSlashCompletion.test.ts +434 -0
  321. package/dist/ui/hooks/useSlashCompletion.ts +187 -0
  322. package/dist/ui/hooks/useStateAndRef.ts +36 -0
  323. package/dist/ui/hooks/useTerminalSize.ts +32 -0
  324. package/dist/ui/hooks/useThemeCommand.ts +110 -0
  325. package/dist/ui/hooks/useTimer.test.ts +120 -0
  326. package/dist/ui/hooks/useTimer.ts +65 -0
  327. package/dist/ui/hooks/useToolScheduler.test.ts +1123 -0
  328. package/dist/ui/hooks/useWelcomeBack.ts +253 -0
  329. package/dist/ui/hooks/vim.test.ts +1691 -0
  330. package/dist/ui/hooks/vim.ts +784 -0
  331. package/dist/ui/keyMatchers.test.ts +337 -0
  332. package/dist/ui/keyMatchers.ts +105 -0
  333. package/dist/ui/privacy/CloudFreePrivacyNotice.tsx +117 -0
  334. package/dist/ui/privacy/CloudPaidPrivacyNotice.tsx +59 -0
  335. package/dist/ui/privacy/GeminiPrivacyNotice.tsx +62 -0
  336. package/dist/ui/privacy/PrivacyNotice.tsx +42 -0
  337. package/dist/ui/semantic-colors.ts +26 -0
  338. package/dist/ui/themes/ansi-light.ts +150 -0
  339. package/dist/ui/themes/ansi.ts +159 -0
  340. package/dist/ui/themes/atom-one-dark.ts +147 -0
  341. package/dist/ui/themes/ayu-light.ts +139 -0
  342. package/dist/ui/themes/ayu.ts +113 -0
  343. package/dist/ui/themes/color-utils.test.ts +221 -0
  344. package/dist/ui/themes/color-utils.ts +231 -0
  345. package/dist/ui/themes/default-light.ts +108 -0
  346. package/dist/ui/themes/default.ts +151 -0
  347. package/dist/ui/themes/dracula.ts +124 -0
  348. package/dist/ui/themes/fss-code-dark.ts +156 -0
  349. package/dist/ui/themes/fss-dark.ts +113 -0
  350. package/dist/ui/themes/fss-light.ts +139 -0
  351. package/dist/ui/themes/github-dark.ts +147 -0
  352. package/dist/ui/themes/github-light.ts +149 -0
  353. package/dist/ui/themes/googlecode.ts +146 -0
  354. package/dist/ui/themes/no-color.ts +125 -0
  355. package/dist/ui/themes/qwen-dark.ts +118 -0
  356. package/dist/ui/themes/qwen-light.ts +144 -0
  357. package/dist/ui/themes/semantic-tokens.ts +127 -0
  358. package/dist/ui/themes/shades-of-purple.ts +352 -0
  359. package/dist/ui/themes/theme-manager.test.ts +99 -0
  360. package/dist/ui/themes/theme-manager.ts +257 -0
  361. package/dist/ui/themes/theme.test.ts +97 -0
  362. package/dist/ui/themes/theme.ts +451 -0
  363. package/dist/ui/themes/xcode.ts +154 -0
  364. package/dist/ui/types.ts +255 -0
  365. package/dist/ui/utils/CodeColorizer.tsx +217 -0
  366. package/dist/ui/utils/ConsolePatcher.ts +71 -0
  367. package/dist/ui/utils/InlineMarkdownRenderer.tsx +173 -0
  368. package/dist/ui/utils/MarkdownDisplay.test.tsx +244 -0
  369. package/dist/ui/utils/MarkdownDisplay.tsx +415 -0
  370. package/dist/ui/utils/TableRenderer.tsx +159 -0
  371. package/dist/ui/utils/__snapshots__/MarkdownDisplay.test.tsx.snap +93 -0
  372. package/dist/ui/utils/clipboardUtils.test.ts +76 -0
  373. package/dist/ui/utils/clipboardUtils.ts +149 -0
  374. package/dist/ui/utils/commandUtils.test.ts +384 -0
  375. package/dist/ui/utils/commandUtils.ts +106 -0
  376. package/dist/ui/utils/computeStats.test.ts +292 -0
  377. package/dist/ui/utils/computeStats.ts +86 -0
  378. package/dist/ui/utils/displayUtils.test.ts +58 -0
  379. package/dist/ui/utils/displayUtils.ts +32 -0
  380. package/dist/ui/utils/formatters.test.ts +72 -0
  381. package/dist/ui/utils/formatters.ts +63 -0
  382. package/dist/ui/utils/isNarrowWidth.ts +9 -0
  383. package/dist/ui/utils/kittyProtocolDetector.ts +105 -0
  384. package/dist/ui/utils/markdownUtilities.test.ts +50 -0
  385. package/dist/ui/utils/markdownUtilities.ts +125 -0
  386. package/dist/ui/utils/platformConstants.ts +52 -0
  387. package/dist/ui/utils/terminalSetup.ts +342 -0
  388. package/dist/ui/utils/textUtils.ts +40 -0
  389. package/dist/ui/utils/updateCheck.test.ts +163 -0
  390. package/dist/ui/utils/updateCheck.ts +100 -0
  391. package/dist/utils/checks.ts +28 -0
  392. package/dist/utils/cleanup.test.ts +68 -0
  393. package/dist/utils/cleanup.ts +36 -0
  394. package/dist/utils/dialogScopeUtils.ts +64 -0
  395. package/dist/utils/events.ts +14 -0
  396. package/dist/utils/gitUtils.test.ts +149 -0
  397. package/dist/utils/gitUtils.ts +116 -0
  398. package/dist/utils/handleAutoUpdate.test.ts +272 -0
  399. package/dist/utils/handleAutoUpdate.ts +145 -0
  400. package/dist/utils/installationInfo.test.ts +315 -0
  401. package/dist/utils/installationInfo.ts +176 -0
  402. package/dist/utils/package.ts +38 -0
  403. package/dist/utils/readStdin.ts +51 -0
  404. package/dist/utils/resolvePath.ts +21 -0
  405. package/dist/utils/sandbox-macos-permissive-closed.sb +32 -0
  406. package/dist/utils/sandbox-macos-permissive-open.sb +25 -0
  407. package/dist/utils/sandbox-macos-permissive-proxied.sb +37 -0
  408. package/dist/utils/sandbox-macos-restrictive-closed.sb +93 -0
  409. package/dist/utils/sandbox-macos-restrictive-open.sb +96 -0
  410. package/dist/utils/sandbox-macos-restrictive-proxied.sb +98 -0
  411. package/dist/utils/sandbox.ts +962 -0
  412. package/dist/utils/settingsUtils.test.ts +797 -0
  413. package/dist/utils/settingsUtils.ts +489 -0
  414. package/dist/utils/spawnWrapper.ts +9 -0
  415. package/dist/utils/startupWarnings.test.ts +83 -0
  416. package/dist/utils/startupWarnings.ts +40 -0
  417. package/dist/utils/updateEventEmitter.ts +13 -0
  418. package/dist/utils/userStartupWarnings.test.ts +87 -0
  419. package/dist/utils/userStartupWarnings.ts +69 -0
  420. package/dist/utils/version.ts +12 -0
  421. package/dist/validateNonInterActiveAuth.test.ts +260 -0
  422. package/dist/validateNonInterActiveAuth.ts +51 -0
  423. package/dist/vitest.config.ts +37 -0
  424. package/dist/zed-integration/acp.ts +366 -0
  425. package/dist/zed-integration/fileSystemService.ts +47 -0
  426. package/dist/zed-integration/schema.ts +466 -0
  427. package/dist/zed-integration/zedIntegration.ts +944 -0
  428. package/package.json +2 -2
@@ -0,0 +1,290 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { Box, Text } from 'ink';
8
+ import { RadioButtonSelect } from './shared/RadioButtonSelect.js';
9
+ import { Colors } from '../colors.js';
10
+ import { ProjectSummary } from 'fss-link-core';
11
+ import { useKeypress } from '../hooks/useKeypress.js';
12
+
13
+ /**
14
+ * Props interface for the WelcomeBackDialog component
15
+ */
16
+ export interface WelcomeBackDialogProps {
17
+ /** The project summary containing session data, git status, and activity info */
18
+ projectSummary: ProjectSummary;
19
+ /** Callback when user selects to continue from previous session */
20
+ onContinue: () => void;
21
+ /** Callback when user selects to start a fresh session */
22
+ onRestart: () => void;
23
+ /** Callback when user cancels/exits without starting a session */
24
+ onCancel: () => void;
25
+ }
26
+
27
+ /** Available actions in the Welcome Back dialog */
28
+ export type ResumeAction = 'continue' | 'restart' | 'cancel';
29
+
30
+ /**
31
+ * Welcome Back dialog component using AuthDialog pattern for consistency
32
+ *
33
+ * Displays a comprehensive project status summary including:
34
+ * - Project goal and recent activity
35
+ * - Session history and momentum analysis
36
+ * - Git status with branch info and pending changes
37
+ * - Quick status dashboard with efficiency metrics
38
+ * - Keyboard shortcuts for quick navigation
39
+ *
40
+ * The component follows FSS Link's established UI patterns and provides
41
+ * the user with intelligent context to make informed decisions about
42
+ * how to resume their work.
43
+ */
44
+ export const WelcomeBackDialog = ({
45
+ projectSummary,
46
+ onContinue,
47
+ onRestart,
48
+ onCancel,
49
+ }: WelcomeBackDialogProps) => {
50
+
51
+ // Handle keyboard shortcuts
52
+ useKeypress(
53
+ (key) => {
54
+ const { name, sequence } = key;
55
+ if (name === 'c' || sequence === 'C') {
56
+ onContinue();
57
+ } else if (name === 'r' || sequence === 'R') {
58
+ onRestart();
59
+ } else if (name === 'q' || sequence === 'Q' || name === 'escape') {
60
+ onCancel();
61
+ }
62
+ },
63
+ { isActive: true }
64
+ );
65
+
66
+ const getMomentumEmoji = (momentum: string) => {
67
+ switch (momentum) {
68
+ case 'high': return '🔥';
69
+ case 'building': return '📈';
70
+ case 'stale': return '💤';
71
+ case 'none':
72
+ default: return '📊';
73
+ }
74
+ };
75
+
76
+ const getMomentumColor = (momentum: string) => {
77
+ switch (momentum) {
78
+ case 'high': return Colors.AccentGreen;
79
+ case 'building': return Colors.AccentPurple;
80
+ case 'stale': return Colors.Gray;
81
+ default: return Colors.Foreground;
82
+ }
83
+ };
84
+
85
+ const getEfficiencyEmoji = (efficiency?: string) => {
86
+ switch (efficiency) {
87
+ case 'high': return '💰';
88
+ case 'low': return '⚠️';
89
+ case 'normal':
90
+ default: return '📊';
91
+ }
92
+ };
93
+
94
+ const getEfficiencyColor = (efficiency?: string) => {
95
+ switch (efficiency) {
96
+ case 'high': return Colors.AccentGreen;
97
+ case 'low': return Colors.AccentRed;
98
+ case 'normal':
99
+ default: return Colors.Foreground;
100
+ }
101
+ };
102
+
103
+ const items = [
104
+ {
105
+ label: `Continue Project`,
106
+ value: 'continue' as const,
107
+ description: projectSummary.activeSessions > 0
108
+ ? `Resume from ${projectSummary.timeAgo} (${projectSummary.activeSessions} active sessions)`
109
+ : `Resume from ${projectSummary.timeAgo}`,
110
+ },
111
+ {
112
+ label: 'Start Fresh Session',
113
+ value: 'restart' as const,
114
+ description: 'Begin new work session in this project',
115
+ },
116
+ {
117
+ label: 'Cancel',
118
+ value: 'cancel' as const,
119
+ description: 'Exit without starting session',
120
+ },
121
+ ];
122
+
123
+ const handleSelection = (selection: ResumeAction) => {
124
+ switch (selection) {
125
+ case 'continue':
126
+ onContinue();
127
+ break;
128
+ case 'restart':
129
+ onRestart();
130
+ break;
131
+ case 'cancel':
132
+ onCancel();
133
+ break;
134
+ default:
135
+ // All cases are exhaustively handled above
136
+ break;
137
+ }
138
+ };
139
+
140
+ return (
141
+ <Box flexDirection="column" padding={1}>
142
+ {/* Header */}
143
+ <Box marginBottom={1}>
144
+ <Text bold color={Colors.AccentPurple}>
145
+ Welcome Back to FSS Link
146
+ </Text>
147
+ </Box>
148
+
149
+ {/* Project Status */}
150
+ <Box flexDirection="column" marginBottom={2} paddingX={1}>
151
+ {projectSummary.projectGoal && (
152
+ <Box marginBottom={1}>
153
+ <Text color={Colors.Foreground}>
154
+ <Text bold>Project:</Text> {projectSummary.projectGoal}
155
+ </Text>
156
+ </Box>
157
+ )}
158
+
159
+ <Box flexDirection="row" marginBottom={1}>
160
+ <Text color={Colors.Gray}>Last worked: </Text>
161
+ <Text color={Colors.Foreground}>{projectSummary.timeAgo}</Text>
162
+ </Box>
163
+
164
+ <Box flexDirection="row" marginBottom={1}>
165
+ <Text color={Colors.Gray}>Sessions: </Text>
166
+ <Text color={Colors.Foreground}>{projectSummary.totalSessions}</Text>
167
+ {projectSummary.activeSessions > 0 && (
168
+ <>
169
+ <Text color={Colors.Gray}> (</Text>
170
+ <Text color={Colors.AccentGreen}>{projectSummary.activeSessions} active</Text>
171
+ <Text color={Colors.Gray}>)</Text>
172
+ </>
173
+ )}
174
+ </Box>
175
+
176
+ <Box flexDirection="row" marginBottom={1}>
177
+ <Text color={Colors.Gray}>Momentum: </Text>
178
+ <Text color={getMomentumColor(projectSummary.momentum)}>
179
+ {getMomentumEmoji(projectSummary.momentum)} {projectSummary.momentum}
180
+ </Text>
181
+ </Box>
182
+
183
+ {/* Git Status */}
184
+ {projectSummary.gitStatus && (
185
+ <Box flexDirection="column" marginBottom={1}>
186
+ <Box flexDirection="row" marginBottom={1}>
187
+ <Text color={Colors.Gray}>Branch: </Text>
188
+ <Text color={Colors.AccentBlue}>{projectSummary.gitStatus.branch}</Text>
189
+ {(projectSummary.gitStatus.ahead || projectSummary.gitStatus.behind) && (
190
+ <Text color={Colors.Gray}>
191
+ {' '}[
192
+ {projectSummary.gitStatus.ahead && `↑${projectSummary.gitStatus.ahead}`}
193
+ {projectSummary.gitStatus.ahead && projectSummary.gitStatus.behind && ' '}
194
+ {projectSummary.gitStatus.behind && `↓${projectSummary.gitStatus.behind}`}
195
+ ]
196
+ </Text>
197
+ )}
198
+ </Box>
199
+
200
+ {projectSummary.gitStatus.hasChanges && (
201
+ <Box flexDirection="row" marginBottom={1}>
202
+ <Text color={Colors.Gray}>Changes: </Text>
203
+ {projectSummary.gitStatus.stagedFiles > 0 && (
204
+ <Text color={Colors.AccentGreen}>
205
+ {projectSummary.gitStatus.stagedFiles} staged
206
+ </Text>
207
+ )}
208
+ {projectSummary.gitStatus.stagedFiles > 0 && projectSummary.gitStatus.unstagedFiles > 0 && (
209
+ <Text color={Colors.Gray}>, </Text>
210
+ )}
211
+ {projectSummary.gitStatus.unstagedFiles > 0 && (
212
+ <Text color={Colors.AccentYellow}>
213
+ {projectSummary.gitStatus.unstagedFiles} unstaged
214
+ </Text>
215
+ )}
216
+ </Box>
217
+ )}
218
+
219
+ {projectSummary.gitStatus.lastCommitMessage && (
220
+ <Box flexDirection="row" marginBottom={1}>
221
+ <Text color={Colors.Gray}>Last commit: </Text>
222
+ <Text color={Colors.Foreground}>
223
+ {projectSummary.gitStatus.lastCommitHash} &quot;{projectSummary.gitStatus.lastCommitMessage}&quot;
224
+ </Text>
225
+ </Box>
226
+ )}
227
+ </Box>
228
+ )}
229
+
230
+ {/* Quick Status Dashboard */}
231
+ {(projectSummary.efficiency || projectSummary.recentActivity || projectSummary.tokenEfficiency) && (
232
+ <Box flexDirection="column" marginBottom={1} paddingY={1} borderStyle="single" borderColor={Colors.Gray}>
233
+ <Box marginBottom={1}>
234
+ <Text bold color={Colors.AccentPurple}>Quick Status</Text>
235
+ </Box>
236
+
237
+ {projectSummary.efficiency && (
238
+ <Box flexDirection="row" marginBottom={1}>
239
+ <Text color={getEfficiencyColor(projectSummary.efficiency)}>
240
+ {getEfficiencyEmoji(projectSummary.efficiency)} {projectSummary.efficiency} efficiency
241
+ </Text>
242
+ </Box>
243
+ )}
244
+
245
+ {projectSummary.recentActivity && (
246
+ <Box marginBottom={1}>
247
+ <Text color={Colors.Foreground}>{projectSummary.recentActivity}</Text>
248
+ </Box>
249
+ )}
250
+
251
+ {projectSummary.tokenEfficiency && (
252
+ <Box>
253
+ <Text color={Colors.Gray}>{projectSummary.tokenEfficiency}</Text>
254
+ </Box>
255
+ )}
256
+ </Box>
257
+ )}
258
+
259
+ {projectSummary.nextSuggestion && (
260
+ <Box marginBottom={1}>
261
+ <Text color={Colors.AccentPurple}>
262
+ 💡 {projectSummary.nextSuggestion}
263
+ </Text>
264
+ </Box>
265
+ )}
266
+
267
+ {projectSummary.lastContent && (
268
+ <Box marginBottom={1}>
269
+ <Text color={Colors.Gray}>
270
+ Last message: &quot;{projectSummary.lastContent}&quot;
271
+ </Text>
272
+ </Box>
273
+ )}
274
+ </Box>
275
+
276
+ {/* Selection */}
277
+ <RadioButtonSelect
278
+ items={items}
279
+ onSelect={handleSelection}
280
+ />
281
+
282
+ {/* Help Text */}
283
+ <Box marginTop={1} paddingX={1}>
284
+ <Text color={Colors.Gray}>
285
+ Press C to continue, R to restart, Q to cancel, or use ↑↓ arrows
286
+ </Text>
287
+ </Box>
288
+ </Box>
289
+ );
290
+ };
@@ -0,0 +1,24 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`IDEContextDetailDisplay > handles duplicate basenames by showing path hints 1`] = `
4
+ "
5
+ ╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
6
+ │ VS Code Context (ctrl+g to toggle) │
7
+ │ │
8
+ │ Open files: │
9
+ │ - bar.txt (/foo) (active) │
10
+ │ - bar.txt (/qux) │
11
+ │ - unique.txt │
12
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
13
+ `;
14
+
15
+ exports[`IDEContextDetailDisplay > renders a list of open files with active status 1`] = `
16
+ "
17
+ ╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
18
+ │ VS Code Context (ctrl+g to toggle) │
19
+ │ │
20
+ │ Open files: │
21
+ │ - bar.txt (active) │
22
+ │ - baz.txt │
23
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
24
+ `;
@@ -0,0 +1,121 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`<ModelStatsDisplay /> > should display a single model correctly 1`] = `
4
+ "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
5
+ │ │
6
+ │ Model Stats For Nerds │
7
+ │ │
8
+ │ Metric gemini-2.5-pro │
9
+ │ ────────────────────────────────────────────────────────────────────────────────────────────── │
10
+ │ API │
11
+ │ Requests 1 │
12
+ │ Errors 0 (0.0%) │
13
+ │ Avg Latency 100ms │
14
+ │ │
15
+ │ Tokens │
16
+ │ Total 30 │
17
+ │ ↳ Prompt 10 │
18
+ │ ↳ Cached 5 (50.0%) │
19
+ │ ↳ Thoughts 2 │
20
+ │ ↳ Tool 1 │
21
+ │ ↳ Output 20 │
22
+ │ │
23
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
24
+ `;
25
+
26
+ exports[`<ModelStatsDisplay /> > should display conditional rows if at least one model has data 1`] = `
27
+ "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
28
+ │ │
29
+ │ Model Stats For Nerds │
30
+ │ │
31
+ │ Metric gemini-2.5-pro gemini-2.5-flash │
32
+ │ ────────────────────────────────────────────────────────────────────────────────────────────── │
33
+ │ API │
34
+ │ Requests 1 1 │
35
+ │ Errors 0 (0.0%) 0 (0.0%) │
36
+ │ Avg Latency 100ms 50ms │
37
+ │ │
38
+ │ Tokens │
39
+ │ Total 30 15 │
40
+ │ ↳ Prompt 10 5 │
41
+ │ ↳ Cached 5 (50.0%) 0 (0.0%) │
42
+ │ ↳ Thoughts 2 0 │
43
+ │ ↳ Tool 0 3 │
44
+ │ ↳ Output 20 10 │
45
+ │ │
46
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
47
+ `;
48
+
49
+ exports[`<ModelStatsDisplay /> > should display stats for multiple models correctly 1`] = `
50
+ "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
51
+ │ │
52
+ │ Model Stats For Nerds │
53
+ │ │
54
+ │ Metric gemini-2.5-pro gemini-2.5-flash │
55
+ │ ────────────────────────────────────────────────────────────────────────────────────────────── │
56
+ │ API │
57
+ │ Requests 10 20 │
58
+ │ Errors 1 (10.0%) 2 (10.0%) │
59
+ │ Avg Latency 100ms 25ms │
60
+ │ │
61
+ │ Tokens │
62
+ │ Total 300 600 │
63
+ │ ↳ Prompt 100 200 │
64
+ │ ↳ Cached 50 (50.0%) 100 (50.0%) │
65
+ │ ↳ Thoughts 10 20 │
66
+ │ ↳ Tool 5 10 │
67
+ │ ↳ Output 200 400 │
68
+ │ │
69
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
70
+ `;
71
+
72
+ exports[`<ModelStatsDisplay /> > should handle large values without wrapping or overlapping 1`] = `
73
+ "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
74
+ │ │
75
+ │ Model Stats For Nerds │
76
+ │ │
77
+ │ Metric gemini-2.5-pro │
78
+ │ ────────────────────────────────────────────────────────────────────────────────────────────── │
79
+ │ API │
80
+ │ Requests 999,999,999 │
81
+ │ Errors 123,456,789 (12.3%) │
82
+ │ Avg Latency 0ms │
83
+ │ │
84
+ │ Tokens │
85
+ │ Total 999,999,999 │
86
+ │ ↳ Prompt 987,654,321 │
87
+ │ ↳ Cached 123,456,789 (12.5%) │
88
+ │ ↳ Thoughts 111,111,111 │
89
+ │ ↳ Tool 222,222,222 │
90
+ │ ↳ Output 123,456,789 │
91
+ │ │
92
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
93
+ `;
94
+
95
+ exports[`<ModelStatsDisplay /> > should not display conditional rows if no model has data for them 1`] = `
96
+ "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
97
+ │ │
98
+ │ Model Stats For Nerds │
99
+ │ │
100
+ │ Metric gemini-2.5-pro │
101
+ │ ────────────────────────────────────────────────────────────────────────────────────────────── │
102
+ │ API │
103
+ │ Requests 1 │
104
+ │ Errors 0 (0.0%) │
105
+ │ Avg Latency 100ms │
106
+ │ │
107
+ │ Tokens │
108
+ │ Total 30 │
109
+ │ ↳ Prompt 10 │
110
+ │ ↳ Output 20 │
111
+ │ │
112
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
113
+ `;
114
+
115
+ exports[`<ModelStatsDisplay /> > should render "no API calls" message when there are no active models 1`] = `
116
+ "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
117
+ │ │
118
+ │ No API calls have been made in this session. │
119
+ │ │
120
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
121
+ `;
@@ -0,0 +1,30 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`<SessionSummaryDisplay /> > renders the summary display with a title 1`] = `
4
+ "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
5
+ │ │
6
+ │ Agent powering down. Goodbye! │
7
+ │ │
8
+ │ Interaction Summary │
9
+ │ Session ID: │
10
+ │ Tool Calls: 0 ( ✔ 0 ✖ 0 ) │
11
+ │ Success Rate: 0.0% │
12
+ │ Code Changes: +42 -15 │
13
+ │ │
14
+ │ Performance │
15
+ │ Wall Time: 1h 23m 45s │
16
+ │ Agent Active: 50.2s │
17
+ │ » API Time: 50.2s (100.0%) │
18
+ │ » Tool Time: 0s (0.0%) │
19
+ │ │
20
+ │ │
21
+ │ Model Usage Reqs Input Tokens Output Tokens │
22
+ │ ─────────────────────────────────────────────────────────────── │
23
+ │ gemini-2.5-pro 10 1,000 2,000 │
24
+ │ │
25
+ │ Savings Highlight: 500 (50.0%) of input tokens were served from the cache, reducing costs. │
26
+ │ │
27
+ │ » Tip: For a full token breakdown, run \`/stats model\`. │
28
+ │ │
29
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
30
+ `;
@@ -0,0 +1,21 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`ShellConfirmationDialog > renders correctly 1`] = `
4
+ " ╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
5
+ │ │
6
+ │ Shell Command Execution │
7
+ │ A custom command wants to run the following shell commands: │
8
+ │ │
9
+ │ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │
10
+ │ │ ls -la │ │
11
+ │ │ echo "hello" │ │
12
+ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
13
+ │ │
14
+ │ Do you want to proceed? │
15
+ │ │
16
+ │ ● 1. Yes, allow once │
17
+ │ 2. Yes, allow always for this session │
18
+ │ 3. No (esc) │
19
+ │ │
20
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
21
+ `;