@vybestack/llxprt-code 0.1.12

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 (575) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +256 -0
  3. package/dist/.last_build +0 -0
  4. package/dist/index.d.ts +7 -0
  5. package/dist/index.js +21 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/package.json +95 -0
  8. package/dist/src/config/auth.d.ts +6 -0
  9. package/dist/src/config/auth.js +42 -0
  10. package/dist/src/config/auth.js.map +1 -0
  11. package/dist/src/config/config.d.ts +41 -0
  12. package/dist/src/config/config.js +345 -0
  13. package/dist/src/config/config.js.map +1 -0
  14. package/dist/src/config/extension.d.ts +21 -0
  15. package/dist/src/config/extension.js +109 -0
  16. package/dist/src/config/extension.js.map +1 -0
  17. package/dist/src/config/sandboxConfig.d.ts +13 -0
  18. package/dist/src/config/sandboxConfig.js +75 -0
  19. package/dist/src/config/sandboxConfig.js.map +1 -0
  20. package/dist/src/config/settings.d.ts +88 -0
  21. package/dist/src/config/settings.js +263 -0
  22. package/dist/src/config/settings.js.map +1 -0
  23. package/dist/src/gemini.d.ts +6 -0
  24. package/dist/src/gemini.js +420 -0
  25. package/dist/src/gemini.js.map +1 -0
  26. package/dist/src/generated/git-commit.d.ts +6 -0
  27. package/dist/src/generated/git-commit.js +9 -0
  28. package/dist/src/generated/git-commit.js.map +1 -0
  29. package/dist/src/nonInteractiveCli.d.ts +7 -0
  30. package/dist/src/nonInteractiveCli.js +131 -0
  31. package/dist/src/nonInteractiveCli.js.map +1 -0
  32. package/dist/src/providers/IMessage.d.ts +38 -0
  33. package/dist/src/providers/IMessage.js +17 -0
  34. package/dist/src/providers/IMessage.js.map +1 -0
  35. package/dist/src/providers/IModel.d.ts +23 -0
  36. package/dist/src/providers/IModel.js +17 -0
  37. package/dist/src/providers/IModel.js.map +1 -0
  38. package/dist/src/providers/IProvider.d.ts +32 -0
  39. package/dist/src/providers/IProvider.js +17 -0
  40. package/dist/src/providers/IProvider.js.map +1 -0
  41. package/dist/src/providers/ITool.d.ts +23 -0
  42. package/dist/src/providers/ITool.js +17 -0
  43. package/dist/src/providers/ITool.js.map +1 -0
  44. package/dist/src/providers/ProviderAwareContentGenerator.d.ts +6 -0
  45. package/dist/src/providers/ProviderAwareContentGenerator.js +9 -0
  46. package/dist/src/providers/ProviderAwareContentGenerator.js.map +1 -0
  47. package/dist/src/providers/ProviderManager.d.ts +19 -0
  48. package/dist/src/providers/ProviderManager.js +63 -0
  49. package/dist/src/providers/ProviderManager.js.map +1 -0
  50. package/dist/src/providers/ProviderManagerAdapter.d.ts +17 -0
  51. package/dist/src/providers/ProviderManagerAdapter.js +113 -0
  52. package/dist/src/providers/ProviderManagerAdapter.js.map +1 -0
  53. package/dist/src/providers/README-qwen3.md +60 -0
  54. package/dist/src/providers/README.md +203 -0
  55. package/dist/src/providers/adapters/IStreamAdapter.d.ts +18 -0
  56. package/dist/src/providers/adapters/IStreamAdapter.js +7 -0
  57. package/dist/src/providers/adapters/IStreamAdapter.js.map +1 -0
  58. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +46 -0
  59. package/dist/src/providers/anthropic/AnthropicProvider.js +478 -0
  60. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -0
  61. package/dist/src/providers/contentGeneratorProvider.d.ts +13 -0
  62. package/dist/src/providers/contentGeneratorProvider.js +17 -0
  63. package/dist/src/providers/contentGeneratorProvider.js.map +1 -0
  64. package/dist/src/providers/enhanceConfigWithProviders.d.ts +12 -0
  65. package/dist/src/providers/enhanceConfigWithProviders.js +16 -0
  66. package/dist/src/providers/enhanceConfigWithProviders.js.map +1 -0
  67. package/dist/src/providers/gemini/GeminiProvider.d.ts +72 -0
  68. package/dist/src/providers/gemini/GeminiProvider.js +454 -0
  69. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -0
  70. package/dist/src/providers/index.d.ts +13 -0
  71. package/dist/src/providers/index.js +18 -0
  72. package/dist/src/providers/index.js.map +1 -0
  73. package/dist/src/providers/integration/TEST_INSTRUCTIONS.md +197 -0
  74. package/dist/src/providers/openai/ConversationCache.d.ts +20 -0
  75. package/dist/src/providers/openai/ConversationCache.js +109 -0
  76. package/dist/src/providers/openai/ConversationCache.js.map +1 -0
  77. package/dist/src/providers/openai/IChatGenerateParams.d.ts +11 -0
  78. package/dist/src/providers/openai/IChatGenerateParams.js +2 -0
  79. package/dist/src/providers/openai/IChatGenerateParams.js.map +1 -0
  80. package/dist/src/providers/openai/OpenAIProvider.d.ts +71 -0
  81. package/dist/src/providers/openai/OpenAIProvider.js +486 -0
  82. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -0
  83. package/dist/src/providers/openai/Qwen3FireworksProvider.d.ts +39 -0
  84. package/dist/src/providers/openai/Qwen3FireworksProvider.js +209 -0
  85. package/dist/src/providers/openai/Qwen3FireworksProvider.js.map +1 -0
  86. package/dist/src/providers/openai/RESPONSES_API_MODELS.d.ts +2 -0
  87. package/dist/src/providers/openai/RESPONSES_API_MODELS.js +14 -0
  88. package/dist/src/providers/openai/RESPONSES_API_MODELS.js.map +1 -0
  89. package/dist/src/providers/openai/buildResponsesRequest.d.ts +67 -0
  90. package/dist/src/providers/openai/buildResponsesRequest.js +144 -0
  91. package/dist/src/providers/openai/buildResponsesRequest.js.map +1 -0
  92. package/dist/src/providers/openai/docs/accessing-provider-info.md +172 -0
  93. package/dist/src/providers/openai/docs/params-mapping.md +91 -0
  94. package/dist/src/providers/openai/docs/qwen3-fireworks.md +47 -0
  95. package/dist/src/providers/openai/docs/responses-api-tool-calls.md +96 -0
  96. package/dist/src/providers/openai/estimateRemoteTokens.d.ts +26 -0
  97. package/dist/src/providers/openai/estimateRemoteTokens.js +75 -0
  98. package/dist/src/providers/openai/estimateRemoteTokens.js.map +1 -0
  99. package/dist/src/providers/openai/getOpenAIProviderInfo.d.ts +46 -0
  100. package/dist/src/providers/openai/getOpenAIProviderInfo.js +74 -0
  101. package/dist/src/providers/openai/getOpenAIProviderInfo.js.map +1 -0
  102. package/dist/src/providers/openai/parseResponsesStream.d.ts +3 -0
  103. package/dist/src/providers/openai/parseResponsesStream.js +444 -0
  104. package/dist/src/providers/openai/parseResponsesStream.js.map +1 -0
  105. package/dist/src/providers/parsers/TextToolCallParser.d.ts +35 -0
  106. package/dist/src/providers/parsers/TextToolCallParser.js +248 -0
  107. package/dist/src/providers/parsers/TextToolCallParser.js.map +1 -0
  108. package/dist/src/providers/providerConfigUtils.d.ts +26 -0
  109. package/dist/src/providers/providerConfigUtils.js +173 -0
  110. package/dist/src/providers/providerConfigUtils.js.map +1 -0
  111. package/dist/src/providers/providerManagerInstance.d.ts +9 -0
  112. package/dist/src/providers/providerManagerInstance.js +109 -0
  113. package/dist/src/providers/providerManagerInstance.js.map +1 -0
  114. package/dist/src/providers/tokenizers/AnthropicTokenizer.d.ts +19 -0
  115. package/dist/src/providers/tokenizers/AnthropicTokenizer.js +37 -0
  116. package/dist/src/providers/tokenizers/AnthropicTokenizer.js.map +1 -0
  117. package/dist/src/providers/tokenizers/ITokenizer.d.ts +18 -0
  118. package/dist/src/providers/tokenizers/ITokenizer.js +17 -0
  119. package/dist/src/providers/tokenizers/ITokenizer.js.map +1 -0
  120. package/dist/src/providers/tokenizers/OpenAITokenizer.d.ts +24 -0
  121. package/dist/src/providers/tokenizers/OpenAITokenizer.js +56 -0
  122. package/dist/src/providers/tokenizers/OpenAITokenizer.js.map +1 -0
  123. package/dist/src/providers/types.d.ts +14 -0
  124. package/dist/src/providers/types.js +16 -0
  125. package/dist/src/providers/types.js.map +1 -0
  126. package/dist/src/services/CommandService.d.ts +13 -0
  127. package/dist/src/services/CommandService.js +38 -0
  128. package/dist/src/services/CommandService.js.map +1 -0
  129. package/dist/src/tools/IToolFormatter.d.ts +40 -0
  130. package/dist/src/tools/IToolFormatter.js +17 -0
  131. package/dist/src/tools/IToolFormatter.js.map +1 -0
  132. package/dist/src/tools/ToolFormatter.d.ts +45 -0
  133. package/dist/src/tools/ToolFormatter.js +216 -0
  134. package/dist/src/tools/ToolFormatter.js.map +1 -0
  135. package/dist/src/ui/App.d.ts +15 -0
  136. package/dist/src/ui/App.js +468 -0
  137. package/dist/src/ui/App.js.map +1 -0
  138. package/dist/src/ui/colors.d.ts +25 -0
  139. package/dist/src/ui/colors.js +126 -0
  140. package/dist/src/ui/colors.js.map +1 -0
  141. package/dist/src/ui/commands/aboutCommand.d.ts +7 -0
  142. package/dist/src/ui/commands/aboutCommand.js +61 -0
  143. package/dist/src/ui/commands/aboutCommand.js.map +1 -0
  144. package/dist/src/ui/commands/authCommand.d.ts +7 -0
  145. package/dist/src/ui/commands/authCommand.js +14 -0
  146. package/dist/src/ui/commands/authCommand.js.map +1 -0
  147. package/dist/src/ui/commands/clearCommand.d.ts +7 -0
  148. package/dist/src/ui/commands/clearCommand.js +15 -0
  149. package/dist/src/ui/commands/clearCommand.js.map +1 -0
  150. package/dist/src/ui/commands/helpCommand.d.ts +7 -0
  151. package/dist/src/ui/commands/helpCommand.js +18 -0
  152. package/dist/src/ui/commands/helpCommand.js.map +1 -0
  153. package/dist/src/ui/commands/memoryCommand.d.ts +7 -0
  154. package/dist/src/ui/commands/memoryCommand.js +81 -0
  155. package/dist/src/ui/commands/memoryCommand.js.map +1 -0
  156. package/dist/src/ui/commands/privacyCommand.d.ts +7 -0
  157. package/dist/src/ui/commands/privacyCommand.js +14 -0
  158. package/dist/src/ui/commands/privacyCommand.js.map +1 -0
  159. package/dist/src/ui/commands/themeCommand.d.ts +7 -0
  160. package/dist/src/ui/commands/themeCommand.js +14 -0
  161. package/dist/src/ui/commands/themeCommand.js.map +1 -0
  162. package/dist/src/ui/commands/types.d.ts +63 -0
  163. package/dist/src/ui/commands/types.js +7 -0
  164. package/dist/src/ui/commands/types.js.map +1 -0
  165. package/dist/src/ui/components/AboutBox.d.ts +16 -0
  166. package/dist/src/ui/components/AboutBox.js +6 -0
  167. package/dist/src/ui/components/AboutBox.js.map +1 -0
  168. package/dist/src/ui/components/AsciiArt.d.ts +7 -0
  169. package/dist/src/ui/components/AsciiArt.js +24 -0
  170. package/dist/src/ui/components/AsciiArt.js.map +1 -0
  171. package/dist/src/ui/components/AuthDialog.d.ts +15 -0
  172. package/dist/src/ui/components/AuthDialog.js +102 -0
  173. package/dist/src/ui/components/AuthDialog.js.map +1 -0
  174. package/dist/src/ui/components/AuthInProgress.d.ts +11 -0
  175. package/dist/src/ui/components/AuthInProgress.js +27 -0
  176. package/dist/src/ui/components/AuthInProgress.js.map +1 -0
  177. package/dist/src/ui/components/AutoAcceptIndicator.d.ts +12 -0
  178. package/dist/src/ui/components/AutoAcceptIndicator.js +26 -0
  179. package/dist/src/ui/components/AutoAcceptIndicator.js.map +1 -0
  180. package/dist/src/ui/components/ConsoleSummaryDisplay.d.ts +11 -0
  181. package/dist/src/ui/components/ConsoleSummaryDisplay.js +11 -0
  182. package/dist/src/ui/components/ConsoleSummaryDisplay.js.map +1 -0
  183. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +15 -0
  184. package/dist/src/ui/components/ContextSummaryDisplay.js +41 -0
  185. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -0
  186. package/dist/src/ui/components/DetailedMessagesDisplay.d.ts +14 -0
  187. package/dist/src/ui/components/DetailedMessagesDisplay.js +34 -0
  188. package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -0
  189. package/dist/src/ui/components/EditorSettingsDialog.d.ts +15 -0
  190. package/dist/src/ui/components/EditorSettingsDialog.js +73 -0
  191. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -0
  192. package/dist/src/ui/components/ErrorBoundary.d.ts +46 -0
  193. package/dist/src/ui/components/ErrorBoundary.js +115 -0
  194. package/dist/src/ui/components/ErrorBoundary.js.map +1 -0
  195. package/dist/src/ui/components/Footer.d.ts +22 -0
  196. package/dist/src/ui/components/Footer.js +32 -0
  197. package/dist/src/ui/components/Footer.js.map +1 -0
  198. package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +17 -0
  199. package/dist/src/ui/components/GeminiRespondingSpinner.js +16 -0
  200. package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -0
  201. package/dist/src/ui/components/Header.d.ts +14 -0
  202. package/dist/src/ui/components/Header.js +20 -0
  203. package/dist/src/ui/components/Header.js.map +1 -0
  204. package/dist/src/ui/components/Help.d.ts +12 -0
  205. package/dist/src/ui/components/Help.js +10 -0
  206. package/dist/src/ui/components/Help.js.map +1 -0
  207. package/dist/src/ui/components/HistoryItemDisplay.d.ts +18 -0
  208. package/dist/src/ui/components/HistoryItemDisplay.js +17 -0
  209. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -0
  210. package/dist/src/ui/components/InputPrompt.d.ts +25 -0
  211. package/dist/src/ui/components/InputPrompt.js +350 -0
  212. package/dist/src/ui/components/InputPrompt.js.map +1 -0
  213. package/dist/src/ui/components/LayoutManager.d.ts +24 -0
  214. package/dist/src/ui/components/LayoutManager.js +58 -0
  215. package/dist/src/ui/components/LayoutManager.js.map +1 -0
  216. package/dist/src/ui/components/LoadingIndicator.d.ts +15 -0
  217. package/dist/src/ui/components/LoadingIndicator.js +20 -0
  218. package/dist/src/ui/components/LoadingIndicator.js.map +1 -0
  219. package/dist/src/ui/components/MemoryUsageDisplay.d.ts +7 -0
  220. package/dist/src/ui/components/MemoryUsageDisplay.js +27 -0
  221. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -0
  222. package/dist/src/ui/components/ModelStatsDisplay.d.ts +7 -0
  223. package/dist/src/ui/components/ModelStatsDisplay.js +33 -0
  224. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -0
  225. package/dist/src/ui/components/ProviderDialog.d.ts +9 -0
  226. package/dist/src/ui/components/ProviderDialog.js +54 -0
  227. package/dist/src/ui/components/ProviderDialog.js.map +1 -0
  228. package/dist/src/ui/components/ProviderModelDialog.d.ts +15 -0
  229. package/dist/src/ui/components/ProviderModelDialog.js +54 -0
  230. package/dist/src/ui/components/ProviderModelDialog.js.map +1 -0
  231. package/dist/src/ui/components/SessionSummaryDisplay.d.ts +11 -0
  232. package/dist/src/ui/components/SessionSummaryDisplay.js +4 -0
  233. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -0
  234. package/dist/src/ui/components/ShellModeIndicator.d.ts +7 -0
  235. package/dist/src/ui/components/ShellModeIndicator.js +5 -0
  236. package/dist/src/ui/components/ShellModeIndicator.js.map +1 -0
  237. package/dist/src/ui/components/ShowMoreLines.d.ts +10 -0
  238. package/dist/src/ui/components/ShowMoreLines.js +24 -0
  239. package/dist/src/ui/components/ShowMoreLines.js.map +1 -0
  240. package/dist/src/ui/components/StatsDisplay.d.ts +12 -0
  241. package/dist/src/ui/components/StatsDisplay.js +42 -0
  242. package/dist/src/ui/components/StatsDisplay.js.map +1 -0
  243. package/dist/src/ui/components/SuggestionsDisplay.d.ts +21 -0
  244. package/dist/src/ui/components/SuggestionsDisplay.js +32 -0
  245. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -0
  246. package/dist/src/ui/components/ThemeDialog.d.ts +19 -0
  247. package/dist/src/ui/components/ThemeDialog.js +127 -0
  248. package/dist/src/ui/components/ThemeDialog.js.map +1 -0
  249. package/dist/src/ui/components/Tips.d.ts +12 -0
  250. package/dist/src/ui/components/Tips.js +8 -0
  251. package/dist/src/ui/components/Tips.js.map +1 -0
  252. package/dist/src/ui/components/ToolStatsDisplay.d.ts +7 -0
  253. package/dist/src/ui/components/ToolStatsDisplay.js +41 -0
  254. package/dist/src/ui/components/ToolStatsDisplay.js.map +1 -0
  255. package/dist/src/ui/components/UpdateNotification.d.ts +10 -0
  256. package/dist/src/ui/components/UpdateNotification.js +10 -0
  257. package/dist/src/ui/components/UpdateNotification.js.map +1 -0
  258. package/dist/src/ui/components/messages/CompressionMessage.d.ts +11 -0
  259. package/dist/src/ui/components/messages/CompressionMessage.js +16 -0
  260. package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -0
  261. package/dist/src/ui/components/messages/DiffRenderer.d.ts +15 -0
  262. package/dist/src/ui/components/messages/DiffRenderer.js +212 -0
  263. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -0
  264. package/dist/src/ui/components/messages/ErrorMessage.d.ts +11 -0
  265. package/dist/src/ui/components/messages/ErrorMessage.js +9 -0
  266. package/dist/src/ui/components/messages/ErrorMessage.js.map +1 -0
  267. package/dist/src/ui/components/messages/GeminiMessage.d.ts +15 -0
  268. package/dist/src/ui/components/messages/GeminiMessage.js +10 -0
  269. package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -0
  270. package/dist/src/ui/components/messages/GeminiMessageContent.d.ts +14 -0
  271. package/dist/src/ui/components/messages/GeminiMessageContent.js +15 -0
  272. package/dist/src/ui/components/messages/GeminiMessageContent.js.map +1 -0
  273. package/dist/src/ui/components/messages/InfoMessage.d.ts +11 -0
  274. package/dist/src/ui/components/messages/InfoMessage.js +9 -0
  275. package/dist/src/ui/components/messages/InfoMessage.js.map +1 -0
  276. package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +15 -0
  277. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +117 -0
  278. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -0
  279. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +18 -0
  280. package/dist/src/ui/components/messages/ToolGroupMessage.js +53 -0
  281. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -0
  282. package/dist/src/ui/components/messages/ToolMessage.d.ts +15 -0
  283. package/dist/src/ui/components/messages/ToolMessage.js +61 -0
  284. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -0
  285. package/dist/src/ui/components/messages/UserMessage.d.ts +11 -0
  286. package/dist/src/ui/components/messages/UserMessage.js +9 -0
  287. package/dist/src/ui/components/messages/UserMessage.js.map +1 -0
  288. package/dist/src/ui/components/messages/UserShellMessage.d.ts +11 -0
  289. package/dist/src/ui/components/messages/UserShellMessage.js +9 -0
  290. package/dist/src/ui/components/messages/UserShellMessage.js.map +1 -0
  291. package/dist/src/ui/components/shared/MaxSizedBox.d.ts +61 -0
  292. package/dist/src/ui/components/shared/MaxSizedBox.js +384 -0
  293. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -0
  294. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +44 -0
  295. package/dist/src/ui/components/shared/RadioButtonSelect.js +77 -0
  296. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -0
  297. package/dist/src/ui/components/shared/text-buffer.d.ts +184 -0
  298. package/dist/src/ui/components/shared/text-buffer.js +1021 -0
  299. package/dist/src/ui/components/shared/text-buffer.js.map +1 -0
  300. package/dist/src/ui/constants.d.ts +8 -0
  301. package/dist/src/ui/constants.js +12 -0
  302. package/dist/src/ui/constants.js.map +1 -0
  303. package/dist/src/ui/containers/SessionController.d.ts +26 -0
  304. package/dist/src/ui/containers/SessionController.js +314 -0
  305. package/dist/src/ui/containers/SessionController.js.map +1 -0
  306. package/dist/src/ui/containers/UIStateShell.d.ts +6 -0
  307. package/dist/src/ui/containers/UIStateShell.js +4 -0
  308. package/dist/src/ui/containers/UIStateShell.js.map +1 -0
  309. package/dist/src/ui/contexts/AppDispatchContext.d.ts +12 -0
  310. package/dist/src/ui/contexts/AppDispatchContext.js +17 -0
  311. package/dist/src/ui/contexts/AppDispatchContext.js.map +1 -0
  312. package/dist/src/ui/contexts/OpenAIProviderContext.d.ts +29 -0
  313. package/dist/src/ui/contexts/OpenAIProviderContext.js +63 -0
  314. package/dist/src/ui/contexts/OpenAIProviderContext.js.map +1 -0
  315. package/dist/src/ui/contexts/OverflowContext.d.ts +19 -0
  316. package/dist/src/ui/contexts/OverflowContext.js +43 -0
  317. package/dist/src/ui/contexts/OverflowContext.js.map +1 -0
  318. package/dist/src/ui/contexts/SessionContext.d.ts +36 -0
  319. package/dist/src/ui/contexts/SessionContext.js +66 -0
  320. package/dist/src/ui/contexts/SessionContext.js.map +1 -0
  321. package/dist/src/ui/contexts/SessionStateContext.d.ts +15 -0
  322. package/dist/src/ui/contexts/SessionStateContext.js +26 -0
  323. package/dist/src/ui/contexts/SessionStateContext.js.map +1 -0
  324. package/dist/src/ui/contexts/StreamingContext.d.ts +9 -0
  325. package/dist/src/ui/contexts/StreamingContext.js +15 -0
  326. package/dist/src/ui/contexts/StreamingContext.js.map +1 -0
  327. package/dist/src/ui/editors/editorSettingsManager.d.ts +19 -0
  328. package/dist/src/ui/editors/editorSettingsManager.js +54 -0
  329. package/dist/src/ui/editors/editorSettingsManager.js.map +1 -0
  330. package/dist/src/ui/hooks/atCommandProcessor.d.ts +31 -0
  331. package/dist/src/ui/hooks/atCommandProcessor.js +310 -0
  332. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -0
  333. package/dist/src/ui/hooks/index.d.ts +2 -0
  334. package/dist/src/ui/hooks/index.js +3 -0
  335. package/dist/src/ui/hooks/index.js.map +1 -0
  336. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +16 -0
  337. package/dist/src/ui/hooks/shellCommandProcessor.js +263 -0
  338. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -0
  339. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +27 -0
  340. package/dist/src/ui/hooks/slashCommandProcessor.js +1413 -0
  341. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -0
  342. package/dist/src/ui/hooks/useAuthCommand.d.ts +15 -0
  343. package/dist/src/ui/hooks/useAuthCommand.js +76 -0
  344. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -0
  345. package/dist/src/ui/hooks/useAutoAcceptIndicator.d.ts +10 -0
  346. package/dist/src/ui/hooks/useAutoAcceptIndicator.js +37 -0
  347. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -0
  348. package/dist/src/ui/hooks/useBracketedPaste.d.ts +12 -0
  349. package/dist/src/ui/hooks/useBracketedPaste.js +32 -0
  350. package/dist/src/ui/hooks/useBracketedPaste.js.map +1 -0
  351. package/dist/src/ui/hooks/useCompletion.d.ts +21 -0
  352. package/dist/src/ui/hooks/useCompletion.js +375 -0
  353. package/dist/src/ui/hooks/useCompletion.js.map +1 -0
  354. package/dist/src/ui/hooks/useConsoleMessages.d.ts +12 -0
  355. package/dist/src/ui/hooks/useConsoleMessages.js +60 -0
  356. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -0
  357. package/dist/src/ui/hooks/useEditorSettings.d.ts +17 -0
  358. package/dist/src/ui/hooks/useEditorSettings.js +48 -0
  359. package/dist/src/ui/hooks/useEditorSettings.js.map +1 -0
  360. package/dist/src/ui/hooks/useGeminiStream.d.ts +23 -0
  361. package/dist/src/ui/hooks/useGeminiStream.js +607 -0
  362. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -0
  363. package/dist/src/ui/hooks/useGitBranchName.d.ts +6 -0
  364. package/dist/src/ui/hooks/useGitBranchName.js +61 -0
  365. package/dist/src/ui/hooks/useGitBranchName.js.map +1 -0
  366. package/dist/src/ui/hooks/useHistoryManager.d.ts +22 -0
  367. package/dist/src/ui/hooks/useHistoryManager.js +74 -0
  368. package/dist/src/ui/hooks/useHistoryManager.js.map +1 -0
  369. package/dist/src/ui/hooks/useInputHistory.d.ts +19 -0
  370. package/dist/src/ui/hooks/useInputHistory.js +84 -0
  371. package/dist/src/ui/hooks/useInputHistory.js.map +1 -0
  372. package/dist/src/ui/hooks/useKeypress.d.ts +29 -0
  373. package/dist/src/ui/hooks/useKeypress.js +162 -0
  374. package/dist/src/ui/hooks/useKeypress.js.map +1 -0
  375. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +10 -0
  376. package/dist/src/ui/hooks/useLoadingIndicator.js +44 -0
  377. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -0
  378. package/dist/src/ui/hooks/useLogger.d.ts +10 -0
  379. package/dist/src/ui/hooks/useLogger.js +29 -0
  380. package/dist/src/ui/hooks/useLogger.js.map +1 -0
  381. package/dist/src/ui/hooks/useOpenAIProviderInfo.d.ts +17 -0
  382. package/dist/src/ui/hooks/useOpenAIProviderInfo.js +43 -0
  383. package/dist/src/ui/hooks/useOpenAIProviderInfo.js.map +1 -0
  384. package/dist/src/ui/hooks/usePhraseCycler.d.ts +14 -0
  385. package/dist/src/ui/hooks/usePhraseCycler.js +197 -0
  386. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -0
  387. package/dist/src/ui/hooks/usePrivacySettings.d.ts +16 -0
  388. package/dist/src/ui/hooks/usePrivacySettings.js +115 -0
  389. package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -0
  390. package/dist/src/ui/hooks/useProviderDialog.d.ts +25 -0
  391. package/dist/src/ui/hooks/useProviderDialog.js +61 -0
  392. package/dist/src/ui/hooks/useProviderDialog.js.map +1 -0
  393. package/dist/src/ui/hooks/useProviderModelDialog.d.ts +26 -0
  394. package/dist/src/ui/hooks/useProviderModelDialog.js +62 -0
  395. package/dist/src/ui/hooks/useProviderModelDialog.js.map +1 -0
  396. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +33 -0
  397. package/dist/src/ui/hooks/useReactToolScheduler.js +186 -0
  398. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -0
  399. package/dist/src/ui/hooks/useRefreshMemoryCommand.d.ts +6 -0
  400. package/dist/src/ui/hooks/useRefreshMemoryCommand.js +7 -0
  401. package/dist/src/ui/hooks/useRefreshMemoryCommand.js.map +1 -0
  402. package/dist/src/ui/hooks/useSession.d.ts +11 -0
  403. package/dist/src/ui/hooks/useSession.js +19 -0
  404. package/dist/src/ui/hooks/useSession.js.map +1 -0
  405. package/dist/src/ui/hooks/useShellHistory.d.ts +11 -0
  406. package/dist/src/ui/hooks/useShellHistory.js +89 -0
  407. package/dist/src/ui/hooks/useShellHistory.js.map +1 -0
  408. package/dist/src/ui/hooks/useShowMemoryCommand.d.ts +9 -0
  409. package/dist/src/ui/hooks/useShowMemoryCommand.js +50 -0
  410. package/dist/src/ui/hooks/useShowMemoryCommand.js.map +1 -0
  411. package/dist/src/ui/hooks/useStableCallback.d.ts +40 -0
  412. package/dist/src/ui/hooks/useStableCallback.js +58 -0
  413. package/dist/src/ui/hooks/useStableCallback.js.map +1 -0
  414. package/dist/src/ui/hooks/useStateAndRef.d.ts +7 -0
  415. package/dist/src/ui/hooks/useStateAndRef.js +26 -0
  416. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -0
  417. package/dist/src/ui/hooks/useTerminalSize.d.ts +9 -0
  418. package/dist/src/ui/hooks/useTerminalSize.js +27 -0
  419. package/dist/src/ui/hooks/useTerminalSize.js.map +1 -0
  420. package/dist/src/ui/hooks/useThemeCommand.d.ts +16 -0
  421. package/dist/src/ui/hooks/useThemeCommand.js +94 -0
  422. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -0
  423. package/dist/src/ui/hooks/useTimer.d.ts +12 -0
  424. package/dist/src/ui/hooks/useTimer.js +58 -0
  425. package/dist/src/ui/hooks/useTimer.js.map +1 -0
  426. package/dist/src/ui/privacy/CloudFreePrivacyNotice.d.ts +12 -0
  427. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +42 -0
  428. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -0
  429. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.d.ts +10 -0
  430. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js +17 -0
  431. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js.map +1 -0
  432. package/dist/src/ui/privacy/GeminiPrivacyNotice.d.ts +10 -0
  433. package/dist/src/ui/privacy/GeminiPrivacyNotice.js +17 -0
  434. package/dist/src/ui/privacy/GeminiPrivacyNotice.js.map +1 -0
  435. package/dist/src/ui/privacy/PrivacyNotice.d.ts +12 -0
  436. package/dist/src/ui/privacy/PrivacyNotice.js +25 -0
  437. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -0
  438. package/dist/src/ui/reducers/appReducer.d.ts +59 -0
  439. package/dist/src/ui/reducers/appReducer.js +91 -0
  440. package/dist/src/ui/reducers/appReducer.js.map +1 -0
  441. package/dist/src/ui/reducers/sessionReducer.d.ts +36 -0
  442. package/dist/src/ui/reducers/sessionReducer.js +30 -0
  443. package/dist/src/ui/reducers/sessionReducer.js.map +1 -0
  444. package/dist/src/ui/themes/ansi-light.d.ts +7 -0
  445. package/dist/src/ui/themes/ansi-light.js +139 -0
  446. package/dist/src/ui/themes/ansi-light.js.map +1 -0
  447. package/dist/src/ui/themes/ansi.d.ts +7 -0
  448. package/dist/src/ui/themes/ansi.js +149 -0
  449. package/dist/src/ui/themes/ansi.js.map +1 -0
  450. package/dist/src/ui/themes/atom-one-dark.d.ts +7 -0
  451. package/dist/src/ui/themes/atom-one-dark.js +136 -0
  452. package/dist/src/ui/themes/atom-one-dark.js.map +1 -0
  453. package/dist/src/ui/themes/ayu-light.d.ts +7 -0
  454. package/dist/src/ui/themes/ayu-light.js +128 -0
  455. package/dist/src/ui/themes/ayu-light.js.map +1 -0
  456. package/dist/src/ui/themes/ayu.d.ts +7 -0
  457. package/dist/src/ui/themes/ayu.js +102 -0
  458. package/dist/src/ui/themes/ayu.js.map +1 -0
  459. package/dist/src/ui/themes/default-light.d.ts +7 -0
  460. package/dist/src/ui/themes/default-light.js +100 -0
  461. package/dist/src/ui/themes/default-light.js.map +1 -0
  462. package/dist/src/ui/themes/default.d.ts +7 -0
  463. package/dist/src/ui/themes/default.js +143 -0
  464. package/dist/src/ui/themes/default.js.map +1 -0
  465. package/dist/src/ui/themes/dracula.d.ts +7 -0
  466. package/dist/src/ui/themes/dracula.js +113 -0
  467. package/dist/src/ui/themes/dracula.js.map +1 -0
  468. package/dist/src/ui/themes/github-dark.d.ts +7 -0
  469. package/dist/src/ui/themes/github-dark.js +136 -0
  470. package/dist/src/ui/themes/github-dark.js.map +1 -0
  471. package/dist/src/ui/themes/github-light.d.ts +7 -0
  472. package/dist/src/ui/themes/github-light.js +138 -0
  473. package/dist/src/ui/themes/github-light.js.map +1 -0
  474. package/dist/src/ui/themes/googlecode.d.ts +7 -0
  475. package/dist/src/ui/themes/googlecode.js +135 -0
  476. package/dist/src/ui/themes/googlecode.js.map +1 -0
  477. package/dist/src/ui/themes/green-screen.d.ts +7 -0
  478. package/dist/src/ui/themes/green-screen.js +113 -0
  479. package/dist/src/ui/themes/green-screen.js.map +1 -0
  480. package/dist/src/ui/themes/no-color.d.ts +7 -0
  481. package/dist/src/ui/themes/no-color.js +84 -0
  482. package/dist/src/ui/themes/no-color.js.map +1 -0
  483. package/dist/src/ui/themes/shades-of-purple.d.ts +11 -0
  484. package/dist/src/ui/themes/shades-of-purple.js +302 -0
  485. package/dist/src/ui/themes/shades-of-purple.js.map +1 -0
  486. package/dist/src/ui/themes/theme-manager.d.ts +33 -0
  487. package/dist/src/ui/themes/theme-manager.js +111 -0
  488. package/dist/src/ui/themes/theme-manager.js.map +1 -0
  489. package/dist/src/ui/themes/theme.d.ts +83 -0
  490. package/dist/src/ui/themes/theme.js +304 -0
  491. package/dist/src/ui/themes/theme.js.map +1 -0
  492. package/dist/src/ui/themes/xcode.d.ts +7 -0
  493. package/dist/src/ui/themes/xcode.js +143 -0
  494. package/dist/src/ui/themes/xcode.js.map +1 -0
  495. package/dist/src/ui/types.d.ts +174 -0
  496. package/dist/src/ui/types.js +43 -0
  497. package/dist/src/ui/types.js.map +1 -0
  498. package/dist/src/ui/utils/CodeColorizer.d.ts +14 -0
  499. package/dist/src/ui/utils/CodeColorizer.js +97 -0
  500. package/dist/src/ui/utils/CodeColorizer.js.map +1 -0
  501. package/dist/src/ui/utils/ConsolePatcher.d.ts +23 -0
  502. package/dist/src/ui/utils/ConsolePatcher.js +42 -0
  503. package/dist/src/ui/utils/ConsolePatcher.js.map +1 -0
  504. package/dist/src/ui/utils/InlineMarkdownRenderer.d.ts +16 -0
  505. package/dist/src/ui/utils/InlineMarkdownRenderer.js +104 -0
  506. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -0
  507. package/dist/src/ui/utils/MarkdownDisplay.d.ts +14 -0
  508. package/dist/src/ui/utils/MarkdownDisplay.js +205 -0
  509. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -0
  510. package/dist/src/ui/utils/TableRenderer.d.ts +17 -0
  511. package/dist/src/ui/utils/TableRenderer.js +84 -0
  512. package/dist/src/ui/utils/TableRenderer.js.map +1 -0
  513. package/dist/src/ui/utils/clipboardUtils.d.ts +22 -0
  514. package/dist/src/ui/utils/clipboardUtils.js +127 -0
  515. package/dist/src/ui/utils/clipboardUtils.js.map +1 -0
  516. package/dist/src/ui/utils/commandUtils.d.ts +22 -0
  517. package/dist/src/ui/utils/commandUtils.js +25 -0
  518. package/dist/src/ui/utils/commandUtils.js.map +1 -0
  519. package/dist/src/ui/utils/computeStats.d.ts +10 -0
  520. package/dist/src/ui/utils/computeStats.js +55 -0
  521. package/dist/src/ui/utils/computeStats.js.map +1 -0
  522. package/dist/src/ui/utils/displayUtils.d.ts +17 -0
  523. package/dist/src/ui/utils/displayUtils.js +24 -0
  524. package/dist/src/ui/utils/displayUtils.js.map +1 -0
  525. package/dist/src/ui/utils/errorParsing.d.ts +7 -0
  526. package/dist/src/ui/utils/errorParsing.js +106 -0
  527. package/dist/src/ui/utils/errorParsing.js.map +1 -0
  528. package/dist/src/ui/utils/formatters.d.ts +13 -0
  529. package/dist/src/ui/utils/formatters.js +56 -0
  530. package/dist/src/ui/utils/formatters.js.map +1 -0
  531. package/dist/src/ui/utils/markdownUtilities.d.ts +6 -0
  532. package/dist/src/ui/utils/markdownUtilities.js +110 -0
  533. package/dist/src/ui/utils/markdownUtilities.js.map +1 -0
  534. package/dist/src/ui/utils/renderLoopDetector.d.ts +52 -0
  535. package/dist/src/ui/utils/renderLoopDetector.js +146 -0
  536. package/dist/src/ui/utils/renderLoopDetector.js.map +1 -0
  537. package/dist/src/ui/utils/textUtils.d.ts +22 -0
  538. package/dist/src/ui/utils/textUtils.js +58 -0
  539. package/dist/src/ui/utils/textUtils.js.map +1 -0
  540. package/dist/src/ui/utils/updateCheck.d.ts +6 -0
  541. package/dist/src/ui/utils/updateCheck.js +50 -0
  542. package/dist/src/ui/utils/updateCheck.js.map +1 -0
  543. package/dist/src/utils/ConversationContext.d.ts +55 -0
  544. package/dist/src/utils/ConversationContext.js +85 -0
  545. package/dist/src/utils/ConversationContext.js.map +1 -0
  546. package/dist/src/utils/cleanup.d.ts +8 -0
  547. package/dist/src/utils/cleanup.js +34 -0
  548. package/dist/src/utils/cleanup.js.map +1 -0
  549. package/dist/src/utils/package.d.ts +12 -0
  550. package/dist/src/utils/package.js +24 -0
  551. package/dist/src/utils/package.js.map +1 -0
  552. package/dist/src/utils/readStdin.d.ts +6 -0
  553. package/dist/src/utils/readStdin.js +34 -0
  554. package/dist/src/utils/readStdin.js.map +1 -0
  555. package/dist/src/utils/sandbox-macos-permissive-closed.sb +26 -0
  556. package/dist/src/utils/sandbox-macos-permissive-open.sb +19 -0
  557. package/dist/src/utils/sandbox-macos-permissive-proxied.sb +31 -0
  558. package/dist/src/utils/sandbox-macos-restrictive-closed.sb +87 -0
  559. package/dist/src/utils/sandbox-macos-restrictive-open.sb +90 -0
  560. package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +92 -0
  561. package/dist/src/utils/sandbox.d.ts +7 -0
  562. package/dist/src/utils/sandbox.js +680 -0
  563. package/dist/src/utils/sandbox.js.map +1 -0
  564. package/dist/src/utils/startupWarnings.d.ts +6 -0
  565. package/dist/src/utils/startupWarnings.js +40 -0
  566. package/dist/src/utils/startupWarnings.js.map +1 -0
  567. package/dist/src/utils/userStartupWarnings.d.ts +6 -0
  568. package/dist/src/utils/userStartupWarnings.js +48 -0
  569. package/dist/src/utils/userStartupWarnings.js.map +1 -0
  570. package/dist/src/utils/version.d.ts +6 -0
  571. package/dist/src/utils/version.js +11 -0
  572. package/dist/src/utils/version.js.map +1 -0
  573. package/dist/tsconfig.tsbuildinfo +1 -0
  574. package/dist/vybestack-llxprt-code-0.1.12.tgz +0 -0
  575. package/package.json +95 -0
