@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,75 @@
1
+ /**
2
+ * Health check middleware for HTTP servers
3
+ */
4
+
5
+ /**
6
+ * Health check middleware for HTTP servers
7
+ */
8
+ export function healthCheckMiddleware(healthChecks: {
9
+ full: () => Promise<{
10
+ status: 'healthy' | 'degraded' | 'unhealthy';
11
+ timestamp: string;
12
+ score: number;
13
+ checks: Array<{
14
+ name: string;
15
+ status: 'pass' | 'fail' | 'warn';
16
+ score: number;
17
+ }>;
18
+ }>;
19
+ ready: () => Promise<boolean>;
20
+ alive: () => boolean;
21
+ metrics: () => unknown;
22
+ }) {
23
+ return async (
24
+ req: {path: string},
25
+ res: {
26
+ status: (code: number) => {
27
+ json: (data: unknown) => void;
28
+ };
29
+ json: (data: unknown) => void;
30
+ },
31
+ next: () => void,
32
+ ) => {
33
+ if (req.path === '/health') {
34
+ try {
35
+ const health = await healthChecks.full();
36
+ const statusCode =
37
+ health.status === 'healthy'
38
+ ? 200
39
+ : health.status === 'degraded'
40
+ ? 200
41
+ : 503;
42
+
43
+ res.status(statusCode).json({
44
+ status: health.status,
45
+ timestamp: health.timestamp,
46
+ score: health.score,
47
+ checks: health.checks.map(check => ({
48
+ name: check.name,
49
+ status: check.status,
50
+ score: check.score,
51
+ })),
52
+ });
53
+ } catch (error) {
54
+ res.status(503).json({
55
+ status: 'unhealthy',
56
+ timestamp: new Date().toISOString(),
57
+ error: error instanceof Error ? error.message : 'Unknown error',
58
+ });
59
+ }
60
+ } else if (req.path === '/health/ready') {
61
+ const ready = await healthChecks.ready();
62
+ const statusCode = ready ? 200 : 503;
63
+ res.status(statusCode).json({ready});
64
+ } else if (req.path === '/health/live') {
65
+ const alive = healthChecks.alive();
66
+ const statusCode = alive ? 200 : 503;
67
+ res.status(statusCode).json({alive});
68
+ } else if (req.path === '/metrics') {
69
+ const metrics = healthChecks.metrics();
70
+ res.json(metrics);
71
+ } else {
72
+ next();
73
+ }
74
+ };
75
+ }
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Type definitions for health monitoring system
3
+ */
4
+
5
+ /**
6
+ * Health check result interface
7
+ */
8
+ export interface HealthCheckResult {
9
+ status: 'healthy' | 'degraded' | 'unhealthy';
10
+ score: number; // 0-100
11
+ checks: HealthCheck[];
12
+ timestamp: string;
13
+ duration: number;
14
+ correlationId: string;
15
+ summary: {
16
+ total: number;
17
+ passed: number;
18
+ failed: number;
19
+ warnings: number;
20
+ };
21
+ recommendations: string[];
22
+ }
23
+
24
+ /**
25
+ * Individual health check interface
26
+ */
27
+ export interface HealthCheck {
28
+ name: string;
29
+ status: 'pass' | 'fail' | 'warn';
30
+ score: number; // 0-100
31
+ duration: number;
32
+ message?: string;
33
+ details?: Record<string, unknown>;
34
+ error?: string;
35
+ threshold?: {
36
+ warning: number;
37
+ critical: number;
38
+ };
39
+ }
40
+
41
+ /**
42
+ * System metrics interface
43
+ */
44
+ export interface SystemMetrics {
45
+ timestamp: string;
46
+ memory: {
47
+ heapUsed: number;
48
+ heapTotal: number;
49
+ external: number;
50
+ rss: number;
51
+ heapUsagePercent: number;
52
+ };
53
+ cpu: {
54
+ usage: number;
55
+ loadAverage: number[];
56
+ };
57
+ process: {
58
+ uptime: number;
59
+ pid: number;
60
+ nodeVersion: string;
61
+ platform: string;
62
+ arch: string;
63
+ };
64
+ logging: {
65
+ totalLogEntries: number;
66
+ logRate: number; // entries per second
67
+ errorRate: number; // errors per second
68
+ averageLogSize: number;
69
+ oldestLogEntry?: string;
70
+ newestLogEntry?: string;
71
+ };
72
+ requests: {
73
+ totalRequests: number;
74
+ activeRequests: number;
75
+ averageDuration: number;
76
+ errorRate: number;
77
+ requestsPerSecond: number;
78
+ };
79
+ performance: {
80
+ operationCount: number;
81
+ averageDuration: number;
82
+ slowOperations: number;
83
+ memoryIntensiveOps: number;
84
+ };
85
+ }
86
+
87
+ /**
88
+ * Health check configuration
89
+ */
90
+ export interface HealthCheckConfig {
91
+ enabled: boolean;
92
+ interval: number; // ms between checks
93
+ timeout: number; // ms per check
94
+ thresholds: {
95
+ memory: {
96
+ heapUsageWarning: number; // percentage
97
+ heapUsageCritical: number;
98
+ externalWarning: number; // MB
99
+ externalCritical: number;
100
+ };
101
+ performance: {
102
+ averageDurationWarning: number; // ms
103
+ averageDurationCritical: number;
104
+ errorRateWarning: number; // percentage
105
+ errorRateCritical: number;
106
+ };
107
+ logging: {
108
+ logRateWarning: number; // logs per second
109
+ logRateCritical: number;
110
+ errorRateWarning: number; // percentage
111
+ errorRateCritical: number;
112
+ };
113
+ requests: {
114
+ durationWarning: number; // ms
115
+ durationCritical: number;
116
+ errorRateWarning: number; // percentage
117
+ errorRateCritical: number;
118
+ };
119
+ };
120
+ alerts: {
121
+ enabled: boolean;
122
+ channels: ('console' | 'file' | 'webhook')[];
123
+ webhookUrl?: string;
124
+ cooldown: number; // ms between alerts
125
+ };
126
+ }
@@ -0,0 +1,284 @@
1
+ import {existsSync, mkdirSync, rmSync, writeFileSync} from 'fs';
2
+ import {tmpdir} from 'os';
3
+ import {join} from 'path';
4
+ import test from 'ava';
5
+
6
+ console.log(`\nlogging/index.spec.ts`);
7
+
8
+ // Import the logging functions we want to test
9
+ import {
10
+ createChildLogger,
11
+ end,
12
+ flush,
13
+ getLogger,
14
+ getLoggerConfig,
15
+ initializeLogger,
16
+ isLevelEnabled,
17
+ log,
18
+ console as structuredConsole,
19
+ } from './index.js';
20
+
21
+ // Import logger provider for reset functionality
22
+ import {LoggerProvider} from './logger-provider.js';
23
+
24
+ // Import types for testing
25
+ import type {LogLevel, LoggerConfig} from './types.js';
26
+
27
+ // Create a temporary test directory
28
+ const testDir = join(tmpdir(), `coder-logging-test-${Date.now()}`);
29
+
30
+ test.before(() => {
31
+ // Create test directory
32
+ mkdirSync(testDir, {recursive: true});
33
+
34
+ // Set test environment variables
35
+ process.env.NODE_ENV = 'test';
36
+ process.env.LOG_LEVEL = 'debug';
37
+ });
38
+
39
+ test.after.always(async () => {
40
+ // Clean up test directory
41
+ if (existsSync(testDir)) {
42
+ rmSync(testDir, {recursive: true, force: true});
43
+ }
44
+
45
+ // Reset logger state
46
+ await end();
47
+ });
48
+
49
+ test('initializeLogger creates a logger instance', t => {
50
+ const logger = initializeLogger({
51
+ level: 'debug',
52
+ pretty: true,
53
+ });
54
+
55
+ t.truthy(logger, 'Logger should be created');
56
+ t.is(typeof logger.info, 'function', 'Logger should have info method');
57
+ t.is(typeof logger.error, 'function', 'Logger should have error method');
58
+ t.is(typeof logger.warn, 'function', 'Logger should have warn method');
59
+ t.is(typeof logger.debug, 'function', 'Logger should have debug method');
60
+ });
61
+
62
+ test('getLogger returns the same logger instance', t => {
63
+ // Reset logger state first
64
+ const logger1 = initializeLogger({level: 'info'});
65
+ const logger2 = getLogger();
66
+ const logger3 = getLogger();
67
+
68
+ t.is(logger1, logger2, 'Should return same instance');
69
+ t.is(logger2, logger3, 'Should return same instance');
70
+ });
71
+
72
+ test('getLogger auto-initializes with defaults', async t => {
73
+ // Reset logger state
74
+ await end();
75
+
76
+ const logger = getLogger();
77
+
78
+ t.truthy(logger, 'Should auto-initialize logger');
79
+ t.is(typeof logger.info, 'function', 'Should have info method');
80
+ });
81
+
82
+ test('getLoggerConfig returns current configuration', t => {
83
+ const config: LoggerConfig = {
84
+ level: 'warn',
85
+ pretty: false,
86
+ redact: ['apiKey'],
87
+ correlation: true,
88
+ serialize: true,
89
+ };
90
+
91
+ initializeLogger(config);
92
+ const retrievedConfig = getLoggerConfig();
93
+
94
+ t.truthy(retrievedConfig, 'Should return configuration');
95
+ // Note: The logger provider may apply default configuration overrides
96
+ // so we check that the level is set appropriately rather than exact match
97
+ t.truthy(retrievedConfig!.level, 'Should have level');
98
+ t.is(retrievedConfig!.pretty, config.pretty, 'Should match pretty setting');
99
+ // Check that the redaction rules include our custom rule
100
+ t.true(
101
+ retrievedConfig!.redact.includes('apiKey'),
102
+ 'Should include custom redaction rule',
103
+ );
104
+ });
105
+
106
+ test('createChildLogger creates child with bindings', t => {
107
+ const parentLogger = initializeLogger({level: 'debug'});
108
+ const childBindings = {module: 'test', userId: '123'};
109
+ const childLogger = createChildLogger(childBindings);
110
+
111
+ t.truthy(childLogger, 'Should create child logger');
112
+ t.is(typeof childLogger.info, 'function', 'Child should have info method');
113
+ t.not(parentLogger, childLogger, 'Should be different instance');
114
+ });
115
+
116
+ test('isLevelEnabled checks log level correctly', t => {
117
+ // Reset logger to ensure clean state
118
+ const provider = LoggerProvider.getInstance();
119
+ provider.reset();
120
+
121
+ // Initialize with debug level to ensure logging is enabled in tests
122
+ initializeLogger({level: 'debug'});
123
+
124
+ // With debug level, these should all be enabled
125
+ t.true(
126
+ isLevelEnabled('debug'),
127
+ 'Debug should be enabled',
128
+ );
129
+ t.true(
130
+ isLevelEnabled('trace'),
131
+ 'Trace should be enabled',
132
+ );
133
+ t.true(isLevelEnabled('warn'), 'Warn should be enabled');
134
+ t.true(isLevelEnabled('error'), 'Error should be enabled');
135
+ t.true(isLevelEnabled('fatal'), 'Fatal should be enabled');
136
+ });
137
+
138
+ test('log convenience methods work correctly', t => {
139
+ const logger = initializeLogger({level: 'debug'});
140
+
141
+ t.notThrows(() => {
142
+ log.debug('Debug message');
143
+ log.info('Info message');
144
+ log.warn('Warning message');
145
+ log.error('Error message');
146
+ log.fatal('Fatal message');
147
+ log.http('HTTP message');
148
+ log.trace('Trace message');
149
+ }, 'Log methods should not throw');
150
+ });
151
+
152
+ test('structured console facade provides backward compatibility', t => {
153
+ t.notThrows(() => {
154
+ structuredConsole.log('Test log message');
155
+ structuredConsole.info('Test info message');
156
+ structuredConsole.warn('Test warning message');
157
+ structuredConsole.error('Test error message');
158
+ structuredConsole.debug('Test debug message');
159
+ }, 'Console facade methods should not throw');
160
+ });
161
+
162
+ test('flush and end methods work correctly', async t => {
163
+ const logger = initializeLogger({level: 'info'});
164
+
165
+ logger.info('Test message for flushing');
166
+
167
+ await t.notThrowsAsync(async () => {
168
+ await flush();
169
+ await end();
170
+ }, 'Flush and end should not throw');
171
+ });
172
+
173
+ test('logger handles different log levels correctly', t => {
174
+ const logger = initializeLogger({level: 'warn'});
175
+
176
+ // These should be filtered out
177
+ t.notThrows(() => {
178
+ logger.trace('trace message');
179
+ logger.debug('debug message');
180
+ logger.info('info message');
181
+ logger.http('http message');
182
+ }, 'Filtered levels should not throw');
183
+
184
+ // These should be logged
185
+ t.notThrows(() => {
186
+ logger.warn('warn message');
187
+ logger.error('error message');
188
+ logger.fatal('fatal message');
189
+ }, 'Active levels should not throw');
190
+ });
191
+
192
+ test('logger handles structured data correctly', t => {
193
+ const logger = initializeLogger({level: 'debug'});
194
+
195
+ const testData = {
196
+ userId: '123',
197
+ action: 'login',
198
+ metadata: {ip: '127.0.0.1', userAgent: 'test-agent'},
199
+ };
200
+
201
+ t.notThrows(() => {
202
+ logger.info('User action', testData);
203
+ logger.warn('Warning with data', {type: 'validation', details: testData});
204
+ logger.error('Error with context', {
205
+ error: new Error('test'),
206
+ context: testData,
207
+ });
208
+ }, 'Structured data should be handled correctly');
209
+ });
210
+
211
+ test('logger handles edge cases gracefully', t => {
212
+ const logger = initializeLogger({level: 'debug'});
213
+
214
+ // Empty message
215
+ t.notThrows(() => {
216
+ logger.info('');
217
+ logger.info(null as any);
218
+ logger.info(undefined as any);
219
+ }, 'Edge cases should not throw');
220
+
221
+ // Large objects
222
+ const largeObject = {data: 'x'.repeat(10000)};
223
+ t.notThrows(() => {
224
+ logger.info('Large object', largeObject);
225
+ }, 'Large objects should be handled');
226
+
227
+ // Circular references
228
+ const circular: any = {a: 1};
229
+ circular.self = circular;
230
+ t.notThrows(() => {
231
+ logger.info('Circular reference', circular);
232
+ }, 'Circular references should be handled');
233
+ });
234
+
235
+ test('logger maintains correlation context', t => {
236
+ const logger = initializeLogger({
237
+ level: 'debug',
238
+ correlation: true,
239
+ });
240
+
241
+ t.notThrows(() => {
242
+ logger.info('Message with correlation');
243
+ logger.child({requestId: 'req-123'}).info('Child message');
244
+ }, 'Correlation context should be maintained');
245
+ });
246
+
247
+ test('logger respects redaction rules', t => {
248
+ const logger = initializeLogger({
249
+ level: 'debug',
250
+ redact: ['apiKey', 'token', 'password', 'secret'],
251
+ });
252
+
253
+ const sensitiveData = {
254
+ username: 'user123',
255
+ apiKey: 'sk-1234567890',
256
+ password: 'secret123',
257
+ token: 'abc123xyz',
258
+ safeField: 'public-data',
259
+ };
260
+
261
+ t.notThrows(() => {
262
+ logger.info('Login attempt', sensitiveData);
263
+ }, 'Redaction should not throw errors');
264
+
265
+ // The actual redaction would be verified by checking log output,
266
+ // but that requires more complex test setup with output capture
267
+ });
268
+
269
+ test('multiple logger instances do not interfere', t => {
270
+ const logger1 = initializeLogger({
271
+ level: 'debug',
272
+ pretty: true,
273
+ });
274
+
275
+ // This should return the existing instance
276
+ const logger2 = getLogger();
277
+
278
+ t.is(logger1, logger2, 'Should return same instance');
279
+
280
+ t.notThrows(() => {
281
+ logger1.info('Message from logger1');
282
+ logger2.debug('Message from logger2');
283
+ }, 'Multiple references should work');
284
+ });