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,204 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { type ReactNode } from 'react';
8
+ import { Content } from '@google/genai';
9
+ import { HistoryItemWithoutId } from '../types.js';
10
+ import { Config, GitService, Logger } from 'fss-link-core';
11
+ import { LoadedSettings } from '../../config/settings.js';
12
+ import { UseHistoryManagerReturn } from '../hooks/useHistoryManager.js';
13
+ import type { HistoryItem } from '../types.js';
14
+ import { SessionStatsState } from '../contexts/SessionContext.js';
15
+
16
+ // Grouped dependencies for clarity and easier mocking
17
+ export interface CommandContext {
18
+ // Invocation properties for when commands are called.
19
+ invocation?: {
20
+ /** The raw, untrimmed input string from the user. */
21
+ raw: string;
22
+ /** The primary name of the command that was matched. */
23
+ name: string;
24
+ /** The arguments string that follows the command name. */
25
+ args: string;
26
+ };
27
+ // Core services and configuration
28
+ services: {
29
+ // TODO(abhipatel12): Ensure that config is never null.
30
+ config: Config | null;
31
+ settings: LoadedSettings;
32
+ git: GitService | undefined;
33
+ logger: Logger;
34
+ };
35
+ // UI state and history management
36
+ ui: {
37
+ /** Adds a new item to the history display. */
38
+ addItem: UseHistoryManagerReturn['addItem'];
39
+ /** Clears all history items and the console screen. */
40
+ clear: () => void;
41
+ /**
42
+ * Sets the transient debug message displayed in the application footer in debug mode.
43
+ */
44
+ setDebugMessage: (message: string) => void;
45
+ /** The currently pending history item, if any. */
46
+ pendingItem: HistoryItemWithoutId | null;
47
+ /**
48
+ * Sets a pending item in the history, which is useful for indicating
49
+ * that a long-running operation is in progress.
50
+ *
51
+ * @param item The history item to display as pending, or `null` to clear.
52
+ */
53
+ setPendingItem: (item: HistoryItemWithoutId | null) => void;
54
+ /**
55
+ * Loads a new set of history items, replacing the current history.
56
+ *
57
+ * @param history The array of history items to load.
58
+ */
59
+ loadHistory: UseHistoryManagerReturn['loadHistory'];
60
+ /** Toggles a special display mode. */
61
+ toggleCorgiMode: () => void;
62
+ toggleVimEnabled: () => Promise<boolean>;
63
+ setGeminiMdFileCount: (count: number) => void;
64
+ reloadCommands: () => void;
65
+ /** Set the TTS voice for the current session */
66
+ setTtsVoice: (voice: string) => void;
67
+ /** Enable or disable TTS for the current session */
68
+ setTtsEnabled: (enabled: boolean) => void;
69
+ };
70
+ // Session-specific data
71
+ session: {
72
+ stats: SessionStatsState;
73
+ /** A transient list of shell commands the user has approved for this session. */
74
+ sessionShellAllowlist: Set<string>;
75
+ /** TTS voice selection for this session */
76
+ ttsVoice?: string;
77
+ /** Whether TTS is enabled for this session */
78
+ ttsEnabled?: boolean;
79
+ };
80
+ // Flag to indicate if an overwrite has been confirmed
81
+ overwriteConfirmed?: boolean;
82
+ }
83
+
84
+ /**
85
+ * The return type for a command action that results in scheduling a tool call.
86
+ */
87
+ export interface ToolActionReturn {
88
+ type: 'tool';
89
+ toolName: string;
90
+ toolArgs: Record<string, unknown>;
91
+ }
92
+
93
+ /** The return type for a command action that results in the app quitting. */
94
+ export interface QuitActionReturn {
95
+ type: 'quit';
96
+ messages: HistoryItem[];
97
+ }
98
+
99
+ /**
100
+ * The return type for a command action that results in a simple message
101
+ * being displayed to the user.
102
+ */
103
+ export interface MessageActionReturn {
104
+ type: 'message';
105
+ messageType: 'info' | 'error';
106
+ content: string;
107
+ }
108
+
109
+ /**
110
+ * The return type for a command action that needs to open a dialog.
111
+ */
112
+ export interface OpenDialogActionReturn {
113
+ type: 'dialog';
114
+
115
+ dialog: 'help' | 'auth' | 'theme' | 'editor' | 'privacy' | 'settings' | 'search';
116
+ }
117
+
118
+ /**
119
+ * The return type for a command action that results in replacing
120
+ * the entire conversation history.
121
+ */
122
+ export interface LoadHistoryActionReturn {
123
+ type: 'load_history';
124
+ history: HistoryItemWithoutId[];
125
+ clientHistory: Content[]; // The history for the generative client
126
+ }
127
+
128
+ /**
129
+ * The return type for a command action that should immediately submit
130
+ * content as a prompt to the Gemini model.
131
+ */
132
+ export interface SubmitPromptActionReturn {
133
+ type: 'submit_prompt';
134
+ content: string;
135
+ }
136
+
137
+ /**
138
+ * The return type for a command action that needs to pause and request
139
+ * confirmation for a set of shell commands before proceeding.
140
+ */
141
+ export interface ConfirmShellCommandsActionReturn {
142
+ type: 'confirm_shell_commands';
143
+ /** The list of shell commands that require user confirmation. */
144
+ commandsToConfirm: string[];
145
+ /** The original invocation context to be re-run after confirmation. */
146
+ originalInvocation: {
147
+ raw: string;
148
+ };
149
+ }
150
+
151
+ export interface ConfirmActionReturn {
152
+ type: 'confirm_action';
153
+ /** The React node to display as the confirmation prompt. */
154
+ prompt: ReactNode;
155
+ /** The original invocation context to be re-run after confirmation. */
156
+ originalInvocation: {
157
+ raw: string;
158
+ };
159
+ }
160
+
161
+ export type SlashCommandActionReturn =
162
+ | ToolActionReturn
163
+ | MessageActionReturn
164
+ | QuitActionReturn
165
+ | OpenDialogActionReturn
166
+ | LoadHistoryActionReturn
167
+ | SubmitPromptActionReturn
168
+ | ConfirmShellCommandsActionReturn
169
+ | ConfirmActionReturn;
170
+
171
+ export enum CommandKind {
172
+ BUILT_IN = 'built-in',
173
+ FILE = 'file',
174
+ MCP_PROMPT = 'mcp-prompt',
175
+ }
176
+
177
+ // The standardized contract for any command in the system.
178
+ export interface SlashCommand {
179
+ name: string;
180
+ altNames?: string[];
181
+ description: string;
182
+
183
+ kind: CommandKind;
184
+
185
+ // Optional metadata for extension commands
186
+ extensionName?: string;
187
+
188
+ // The action to run. Optional for parent commands that only group sub-commands.
189
+ action?: (
190
+ context: CommandContext,
191
+ args: string, // TODO: Remove args. CommandContext now contains the complete invocation.
192
+ ) =>
193
+ | void
194
+ | SlashCommandActionReturn
195
+ | Promise<void | SlashCommandActionReturn>;
196
+
197
+ // Provides argument completion (e.g., completing a tag for `/chat resume <tag>`).
198
+ completion?: (
199
+ context: CommandContext,
200
+ partialArg: string,
201
+ ) => Promise<string[]>;
202
+
203
+ subCommands?: SlashCommand[];
204
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { CommandKind, SlashCommand } from './types.js';
8
+
9
+ export const vimCommand: SlashCommand = {
10
+ name: 'vim',
11
+ description: 'toggle vim mode on/off',
12
+ kind: CommandKind.BUILT_IN,
13
+ action: async (context, _args) => {
14
+ const newVimState = await context.ui.toggleVimEnabled();
15
+
16
+ const message = newVimState
17
+ ? 'Entered Vim mode. Run /vim again to exit.'
18
+ : 'Exited Vim mode.';
19
+ return {
20
+ type: 'message',
21
+ messageType: 'info',
22
+ content: message,
23
+ };
24
+ },
25
+ };
@@ -0,0 +1,125 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { CommandKind, SlashCommand } from './types.js';
8
+ import { MessageType } from '../types.js';
9
+
10
+ const AVAILABLE_VOICES = [
11
+ 'Bella',
12
+ 'Emma',
13
+ 'George',
14
+ 'Lewis',
15
+ 'Sarah',
16
+ 'Michael'
17
+ ];
18
+
19
+ export const voiceCommand: SlashCommand = {
20
+ name: 'voice',
21
+ description: 'set TTS voice',
22
+ kind: CommandKind.BUILT_IN,
23
+ action: async (context, args) => {
24
+ const voiceName = args.trim();
25
+
26
+ // Show available voices if no argument
27
+ if (!voiceName) {
28
+ const currentVoice = context.session.ttsVoice || 'Bella';
29
+
30
+ // Voice personality emojis and descriptions
31
+ const voiceDetails: Record<string, {emoji: string, description: string}> = {
32
+ 'Bella': { emoji: '👩‍💼', description: 'Warm, supportive colleague' },
33
+ 'Emma': { emoji: '👩‍🎨', description: 'Versatile development specialist' },
34
+ 'George': { emoji: '👨‍🔧', description: 'Casual Australian practical mate' },
35
+ 'Lewis': { emoji: '👨‍💻', description: 'Enthusiastic technical consultant' },
36
+ 'Sarah': { emoji: '👩‍🏫', description: 'Accessibility-focused clear communication' },
37
+ 'Michael': { emoji: '👨‍⚖️', description: 'Technical precision professional' }
38
+ };
39
+
40
+ // Header with FSS Link styling
41
+ let message = `┌─────────────────────────────────┐\n`;
42
+ message += `│ 🎙️ Voice Selection │\n`;
43
+ message += `└─────────────────────────────────┘\n\n`;
44
+
45
+ // Current voice status
46
+ message += `Current Voice:\n`;
47
+ message += ` ${voiceDetails[currentVoice]?.emoji || '🗣️'} ${currentVoice} - ${voiceDetails[currentVoice]?.description || 'Standard voice'}\n\n`;
48
+
49
+ message += `Available Voices:\n`;
50
+
51
+ AVAILABLE_VOICES.forEach((voice, _index) => {
52
+ const details = voiceDetails[voice];
53
+ const marker = voice === currentVoice ? '▶' : ' ';
54
+ const emoji = details?.emoji || '🗣️';
55
+ const desc = details?.description || 'Standard voice';
56
+ message += `${marker} ${emoji} ${voice} - ${desc}\n`;
57
+ });
58
+
59
+ message += `\n┌─────────────────────────────────────────────────────────┐\n`;
60
+ message += `│ Usage: /voice <VoiceName> │\n`;
61
+ message += `│ Test: /speak "Hello, this is my new voice!" │\n`;
62
+ message += `└─────────────────────────────────────────────────────────┘`;
63
+
64
+ context.ui.addItem(
65
+ {
66
+ type: MessageType.INFO,
67
+ text: message,
68
+ },
69
+ Date.now()
70
+ );
71
+ return;
72
+ }
73
+
74
+ // Validate voice name
75
+ const voice = AVAILABLE_VOICES.find(v =>
76
+ v.toLowerCase() === voiceName.toLowerCase()
77
+ );
78
+
79
+ if (!voice) {
80
+ context.ui.addItem(
81
+ {
82
+ type: MessageType.ERROR,
83
+ text: `❌ Unknown voice: ${voiceName}\nAvailable: ${AVAILABLE_VOICES.join(', ')}`,
84
+ },
85
+ Date.now()
86
+ );
87
+ return;
88
+ }
89
+
90
+ // Set voice using setter
91
+ context.ui.setTtsVoice(voice);
92
+
93
+ // Rich confirmation with voice details
94
+ const voiceDetails: Record<string, {emoji: string, description: string}> = {
95
+ 'Bella': { emoji: '👩‍💼', description: 'Warm, supportive colleague' },
96
+ 'Emma': { emoji: '👩‍🎨', description: 'Versatile development specialist' },
97
+ 'George': { emoji: '👨‍🔧', description: 'Casual Australian practical mate' },
98
+ 'Lewis': { emoji: '👨‍💻', description: 'Enthusiastic technical consultant' },
99
+ 'Sarah': { emoji: '👩‍🏫', description: 'Accessibility-focused clear communication' },
100
+ 'Michael': { emoji: '👨‍⚖️', description: 'Technical precision professional' }
101
+ };
102
+
103
+ const details = voiceDetails[voice];
104
+ let confirmation = `┌─────────────────────────────────┐\n`;
105
+ confirmation += `│ 🎙️ Voice Changed Successfully │\n`;
106
+ confirmation += `└─────────────────────────────────┘\n\n`;
107
+ confirmation += `${details?.emoji || '🗣️'} Now using: ${voice}\n`;
108
+ confirmation += `${details?.description || 'Standard voice'}\n\n`;
109
+ confirmation += `💡 Test: /speak "Hello, this is my new voice!"`;
110
+
111
+ context.ui.addItem(
112
+ {
113
+ type: MessageType.INFO,
114
+ text: confirmation,
115
+ },
116
+ Date.now()
117
+ );
118
+ },
119
+
120
+ completion: async (context, partialArg) =>
121
+ // Provide voice name completion
122
+ AVAILABLE_VOICES.filter(voice =>
123
+ voice.toLowerCase().startsWith(partialArg.toLowerCase())
124
+ ),
125
+ };
@@ -0,0 +1,133 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import React from 'react';
8
+ import { Box, Text } from 'ink';
9
+ import { Colors } from '../colors.js';
10
+ import { GIT_COMMIT_INFO } from '../../generated/git-commit.js';
11
+
12
+ interface AboutBoxProps {
13
+ cliVersion: string;
14
+ osVersion: string;
15
+ sandboxEnv: string;
16
+ modelVersion: string;
17
+ selectedAuthType: string;
18
+ gcpProject: string;
19
+ ideClient: string;
20
+ }
21
+
22
+ export const AboutBox: React.FC<AboutBoxProps> = ({
23
+ cliVersion,
24
+ osVersion,
25
+ sandboxEnv,
26
+ modelVersion,
27
+ selectedAuthType,
28
+ gcpProject,
29
+ ideClient,
30
+ }) => (
31
+ <Box
32
+ borderStyle="round"
33
+ borderColor={Colors.Gray}
34
+ flexDirection="column"
35
+ padding={1}
36
+ marginY={1}
37
+ width="100%"
38
+ >
39
+ <Box marginBottom={1}>
40
+ <Text bold color={Colors.AccentPurple}>
41
+ About FSS Link
42
+ </Text>
43
+ </Box>
44
+ <Box flexDirection="row">
45
+ <Box width="35%">
46
+ <Text bold color={Colors.LightBlue}>
47
+ CLI Version
48
+ </Text>
49
+ </Box>
50
+ <Box>
51
+ <Text>{cliVersion}</Text>
52
+ </Box>
53
+ </Box>
54
+ {GIT_COMMIT_INFO && !['N/A'].includes(GIT_COMMIT_INFO) && (
55
+ <Box flexDirection="row">
56
+ <Box width="35%">
57
+ <Text bold color={Colors.LightBlue}>
58
+ Git Commit
59
+ </Text>
60
+ </Box>
61
+ <Box>
62
+ <Text>{GIT_COMMIT_INFO}</Text>
63
+ </Box>
64
+ </Box>
65
+ )}
66
+ <Box flexDirection="row">
67
+ <Box width="35%">
68
+ <Text bold color={Colors.LightBlue}>
69
+ Model
70
+ </Text>
71
+ </Box>
72
+ <Box>
73
+ <Text>{modelVersion}</Text>
74
+ </Box>
75
+ </Box>
76
+ <Box flexDirection="row">
77
+ <Box width="35%">
78
+ <Text bold color={Colors.LightBlue}>
79
+ Sandbox
80
+ </Text>
81
+ </Box>
82
+ <Box>
83
+ <Text>{sandboxEnv}</Text>
84
+ </Box>
85
+ </Box>
86
+ <Box flexDirection="row">
87
+ <Box width="35%">
88
+ <Text bold color={Colors.LightBlue}>
89
+ OS
90
+ </Text>
91
+ </Box>
92
+ <Box>
93
+ <Text>{osVersion}</Text>
94
+ </Box>
95
+ </Box>
96
+ <Box flexDirection="row">
97
+ <Box width="35%">
98
+ <Text bold color={Colors.LightBlue}>
99
+ Auth Method
100
+ </Text>
101
+ </Box>
102
+ <Box>
103
+ <Text>
104
+ {selectedAuthType.startsWith('oauth') ? 'OAuth' : selectedAuthType}
105
+ </Text>
106
+ </Box>
107
+ </Box>
108
+ {gcpProject && (
109
+ <Box flexDirection="row">
110
+ <Box width="35%">
111
+ <Text bold color={Colors.LightBlue}>
112
+ GCP Project
113
+ </Text>
114
+ </Box>
115
+ <Box>
116
+ <Text>{gcpProject}</Text>
117
+ </Box>
118
+ </Box>
119
+ )}
120
+ {ideClient && (
121
+ <Box flexDirection="row">
122
+ <Box width="35%">
123
+ <Text bold color={Colors.LightBlue}>
124
+ IDE Client
125
+ </Text>
126
+ </Box>
127
+ <Box>
128
+ <Text>{ideClient}</Text>
129
+ </Box>
130
+ </Box>
131
+ )}
132
+ </Box>
133
+ );
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ export const shortAsciiLogo = `
8
+ ███████╗███████╗███████╗
9
+ ██╔════╝██╔════╝██╔════╝
10
+ █████╗ ███████╗███████╗
11
+ ██╔══╝ ╚════██║╚════██║
12
+ ██║ ███████║███████║
13
+ ╚═╝ ╚══════╝╚══════╝
14
+
15
+ ██╗ ██╗███╗ ██╗██╗ ██╗
16
+ ██║ ██║████╗ ██║██║ ██╔╝
17
+ ██║ ██║██╔██╗ ██║█████╔╝
18
+ ██║ ██║██║╚██╗██║██╔═██╗
19
+ ███████╗██║██║ ╚████║██║ ██╗
20
+ ╚══════╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝
21
+ `;
22
+ export const longAsciiLogo = `
23
+ ╔════════════════════════════════╗
24
+ ║ ║
25
+ ║ ███████╗███████╗███████╗ ║
26
+ ║ ██╔════╝██╔════╝██╔════╝ ║
27
+ ║ █████╗ ███████╗███████╗ ║
28
+ ║ ██╔══╝ ╚════██║╚════██║ ║
29
+ ║ ██║ ███████║███████║ ║
30
+ ║ ╚═╝ ╚══════╝╚══════╝ ║
31
+ ║ ║
32
+ ║ ██╗ ██╗███╗ ██╗██╗ ██╗ ║
33
+ ║ ██║ ██║████╗ ██║██║ ██╔╝ ║
34
+ ║ ██║ ██║██╔██╗ ██║█████╔╝ ║
35
+ ║ ██║ ██║██║╚██╗██║██╔═██╗ ║
36
+ ║ ███████╗██║██║ ╚████║██║ ██╗ ║
37
+ ║ ╚══════╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ║
38
+ ║ ║
39
+ ╚════════════════════════════════╝
40
+ `;
41
+
42
+ export const tinyAsciiLogo = `
43
+ ███████ ███████ ███████
44
+ ██ ██ ██
45
+ █████ ███████ ███████
46
+ ██ ██ ██
47
+ ██ ███████ ███████
48
+
49
+ ██ ██ ███ ██ ██ ██
50
+ ██ ██ ████ ██ ██ ██
51
+ ██ ██ ██ ████ █████
52
+ ██ ██ ██ ███ ██ ██
53
+ ███████ ██ ██ ██ ██ ██
54
+ `;