@@ -0,0 +1,84 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import React from 'react';
8
+ import { Text, Box } from 'ink';
9
+ import { Colors } from '../colors.js';
10
+ import { RenderInline, getPlainTextLength } from './InlineMarkdownRenderer.js';
11
+ /**
12
+ * Custom table renderer for markdown tables
13
+ * We implement our own instead of using ink-table due to module compatibility issues
14
+ */
15
+ export const TableRenderer = ({ headers, rows, terminalWidth, }) => {
16
+ // Calculate column widths using actual display width after markdown processing
17
+ const columnWidths = headers.map((header, index) => {
18
+ const headerWidth = getPlainTextLength(header);
19
+ const maxRowWidth = Math.max(...rows.map((row) => getPlainTextLength(row[index] || '')));
20
+ return Math.max(headerWidth, maxRowWidth) + 2; // Add padding
21
+ });
22
+ // Ensure table fits within terminal width
23
+ const totalWidth = columnWidths.reduce((sum, width) => sum + width + 1, 1);
24
+ const scaleFactor = totalWidth > terminalWidth ? terminalWidth / totalWidth : 1;
25
+ const adjustedWidths = columnWidths.map((width) => Math.floor(width * scaleFactor));
26
+ // Helper function to render a cell with proper width
27
+ const renderCell = (content, width, isHeader = false) => {
28
+ const contentWidth = Math.max(0, width - 2);
29
+ const displayWidth = getPlainTextLength(content);
30
+ let cellContent = content;
31
+ if (displayWidth > contentWidth) {
32
+ if (contentWidth <= 3) {
33
+ // Just truncate by character count
34
+ cellContent = content.substring(0, Math.min(content.length, contentWidth));
35
+ }
36
+ else {
37
+ // Truncate preserving markdown formatting using binary search
38
+ let left = 0;
39
+ let right = content.length;
40
+ let bestTruncated = content;
41
+ // Binary search to find the optimal truncation point
42
+ while (left <= right) {
43
+ const mid = Math.floor((left + right) / 2);
44
+ const candidate = content.substring(0, mid);
45
+ const candidateWidth = getPlainTextLength(candidate);
46
+ if (candidateWidth <= contentWidth - 3) {
47
+ bestTruncated = candidate;
48
+ left = mid + 1;
49
+ }
50
+ else {
51
+ right = mid - 1;
52
+ }
53
+ }
54
+ cellContent = bestTruncated + '...';
55
+ }
56
+ }
57
+ // Calculate exact padding needed
58
+ const actualDisplayWidth = getPlainTextLength(cellContent);
59
+ const paddingNeeded = Math.max(0, contentWidth - actualDisplayWidth);
60
+ return (_jsxs(Text, { children: [isHeader ? (_jsx(Text, { bold: true, color: Colors.AccentCyan, children: _jsx(RenderInline, { text: cellContent }) })) : (_jsx(RenderInline, { text: cellContent })), ' '.repeat(paddingNeeded)] }));
61
+ };
62
+ // Helper function to render border
63
+ const renderBorder = (type) => {
64
+ const chars = {
65
+ top: { left: '┌', middle: '┬', right: '┐', horizontal: '─' },
66
+ middle: { left: '├', middle: '┼', right: '┤', horizontal: '─' },
67
+ bottom: { left: '└', middle: '┴', right: '┘', horizontal: '─' },
68
+ };
69
+ const char = chars[type];
70
+ const borderParts = adjustedWidths.map((w) => char.horizontal.repeat(w));
71
+ const border = char.left + borderParts.join(char.middle) + char.right;
72
+ return _jsx(Text, { children: border });
73
+ };
74
+ // Helper function to render a table row
75
+ const renderRow = (cells, isHeader = false) => {
76
+ const renderedCells = cells.map((cell, index) => {
77
+ const width = adjustedWidths[index] || 0;
78
+ return renderCell(cell || '', width, isHeader);
79
+ });
80
+ return (_jsxs(Text, { children: ["\u2502", ' ', renderedCells.map((cell, index) => (_jsxs(React.Fragment, { children: [cell, index < renderedCells.length - 1 ? ' │ ' : ''] }, index))), ' ', "\u2502"] }));
81
+ };
82
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [renderBorder('top'), renderRow(headers, true), renderBorder('middle'), rows.map((row, index) => (_jsx(React.Fragment, { children: renderRow(row) }, index))), renderBorder('bottom')] }));
83
+ };
84
+ //# sourceMappingURL=TableRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableRenderer.js","sourceRoot":"","sources":["../../../../src/ui/utils/TableRenderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Checks if the system clipboard contains an image (macOS only for now)
8
+ * @returns true if clipboard contains an image
9
+ */
10
+ export declare function clipboardHasImage(): Promise<boolean>;
11
+ /**
12
+ * Saves the image from clipboard to a temporary file (macOS only for now)
13
+ * @param targetDir The target directory to create temp files within
14
+ * @returns The path to the saved image file, or null if no image or error
15
+ */
16
+ export declare function saveClipboardImage(targetDir?: string): Promise<string | null>;
17
+ /**
18
+ * Cleans up old temporary clipboard image files
19
+ * Removes files older than 1 hour
20
+ * @param targetDir The target directory where temp files are stored
21
+ */
22
+ export declare function cleanupOldClipboardImages(targetDir?: string): Promise<void>;
@@ -0,0 +1,127 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { exec } from 'child_process';
7
+ import { promisify } from 'util';
8
+ import * as fs from 'fs/promises';
9
+ import * as path from 'path';
10
+ const execAsync = promisify(exec);
11
+ /**
12
+ * Checks if the system clipboard contains an image (macOS only for now)
13
+ * @returns true if clipboard contains an image
14
+ */
15
+ export async function clipboardHasImage() {
16
+ if (process.platform !== 'darwin') {
17
+ return false;
18
+ }
19
+ try {
20
+ // Use osascript to check clipboard type
21
+ const { stdout } = await execAsync(`osascript -e 'clipboard info' 2>/dev/null | grep -qE "«class PNGf»|TIFF picture|JPEG picture|GIF picture|«class JPEG»|«class TIFF»" && echo "true" || echo "false"`, { shell: '/bin/bash' });
22
+ return stdout.trim() === 'true';
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }
28
+ /**
29
+ * Saves the image from clipboard to a temporary file (macOS only for now)
30
+ * @param targetDir The target directory to create temp files within
31
+ * @returns The path to the saved image file, or null if no image or error
32
+ */
33
+ export async function saveClipboardImage(targetDir) {
34
+ if (process.platform !== 'darwin') {
35
+ return null;
36
+ }
37
+ try {
38
+ // Create a temporary directory for clipboard images within the target directory
39
+ // This avoids security restrictions on paths outside the target directory
40
+ const baseDir = targetDir || process.cwd();
41
+ const tempDir = path.join(baseDir, '.llxprt-clipboard');
42
+ await fs.mkdir(tempDir, { recursive: true });
43
+ // Generate a unique filename with timestamp
44
+ const timestamp = new Date().getTime();
45
+ // Try different image formats in order of preference
46
+ const formats = [
47
+ { class: 'PNGf', extension: 'png' },
48
+ { class: 'JPEG', extension: 'jpg' },
49
+ { class: 'TIFF', extension: 'tiff' },
50
+ { class: 'GIFf', extension: 'gif' },
51
+ ];
52
+ for (const format of formats) {
53
+ const tempFilePath = path.join(tempDir, `clipboard-${timestamp}.${format.extension}`);
54
+ // Try to save clipboard as this format
55
+ const script = `
56
+ try
57
+ set imageData to the clipboard as «class ${format.class}»
58
+ set fileRef to open for access POSIX file "${tempFilePath}" with write permission
59
+ write imageData to fileRef
60
+ close access fileRef
61
+ return "success"
62
+ on error errMsg
63
+ try
64
+ close access POSIX file "${tempFilePath}"
65
+ end try
66
+ return "error"
67
+ end try
68
+ `;
69
+ const { stdout } = await execAsync(`osascript -e '${script}'`);
70
+ if (stdout.trim() === 'success') {
71
+ // Verify the file was created and has content
72
+ try {
73
+ const stats = await fs.stat(tempFilePath);
74
+ if (stats.size > 0) {
75
+ return tempFilePath;
76
+ }
77
+ }
78
+ catch {
79
+ // File doesn't exist, continue to next format
80
+ }
81
+ }
82
+ // Clean up failed attempt
83
+ try {
84
+ await fs.unlink(tempFilePath);
85
+ }
86
+ catch {
87
+ // Ignore cleanup errors
88
+ }
89
+ }
90
+ // No format worked
91
+ return null;
92
+ }
93
+ catch (error) {
94
+ console.error('Error saving clipboard image:', error);
95
+ return null;
96
+ }
97
+ }
98
+ /**
99
+ * Cleans up old temporary clipboard image files
100
+ * Removes files older than 1 hour
101
+ * @param targetDir The target directory where temp files are stored
102
+ */
103
+ export async function cleanupOldClipboardImages(targetDir) {
104
+ try {
105
+ const baseDir = targetDir || process.cwd();
106
+ const tempDir = path.join(baseDir, '.llxprt-clipboard');
107
+ const files = await fs.readdir(tempDir);
108
+ const oneHourAgo = Date.now() - 60 * 60 * 1000;
109
+ for (const file of files) {
110
+ if (file.startsWith('clipboard-') &&
111
+ (file.endsWith('.png') ||
112
+ file.endsWith('.jpg') ||
113
+ file.endsWith('.tiff') ||
114
+ file.endsWith('.gif'))) {
115
+ const filePath = path.join(tempDir, file);
116
+ const stats = await fs.stat(filePath);
117
+ if (stats.mtimeMs < oneHourAgo) {
118
+ await fs.unlink(filePath);
119
+ }
120
+ }
121
+ }
122
+ }
123
+ catch {
124
+ // Ignore errors in cleanup
125
+ }
126
+ }
127
+ //# sourceMappingURL=clipboardUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboardUtils.js","sourceRoot":"","sources":["../../../../src/ui/utils/clipboardUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Checks if a query string potentially represents an '@' command.
8
+ * It triggers if the query starts with '@' or contains '@' preceded by whitespace
9
+ * and followed by a non-whitespace character.
10
+ *
11
+ * @param query The input query string.
12
+ * @returns True if the query looks like an '@' command, false otherwise.
13
+ */
14
+ export declare const isAtCommand: (query: string) => boolean;
15
+ /**
16
+ * Checks if a query string potentially represents an '/' command.
17
+ * It triggers if the query starts with '/'
18
+ *
19
+ * @param query The input query string.
20
+ * @returns True if the query looks like an '/' command, false otherwise.
21
+ */
22
+ export declare const isSlashCommand: (query: string) => boolean;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Checks if a query string potentially represents an '@' command.
8
+ * It triggers if the query starts with '@' or contains '@' preceded by whitespace
9
+ * and followed by a non-whitespace character.
10
+ *
11
+ * @param query The input query string.
12
+ * @returns True if the query looks like an '@' command, false otherwise.
13
+ */
14
+ export const isAtCommand = (query) =>
15
+ // Check if starts with @ OR has a space, then @
16
+ query.startsWith('@') || /\s@/.test(query);
17
+ /**
18
+ * Checks if a query string potentially represents an '/' command.
19
+ * It triggers if the query starts with '/'
20
+ *
21
+ * @param query The input query string.
22
+ * @returns True if the query looks like an '/' command, false otherwise.
23
+ */
24
+ export const isSlashCommand = (query) => query.startsWith('/');
25
+ //# sourceMappingURL=commandUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandUtils.js","sourceRoot":"","sources":["../../../../src/ui/utils/commandUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAW,EAAE;AACpD,gDAAgD;AAChD,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { SessionMetrics, ComputedSessionStats, ModelMetrics } from '../contexts/SessionContext.js';
7
+ export declare function calculateErrorRate(metrics: ModelMetrics): number;
8
+ export declare function calculateAverageLatency(metrics: ModelMetrics): number;
9
+ export declare function calculateCacheHitRate(metrics: ModelMetrics): number;
10
+ export declare const computeSessionStats: (metrics: SessionMetrics) => ComputedSessionStats;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export function calculateErrorRate(metrics) {
7
+ if (metrics.api.totalRequests === 0) {
8
+ return 0;
9
+ }
10
+ return (metrics.api.totalErrors / metrics.api.totalRequests) * 100;
11
+ }
12
+ export function calculateAverageLatency(metrics) {
13
+ if (metrics.api.totalRequests === 0) {
14
+ return 0;
15
+ }
16
+ return metrics.api.totalLatencyMs / metrics.api.totalRequests;
17
+ }
18
+ export function calculateCacheHitRate(metrics) {
19
+ if (metrics.tokens.prompt === 0) {
20
+ return 0;
21
+ }
22
+ return (metrics.tokens.cached / metrics.tokens.prompt) * 100;
23
+ }
24
+ export const computeSessionStats = (metrics) => {
25
+ const { models, tools } = metrics;
26
+ const totalApiTime = Object.values(models).reduce((acc, model) => acc + model.api.totalLatencyMs, 0);
27
+ const totalToolTime = tools.totalDurationMs;
28
+ const agentActiveTime = totalApiTime + totalToolTime;
29
+ const apiTimePercent = agentActiveTime > 0 ? (totalApiTime / agentActiveTime) * 100 : 0;
30
+ const toolTimePercent = agentActiveTime > 0 ? (totalToolTime / agentActiveTime) * 100 : 0;
31
+ const totalCachedTokens = Object.values(models).reduce((acc, model) => acc + model.tokens.cached, 0);
32
+ const totalPromptTokens = Object.values(models).reduce((acc, model) => acc + model.tokens.prompt, 0);
33
+ const cacheEfficiency = totalPromptTokens > 0 ? (totalCachedTokens / totalPromptTokens) * 100 : 0;
34
+ const totalDecisions = tools.totalDecisions.accept +
35
+ tools.totalDecisions.reject +
36
+ tools.totalDecisions.modify;
37
+ const successRate = tools.totalCalls > 0 ? (tools.totalSuccess / tools.totalCalls) * 100 : 0;
38
+ const agreementRate = totalDecisions > 0
39
+ ? (tools.totalDecisions.accept / totalDecisions) * 100
40
+ : 0;
41
+ return {
42
+ totalApiTime,
43
+ totalToolTime,
44
+ agentActiveTime,
45
+ apiTimePercent,
46
+ toolTimePercent,
47
+ cacheEfficiency,
48
+ totalDecisions,
49
+ successRate,
50
+ agreementRate,
51
+ totalCachedTokens,
52
+ totalPromptTokens,
53
+ };
54
+ };
55
+ //# sourceMappingURL=computeStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeStats.js","sourceRoot":"","sources":["../../../../src/ui/utils/computeStats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare const TOOL_SUCCESS_RATE_HIGH = 95;
7
+ export declare const TOOL_SUCCESS_RATE_MEDIUM = 85;
8
+ export declare const USER_AGREEMENT_RATE_HIGH = 75;
9
+ export declare const USER_AGREEMENT_RATE_MEDIUM = 45;
10
+ export declare const CACHE_EFFICIENCY_HIGH = 40;
11
+ export declare const CACHE_EFFICIENCY_MEDIUM = 15;
12
+ export declare const getStatusColor: (value: number, thresholds: {
13
+ green: number;
14
+ yellow: number;
15
+ }, options?: {
16
+ defaultColor?: string;
17
+ }) => string;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Colors } from '../colors.js';
7
+ // --- Thresholds ---
8
+ export const TOOL_SUCCESS_RATE_HIGH = 95;
9
+ export const TOOL_SUCCESS_RATE_MEDIUM = 85;
10
+ export const USER_AGREEMENT_RATE_HIGH = 75;
11
+ export const USER_AGREEMENT_RATE_MEDIUM = 45;
12
+ export const CACHE_EFFICIENCY_HIGH = 40;
13
+ export const CACHE_EFFICIENCY_MEDIUM = 15;
14
+ // --- Color Logic ---
15
+ export const getStatusColor = (value, thresholds, options = {}) => {
16
+ if (value >= thresholds.green) {
17
+ return Colors.AccentGreen;
18
+ }
19
+ if (value >= thresholds.yellow) {
20
+ return Colors.AccentYellow;
21
+ }
22
+ return options.defaultColor || Colors.AccentRed;
23
+ };
24
+ //# sourceMappingURL=displayUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"displayUtils.js","sourceRoot":"","sources":["../../../../src/ui/utils/displayUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,qBAAqB;AACrB,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAC3C,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAE1C,sBAAsB;AACtB,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,KAAa,EACb,UAA6C,EAC7C,UAAqC,EAAE,EACvC,EAAE;IACF,IAAI,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IACD,IAAI,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,SAAS,CAAC;AAClD,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { AuthType, UserTierId } from '@vybestack/llxprt-code-core';
7
+ export declare function parseAndFormatApiError(error: unknown, authType?: AuthType, userTier?: UserTierId, currentModel?: string, fallbackModel?: string): string;
@@ -0,0 +1,106 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { AuthType, UserTierId, DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL, isProQuotaExceededError, isGenericQuotaExceededError, isApiError, isStructuredError, } from '@vybestack/llxprt-code-core';
7
+ // Free Tier message functions
8
+ const getRateLimitErrorMessageGoogleFree = (fallbackModel = DEFAULT_GEMINI_FLASH_MODEL) => `\nPossible quota limitations in place or slow response times detected. Switching to the ${fallbackModel} model for the rest of this session.`;
9
+ const getRateLimitErrorMessageGoogleProQuotaFree = (currentModel = DEFAULT_GEMINI_MODEL, fallbackModel = DEFAULT_GEMINI_FLASH_MODEL) => `\nYou have reached your daily ${currentModel} quota limit. You will be switched to the ${fallbackModel} model for the rest of this session. To increase your limits, upgrade to a Gemini Code Assist Standard or Enterprise plan with higher limits at https://goo.gle/set-up-gemini-code-assist, or use /auth to switch to using a paid API key from AI Studio at https://aistudio.google.com/apikey`;
10
+ const getRateLimitErrorMessageGoogleGenericQuotaFree = () => `\nYou have reached your daily quota limit. To increase your limits, upgrade to a Gemini Code Assist Standard or Enterprise plan with higher limits at https://goo.gle/set-up-gemini-code-assist, or use /auth to switch to using a paid API key from AI Studio at https://aistudio.google.com/apikey`;
11
+ // Legacy/Standard Tier message functions
12
+ const getRateLimitErrorMessageGooglePaid = (fallbackModel = DEFAULT_GEMINI_FLASH_MODEL) => `\nPossible quota limitations in place or slow response times detected. Switching to the ${fallbackModel} model for the rest of this session. We appreciate you for choosing Gemini Code Assist and the Gemini CLI.`;
13
+ const getRateLimitErrorMessageGoogleProQuotaPaid = (currentModel = DEFAULT_GEMINI_MODEL, fallbackModel = DEFAULT_GEMINI_FLASH_MODEL) => `\nYou have reached your daily ${currentModel} quota limit. You will be switched to the ${fallbackModel} model for the rest of this session. We appreciate you for choosing Gemini Code Assist and the Gemini CLI. To continue accessing the ${currentModel} model today, consider using /auth to switch to using a paid API key from AI Studio at https://aistudio.google.com/apikey`;
14
+ const getRateLimitErrorMessageGoogleGenericQuotaPaid = (currentModel = DEFAULT_GEMINI_MODEL) => `\nYou have reached your daily quota limit. We appreciate you for choosing Gemini Code Assist and the Gemini CLI. To continue accessing the ${currentModel} model today, consider using /auth to switch to using a paid API key from AI Studio at https://aistudio.google.com/apikey`;
15
+ const RATE_LIMIT_ERROR_MESSAGE_USE_GEMINI = '\nPlease wait and try again later. To increase your limits, request a quota increase through AI Studio, or switch to another /auth method';
16
+ const RATE_LIMIT_ERROR_MESSAGE_VERTEX = '\nPlease wait and try again later. To increase your limits, request a quota increase through Vertex, or switch to another /auth method';
17
+ const getRateLimitErrorMessageDefault = (fallbackModel = DEFAULT_GEMINI_FLASH_MODEL) => `\nPossible quota limitations in place or slow response times detected. Switching to the ${fallbackModel} model for the rest of this session.`;
18
+ function getRateLimitMessage(authType, error, userTier, currentModel, fallbackModel) {
19
+ switch (authType) {
20
+ case AuthType.LOGIN_WITH_GOOGLE: {
21
+ // Determine if user is on a paid tier (Legacy or Standard) - default to FREE if not specified
22
+ const isPaidTier = userTier === UserTierId.LEGACY || userTier === UserTierId.STANDARD;
23
+ if (isProQuotaExceededError(error)) {
24
+ return isPaidTier
25
+ ? getRateLimitErrorMessageGoogleProQuotaPaid(currentModel || DEFAULT_GEMINI_MODEL, fallbackModel)
26
+ : getRateLimitErrorMessageGoogleProQuotaFree(currentModel || DEFAULT_GEMINI_MODEL, fallbackModel);
27
+ }
28
+ else if (isGenericQuotaExceededError(error)) {
29
+ return isPaidTier
30
+ ? getRateLimitErrorMessageGoogleGenericQuotaPaid(currentModel || DEFAULT_GEMINI_MODEL)
31
+ : getRateLimitErrorMessageGoogleGenericQuotaFree();
32
+ }
33
+ else {
34
+ return isPaidTier
35
+ ? getRateLimitErrorMessageGooglePaid(fallbackModel)
36
+ : getRateLimitErrorMessageGoogleFree(fallbackModel);
37
+ }
38
+ }
39
+ case AuthType.USE_GEMINI:
40
+ return RATE_LIMIT_ERROR_MESSAGE_USE_GEMINI;
41
+ case AuthType.USE_VERTEX_AI:
42
+ return RATE_LIMIT_ERROR_MESSAGE_VERTEX;
43
+ default:
44
+ return getRateLimitErrorMessageDefault(fallbackModel);
45
+ }
46
+ }
47
+ export function parseAndFormatApiError(error, authType, userTier, currentModel, fallbackModel) {
48
+ // For provider auth type, don't add Gemini-specific rate limit messages
49
+ if (authType === AuthType.USE_PROVIDER) {
50
+ if (isStructuredError(error)) {
51
+ let text = `[API Error: ${error.message}]`;
52
+ if (error.status === 429) {
53
+ text += '\nRate limit exceeded. Please wait and try again later.';
54
+ }
55
+ return text;
56
+ }
57
+ }
58
+ if (isStructuredError(error)) {
59
+ let text = `[API Error: ${error.message}]`;
60
+ if (error.status === 429) {
61
+ text += getRateLimitMessage(authType, error, userTier, currentModel, fallbackModel);
62
+ }
63
+ return text;
64
+ }
65
+ // The error message might be a string containing a JSON object.
66
+ if (typeof error === 'string') {
67
+ const jsonStart = error.indexOf('{');
68
+ if (jsonStart === -1) {
69
+ return `[API Error: ${error}]`; // Not a JSON error, return as is.
70
+ }
71
+ const jsonString = error.substring(jsonStart);
72
+ try {
73
+ const parsedError = JSON.parse(jsonString);
74
+ if (isApiError(parsedError)) {
75
+ let finalMessage = parsedError.error.message;
76
+ try {
77
+ // See if the message is a stringified JSON with another error
78
+ const nestedError = JSON.parse(finalMessage);
79
+ if (isApiError(nestedError)) {
80
+ finalMessage = nestedError.error.message;
81
+ }
82
+ }
83
+ catch (_e) {
84
+ // It's not a nested JSON error, so we just use the message as is.
85
+ }
86
+ let text = `[API Error: ${finalMessage} (Status: ${parsedError.error.status})]`;
87
+ if (parsedError.error.code === 429) {
88
+ // For provider auth type, use generic rate limit message
89
+ if (authType === AuthType.USE_PROVIDER) {
90
+ text += '\nRate limit exceeded. Please wait and try again later.';
91
+ }
92
+ else {
93
+ text += getRateLimitMessage(authType, parsedError, userTier, currentModel, fallbackModel);
94
+ }
95
+ }
96
+ return text;
97
+ }
98
+ }
99
+ catch (_e) {
100
+ // Not a valid JSON, fall through and return the original message.
101
+ }
102
+ return `[API Error: ${error}]`;
103
+ }
104
+ return '[API Error: An unknown error occurred.]';
105
+ }
106
+ //# sourceMappingURL=errorParsing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorParsing.js","sourceRoot":"","sources":["../../../../src/ui/utils/errorParsing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare const formatMemoryUsage: (bytes: number) => string;
7
+ /**
8
+ * Formats a duration in milliseconds into a concise, human-readable string (e.g., "1h 5s").
9
+ * It omits any time units that are zero.
10
+ * @param milliseconds The duration in milliseconds.
11
+ * @returns A formatted string representing the duration.
12
+ */
13
+ export declare const formatDuration: (milliseconds: number) => string;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export const formatMemoryUsage = (bytes) => {
7
+ const gb = bytes / (1024 * 1024 * 1024);
8
+ if (bytes < 1024 * 1024) {
9
+ return `${(bytes / 1024).toFixed(1)} KB`;
10
+ }
11
+ if (bytes < 1024 * 1024 * 1024) {
12
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
13
+ }
14
+ return `${gb.toFixed(2)} GB`;
15
+ };
16
+ /**
17
+ * Formats a duration in milliseconds into a concise, human-readable string (e.g., "1h 5s").
18
+ * It omits any time units that are zero.
19
+ * @param milliseconds The duration in milliseconds.
20
+ * @returns A formatted string representing the duration.
21
+ */
22
+ export const formatDuration = (milliseconds) => {
23
+ if (milliseconds <= 0) {
24
+ return '0s';
25
+ }
26
+ if (milliseconds < 1000) {
27
+ return `${Math.round(milliseconds)}ms`;
28
+ }
29
+ const totalSeconds = milliseconds / 1000;
30
+ if (totalSeconds < 60) {
31
+ return `${totalSeconds.toFixed(1)}s`;
32
+ }
33
+ const hours = Math.floor(totalSeconds / 3600);
34
+ const minutes = Math.floor((totalSeconds % 3600) / 60);
35
+ const seconds = Math.floor(totalSeconds % 60);
36
+ const parts = [];
37
+ if (hours > 0) {
38
+ parts.push(`${hours}h`);
39
+ }
40
+ if (minutes > 0) {
41
+ parts.push(`${minutes}m`);
42
+ }
43
+ if (seconds > 0) {
44
+ parts.push(`${seconds}s`);
45
+ }
46
+ // If all parts are zero (e.g., exactly 1 hour), return the largest unit.
47
+ if (parts.length === 0) {
48
+ if (hours > 0)
49
+ return `${hours}h`;
50
+ if (minutes > 0)
51
+ return `${minutes}m`;
52
+ return `${seconds}s`;
53
+ }
54
+ return parts.join(' ');
55
+ };
56
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../../../src/ui/utils/formatters.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAU,EAAE;IACzD,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IACxC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3C,CAAC;IACD,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,CAAC;IACD,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,YAAoB,EAAU,EAAE;IAC7D,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,YAAY,GAAG,IAAI,EAAE,CAAC;QACxB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,MAAM,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC;IAEzC,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,yEAAyE;IACzE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,GAAG,KAAK,GAAG,CAAC;QAClC,IAAI,OAAO,GAAG,CAAC;YAAE,OAAO,GAAG,OAAO,GAAG,CAAC;QACtC,OAAO,GAAG,OAAO,GAAG,CAAC;IACvB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare const findLastSafeSplitPoint: (content: string) => number;