@gguf/coder 0.2.9 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. package/.editorconfig +16 -0
  2. package/.env.example +63 -0
  3. package/.gitattributes +1 -0
  4. package/.semgrepignore +19 -0
  5. package/coder-dummy-file.ts +52 -0
  6. package/coder.config.example.json +59 -0
  7. package/coder.config.json +13 -0
  8. package/color_picker.html +36 -0
  9. package/dist/tools/execute-bash.js +3 -3
  10. package/dist/tools/execute-bash.js.map +1 -1
  11. package/dist/tools/fetch-url.js +3 -3
  12. package/dist/tools/fetch-url.js.map +1 -1
  13. package/dist/tools/find-files.d.ts.map +1 -1
  14. package/dist/tools/find-files.js +1 -1
  15. package/dist/tools/find-files.js.map +1 -1
  16. package/dist/tools/lsp-get-diagnostics.js +1 -1
  17. package/dist/tools/lsp-get-diagnostics.js.map +1 -1
  18. package/dist/tools/read-file.d.ts.map +1 -1
  19. package/dist/tools/read-file.js +6 -6
  20. package/dist/tools/read-file.js.map +1 -1
  21. package/dist/tools/search-file-contents.d.ts.map +1 -1
  22. package/dist/tools/search-file-contents.js +1 -1
  23. package/dist/tools/search-file-contents.js.map +1 -1
  24. package/dist/tools/string-replace.js +11 -11
  25. package/dist/tools/string-replace.js.map +1 -1
  26. package/dist/tools/web-search.d.ts.map +1 -1
  27. package/dist/tools/web-search.js +3 -3
  28. package/dist/tools/web-search.js.map +1 -1
  29. package/dist/tools/write-file.js +4 -4
  30. package/dist/tools/write-file.js.map +1 -1
  31. package/dist/utils/tool-result-display.d.ts.map +1 -1
  32. package/dist/utils/tool-result-display.js +3 -3
  33. package/dist/utils/tool-result-display.js.map +1 -1
  34. package/package.json +2 -14
  35. package/scripts/extract-changelog.js +73 -0
  36. package/scripts/fetch-models.js +143 -0
  37. package/scripts/test.sh +40 -0
  38. package/scripts/update-homebrew-formula.sh +125 -0
  39. package/scripts/update-nix-version.sh +157 -0
  40. package/source/ai-sdk-client/AISDKClient.spec.ts +117 -0
  41. package/source/ai-sdk-client/AISDKClient.ts +155 -0
  42. package/source/ai-sdk-client/chat/chat-handler.spec.ts +121 -0
  43. package/source/ai-sdk-client/chat/chat-handler.ts +276 -0
  44. package/source/ai-sdk-client/chat/streaming-handler.spec.ts +173 -0
  45. package/source/ai-sdk-client/chat/streaming-handler.ts +110 -0
  46. package/source/ai-sdk-client/chat/tool-processor.spec.ts +92 -0
  47. package/source/ai-sdk-client/chat/tool-processor.ts +70 -0
  48. package/source/ai-sdk-client/converters/message-converter.spec.ts +220 -0
  49. package/source/ai-sdk-client/converters/message-converter.ts +113 -0
  50. package/source/ai-sdk-client/converters/tool-converter.spec.ts +90 -0
  51. package/source/ai-sdk-client/converters/tool-converter.ts +46 -0
  52. package/source/ai-sdk-client/error-handling/error-extractor.spec.ts +55 -0
  53. package/source/ai-sdk-client/error-handling/error-extractor.ts +15 -0
  54. package/source/ai-sdk-client/error-handling/error-parser.spec.ts +169 -0
  55. package/source/ai-sdk-client/error-handling/error-parser.ts +161 -0
  56. package/source/ai-sdk-client/index.ts +7 -0
  57. package/source/ai-sdk-client/providers/provider-factory.spec.ts +71 -0
  58. package/source/ai-sdk-client/providers/provider-factory.ts +41 -0
  59. package/source/ai-sdk-client/types.ts +9 -0
  60. package/source/ai-sdk-client-empty-message.spec.ts +141 -0
  61. package/source/ai-sdk-client-error-handling.spec.ts +186 -0
  62. package/source/ai-sdk-client-maxretries.spec.ts +114 -0
  63. package/source/ai-sdk-client-preparestep.spec.ts +279 -0
  64. package/source/app/App.spec.tsx +32 -0
  65. package/source/app/App.tsx +480 -0
  66. package/source/app/components/AppContainer.spec.tsx +96 -0
  67. package/source/app/components/AppContainer.tsx +56 -0
  68. package/source/app/components/ChatInterface.spec.tsx +163 -0
  69. package/source/app/components/ChatInterface.tsx +144 -0
  70. package/source/app/components/ModalSelectors.spec.tsx +141 -0
  71. package/source/app/components/ModalSelectors.tsx +135 -0
  72. package/source/app/helpers.spec.ts +97 -0
  73. package/source/app/helpers.ts +63 -0
  74. package/source/app/index.ts +4 -0
  75. package/source/app/types.ts +39 -0
  76. package/source/app/utils/appUtils.ts +294 -0
  77. package/source/app/utils/conversationState.ts +310 -0
  78. package/source/app.spec.tsx +244 -0
  79. package/source/cli.spec.ts +73 -0
  80. package/source/cli.tsx +51 -0
  81. package/source/client-factory.spec.ts +48 -0
  82. package/source/client-factory.ts +178 -0
  83. package/source/command-parser.spec.ts +127 -0
  84. package/source/command-parser.ts +36 -0
  85. package/source/commands/checkpoint.spec.tsx +277 -0
  86. package/source/commands/checkpoint.tsx +366 -0
  87. package/source/commands/clear.tsx +22 -0
  88. package/source/commands/custom-commands.tsx +121 -0
  89. package/source/commands/exit.ts +21 -0
  90. package/source/commands/export.spec.tsx +131 -0
  91. package/source/commands/export.tsx +79 -0
  92. package/source/commands/help.tsx +120 -0
  93. package/source/commands/index.ts +17 -0
  94. package/source/commands/init.tsx +339 -0
  95. package/source/commands/lsp-command.spec.tsx +281 -0
  96. package/source/commands/lsp.tsx +120 -0
  97. package/source/commands/mcp-command.spec.tsx +313 -0
  98. package/source/commands/mcp.tsx +162 -0
  99. package/source/commands/model-database.spec.tsx +758 -0
  100. package/source/commands/model-database.tsx +418 -0
  101. package/source/commands/model.ts +12 -0
  102. package/source/commands/provider.ts +12 -0
  103. package/source/commands/setup-config.tsx +16 -0
  104. package/source/commands/simple-commands.spec.tsx +175 -0
  105. package/source/commands/status.ts +12 -0
  106. package/source/commands/theme.ts +12 -0
  107. package/source/commands/update.spec.tsx +261 -0
  108. package/source/commands/update.tsx +201 -0
  109. package/source/commands/usage.spec.tsx +495 -0
  110. package/source/commands/usage.tsx +100 -0
  111. package/source/commands.spec.ts +436 -0
  112. package/source/commands.ts +83 -0
  113. package/source/components/assistant-message.spec.tsx +796 -0
  114. package/source/components/assistant-message.tsx +34 -0
  115. package/source/components/bash-execution-indicator.tsx +21 -0
  116. package/source/components/cancelling-indicator.tsx +16 -0
  117. package/source/components/chat-queue.spec.tsx +83 -0
  118. package/source/components/chat-queue.tsx +36 -0
  119. package/source/components/checkpoint-display.spec.tsx +219 -0
  120. package/source/components/checkpoint-display.tsx +126 -0
  121. package/source/components/checkpoint-selector.spec.tsx +173 -0
  122. package/source/components/checkpoint-selector.tsx +173 -0
  123. package/source/components/development-mode-indicator.spec.tsx +268 -0
  124. package/source/components/development-mode-indicator.tsx +38 -0
  125. package/source/components/message-box.spec.tsx +427 -0
  126. package/source/components/message-box.tsx +87 -0
  127. package/source/components/model-selector.tsx +132 -0
  128. package/source/components/provider-selector.tsx +75 -0
  129. package/source/components/random-spinner.tsx +19 -0
  130. package/source/components/security-disclaimer.tsx +73 -0
  131. package/source/components/status-connection-display.spec.tsx +133 -0
  132. package/source/components/status.tsx +267 -0
  133. package/source/components/theme-selector.tsx +126 -0
  134. package/source/components/tool-confirmation.tsx +190 -0
  135. package/source/components/tool-execution-indicator.tsx +33 -0
  136. package/source/components/tool-message.tsx +85 -0
  137. package/source/components/ui/titled-box.spec.tsx +207 -0
  138. package/source/components/ui/titled-box.tsx +57 -0
  139. package/source/components/usage/progress-bar.spec.tsx +398 -0
  140. package/source/components/usage/progress-bar.tsx +30 -0
  141. package/source/components/usage/usage-display.spec.tsx +780 -0
  142. package/source/components/usage/usage-display.tsx +291 -0
  143. package/source/components/user-input.spec.tsx +327 -0
  144. package/source/components/user-input.tsx +533 -0
  145. package/source/components/user-message.spec.tsx +230 -0
  146. package/source/components/user-message.tsx +84 -0
  147. package/source/components/welcome-message.tsx +76 -0
  148. package/source/config/env-substitution.ts +65 -0
  149. package/source/config/index.spec.ts +171 -0
  150. package/source/config/index.ts +154 -0
  151. package/source/config/paths.spec.ts +241 -0
  152. package/source/config/paths.ts +55 -0
  153. package/source/config/preferences.ts +51 -0
  154. package/source/config/themes.ts +315 -0
  155. package/source/constants.ts +130 -0
  156. package/source/context/mode-context.spec.ts +79 -0
  157. package/source/context/mode-context.ts +24 -0
  158. package/source/custom-commands/executor.spec.ts +142 -0
  159. package/source/custom-commands/executor.ts +64 -0
  160. package/source/custom-commands/loader.spec.ts +314 -0
  161. package/source/custom-commands/loader.ts +153 -0
  162. package/source/custom-commands/parser.ts +196 -0
  163. package/source/hooks/chat-handler/conversation/conversation-loop.spec.ts +39 -0
  164. package/source/hooks/chat-handler/conversation/conversation-loop.tsx +511 -0
  165. package/source/hooks/chat-handler/conversation/tool-executor.spec.ts +50 -0
  166. package/source/hooks/chat-handler/conversation/tool-executor.tsx +109 -0
  167. package/source/hooks/chat-handler/index.ts +12 -0
  168. package/source/hooks/chat-handler/state/streaming-state.spec.ts +26 -0
  169. package/source/hooks/chat-handler/state/streaming-state.ts +19 -0
  170. package/source/hooks/chat-handler/types.ts +38 -0
  171. package/source/hooks/chat-handler/useChatHandler.spec.tsx +321 -0
  172. package/source/hooks/chat-handler/useChatHandler.tsx +194 -0
  173. package/source/hooks/chat-handler/utils/context-checker.spec.ts +60 -0
  174. package/source/hooks/chat-handler/utils/context-checker.tsx +73 -0
  175. package/source/hooks/chat-handler/utils/message-helpers.spec.ts +42 -0
  176. package/source/hooks/chat-handler/utils/message-helpers.tsx +36 -0
  177. package/source/hooks/chat-handler/utils/tool-filters.spec.ts +109 -0
  178. package/source/hooks/chat-handler/utils/tool-filters.ts +64 -0
  179. package/source/hooks/useAppHandlers.tsx +291 -0
  180. package/source/hooks/useAppInitialization.tsx +422 -0
  181. package/source/hooks/useAppState.tsx +311 -0
  182. package/source/hooks/useDirectoryTrust.tsx +98 -0
  183. package/source/hooks/useInputState.ts +414 -0
  184. package/source/hooks/useModeHandlers.tsx +302 -0
  185. package/source/hooks/useNonInteractiveMode.ts +140 -0
  186. package/source/hooks/useTerminalWidth.tsx +81 -0
  187. package/source/hooks/useTheme.ts +18 -0
  188. package/source/hooks/useToolHandler.tsx +349 -0
  189. package/source/hooks/useUIState.ts +61 -0
  190. package/source/init/agents-template-generator.ts +421 -0
  191. package/source/init/existing-rules-extractor.ts +319 -0
  192. package/source/init/file-scanner.spec.ts +227 -0
  193. package/source/init/file-scanner.ts +238 -0
  194. package/source/init/framework-detector.ts +382 -0
  195. package/source/init/language-detector.ts +269 -0
  196. package/source/init/project-analyzer.spec.ts +231 -0
  197. package/source/init/project-analyzer.ts +458 -0
  198. package/source/lsp/index.ts +31 -0
  199. package/source/lsp/lsp-client.spec.ts +508 -0
  200. package/source/lsp/lsp-client.ts +487 -0
  201. package/source/lsp/lsp-manager.spec.ts +477 -0
  202. package/source/lsp/lsp-manager.ts +419 -0
  203. package/source/lsp/protocol.spec.ts +502 -0
  204. package/source/lsp/protocol.ts +360 -0
  205. package/source/lsp/server-discovery.spec.ts +654 -0
  206. package/source/lsp/server-discovery.ts +515 -0
  207. package/source/markdown-parser/html-entities.spec.ts +88 -0
  208. package/source/markdown-parser/html-entities.ts +45 -0
  209. package/source/markdown-parser/index.spec.ts +281 -0
  210. package/source/markdown-parser/index.ts +126 -0
  211. package/source/markdown-parser/table-parser.spec.ts +133 -0
  212. package/source/markdown-parser/table-parser.ts +114 -0
  213. package/source/markdown-parser/utils.spec.ts +70 -0
  214. package/source/markdown-parser/utils.ts +13 -0
  215. package/source/mcp/mcp-client.spec.ts +81 -0
  216. package/source/mcp/mcp-client.ts +625 -0
  217. package/source/mcp/transport-factory.spec.ts +406 -0
  218. package/source/mcp/transport-factory.ts +312 -0
  219. package/source/message-handler.ts +67 -0
  220. package/source/model-database/database-engine.spec.ts +494 -0
  221. package/source/model-database/database-engine.ts +50 -0
  222. package/source/model-database/model-database.spec.ts +363 -0
  223. package/source/model-database/model-database.ts +91 -0
  224. package/source/model-database/model-engine.spec.ts +447 -0
  225. package/source/model-database/model-engine.ts +65 -0
  226. package/source/model-database/model-fetcher.spec.ts +583 -0
  227. package/source/model-database/model-fetcher.ts +330 -0
  228. package/source/models/index.ts +1 -0
  229. package/source/models/models-cache.spec.ts +214 -0
  230. package/source/models/models-cache.ts +78 -0
  231. package/source/models/models-dev-client.spec.ts +379 -0
  232. package/source/models/models-dev-client.ts +329 -0
  233. package/source/models/models-types.ts +68 -0
  234. package/source/prompt-history.ts +155 -0
  235. package/source/security/command-injection.spec.ts +240 -0
  236. package/source/services/checkpoint-manager.spec.ts +523 -0
  237. package/source/services/checkpoint-manager.ts +466 -0
  238. package/source/services/file-snapshot.spec.ts +569 -0
  239. package/source/services/file-snapshot.ts +220 -0
  240. package/source/test-utils/render-with-theme.tsx +48 -0
  241. package/source/tokenization/index.ts +1 -0
  242. package/source/tokenization/tokenizer-factory.spec.ts +170 -0
  243. package/source/tokenization/tokenizer-factory.ts +125 -0
  244. package/source/tokenization/tokenizers/anthropic-tokenizer.spec.ts +200 -0
  245. package/source/tokenization/tokenizers/anthropic-tokenizer.ts +43 -0
  246. package/source/tokenization/tokenizers/fallback-tokenizer.spec.ts +236 -0
  247. package/source/tokenization/tokenizers/fallback-tokenizer.ts +26 -0
  248. package/source/tokenization/tokenizers/llama-tokenizer.spec.ts +224 -0
  249. package/source/tokenization/tokenizers/llama-tokenizer.ts +41 -0
  250. package/source/tokenization/tokenizers/openai-tokenizer.spec.ts +184 -0
  251. package/source/tokenization/tokenizers/openai-tokenizer.ts +57 -0
  252. package/source/tool-calling/index.ts +5 -0
  253. package/source/tool-calling/json-parser.spec.ts +639 -0
  254. package/source/tool-calling/json-parser.ts +247 -0
  255. package/source/tool-calling/tool-parser.spec.ts +395 -0
  256. package/source/tool-calling/tool-parser.ts +120 -0
  257. package/source/tool-calling/xml-parser.spec.ts +662 -0
  258. package/source/tool-calling/xml-parser.ts +289 -0
  259. package/source/tools/execute-bash.spec.tsx +353 -0
  260. package/source/tools/execute-bash.tsx +219 -0
  261. package/source/tools/execute-function.spec.ts +130 -0
  262. package/source/tools/fetch-url.spec.tsx +342 -0
  263. package/source/tools/fetch-url.tsx +172 -0
  264. package/source/tools/find-files.spec.tsx +924 -0
  265. package/source/tools/find-files.tsx +293 -0
  266. package/source/tools/index.ts +102 -0
  267. package/source/tools/lsp-get-diagnostics.tsx +192 -0
  268. package/source/tools/needs-approval.spec.ts +282 -0
  269. package/source/tools/read-file.spec.tsx +801 -0
  270. package/source/tools/read-file.tsx +387 -0
  271. package/source/tools/search-file-contents.spec.tsx +1273 -0
  272. package/source/tools/search-file-contents.tsx +293 -0
  273. package/source/tools/string-replace.spec.tsx +730 -0
  274. package/source/tools/string-replace.tsx +548 -0
  275. package/source/tools/tool-manager.ts +210 -0
  276. package/source/tools/tool-registry.spec.ts +415 -0
  277. package/source/tools/tool-registry.ts +228 -0
  278. package/source/tools/web-search.tsx +223 -0
  279. package/source/tools/write-file.spec.tsx +559 -0
  280. package/source/tools/write-file.tsx +228 -0
  281. package/source/types/app.ts +37 -0
  282. package/source/types/checkpoint.ts +48 -0
  283. package/source/types/commands.ts +46 -0
  284. package/source/types/components.ts +27 -0
  285. package/source/types/config.ts +103 -0
  286. package/source/types/core-connection-status.spec.ts +67 -0
  287. package/source/types/core.ts +181 -0
  288. package/source/types/hooks.ts +50 -0
  289. package/source/types/index.ts +12 -0
  290. package/source/types/markdown-parser.ts +11 -0
  291. package/source/types/mcp.ts +52 -0
  292. package/source/types/system.ts +16 -0
  293. package/source/types/tokenization.ts +41 -0
  294. package/source/types/ui.ts +40 -0
  295. package/source/types/usage.ts +58 -0
  296. package/source/types/utils.ts +16 -0
  297. package/source/usage/calculator.spec.ts +385 -0
  298. package/source/usage/calculator.ts +104 -0
  299. package/source/usage/storage.spec.ts +703 -0
  300. package/source/usage/storage.ts +238 -0
  301. package/source/usage/tracker.spec.ts +456 -0
  302. package/source/usage/tracker.ts +102 -0
  303. package/source/utils/atomic-deletion.spec.ts +194 -0
  304. package/source/utils/atomic-deletion.ts +127 -0
  305. package/source/utils/bounded-map.spec.ts +300 -0
  306. package/source/utils/bounded-map.ts +193 -0
  307. package/source/utils/checkpoint-utils.spec.ts +222 -0
  308. package/source/utils/checkpoint-utils.ts +92 -0
  309. package/source/utils/error-formatter.spec.ts +169 -0
  310. package/source/utils/error-formatter.ts +194 -0
  311. package/source/utils/file-autocomplete.spec.ts +173 -0
  312. package/source/utils/file-autocomplete.ts +196 -0
  313. package/source/utils/file-cache.spec.ts +309 -0
  314. package/source/utils/file-cache.ts +195 -0
  315. package/source/utils/file-content-loader.spec.ts +180 -0
  316. package/source/utils/file-content-loader.ts +179 -0
  317. package/source/utils/file-mention-handler.spec.ts +261 -0
  318. package/source/utils/file-mention-handler.ts +84 -0
  319. package/source/utils/file-mention-parser.spec.ts +182 -0
  320. package/source/utils/file-mention-parser.ts +170 -0
  321. package/source/utils/fuzzy-matching.spec.ts +149 -0
  322. package/source/utils/fuzzy-matching.ts +146 -0
  323. package/source/utils/indentation-normalizer.spec.ts +216 -0
  324. package/source/utils/indentation-normalizer.ts +76 -0
  325. package/source/utils/installation-detector.spec.ts +178 -0
  326. package/source/utils/installation-detector.ts +153 -0
  327. package/source/utils/logging/config.spec.ts +311 -0
  328. package/source/utils/logging/config.ts +210 -0
  329. package/source/utils/logging/console-facade.spec.ts +184 -0
  330. package/source/utils/logging/console-facade.ts +384 -0
  331. package/source/utils/logging/correlation.spec.ts +679 -0
  332. package/source/utils/logging/correlation.ts +474 -0
  333. package/source/utils/logging/formatters.spec.ts +464 -0
  334. package/source/utils/logging/formatters.ts +207 -0
  335. package/source/utils/logging/health-monitor/alerts/alert-manager.spec.ts +93 -0
  336. package/source/utils/logging/health-monitor/alerts/alert-manager.ts +79 -0
  337. package/source/utils/logging/health-monitor/checks/configuration-check.spec.ts +56 -0
  338. package/source/utils/logging/health-monitor/checks/configuration-check.ts +43 -0
  339. package/source/utils/logging/health-monitor/checks/logging-check.spec.ts +56 -0
  340. package/source/utils/logging/health-monitor/checks/logging-check.ts +58 -0
  341. package/source/utils/logging/health-monitor/checks/memory-check.spec.ts +100 -0
  342. package/source/utils/logging/health-monitor/checks/memory-check.ts +78 -0
  343. package/source/utils/logging/health-monitor/checks/performance-check.spec.ts +56 -0
  344. package/source/utils/logging/health-monitor/checks/performance-check.ts +56 -0
  345. package/source/utils/logging/health-monitor/checks/request-check.spec.ts +56 -0
  346. package/source/utils/logging/health-monitor/checks/request-check.ts +76 -0
  347. package/source/utils/logging/health-monitor/core/health-check-runner.spec.ts +70 -0
  348. package/source/utils/logging/health-monitor/core/health-check-runner.ts +138 -0
  349. package/source/utils/logging/health-monitor/core/health-monitor.spec.ts +58 -0
  350. package/source/utils/logging/health-monitor/core/health-monitor.ts +344 -0
  351. package/source/utils/logging/health-monitor/core/scoring.spec.ts +65 -0
  352. package/source/utils/logging/health-monitor/core/scoring.ts +91 -0
  353. package/source/utils/logging/health-monitor/index.ts +15 -0
  354. package/source/utils/logging/health-monitor/instances.ts +48 -0
  355. package/source/utils/logging/health-monitor/middleware/http-middleware.spec.ts +141 -0
  356. package/source/utils/logging/health-monitor/middleware/http-middleware.ts +75 -0
  357. package/source/utils/logging/health-monitor/types.ts +126 -0
  358. package/source/utils/logging/index.spec.ts +284 -0
  359. package/source/utils/logging/index.ts +236 -0
  360. package/source/utils/logging/integration.spec.ts +441 -0
  361. package/source/utils/logging/log-method-factory.spec.ts +573 -0
  362. package/source/utils/logging/log-method-factory.ts +233 -0
  363. package/source/utils/logging/log-query/aggregation/aggregator.spec.ts +277 -0
  364. package/source/utils/logging/log-query/aggregation/aggregator.ts +159 -0
  365. package/source/utils/logging/log-query/aggregation/facet-generator.spec.ts +159 -0
  366. package/source/utils/logging/log-query/aggregation/facet-generator.ts +47 -0
  367. package/source/utils/logging/log-query/index.ts +23 -0
  368. package/source/utils/logging/log-query/query/filter-predicates.spec.ts +247 -0
  369. package/source/utils/logging/log-query/query/filter-predicates.ts +154 -0
  370. package/source/utils/logging/log-query/query/query-builder.spec.ts +182 -0
  371. package/source/utils/logging/log-query/query/query-builder.ts +151 -0
  372. package/source/utils/logging/log-query/query/query-engine.spec.ts +214 -0
  373. package/source/utils/logging/log-query/query/query-engine.ts +45 -0
  374. package/source/utils/logging/log-query/storage/circular-buffer.spec.ts +143 -0
  375. package/source/utils/logging/log-query/storage/circular-buffer.ts +75 -0
  376. package/source/utils/logging/log-query/storage/index-manager.spec.ts +150 -0
  377. package/source/utils/logging/log-query/storage/index-manager.ts +71 -0
  378. package/source/utils/logging/log-query/storage/log-storage.spec.ts +257 -0
  379. package/source/utils/logging/log-query/storage/log-storage.ts +80 -0
  380. package/source/utils/logging/log-query/types.ts +163 -0
  381. package/source/utils/logging/log-query/utils/helpers.spec.ts +263 -0
  382. package/source/utils/logging/log-query/utils/helpers.ts +72 -0
  383. package/source/utils/logging/log-query/utils/sorting.spec.ts +182 -0
  384. package/source/utils/logging/log-query/utils/sorting.ts +61 -0
  385. package/source/utils/logging/logger-provider.spec.ts +262 -0
  386. package/source/utils/logging/logger-provider.ts +362 -0
  387. package/source/utils/logging/performance.spec.ts +209 -0
  388. package/source/utils/logging/performance.ts +757 -0
  389. package/source/utils/logging/pino-logger.spec.ts +425 -0
  390. package/source/utils/logging/pino-logger.ts +514 -0
  391. package/source/utils/logging/redaction.spec.ts +490 -0
  392. package/source/utils/logging/redaction.ts +267 -0
  393. package/source/utils/logging/request-tracker.spec.ts +1198 -0
  394. package/source/utils/logging/request-tracker.ts +803 -0
  395. package/source/utils/logging/transports.spec.ts +505 -0
  396. package/source/utils/logging/transports.ts +305 -0
  397. package/source/utils/logging/types.ts +216 -0
  398. package/source/utils/message-builder.spec.ts +179 -0
  399. package/source/utils/message-builder.ts +101 -0
  400. package/source/utils/message-queue.tsx +486 -0
  401. package/source/utils/paste-detection.spec.ts +69 -0
  402. package/source/utils/paste-detection.ts +124 -0
  403. package/source/utils/paste-roundtrip.spec.ts +442 -0
  404. package/source/utils/paste-utils.spec.ts +128 -0
  405. package/source/utils/paste-utils.ts +52 -0
  406. package/source/utils/programming-language-helper.spec.ts +74 -0
  407. package/source/utils/programming-language-helper.ts +32 -0
  408. package/source/utils/prompt-assembly.spec.ts +221 -0
  409. package/source/utils/prompt-processor.ts +173 -0
  410. package/source/utils/tool-args-parser.spec.ts +136 -0
  411. package/source/utils/tool-args-parser.ts +54 -0
  412. package/source/utils/tool-cancellation.spec.ts +230 -0
  413. package/source/utils/tool-cancellation.ts +28 -0
  414. package/source/utils/tool-result-display.spec.tsx +469 -0
  415. package/source/utils/tool-result-display.tsx +90 -0
  416. package/source/utils/update-checker.spec.ts +383 -0
  417. package/source/utils/update-checker.ts +183 -0
  418. package/source/wizard/config-wizard.spec.tsx +103 -0
  419. package/source/wizard/config-wizard.tsx +382 -0
  420. package/source/wizard/steps/location-step.spec.tsx +186 -0
  421. package/source/wizard/steps/location-step.tsx +147 -0
  422. package/source/wizard/steps/mcp-step.spec.tsx +607 -0
  423. package/source/wizard/steps/mcp-step.tsx +632 -0
  424. package/source/wizard/steps/provider-step.spec.tsx +342 -0
  425. package/source/wizard/steps/provider-step.tsx +957 -0
  426. package/source/wizard/steps/summary-step.spec.tsx +749 -0
  427. package/source/wizard/steps/summary-step.tsx +228 -0
  428. package/source/wizard/templates/mcp-templates.spec.ts +613 -0
  429. package/source/wizard/templates/mcp-templates.ts +570 -0
  430. package/source/wizard/templates/provider-templates.spec.ts +152 -0
  431. package/source/wizard/templates/provider-templates.ts +485 -0
  432. package/source/wizard/utils/fetch-cloud-models.spec.ts +428 -0
  433. package/source/wizard/utils/fetch-cloud-models.ts +223 -0
  434. package/source/wizard/utils/fetch-local-models.spec.ts +297 -0
  435. package/source/wizard/utils/fetch-local-models.ts +192 -0
  436. package/source/wizard/validation-array.spec.ts +264 -0
  437. package/source/wizard/validation.spec.ts +373 -0
  438. package/source/wizard/validation.ts +232 -0
  439. package/source/app/prompts/main-prompt.md +0 -122
