@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,477 @@
1
+ import {EventEmitter} from 'events';
2
+ import test from 'ava';
3
+ import {
4
+ LSPManager,
5
+ type LSPManagerConfig,
6
+ getLSPManager,
7
+ resetLSPManager,
8
+ } from './lsp-manager';
9
+
10
+ console.log(`\nlsp-manager.spec.ts`);
11
+
12
+ // Reset the singleton before each test to ensure isolation
13
+ test.beforeEach(async () => {
14
+ await resetLSPManager();
15
+ });
16
+
17
+ // Clean up after all tests
18
+ test.afterEach(async () => {
19
+ await resetLSPManager();
20
+ });
21
+
22
+ // Constructor tests
23
+ test('LSPManager - creates with default config', t => {
24
+ const manager = new LSPManager();
25
+ t.truthy(manager);
26
+ t.true(manager instanceof EventEmitter);
27
+ });
28
+
29
+ test('LSPManager - creates with custom rootUri', t => {
30
+ const manager = new LSPManager({
31
+ rootUri: 'file:///custom/path',
32
+ });
33
+ t.truthy(manager);
34
+ });
35
+
36
+ test('LSPManager - creates with servers config', t => {
37
+ const manager = new LSPManager({
38
+ servers: [
39
+ {
40
+ name: 'test-server',
41
+ command: 'test',
42
+ languages: ['ts'],
43
+ },
44
+ ],
45
+ });
46
+ t.truthy(manager);
47
+ });
48
+
49
+ // isInitialized tests
50
+ test('LSPManager - isInitialized returns false before initialization', t => {
51
+ const manager = new LSPManager();
52
+ t.false(manager.isInitialized());
53
+ });
54
+
55
+ // getConnectedServers tests
56
+ test('LSPManager - getConnectedServers returns empty array initially', t => {
57
+ const manager = new LSPManager();
58
+ t.deepEqual(manager.getConnectedServers(), []);
59
+ });
60
+
61
+ // getSupportedLanguages tests
62
+ test('LSPManager - getSupportedLanguages returns empty array initially', t => {
63
+ const manager = new LSPManager();
64
+ t.deepEqual(manager.getSupportedLanguages(), []);
65
+ });
66
+
67
+ // hasLanguageSupport tests
68
+ test('LSPManager - hasLanguageSupport returns false when no servers', t => {
69
+ const manager = new LSPManager();
70
+ t.false(manager.hasLanguageSupport('test.ts'));
71
+ t.false(manager.hasLanguageSupport('test.py'));
72
+ t.false(manager.hasLanguageSupport('test.go'));
73
+ });
74
+
75
+ // getStatus tests
76
+ test('LSPManager - getStatus returns correct initial state', t => {
77
+ const manager = new LSPManager();
78
+ const status = manager.getStatus();
79
+
80
+ t.false(status.initialized);
81
+ t.deepEqual(status.servers, []);
82
+ });
83
+
84
+ // getAllDiagnostics tests
85
+ test('LSPManager - getAllDiagnostics returns empty array initially', t => {
86
+ const manager = new LSPManager();
87
+ t.deepEqual(manager.getAllDiagnostics(), []);
88
+ });
89
+
90
+ // getDiagnostics tests
91
+ test('LSPManager - getDiagnostics returns empty array for unknown file', async t => {
92
+ const manager = new LSPManager();
93
+ const result = await manager.getDiagnostics('/test/file.ts');
94
+ t.deepEqual(result, []);
95
+ });
96
+
97
+ // getCompletions tests
98
+ test('LSPManager - getCompletions returns empty array when no client', async t => {
99
+ const manager = new LSPManager();
100
+ const result = await manager.getCompletions('/test/file.ts', 0, 0);
101
+ t.deepEqual(result, []);
102
+ });
103
+
104
+ // getCodeActions tests
105
+ test('LSPManager - getCodeActions returns empty array when no client', async t => {
106
+ const manager = new LSPManager();
107
+ const result = await manager.getCodeActions('/test/file.ts', 0, 0, 1, 10);
108
+ t.deepEqual(result, []);
109
+ });
110
+
111
+ test('LSPManager - getCodeActions accepts optional diagnostics', async t => {
112
+ const manager = new LSPManager();
113
+ const diagnostics = [
114
+ {
115
+ range: {
116
+ start: {line: 0, character: 0},
117
+ end: {line: 0, character: 5},
118
+ },
119
+ message: 'Test error',
120
+ },
121
+ ];
122
+ const result = await manager.getCodeActions(
123
+ '/test/file.ts',
124
+ 0,
125
+ 0,
126
+ 1,
127
+ 10,
128
+ diagnostics,
129
+ );
130
+ t.deepEqual(result, []);
131
+ });
132
+
133
+ // formatDocument tests
134
+ test('LSPManager - formatDocument returns empty array when no client', async t => {
135
+ const manager = new LSPManager();
136
+ const result = await manager.formatDocument('/test/file.ts');
137
+ t.deepEqual(result, []);
138
+ });
139
+
140
+ test('LSPManager - formatDocument accepts options', async t => {
141
+ const manager = new LSPManager();
142
+ const result = await manager.formatDocument('/test/file.ts', {
143
+ tabSize: 4,
144
+ insertSpaces: false,
145
+ });
146
+ t.deepEqual(result, []);
147
+ });
148
+
149
+ // openDocument tests
150
+ test('LSPManager - openDocument returns false when no client available', async t => {
151
+ const manager = new LSPManager();
152
+ const result = await manager.openDocument('/test/file.ts');
153
+ t.false(result);
154
+ });
155
+
156
+ test('LSPManager - openDocument returns false for unsupported extension', async t => {
157
+ const manager = new LSPManager();
158
+ const result = await manager.openDocument('/test/file.xyz');
159
+ t.false(result);
160
+ });
161
+
162
+ // updateDocument tests
163
+ test('LSPManager - updateDocument returns false when no client available', t => {
164
+ const manager = new LSPManager();
165
+ const result = manager.updateDocument('/test/file.ts', 'new content');
166
+ t.false(result);
167
+ });
168
+
169
+ // closeDocument tests
170
+ test('LSPManager - closeDocument returns false when no client available', t => {
171
+ const manager = new LSPManager();
172
+ const result = manager.closeDocument('/test/file.ts');
173
+ t.false(result);
174
+ });
175
+
176
+ // shutdown tests
177
+ test('LSPManager - shutdown does not throw when not initialized', async t => {
178
+ const manager = new LSPManager();
179
+ await t.notThrowsAsync(async () => {
180
+ await manager.shutdown();
181
+ });
182
+ });
183
+
184
+ test('LSPManager - shutdown clears state', async t => {
185
+ const manager = new LSPManager();
186
+ await manager.shutdown();
187
+
188
+ t.false(manager.isInitialized());
189
+ t.deepEqual(manager.getConnectedServers(), []);
190
+ t.deepEqual(manager.getSupportedLanguages(), []);
191
+ });
192
+
193
+ // Event emitter tests
194
+ test('LSPManager - is an EventEmitter', t => {
195
+ const manager = new LSPManager();
196
+ t.true(manager instanceof EventEmitter);
197
+ });
198
+
199
+ test('LSPManager - can add diagnostics listeners', t => {
200
+ const manager = new LSPManager();
201
+ let called = false;
202
+
203
+ manager.on('diagnostics', () => {
204
+ called = true;
205
+ });
206
+
207
+ manager.emit('diagnostics', {uri: 'test', diagnostics: []});
208
+ t.true(called);
209
+ });
210
+
211
+ test('LSPManager - can remove listeners', t => {
212
+ const manager = new LSPManager();
213
+ let count = 0;
214
+
215
+ const listener = () => count++;
216
+ manager.on('diagnostics', listener);
217
+ manager.emit('diagnostics', {uri: 'test', diagnostics: []});
218
+ t.is(count, 1);
219
+
220
+ manager.off('diagnostics', listener);
221
+ manager.emit('diagnostics', {uri: 'test', diagnostics: []});
222
+ t.is(count, 1);
223
+ });
224
+
225
+ // Singleton tests
226
+ test('getLSPManager - returns an LSPManager instance', t => {
227
+ const manager = getLSPManager();
228
+ t.truthy(manager);
229
+ t.true(manager instanceof LSPManager);
230
+ });
231
+
232
+ test('getLSPManager - returns same instance on multiple calls', t => {
233
+ const manager1 = getLSPManager();
234
+ const manager2 = getLSPManager();
235
+ t.is(manager1, manager2);
236
+ });
237
+
238
+ test('getLSPManager - accepts config on first call', t => {
239
+ const manager = getLSPManager({rootUri: 'file:///test'});
240
+ t.truthy(manager);
241
+ });
242
+
243
+ // resetLSPManager tests
244
+ test('resetLSPManager - creates fresh instance after reset', async t => {
245
+ const manager1 = getLSPManager();
246
+ await resetLSPManager();
247
+ const manager2 = getLSPManager();
248
+
249
+ t.not(manager1, manager2);
250
+ });
251
+
252
+ test('resetLSPManager - does not throw when no instance exists', async t => {
253
+ await resetLSPManager();
254
+ await t.notThrowsAsync(async () => {
255
+ await resetLSPManager();
256
+ });
257
+ });
258
+
259
+ // initialize tests
260
+ test('LSPManager - initialize returns array of results', async t => {
261
+ const manager = new LSPManager();
262
+ const results = await manager.initialize({
263
+ autoDiscover: false,
264
+ servers: [],
265
+ });
266
+
267
+ t.true(Array.isArray(results));
268
+ });
269
+
270
+ test('LSPManager - initialize sets initialized flag', async t => {
271
+ const manager = new LSPManager();
272
+ await manager.initialize({
273
+ autoDiscover: false,
274
+ servers: [],
275
+ });
276
+
277
+ t.true(manager.isInitialized());
278
+ });
279
+
280
+ test('LSPManager - initialize accepts onProgress callback', async t => {
281
+ const manager = new LSPManager();
282
+ const progressResults: unknown[] = [];
283
+
284
+ await manager.initialize({
285
+ autoDiscover: false,
286
+ servers: [],
287
+ onProgress: result => {
288
+ progressResults.push(result);
289
+ },
290
+ });
291
+
292
+ // With no servers, there should be no progress callbacks
293
+ t.deepEqual(progressResults, []);
294
+ });
295
+
296
+ // Config validation
297
+ test('LSPManager - handles empty config', t => {
298
+ const manager = new LSPManager({});
299
+ t.truthy(manager);
300
+ });
301
+
302
+ test('LSPManager - handles config with all options', t => {
303
+ const config: LSPManagerConfig = {
304
+ rootUri: 'file:///workspace',
305
+ servers: [
306
+ {
307
+ name: 'test',
308
+ command: 'test',
309
+ languages: ['ts'],
310
+ },
311
+ ],
312
+ autoDiscover: false,
313
+ onProgress: () => {},
314
+ };
315
+
316
+ const manager = new LSPManager(config);
317
+ t.truthy(manager);
318
+ });
319
+
320
+ // File path handling
321
+ test('LSPManager - handles absolute paths', async t => {
322
+ const manager = new LSPManager();
323
+ const result = await manager.openDocument('/absolute/path/file.ts');
324
+ t.false(result); // No client, but shouldn't throw
325
+ });
326
+
327
+ test('LSPManager - handles file:// URIs', async t => {
328
+ const manager = new LSPManager();
329
+ const result = await manager.openDocument('file:///test/file.ts');
330
+ t.false(result); // No client, but shouldn't throw
331
+ });
332
+
333
+ // Extension detection
334
+ test('LSPManager - hasLanguageSupport handles various extensions', t => {
335
+ const manager = new LSPManager();
336
+
337
+ // All should return false when no servers are connected
338
+ t.false(manager.hasLanguageSupport('file.ts'));
339
+ t.false(manager.hasLanguageSupport('file.tsx'));
340
+ t.false(manager.hasLanguageSupport('file.js'));
341
+ t.false(manager.hasLanguageSupport('file.py'));
342
+ t.false(manager.hasLanguageSupport('file.rs'));
343
+ t.false(manager.hasLanguageSupport('file.go'));
344
+ });
345
+
346
+ // Diagnostics result structure
347
+ test('LSPManager - getAllDiagnostics returns correct structure', t => {
348
+ const manager = new LSPManager();
349
+ const results = manager.getAllDiagnostics();
350
+
351
+ t.true(Array.isArray(results));
352
+ // Each result should have uri and diagnostics properties
353
+ for (const result of results) {
354
+ t.truthy(result.uri !== undefined);
355
+ t.truthy(result.diagnostics !== undefined);
356
+ }
357
+ });
358
+
359
+ // Status structure
360
+ test('LSPManager - getStatus returns correct structure', t => {
361
+ const manager = new LSPManager();
362
+ const status = manager.getStatus();
363
+
364
+ t.true(typeof status.initialized === 'boolean');
365
+ t.true(Array.isArray(status.servers));
366
+
367
+ for (const server of status.servers) {
368
+ t.truthy(server.name !== undefined);
369
+ t.true(typeof server.ready === 'boolean');
370
+ t.true(Array.isArray(server.languages));
371
+ }
372
+ });
373
+
374
+ // Note: Tests for initialize with invalid server commands are not included as
375
+ // they cause uncaught exceptions from child_process.spawn that AVA cannot properly catch.
376
+ // Error handling for invalid servers is tested via manual integration testing.
377
+
378
+ // Content parameter in openDocument
379
+ test('LSPManager - openDocument accepts optional content', async t => {
380
+ const manager = new LSPManager();
381
+ const result = await manager.openDocument('/test/file.ts', 'const x = 1;');
382
+ t.false(result); // No client, but should accept content parameter
383
+ });
384
+
385
+ // Multi-line range in getCodeActions
386
+ test('LSPManager - getCodeActions handles multi-line ranges', async t => {
387
+ const manager = new LSPManager();
388
+ const result = await manager.getCodeActions('/test/file.ts', 0, 0, 100, 50);
389
+ t.deepEqual(result, []);
390
+ });
391
+
392
+ // Formatting options
393
+ test('LSPManager - formatDocument with full options', async t => {
394
+ const manager = new LSPManager();
395
+ const result = await manager.formatDocument('/test/file.ts', {
396
+ tabSize: 4,
397
+ insertSpaces: false,
398
+ trimTrailingWhitespace: true,
399
+ insertFinalNewline: true,
400
+ trimFinalNewlines: true,
401
+ });
402
+ t.deepEqual(result, []);
403
+ });
404
+
405
+ // Edge cases
406
+ test('LSPManager - handles file with no extension', async t => {
407
+ const manager = new LSPManager();
408
+ const result = await manager.openDocument('/test/Makefile');
409
+ t.false(result);
410
+ });
411
+
412
+ test('LSPManager - handles hidden files', async t => {
413
+ const manager = new LSPManager();
414
+ const result = await manager.openDocument('/test/.gitignore');
415
+ t.false(result);
416
+ });
417
+
418
+ test('LSPManager - getDiagnostics handles paths with spaces', async t => {
419
+ const manager = new LSPManager();
420
+ const result = await manager.getDiagnostics('/test/my file.ts');
421
+ t.deepEqual(result, []);
422
+ });
423
+
424
+ test('LSPManager - getDiagnostics handles paths with special chars', async t => {
425
+ const manager = new LSPManager();
426
+ const result = await manager.getDiagnostics('/test/[special]/file.ts');
427
+ t.deepEqual(result, []);
428
+ });
429
+
430
+ // Unicode file paths
431
+ test('LSPManager - handles unicode file paths', async t => {
432
+ const manager = new LSPManager();
433
+ const result = await manager.openDocument('/test/файл.ts');
434
+ t.false(result);
435
+ });
436
+
437
+ // Completion position
438
+ test('LSPManager - getCompletions with various positions', async t => {
439
+ const manager = new LSPManager();
440
+
441
+ // Start of file
442
+ t.deepEqual(await manager.getCompletions('/test.ts', 0, 0), []);
443
+
444
+ // Middle of file
445
+ t.deepEqual(await manager.getCompletions('/test.ts', 50, 25), []);
446
+
447
+ // Large line number
448
+ t.deepEqual(await manager.getCompletions('/test.ts', 10000, 0), []);
449
+ });
450
+
451
+ // Shutdown and reinitialize
452
+ test('LSPManager - can shutdown and reinitialize', async t => {
453
+ const manager = new LSPManager();
454
+
455
+ await manager.initialize({autoDiscover: false, servers: []});
456
+ t.true(manager.isInitialized());
457
+
458
+ await manager.shutdown();
459
+ t.false(manager.isInitialized());
460
+
461
+ await manager.initialize({autoDiscover: false, servers: []});
462
+ t.true(manager.isInitialized());
463
+ });
464
+
465
+ // Event handling after shutdown
466
+ test('LSPManager - events still work after shutdown', async t => {
467
+ const manager = new LSPManager();
468
+ await manager.shutdown();
469
+
470
+ let called = false;
471
+ manager.on('diagnostics', () => {
472
+ called = true;
473
+ });
474
+
475
+ manager.emit('diagnostics', {uri: 'test', diagnostics: []});
476
+ t.true(called);
477
+ });