@@ -0,0 +1,190 @@
1
+ import {useTerminalWidth} from '@/hooks/useTerminalWidth';
2
+ import {useTheme} from '@/hooks/useTheme';
3
+ import {getToolManager} from '@/message-handler';
4
+ import {toolFormatters} from '@/tools/index';
5
+ import type {ToolCall} from '@/types/core';
6
+ import {formatError} from '@/utils/error-formatter';
7
+ import {getLogger} from '@/utils/logging';
8
+ import {parseToolArguments} from '@/utils/tool-args-parser';
9
+ import {Box, Text, useInput} from 'ink';
10
+ import SelectInput from 'ink-select-input';
11
+ import React from 'react';
12
+
13
+ interface ToolConfirmationProps {
14
+ toolCall: ToolCall;
15
+ onConfirm: (confirmed: boolean) => void;
16
+ onCancel: () => void;
17
+ }
18
+
19
+ interface ConfirmationOption {
20
+ label: string;
21
+ value: boolean;
22
+ }
23
+
24
+ export default function ToolConfirmation({
25
+ toolCall,
26
+ onConfirm,
27
+ onCancel,
28
+ }: ToolConfirmationProps) {
29
+ const boxWidth = useTerminalWidth();
30
+ const {colors} = useTheme();
31
+ const [formatterPreview, setFormatterPreview] = React.useState<
32
+ React.ReactElement | string | null
33
+ >(null);
34
+ const [isLoadingPreview, setIsLoadingPreview] = React.useState(false);
35
+ const [hasFormatterError, setHasFormatterError] = React.useState(false);
36
+ const [hasValidationError, setHasValidationError] = React.useState(false);
37
+ const [_validationError, setValidationError] = React.useState<string | null>(
38
+ null,
39
+ );
40
+
41
+ // Get MCP tool info for display
42
+ const toolManager = getToolManager();
43
+ const mcpInfo = toolManager?.getMCPToolInfo(toolCall.function.name) || {
44
+ isMCPTool: false,
45
+ };
46
+
47
+ // Load formatter preview
48
+ React.useEffect(() => {
49
+ const loadPreview = async () => {
50
+ // Run validator first if available
51
+ if (toolManager) {
52
+ const validator = toolManager.getToolValidator(toolCall.function.name);
53
+ if (validator) {
54
+ try {
55
+ // Parse arguments if they're a JSON string
56
+ const parsedArgs = parseToolArguments(toolCall.function.arguments);
57
+
58
+ const validationResult = await validator(parsedArgs);
59
+ if (!validationResult.valid) {
60
+ setValidationError(validationResult.error);
61
+ setHasValidationError(true);
62
+ setFormatterPreview(
63
+ <Text color={colors.error}>{validationResult.error}</Text>,
64
+ );
65
+ return;
66
+ }
67
+ } catch (error) {
68
+ const logger = getLogger();
69
+ logger.error(
70
+ {error: formatError(error)},
71
+ 'Error running validator',
72
+ );
73
+ const errorMsg = `Validation error: ${formatError(error)}`;
74
+ setValidationError(errorMsg);
75
+ setHasValidationError(true);
76
+ setFormatterPreview(<Text color={colors.error}>{errorMsg}</Text>);
77
+ return;
78
+ }
79
+ }
80
+ }
81
+
82
+ const formatter = toolFormatters[toolCall.function.name];
83
+ if (formatter) {
84
+ setIsLoadingPreview(true);
85
+ try {
86
+ // Parse arguments if they're a JSON string
87
+ const parsedArgs = parseToolArguments(toolCall.function.arguments);
88
+ const preview = await formatter(parsedArgs);
89
+ setFormatterPreview(preview);
90
+ } catch (error) {
91
+ const logger = getLogger();
92
+ logger.error(
93
+ {error: formatError(error)},
94
+ 'Error loading formatter preview',
95
+ );
96
+ setHasFormatterError(true);
97
+ setFormatterPreview(
98
+ <Text color={colors.error}>Error: {String(error)}</Text>,
99
+ );
100
+ } finally {
101
+ setIsLoadingPreview(false);
102
+ }
103
+ }
104
+ };
105
+
106
+ void loadPreview();
107
+ }, [toolCall, toolManager, colors.error]);
108
+
109
+ // Handle escape key to cancel
110
+ useInput((_inputChar, key) => {
111
+ if (key.escape) {
112
+ onCancel();
113
+ }
114
+ });
115
+
116
+ // Auto-cancel if there's a formatter error (not validation error)
117
+ React.useEffect(() => {
118
+ if (hasFormatterError && !hasValidationError) {
119
+ // Automatically cancel the tool execution only for formatter crashes
120
+ onConfirm(false);
121
+ }
122
+ }, [hasFormatterError, hasValidationError, onConfirm]);
123
+
124
+ const options: ConfirmationOption[] = [
125
+ {label: '✓ Yes, execute this tool', value: true},
126
+ {label: '✗ No, cancel execution', value: false},
127
+ ];
128
+
129
+ const handleSelect = (item: ConfirmationOption) => {
130
+ onConfirm(item.value);
131
+ };
132
+
133
+ return (
134
+ <Box width={boxWidth} marginBottom={1}>
135
+ <Box flexDirection="column">
136
+ {/* Formatter preview */}
137
+ {isLoadingPreview && (
138
+ <Box marginBottom={1}>
139
+ <Text color={colors.secondary}>Loading preview...</Text>
140
+ </Box>
141
+ )}
142
+
143
+ {formatterPreview && !isLoadingPreview && (
144
+ <Box marginBottom={1} flexDirection="column">
145
+ <Box>
146
+ {React.isValidElement(formatterPreview) ? (
147
+ formatterPreview
148
+ ) : (
149
+ <Text color={colors.white}>{String(formatterPreview)}</Text>
150
+ )}
151
+ </Box>
152
+ </Box>
153
+ )}
154
+
155
+ {/* Only show approval prompt if there's no formatter crash */}
156
+ {!(hasFormatterError && !hasValidationError) && (
157
+ <>
158
+ <Box marginBottom={1}>
159
+ <Text color={colors.tool}>
160
+ {hasValidationError
161
+ ? 'Validation failed. Do you still want to execute this tool?'
162
+ : `Do you want to execute ${
163
+ mcpInfo.isMCPTool
164
+ ? `MCP tool "${toolCall.function.name}" from server "${mcpInfo.serverName}"`
165
+ : `tool "${toolCall.function.name}"`
166
+ }?`}
167
+ </Text>
168
+ </Box>
169
+
170
+ <SelectInput items={options} onSelect={handleSelect} />
171
+
172
+ <Box marginTop={1}>
173
+ <Text color={colors.secondary}>Press Escape to cancel</Text>
174
+ </Box>
175
+ </>
176
+ )}
177
+
178
+ {/* Show automatic cancellation message for formatter crashes only */}
179
+ {hasFormatterError && !hasValidationError && (
180
+ <Box marginTop={1}>
181
+ <Text color={colors.error}>
182
+ Tool execution cancelled due to formatter error.
183
+ </Text>
184
+ <Text color={colors.secondary}>Press Escape to continue</Text>
185
+ </Box>
186
+ )}
187
+ </Box>
188
+ </Box>
189
+ );
190
+ }
@@ -0,0 +1,33 @@
1
+ import { useTheme } from '@/hooks/useTheme';
2
+ import type { ToolExecutionIndicatorProps } from '@/types/index';
3
+ import { Box, Text } from 'ink';
4
+ import RandomSpinner from '@/components/random-spinner';
5
+
6
+ export default function ToolExecutionIndicator({
7
+ toolName,
8
+ currentIndex,
9
+ totalTools,
10
+ }: ToolExecutionIndicatorProps) {
11
+ const { colors } = useTheme();
12
+ return (
13
+ <Box flexDirection="column" marginBottom={1}>
14
+ <Box>
15
+ <RandomSpinner />
16
+ <Text color={colors.tool}> Executing tool: </Text>
17
+ <Text color={colors.primary}>{toolName}</Text>
18
+ </Box>
19
+
20
+ {totalTools > 1 && (
21
+ <Box marginTop={1}>
22
+ <Text color={colors.secondary}>
23
+ Tool {currentIndex + 1} of {totalTools}
24
+ </Text>
25
+ </Box>
26
+ )}
27
+
28
+ <Box marginTop={1}>
29
+ <Text color={colors.secondary}>Press Escape to cancel</Text>
30
+ </Box>
31
+ </Box>
32
+ );
33
+ }
@@ -0,0 +1,85 @@
1
+ import {Box, Text} from 'ink';
2
+ import React, {memo} from 'react';
3
+
4
+ import {TitledBox} from '@/components/ui/titled-box';
5
+ import {useTerminalWidth} from '@/hooks/useTerminalWidth';
6
+ import {useTheme} from '@/hooks/useTheme';
7
+
8
+ export default memo(function ToolMessage({
9
+ title,
10
+ message,
11
+ hideTitle = false,
12
+ hideBox = false,
13
+ isBashMode = false,
14
+ }: {
15
+ title?: string;
16
+ message: string | React.ReactNode;
17
+ hideTitle?: boolean;
18
+ hideBox?: boolean;
19
+ isBashMode?: boolean;
20
+ }) {
21
+ const boxWidth = useTerminalWidth();
22
+ const {colors} = useTheme();
23
+ // Handle both string and ReactNode messages
24
+ const messageContent =
25
+ typeof message === 'string' ? (
26
+ <Text color={colors.white}>{message}</Text>
27
+ ) : (
28
+ message
29
+ );
30
+
31
+ const borderColor = colors.tool;
32
+
33
+ return (
34
+ <>
35
+ {hideBox ? (
36
+ <Box width={boxWidth} flexDirection="column" marginBottom={1}>
37
+ {isBashMode && (
38
+ <Text color={colors.tool} bold>
39
+ Bash Command Output
40
+ </Text>
41
+ )}
42
+ {messageContent}
43
+ {isBashMode && (
44
+ <Text color={colors.secondary} dimColor>
45
+ Output truncated to 4k characters to save context
46
+ </Text>
47
+ )}
48
+ </Box>
49
+ ) : hideTitle ? (
50
+ <Box
51
+ borderStyle="round"
52
+ width={boxWidth}
53
+ borderColor={borderColor}
54
+ paddingX={2}
55
+ paddingY={0}
56
+ flexDirection="column"
57
+ >
58
+ {messageContent}
59
+ {isBashMode && (
60
+ <Text color={colors.white} dimColor>
61
+ Output truncated to 4k characters to save context
62
+ </Text>
63
+ )}
64
+ </Box>
65
+ ) : (
66
+ <TitledBox
67
+ title={title || 'Tool Message'}
68
+ width={boxWidth}
69
+ borderColor={borderColor}
70
+ paddingX={2}
71
+ paddingY={1}
72
+ flexDirection="column"
73
+ marginBottom={1}
74
+ >
75
+ {messageContent}
76
+ {isBashMode && (
77
+ <Text color={colors.tool} dimColor>
78
+ Output truncated to 4k characters to save context
79
+ </Text>
80
+ )}
81
+ </TitledBox>
82
+ )}
83
+ </>
84
+ );
85
+ });
@@ -0,0 +1,207 @@
1
+ import test from 'ava';
2
+ import {Text} from 'ink';
3
+ import {render} from 'ink-testing-library';
4
+ import React from 'react';
5
+ import {TitledBox} from './titled-box.js';
6
+
7
+ // ============================================================================
8
+ // Tests for TitledBox Component
9
+ // ============================================================================
10
+
11
+ console.log(`\ntitled-box.spec.tsx – ${React.version}`);
12
+
13
+ test('TitledBox renders with title', t => {
14
+ const {lastFrame} = render(
15
+ <TitledBox title="Test Title" borderColor="blue">
16
+ <Text>Content</Text>
17
+ </TitledBox>,
18
+ );
19
+
20
+ const output = lastFrame();
21
+ t.truthy(output);
22
+ t.regex(output!, /Test Title/);
23
+ });
24
+
25
+ test('TitledBox renders children content', t => {
26
+ const {lastFrame} = render(
27
+ <TitledBox title="Title" borderColor="green">
28
+ <Text>Hello World</Text>
29
+ </TitledBox>,
30
+ );
31
+
32
+ const output = lastFrame();
33
+ t.regex(output!, /Hello World/);
34
+ });
35
+
36
+ test('TitledBox renders with rounded border', t => {
37
+ const {lastFrame} = render(
38
+ <TitledBox title="Bordered" borderColor="cyan">
39
+ <Text>Content</Text>
40
+ </TitledBox>,
41
+ );
42
+
43
+ const output = lastFrame();
44
+ // Check for rounded border characters
45
+ t.regex(output!, /╭/); // Top-left corner
46
+ t.regex(output!, /╮/); // Top-right corner
47
+ t.regex(output!, /╰/); // Bottom-left corner
48
+ t.regex(output!, /╯/); // Bottom-right corner
49
+ });
50
+
51
+ test('TitledBox renders without crashing with minimal props', t => {
52
+ const {lastFrame} = render(
53
+ <TitledBox title="Minimal">
54
+ <Text>Content</Text>
55
+ </TitledBox>,
56
+ );
57
+
58
+ t.truthy(lastFrame());
59
+ });
60
+
61
+ test('TitledBox renders with custom width', t => {
62
+ const {lastFrame} = render(
63
+ <TitledBox title="Wide Box" borderColor="yellow" width={50}>
64
+ <Text>Content</Text>
65
+ </TitledBox>,
66
+ );
67
+
68
+ const output = lastFrame();
69
+ t.truthy(output);
70
+ t.regex(output!, /Wide Box/);
71
+ });
72
+
73
+ test('TitledBox renders with padding', t => {
74
+ const {lastFrame} = render(
75
+ <TitledBox title="Padded" borderColor="magenta" paddingX={2} paddingY={1}>
76
+ <Text>Padded Content</Text>
77
+ </TitledBox>,
78
+ );
79
+
80
+ const output = lastFrame();
81
+ t.regex(output!, /Padded Content/);
82
+ });
83
+
84
+ test('TitledBox renders with flexDirection column', t => {
85
+ const {lastFrame} = render(
86
+ <TitledBox title="Column" borderColor="white" flexDirection="column">
87
+ <Text>Line 1</Text>
88
+ <Text>Line 2</Text>
89
+ </TitledBox>,
90
+ );
91
+
92
+ const output = lastFrame();
93
+ t.regex(output!, /Line 1/);
94
+ t.regex(output!, /Line 2/);
95
+ });
96
+
97
+ test('TitledBox renders with marginBottom', t => {
98
+ const {lastFrame} = render(
99
+ <TitledBox title="With Margin" borderColor="red" marginBottom={1}>
100
+ <Text>Content</Text>
101
+ </TitledBox>,
102
+ );
103
+
104
+ const output = lastFrame();
105
+ t.truthy(output);
106
+ t.regex(output!, /With Margin/);
107
+ });
108
+
109
+ test('TitledBox renders multiple children', t => {
110
+ const {lastFrame} = render(
111
+ <TitledBox title="Multiple" borderColor="blue">
112
+ <Text>First</Text>
113
+ <Text>Second</Text>
114
+ <Text>Third</Text>
115
+ </TitledBox>,
116
+ );
117
+
118
+ const output = lastFrame();
119
+ t.regex(output!, /First/);
120
+ t.regex(output!, /Second/);
121
+ t.regex(output!, /Third/);
122
+ });
123
+
124
+ test('TitledBox renders with empty title', t => {
125
+ const {lastFrame} = render(
126
+ <TitledBox title="" borderColor="green">
127
+ <Text>Content</Text>
128
+ </TitledBox>,
129
+ );
130
+
131
+ const output = lastFrame();
132
+ t.truthy(output);
133
+ t.regex(output!, /Content/);
134
+ });
135
+
136
+ test('TitledBox renders with special characters in title', t => {
137
+ const {lastFrame} = render(
138
+ <TitledBox title="✻ Special & <Title>" borderColor="cyan">
139
+ <Text>Content</Text>
140
+ </TitledBox>,
141
+ );
142
+
143
+ const output = lastFrame();
144
+ t.regex(output!, /✻/);
145
+ t.regex(output!, /Special/);
146
+ });
147
+
148
+ test('TitledBox renders with long title', t => {
149
+ const longTitle = 'This is a very long title that might overflow';
150
+ const {lastFrame} = render(
151
+ <TitledBox title={longTitle} borderColor="yellow">
152
+ <Text>Content</Text>
153
+ </TitledBox>,
154
+ );
155
+
156
+ const output = lastFrame();
157
+ t.regex(output!, /This is a very long title/);
158
+ });
159
+
160
+ test('TitledBox renders nested components', t => {
161
+ const {lastFrame} = render(
162
+ <TitledBox title="Nested" borderColor="magenta">
163
+ <Text color="red">Red text</Text>
164
+ <Text bold>Bold text</Text>
165
+ </TitledBox>,
166
+ );
167
+
168
+ const output = lastFrame();
169
+ t.regex(output!, /Red text/);
170
+ t.regex(output!, /Bold text/);
171
+ });
172
+
173
+ test('TitledBox renders with all props combined', t => {
174
+ const {lastFrame} = render(
175
+ <TitledBox
176
+ title="Full Props"
177
+ borderColor="blue"
178
+ width={60}
179
+ paddingX={2}
180
+ paddingY={1}
181
+ flexDirection="column"
182
+ marginBottom={1}
183
+ >
184
+ <Text>Fully configured content</Text>
185
+ </TitledBox>,
186
+ );
187
+
188
+ const output = lastFrame();
189
+ t.truthy(output);
190
+ t.regex(output!, /Full Props/);
191
+ t.regex(output!, /Fully configured content/);
192
+ });
193
+
194
+ test('TitledBox title appears before content box', t => {
195
+ const {lastFrame} = render(
196
+ <TitledBox title="Header" borderColor="green">
197
+ <Text>Body</Text>
198
+ </TitledBox>,
199
+ );
200
+
201
+ const output = lastFrame();
202
+ const titleIndex = output!.indexOf('Header');
203
+ const bodyIndex = output!.indexOf('Body');
204
+
205
+ // Title should appear before body in the output
206
+ t.true(titleIndex < bodyIndex);
207
+ });
@@ -0,0 +1,57 @@
1
+ import {Box, Text} from 'ink';
2
+ import type {BoxProps} from 'ink';
3
+ import React from 'react';
4
+
5
+ export interface TitledBoxProps extends Omit<BoxProps, 'borderStyle'> {
6
+ /** Title to display in the top border */
7
+ title: string;
8
+ /** Border color */
9
+ borderColor?: string;
10
+ /** Children to render inside the box */
11
+ children: React.ReactNode;
12
+ }
13
+
14
+ /**
15
+ * A simple titled box component that displays a title in pill style
16
+ * above a bordered box. Replacement for @mishieck/ink-titled-box.
17
+ */
18
+ export function TitledBox({
19
+ title,
20
+ borderColor,
21
+ children,
22
+ width,
23
+ paddingX,
24
+ paddingY,
25
+ flexDirection,
26
+ marginBottom,
27
+ ...boxProps
28
+ }: TitledBoxProps) {
29
+ return (
30
+ <Box
31
+ flexDirection="column"
32
+ width={width}
33
+ marginBottom={marginBottom}
34
+ {...boxProps}
35
+ >
36
+ {/* Title row with pill styling */}
37
+ <Box>
38
+ <Text backgroundColor={borderColor} color="black" bold>
39
+ {' '}
40
+ {title}{' '}
41
+ </Text>
42
+ </Box>
43
+
44
+ {/* Content box with border */}
45
+ <Box
46
+ borderStyle="round"
47
+ borderColor={borderColor}
48
+ paddingX={paddingX}
49
+ paddingY={paddingY}
50
+ flexDirection={flexDirection}
51
+ width={width}
52
+ >
53
+ {children}
54
+ </Box>
55
+ </Box>
56
+ );
57
+ }