@gguf/coder 0.3.0 → 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 (414) 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/package.json +2 -14
  10. package/scripts/extract-changelog.js +73 -0
  11. package/scripts/fetch-models.js +143 -0
  12. package/scripts/test.sh +40 -0
  13. package/scripts/update-homebrew-formula.sh +125 -0
  14. package/scripts/update-nix-version.sh +157 -0
  15. package/source/ai-sdk-client/AISDKClient.spec.ts +117 -0
  16. package/source/ai-sdk-client/AISDKClient.ts +155 -0
  17. package/source/ai-sdk-client/chat/chat-handler.spec.ts +121 -0
  18. package/source/ai-sdk-client/chat/chat-handler.ts +276 -0
  19. package/source/ai-sdk-client/chat/streaming-handler.spec.ts +173 -0
  20. package/source/ai-sdk-client/chat/streaming-handler.ts +110 -0
  21. package/source/ai-sdk-client/chat/tool-processor.spec.ts +92 -0
  22. package/source/ai-sdk-client/chat/tool-processor.ts +70 -0
  23. package/source/ai-sdk-client/converters/message-converter.spec.ts +220 -0
  24. package/source/ai-sdk-client/converters/message-converter.ts +113 -0
  25. package/source/ai-sdk-client/converters/tool-converter.spec.ts +90 -0
  26. package/source/ai-sdk-client/converters/tool-converter.ts +46 -0
  27. package/source/ai-sdk-client/error-handling/error-extractor.spec.ts +55 -0
  28. package/source/ai-sdk-client/error-handling/error-extractor.ts +15 -0
  29. package/source/ai-sdk-client/error-handling/error-parser.spec.ts +169 -0
  30. package/source/ai-sdk-client/error-handling/error-parser.ts +161 -0
  31. package/source/ai-sdk-client/index.ts +7 -0
  32. package/source/ai-sdk-client/providers/provider-factory.spec.ts +71 -0
  33. package/source/ai-sdk-client/providers/provider-factory.ts +41 -0
  34. package/source/ai-sdk-client/types.ts +9 -0
  35. package/source/ai-sdk-client-empty-message.spec.ts +141 -0
  36. package/source/ai-sdk-client-error-handling.spec.ts +186 -0
  37. package/source/ai-sdk-client-maxretries.spec.ts +114 -0
  38. package/source/ai-sdk-client-preparestep.spec.ts +279 -0
  39. package/source/app/App.spec.tsx +32 -0
  40. package/source/app/App.tsx +480 -0
  41. package/source/app/components/AppContainer.spec.tsx +96 -0
  42. package/source/app/components/AppContainer.tsx +56 -0
  43. package/source/app/components/ChatInterface.spec.tsx +163 -0
  44. package/source/app/components/ChatInterface.tsx +144 -0
  45. package/source/app/components/ModalSelectors.spec.tsx +141 -0
  46. package/source/app/components/ModalSelectors.tsx +135 -0
  47. package/source/app/helpers.spec.ts +97 -0
  48. package/source/app/helpers.ts +63 -0
  49. package/source/app/index.ts +4 -0
  50. package/source/app/types.ts +39 -0
  51. package/source/app/utils/appUtils.ts +294 -0
  52. package/source/app/utils/conversationState.ts +310 -0
  53. package/source/app.spec.tsx +244 -0
  54. package/source/cli.spec.ts +73 -0
  55. package/source/cli.tsx +51 -0
  56. package/source/client-factory.spec.ts +48 -0
  57. package/source/client-factory.ts +178 -0
  58. package/source/command-parser.spec.ts +127 -0
  59. package/source/command-parser.ts +36 -0
  60. package/source/commands/checkpoint.spec.tsx +277 -0
  61. package/source/commands/checkpoint.tsx +366 -0
  62. package/source/commands/clear.tsx +22 -0
  63. package/source/commands/custom-commands.tsx +121 -0
  64. package/source/commands/exit.ts +21 -0
  65. package/source/commands/export.spec.tsx +131 -0
  66. package/source/commands/export.tsx +79 -0
  67. package/source/commands/help.tsx +120 -0
  68. package/source/commands/index.ts +17 -0
  69. package/source/commands/init.tsx +339 -0
  70. package/source/commands/lsp-command.spec.tsx +281 -0
  71. package/source/commands/lsp.tsx +120 -0
  72. package/source/commands/mcp-command.spec.tsx +313 -0
  73. package/source/commands/mcp.tsx +162 -0
  74. package/source/commands/model-database.spec.tsx +758 -0
  75. package/source/commands/model-database.tsx +418 -0
  76. package/source/commands/model.ts +12 -0
  77. package/source/commands/provider.ts +12 -0
  78. package/source/commands/setup-config.tsx +16 -0
  79. package/source/commands/simple-commands.spec.tsx +175 -0
  80. package/source/commands/status.ts +12 -0
  81. package/source/commands/theme.ts +12 -0
  82. package/source/commands/update.spec.tsx +261 -0
  83. package/source/commands/update.tsx +201 -0
  84. package/source/commands/usage.spec.tsx +495 -0
  85. package/source/commands/usage.tsx +100 -0
  86. package/source/commands.spec.ts +436 -0
  87. package/source/commands.ts +83 -0
  88. package/source/components/assistant-message.spec.tsx +796 -0
  89. package/source/components/assistant-message.tsx +34 -0
  90. package/source/components/bash-execution-indicator.tsx +21 -0
  91. package/source/components/cancelling-indicator.tsx +16 -0
  92. package/source/components/chat-queue.spec.tsx +83 -0
  93. package/source/components/chat-queue.tsx +36 -0
  94. package/source/components/checkpoint-display.spec.tsx +219 -0
  95. package/source/components/checkpoint-display.tsx +126 -0
  96. package/source/components/checkpoint-selector.spec.tsx +173 -0
  97. package/source/components/checkpoint-selector.tsx +173 -0
  98. package/source/components/development-mode-indicator.spec.tsx +268 -0
  99. package/source/components/development-mode-indicator.tsx +38 -0
  100. package/source/components/message-box.spec.tsx +427 -0
  101. package/source/components/message-box.tsx +87 -0
  102. package/source/components/model-selector.tsx +132 -0
  103. package/source/components/provider-selector.tsx +75 -0
  104. package/source/components/random-spinner.tsx +19 -0
  105. package/source/components/security-disclaimer.tsx +73 -0
  106. package/source/components/status-connection-display.spec.tsx +133 -0
  107. package/source/components/status.tsx +267 -0
  108. package/source/components/theme-selector.tsx +126 -0
  109. package/source/components/tool-confirmation.tsx +190 -0
  110. package/source/components/tool-execution-indicator.tsx +33 -0
  111. package/source/components/tool-message.tsx +85 -0
  112. package/source/components/ui/titled-box.spec.tsx +207 -0
  113. package/source/components/ui/titled-box.tsx +57 -0
  114. package/source/components/usage/progress-bar.spec.tsx +398 -0
  115. package/source/components/usage/progress-bar.tsx +30 -0
  116. package/source/components/usage/usage-display.spec.tsx +780 -0
  117. package/source/components/usage/usage-display.tsx +291 -0
  118. package/source/components/user-input.spec.tsx +327 -0
  119. package/source/components/user-input.tsx +533 -0
  120. package/source/components/user-message.spec.tsx +230 -0
  121. package/source/components/user-message.tsx +84 -0
  122. package/source/components/welcome-message.tsx +76 -0
  123. package/source/config/env-substitution.ts +65 -0
  124. package/source/config/index.spec.ts +171 -0
  125. package/source/config/index.ts +154 -0
  126. package/source/config/paths.spec.ts +241 -0
  127. package/source/config/paths.ts +55 -0
  128. package/source/config/preferences.ts +51 -0
  129. package/source/config/themes.ts +315 -0
  130. package/source/constants.ts +130 -0
  131. package/source/context/mode-context.spec.ts +79 -0
  132. package/source/context/mode-context.ts +24 -0
  133. package/source/custom-commands/executor.spec.ts +142 -0
  134. package/source/custom-commands/executor.ts +64 -0
  135. package/source/custom-commands/loader.spec.ts +314 -0
  136. package/source/custom-commands/loader.ts +153 -0
  137. package/source/custom-commands/parser.ts +196 -0
  138. package/source/hooks/chat-handler/conversation/conversation-loop.spec.ts +39 -0
  139. package/source/hooks/chat-handler/conversation/conversation-loop.tsx +511 -0
  140. package/source/hooks/chat-handler/conversation/tool-executor.spec.ts +50 -0
  141. package/source/hooks/chat-handler/conversation/tool-executor.tsx +109 -0
  142. package/source/hooks/chat-handler/index.ts +12 -0
  143. package/source/hooks/chat-handler/state/streaming-state.spec.ts +26 -0
  144. package/source/hooks/chat-handler/state/streaming-state.ts +19 -0
  145. package/source/hooks/chat-handler/types.ts +38 -0
  146. package/source/hooks/chat-handler/useChatHandler.spec.tsx +321 -0
  147. package/source/hooks/chat-handler/useChatHandler.tsx +194 -0
  148. package/source/hooks/chat-handler/utils/context-checker.spec.ts +60 -0
  149. package/source/hooks/chat-handler/utils/context-checker.tsx +73 -0
  150. package/source/hooks/chat-handler/utils/message-helpers.spec.ts +42 -0
  151. package/source/hooks/chat-handler/utils/message-helpers.tsx +36 -0
  152. package/source/hooks/chat-handler/utils/tool-filters.spec.ts +109 -0
  153. package/source/hooks/chat-handler/utils/tool-filters.ts +64 -0
  154. package/source/hooks/useAppHandlers.tsx +291 -0
  155. package/source/hooks/useAppInitialization.tsx +422 -0
  156. package/source/hooks/useAppState.tsx +311 -0
  157. package/source/hooks/useDirectoryTrust.tsx +98 -0
  158. package/source/hooks/useInputState.ts +414 -0
  159. package/source/hooks/useModeHandlers.tsx +302 -0
  160. package/source/hooks/useNonInteractiveMode.ts +140 -0
  161. package/source/hooks/useTerminalWidth.tsx +81 -0
  162. package/source/hooks/useTheme.ts +18 -0
  163. package/source/hooks/useToolHandler.tsx +349 -0
  164. package/source/hooks/useUIState.ts +61 -0
  165. package/source/init/agents-template-generator.ts +421 -0
  166. package/source/init/existing-rules-extractor.ts +319 -0
  167. package/source/init/file-scanner.spec.ts +227 -0
  168. package/source/init/file-scanner.ts +238 -0
  169. package/source/init/framework-detector.ts +382 -0
  170. package/source/init/language-detector.ts +269 -0
  171. package/source/init/project-analyzer.spec.ts +231 -0
  172. package/source/init/project-analyzer.ts +458 -0
  173. package/source/lsp/index.ts +31 -0
  174. package/source/lsp/lsp-client.spec.ts +508 -0
  175. package/source/lsp/lsp-client.ts +487 -0
  176. package/source/lsp/lsp-manager.spec.ts +477 -0
  177. package/source/lsp/lsp-manager.ts +419 -0
  178. package/source/lsp/protocol.spec.ts +502 -0
  179. package/source/lsp/protocol.ts +360 -0
  180. package/source/lsp/server-discovery.spec.ts +654 -0
  181. package/source/lsp/server-discovery.ts +515 -0
  182. package/source/markdown-parser/html-entities.spec.ts +88 -0
  183. package/source/markdown-parser/html-entities.ts +45 -0
  184. package/source/markdown-parser/index.spec.ts +281 -0
  185. package/source/markdown-parser/index.ts +126 -0
  186. package/source/markdown-parser/table-parser.spec.ts +133 -0
  187. package/source/markdown-parser/table-parser.ts +114 -0
  188. package/source/markdown-parser/utils.spec.ts +70 -0
  189. package/source/markdown-parser/utils.ts +13 -0
  190. package/source/mcp/mcp-client.spec.ts +81 -0
  191. package/source/mcp/mcp-client.ts +625 -0
  192. package/source/mcp/transport-factory.spec.ts +406 -0
  193. package/source/mcp/transport-factory.ts +312 -0
  194. package/source/message-handler.ts +67 -0
  195. package/source/model-database/database-engine.spec.ts +494 -0
  196. package/source/model-database/database-engine.ts +50 -0
  197. package/source/model-database/model-database.spec.ts +363 -0
  198. package/source/model-database/model-database.ts +91 -0
  199. package/source/model-database/model-engine.spec.ts +447 -0
  200. package/source/model-database/model-engine.ts +65 -0
  201. package/source/model-database/model-fetcher.spec.ts +583 -0
  202. package/source/model-database/model-fetcher.ts +330 -0
  203. package/source/models/index.ts +1 -0
  204. package/source/models/models-cache.spec.ts +214 -0
  205. package/source/models/models-cache.ts +78 -0
  206. package/source/models/models-dev-client.spec.ts +379 -0
  207. package/source/models/models-dev-client.ts +329 -0
  208. package/source/models/models-types.ts +68 -0
  209. package/source/prompt-history.ts +155 -0
  210. package/source/security/command-injection.spec.ts +240 -0
  211. package/source/services/checkpoint-manager.spec.ts +523 -0
  212. package/source/services/checkpoint-manager.ts +466 -0
  213. package/source/services/file-snapshot.spec.ts +569 -0
  214. package/source/services/file-snapshot.ts +220 -0
  215. package/source/test-utils/render-with-theme.tsx +48 -0
  216. package/source/tokenization/index.ts +1 -0
  217. package/source/tokenization/tokenizer-factory.spec.ts +170 -0
  218. package/source/tokenization/tokenizer-factory.ts +125 -0
  219. package/source/tokenization/tokenizers/anthropic-tokenizer.spec.ts +200 -0
  220. package/source/tokenization/tokenizers/anthropic-tokenizer.ts +43 -0
  221. package/source/tokenization/tokenizers/fallback-tokenizer.spec.ts +236 -0
  222. package/source/tokenization/tokenizers/fallback-tokenizer.ts +26 -0
  223. package/source/tokenization/tokenizers/llama-tokenizer.spec.ts +224 -0
  224. package/source/tokenization/tokenizers/llama-tokenizer.ts +41 -0
  225. package/source/tokenization/tokenizers/openai-tokenizer.spec.ts +184 -0
  226. package/source/tokenization/tokenizers/openai-tokenizer.ts +57 -0
  227. package/source/tool-calling/index.ts +5 -0
  228. package/source/tool-calling/json-parser.spec.ts +639 -0
  229. package/source/tool-calling/json-parser.ts +247 -0
  230. package/source/tool-calling/tool-parser.spec.ts +395 -0
  231. package/source/tool-calling/tool-parser.ts +120 -0
  232. package/source/tool-calling/xml-parser.spec.ts +662 -0
  233. package/source/tool-calling/xml-parser.ts +289 -0
  234. package/source/tools/execute-bash.spec.tsx +353 -0
  235. package/source/tools/execute-bash.tsx +219 -0
  236. package/source/tools/execute-function.spec.ts +130 -0
  237. package/source/tools/fetch-url.spec.tsx +342 -0
  238. package/source/tools/fetch-url.tsx +172 -0
  239. package/source/tools/find-files.spec.tsx +924 -0
  240. package/source/tools/find-files.tsx +293 -0
  241. package/source/tools/index.ts +102 -0
  242. package/source/tools/lsp-get-diagnostics.tsx +192 -0
  243. package/source/tools/needs-approval.spec.ts +282 -0
  244. package/source/tools/read-file.spec.tsx +801 -0
  245. package/source/tools/read-file.tsx +387 -0
  246. package/source/tools/search-file-contents.spec.tsx +1273 -0
  247. package/source/tools/search-file-contents.tsx +293 -0
  248. package/source/tools/string-replace.spec.tsx +730 -0
  249. package/source/tools/string-replace.tsx +548 -0
  250. package/source/tools/tool-manager.ts +210 -0
  251. package/source/tools/tool-registry.spec.ts +415 -0
  252. package/source/tools/tool-registry.ts +228 -0
  253. package/source/tools/web-search.tsx +223 -0
  254. package/source/tools/write-file.spec.tsx +559 -0
  255. package/source/tools/write-file.tsx +228 -0
  256. package/source/types/app.ts +37 -0
  257. package/source/types/checkpoint.ts +48 -0
  258. package/source/types/commands.ts +46 -0
  259. package/source/types/components.ts +27 -0
  260. package/source/types/config.ts +103 -0
  261. package/source/types/core-connection-status.spec.ts +67 -0
  262. package/source/types/core.ts +181 -0
  263. package/source/types/hooks.ts +50 -0
  264. package/source/types/index.ts +12 -0
  265. package/source/types/markdown-parser.ts +11 -0
  266. package/source/types/mcp.ts +52 -0
  267. package/source/types/system.ts +16 -0
  268. package/source/types/tokenization.ts +41 -0
  269. package/source/types/ui.ts +40 -0
  270. package/source/types/usage.ts +58 -0
  271. package/source/types/utils.ts +16 -0
  272. package/source/usage/calculator.spec.ts +385 -0
  273. package/source/usage/calculator.ts +104 -0
  274. package/source/usage/storage.spec.ts +703 -0
  275. package/source/usage/storage.ts +238 -0
  276. package/source/usage/tracker.spec.ts +456 -0
  277. package/source/usage/tracker.ts +102 -0
  278. package/source/utils/atomic-deletion.spec.ts +194 -0
  279. package/source/utils/atomic-deletion.ts +127 -0
  280. package/source/utils/bounded-map.spec.ts +300 -0
  281. package/source/utils/bounded-map.ts +193 -0
  282. package/source/utils/checkpoint-utils.spec.ts +222 -0
  283. package/source/utils/checkpoint-utils.ts +92 -0
  284. package/source/utils/error-formatter.spec.ts +169 -0
  285. package/source/utils/error-formatter.ts +194 -0
  286. package/source/utils/file-autocomplete.spec.ts +173 -0
  287. package/source/utils/file-autocomplete.ts +196 -0
  288. package/source/utils/file-cache.spec.ts +309 -0
  289. package/source/utils/file-cache.ts +195 -0
  290. package/source/utils/file-content-loader.spec.ts +180 -0
  291. package/source/utils/file-content-loader.ts +179 -0
  292. package/source/utils/file-mention-handler.spec.ts +261 -0
  293. package/source/utils/file-mention-handler.ts +84 -0
  294. package/source/utils/file-mention-parser.spec.ts +182 -0
  295. package/source/utils/file-mention-parser.ts +170 -0
  296. package/source/utils/fuzzy-matching.spec.ts +149 -0
  297. package/source/utils/fuzzy-matching.ts +146 -0
  298. package/source/utils/indentation-normalizer.spec.ts +216 -0
  299. package/source/utils/indentation-normalizer.ts +76 -0
  300. package/source/utils/installation-detector.spec.ts +178 -0
  301. package/source/utils/installation-detector.ts +153 -0
  302. package/source/utils/logging/config.spec.ts +311 -0
  303. package/source/utils/logging/config.ts +210 -0
  304. package/source/utils/logging/console-facade.spec.ts +184 -0
  305. package/source/utils/logging/console-facade.ts +384 -0
  306. package/source/utils/logging/correlation.spec.ts +679 -0
  307. package/source/utils/logging/correlation.ts +474 -0
  308. package/source/utils/logging/formatters.spec.ts +464 -0
  309. package/source/utils/logging/formatters.ts +207 -0
  310. package/source/utils/logging/health-monitor/alerts/alert-manager.spec.ts +93 -0
  311. package/source/utils/logging/health-monitor/alerts/alert-manager.ts +79 -0
  312. package/source/utils/logging/health-monitor/checks/configuration-check.spec.ts +56 -0
  313. package/source/utils/logging/health-monitor/checks/configuration-check.ts +43 -0
  314. package/source/utils/logging/health-monitor/checks/logging-check.spec.ts +56 -0
  315. package/source/utils/logging/health-monitor/checks/logging-check.ts +58 -0
  316. package/source/utils/logging/health-monitor/checks/memory-check.spec.ts +100 -0
  317. package/source/utils/logging/health-monitor/checks/memory-check.ts +78 -0
  318. package/source/utils/logging/health-monitor/checks/performance-check.spec.ts +56 -0
  319. package/source/utils/logging/health-monitor/checks/performance-check.ts +56 -0
  320. package/source/utils/logging/health-monitor/checks/request-check.spec.ts +56 -0
  321. package/source/utils/logging/health-monitor/checks/request-check.ts +76 -0
  322. package/source/utils/logging/health-monitor/core/health-check-runner.spec.ts +70 -0
  323. package/source/utils/logging/health-monitor/core/health-check-runner.ts +138 -0
  324. package/source/utils/logging/health-monitor/core/health-monitor.spec.ts +58 -0
  325. package/source/utils/logging/health-monitor/core/health-monitor.ts +344 -0
  326. package/source/utils/logging/health-monitor/core/scoring.spec.ts +65 -0
  327. package/source/utils/logging/health-monitor/core/scoring.ts +91 -0
  328. package/source/utils/logging/health-monitor/index.ts +15 -0
  329. package/source/utils/logging/health-monitor/instances.ts +48 -0
  330. package/source/utils/logging/health-monitor/middleware/http-middleware.spec.ts +141 -0
  331. package/source/utils/logging/health-monitor/middleware/http-middleware.ts +75 -0
  332. package/source/utils/logging/health-monitor/types.ts +126 -0
  333. package/source/utils/logging/index.spec.ts +284 -0
  334. package/source/utils/logging/index.ts +236 -0
  335. package/source/utils/logging/integration.spec.ts +441 -0
  336. package/source/utils/logging/log-method-factory.spec.ts +573 -0
  337. package/source/utils/logging/log-method-factory.ts +233 -0
  338. package/source/utils/logging/log-query/aggregation/aggregator.spec.ts +277 -0
  339. package/source/utils/logging/log-query/aggregation/aggregator.ts +159 -0
  340. package/source/utils/logging/log-query/aggregation/facet-generator.spec.ts +159 -0
  341. package/source/utils/logging/log-query/aggregation/facet-generator.ts +47 -0
  342. package/source/utils/logging/log-query/index.ts +23 -0
  343. package/source/utils/logging/log-query/query/filter-predicates.spec.ts +247 -0
  344. package/source/utils/logging/log-query/query/filter-predicates.ts +154 -0
  345. package/source/utils/logging/log-query/query/query-builder.spec.ts +182 -0
  346. package/source/utils/logging/log-query/query/query-builder.ts +151 -0
  347. package/source/utils/logging/log-query/query/query-engine.spec.ts +214 -0
  348. package/source/utils/logging/log-query/query/query-engine.ts +45 -0
  349. package/source/utils/logging/log-query/storage/circular-buffer.spec.ts +143 -0
  350. package/source/utils/logging/log-query/storage/circular-buffer.ts +75 -0
  351. package/source/utils/logging/log-query/storage/index-manager.spec.ts +150 -0
  352. package/source/utils/logging/log-query/storage/index-manager.ts +71 -0
  353. package/source/utils/logging/log-query/storage/log-storage.spec.ts +257 -0
  354. package/source/utils/logging/log-query/storage/log-storage.ts +80 -0
  355. package/source/utils/logging/log-query/types.ts +163 -0
  356. package/source/utils/logging/log-query/utils/helpers.spec.ts +263 -0
  357. package/source/utils/logging/log-query/utils/helpers.ts +72 -0
  358. package/source/utils/logging/log-query/utils/sorting.spec.ts +182 -0
  359. package/source/utils/logging/log-query/utils/sorting.ts +61 -0
  360. package/source/utils/logging/logger-provider.spec.ts +262 -0
  361. package/source/utils/logging/logger-provider.ts +362 -0
  362. package/source/utils/logging/performance.spec.ts +209 -0
  363. package/source/utils/logging/performance.ts +757 -0
  364. package/source/utils/logging/pino-logger.spec.ts +425 -0
  365. package/source/utils/logging/pino-logger.ts +514 -0
  366. package/source/utils/logging/redaction.spec.ts +490 -0
  367. package/source/utils/logging/redaction.ts +267 -0
  368. package/source/utils/logging/request-tracker.spec.ts +1198 -0
  369. package/source/utils/logging/request-tracker.ts +803 -0
  370. package/source/utils/logging/transports.spec.ts +505 -0
  371. package/source/utils/logging/transports.ts +305 -0
  372. package/source/utils/logging/types.ts +216 -0
  373. package/source/utils/message-builder.spec.ts +179 -0
  374. package/source/utils/message-builder.ts +101 -0
  375. package/source/utils/message-queue.tsx +486 -0
  376. package/source/utils/paste-detection.spec.ts +69 -0
  377. package/source/utils/paste-detection.ts +124 -0
  378. package/source/utils/paste-roundtrip.spec.ts +442 -0
  379. package/source/utils/paste-utils.spec.ts +128 -0
  380. package/source/utils/paste-utils.ts +52 -0
  381. package/source/utils/programming-language-helper.spec.ts +74 -0
  382. package/source/utils/programming-language-helper.ts +32 -0
  383. package/source/utils/prompt-assembly.spec.ts +221 -0
  384. package/source/utils/prompt-processor.ts +173 -0
  385. package/source/utils/tool-args-parser.spec.ts +136 -0
  386. package/source/utils/tool-args-parser.ts +54 -0
  387. package/source/utils/tool-cancellation.spec.ts +230 -0
  388. package/source/utils/tool-cancellation.ts +28 -0
  389. package/source/utils/tool-result-display.spec.tsx +469 -0
  390. package/source/utils/tool-result-display.tsx +90 -0
  391. package/source/utils/update-checker.spec.ts +383 -0
  392. package/source/utils/update-checker.ts +183 -0
  393. package/source/wizard/config-wizard.spec.tsx +103 -0
  394. package/source/wizard/config-wizard.tsx +382 -0
  395. package/source/wizard/steps/location-step.spec.tsx +186 -0
  396. package/source/wizard/steps/location-step.tsx +147 -0
  397. package/source/wizard/steps/mcp-step.spec.tsx +607 -0
  398. package/source/wizard/steps/mcp-step.tsx +632 -0
  399. package/source/wizard/steps/provider-step.spec.tsx +342 -0
  400. package/source/wizard/steps/provider-step.tsx +957 -0
  401. package/source/wizard/steps/summary-step.spec.tsx +749 -0
  402. package/source/wizard/steps/summary-step.tsx +228 -0
  403. package/source/wizard/templates/mcp-templates.spec.ts +613 -0
  404. package/source/wizard/templates/mcp-templates.ts +570 -0
  405. package/source/wizard/templates/provider-templates.spec.ts +152 -0
  406. package/source/wizard/templates/provider-templates.ts +485 -0
  407. package/source/wizard/utils/fetch-cloud-models.spec.ts +428 -0
  408. package/source/wizard/utils/fetch-cloud-models.ts +223 -0
  409. package/source/wizard/utils/fetch-local-models.spec.ts +297 -0
  410. package/source/wizard/utils/fetch-local-models.ts +192 -0
  411. package/source/wizard/validation-array.spec.ts +264 -0
  412. package/source/wizard/validation.spec.ts +373 -0
  413. package/source/wizard/validation.ts +232 -0
  414. package/source/app/prompts/main-prompt.md +0 -122
@@ -0,0 +1,421 @@
1
+ import {THRESHOLD_LARGE_CODEBASE_FILES} from '@/constants';
2
+ import {
3
+ type ExistingRules,
4
+ ExistingRulesExtractor,
5
+ } from '@/init/existing-rules-extractor';
6
+ import type {ProjectAnalysis} from '@/init/project-analyzer';
7
+
8
+ export class AgentsTemplateGenerator {
9
+ /**
10
+ * Generate AGENTS.md content based on project analysis
11
+ */
12
+ public static generateAgentsMd(
13
+ analysis: ProjectAnalysis,
14
+ existingRules?: ExistingRules[],
15
+ ): string {
16
+ const sections: string[] = [];
17
+
18
+ // Header
19
+ sections.push('# AGENTS.md');
20
+ sections.push('');
21
+ sections.push(
22
+ `AI coding agent instructions for **${analysis.projectName}**`,
23
+ );
24
+ sections.push('');
25
+
26
+ // Project Overview
27
+ sections.push('## Project Overview');
28
+ sections.push('');
29
+ if (analysis.description) {
30
+ sections.push(analysis.description);
31
+ sections.push('');
32
+ }
33
+ sections.push(`**Project Type:** ${analysis.projectType}`);
34
+ if (analysis.languages.primary) {
35
+ sections.push(
36
+ `**Primary Language:** ${analysis.languages.primary.name} (${analysis.languages.primary.percentage}% of codebase)`,
37
+ );
38
+ }
39
+ if (analysis.languages.secondary.length > 0) {
40
+ const secondaryLangs = analysis.languages.secondary
41
+ .map(lang => `${lang.name} (${lang.percentage}%)`)
42
+ .join(', ');
43
+ sections.push(`**Secondary Languages:** ${secondaryLangs}`);
44
+ }
45
+ sections.push('');
46
+
47
+ // Architecture Summary
48
+ if (
49
+ analysis.dependencies.frameworks.length > 0 ||
50
+ analysis.structure.importantDirectories.length > 0
51
+ ) {
52
+ sections.push('## Architecture');
53
+ sections.push('');
54
+
55
+ if (analysis.dependencies.frameworks.length > 0) {
56
+ sections.push('**Key Frameworks & Libraries:**');
57
+ for (const framework of analysis.dependencies.frameworks) {
58
+ const version = framework.version ? ` (${framework.version})` : '';
59
+ sections.push(
60
+ `- ${framework.name}${version} - ${framework.category}`,
61
+ );
62
+ }
63
+ sections.push('');
64
+ }
65
+
66
+ if (analysis.structure.importantDirectories.length > 0) {
67
+ sections.push('**Project Structure:**');
68
+ for (const dir of analysis.structure.importantDirectories.slice(
69
+ 0,
70
+ 20,
71
+ )) {
72
+ sections.push(`- \`${dir}/\` - ${this.getDirectoryDescription(dir)}`);
73
+ }
74
+ sections.push('');
75
+ }
76
+ }
77
+
78
+ // Key Files
79
+ if (Object.values(analysis.keyFiles).some(files => files.length > 0)) {
80
+ sections.push('## Key Files');
81
+ sections.push('');
82
+
83
+ if (analysis.keyFiles.config.length > 0) {
84
+ sections.push('**Configuration:**');
85
+ analysis.keyFiles.config.slice(0, 5).forEach(file => {
86
+ sections.push(`- \`${file}\` - ${this.getFileDescription(file)}`);
87
+ });
88
+ sections.push('');
89
+ }
90
+
91
+ if (analysis.keyFiles.documentation.length > 0) {
92
+ sections.push('**Documentation:**');
93
+ analysis.keyFiles.documentation.slice(0, 3).forEach(file => {
94
+ sections.push(`- \`${file}\``);
95
+ });
96
+ sections.push('');
97
+ }
98
+ }
99
+
100
+ // Build and Test Commands
101
+ if (Object.keys(analysis.buildCommands).length > 0) {
102
+ sections.push('## Development Commands');
103
+ sections.push('');
104
+
105
+ for (const [action, command] of Object.entries(analysis.buildCommands)) {
106
+ sections.push(`**${action}:**`);
107
+ sections.push('```bash');
108
+ sections.push(command);
109
+ sections.push('```');
110
+ sections.push('');
111
+ }
112
+ }
113
+
114
+ // Code Style Guidelines
115
+ const conventions = this.getCodingConventions(analysis);
116
+ if (conventions.length > 0) {
117
+ sections.push('## Code Style Guidelines');
118
+ sections.push('');
119
+
120
+ for (const convention of conventions) {
121
+ sections.push(`- ${convention}`);
122
+ }
123
+ sections.push('');
124
+ }
125
+
126
+ // Testing Instructions
127
+ if (
128
+ analysis.dependencies.testingFrameworks.length > 0 ||
129
+ analysis.keyFiles.test.length > 0
130
+ ) {
131
+ sections.push('## Testing');
132
+ sections.push('');
133
+
134
+ if (analysis.dependencies.testingFrameworks.length > 0) {
135
+ sections.push(
136
+ `**Testing Frameworks:** ${analysis.dependencies.testingFrameworks.join(
137
+ ', ',
138
+ )}`,
139
+ );
140
+ sections.push('');
141
+ }
142
+
143
+ if (analysis.buildCommands.Test) {
144
+ sections.push('**Run Tests:**');
145
+ sections.push('```bash');
146
+ sections.push(analysis.buildCommands.Test);
147
+ sections.push('```');
148
+ sections.push('');
149
+ }
150
+
151
+ if (analysis.keyFiles.test.length > 0) {
152
+ sections.push('**Test Files:**');
153
+ analysis.keyFiles.test.slice(0, 5).forEach(file => {
154
+ sections.push(`- \`${file}\``);
155
+ });
156
+ sections.push('');
157
+ }
158
+ }
159
+
160
+ // Existing AI rules and guidelines
161
+ if (existingRules && existingRules.length > 0) {
162
+ const mergedRules =
163
+ ExistingRulesExtractor.mergeExistingRules(existingRules);
164
+ if (mergedRules.trim()) {
165
+ sections.push(mergedRules);
166
+ sections.push('');
167
+ }
168
+ }
169
+
170
+ // Special Considerations for AI
171
+ sections.push('## AI Coding Assistance Notes');
172
+ sections.push('');
173
+ sections.push('**Important Considerations:**');
174
+
175
+ // Language-specific notes
176
+ if (analysis.languages.primary) {
177
+ const langNotes = this.getLanguageSpecificNotes(
178
+ analysis.languages.primary.name,
179
+ );
180
+ langNotes.forEach(note => sections.push(`- ${note}`));
181
+ }
182
+
183
+ // Framework-specific notes
184
+ for (const framework of analysis.dependencies.frameworks.slice(0, 3)) {
185
+ const frameworkNotes = this.getFrameworkSpecificNotes(framework.name);
186
+ frameworkNotes.forEach(note => sections.push(`- ${note}`));
187
+ }
188
+
189
+ // General notes
190
+ sections.push(
191
+ `- Project has ${analysis.structure.scannedFiles} files across ${analysis.structure.directories.length} directories`,
192
+ );
193
+ if (analysis.structure.scannedFiles >= THRESHOLD_LARGE_CODEBASE_FILES) {
194
+ sections.push(
195
+ '- Large codebase: Focus on specific areas when making changes',
196
+ );
197
+ }
198
+ if (analysis.keyFiles.build.length > 0) {
199
+ sections.push(
200
+ '- Check build configuration files before making structural changes',
201
+ );
202
+ }
203
+ sections.push('');
204
+
205
+ // Repository info
206
+ if (analysis.repository) {
207
+ sections.push('## Repository');
208
+ sections.push('');
209
+ sections.push(`**Source:** ${analysis.repository}`);
210
+ sections.push('');
211
+ }
212
+
213
+ // Footer
214
+ sections.push('---');
215
+ sections.push('');
216
+ sections.push(
217
+ '*This AGENTS.md file was generated by Coder. Update it as your project evolves.*',
218
+ );
219
+
220
+ return sections.join('\n');
221
+ }
222
+
223
+ /**
224
+ * Get description for a directory based on its name
225
+ */
226
+ private static getDirectoryDescription(dir: string): string {
227
+ const dirName = dir.split('/').pop()?.toLowerCase() || '';
228
+
229
+ const descriptions: {[key: string]: string} = {
230
+ src: 'Source code',
231
+ source: 'Source code',
232
+ app: 'Application code',
233
+ lib: 'Library code',
234
+ libs: 'Libraries',
235
+ components: 'React/UI components',
236
+ pages: 'Page components',
237
+ views: 'View components',
238
+ routes: 'Routing logic',
239
+ api: 'API endpoints',
240
+ server: 'Server code',
241
+ backend: 'Backend code',
242
+ frontend: 'Frontend code',
243
+ models: 'Data models',
244
+ controllers: 'Controllers',
245
+ services: 'Service layer',
246
+ utils: 'Utility functions',
247
+ config: 'Configuration files',
248
+ configs: 'Configuration files',
249
+ settings: 'Settings',
250
+ assets: 'Static assets',
251
+ static: 'Static files',
252
+ public: 'Public assets',
253
+ docs: 'Documentation',
254
+ documentation: 'Documentation',
255
+ test: 'Test files',
256
+ tests: 'Test files',
257
+ __tests__: 'Test files',
258
+ spec: 'Test specifications',
259
+ };
260
+
261
+ return descriptions[dirName] || 'Project files';
262
+ }
263
+
264
+ /**
265
+ * Get description for a file based on its name
266
+ */
267
+ private static getFileDescription(file: string): string {
268
+ const fileName = file.toLowerCase();
269
+
270
+ if (fileName.includes('package.json'))
271
+ return 'Node.js dependencies and scripts';
272
+ if (fileName.includes('cargo.toml')) return 'Rust package configuration';
273
+ if (fileName.includes('go.mod')) return 'Go module dependencies';
274
+ if (fileName.includes('requirements.txt')) return 'Python dependencies';
275
+ if (fileName.includes('tsconfig.json')) return 'TypeScript configuration';
276
+ if (fileName.includes('webpack')) return 'Webpack build configuration';
277
+ if (fileName.includes('vite')) return 'Vite build configuration';
278
+ if (fileName.includes('rollup')) return 'Rollup build configuration';
279
+ if (fileName.includes('docker')) return 'Docker configuration';
280
+ if (fileName.includes('makefile')) return 'Build automation';
281
+
282
+ return 'Configuration file';
283
+ }
284
+
285
+ /**
286
+ * Get coding conventions based on project analysis
287
+ */
288
+ private static getCodingConventions(analysis: ProjectAnalysis): string[] {
289
+ const conventions: string[] = [];
290
+
291
+ if (analysis.languages.primary) {
292
+ const lang = analysis.languages.primary.name;
293
+
294
+ switch (lang) {
295
+ case 'JavaScript':
296
+ case 'TypeScript':
297
+ conventions.push('Use camelCase for variables and functions');
298
+ conventions.push('Use PascalCase for classes and components');
299
+ conventions.push('Prefer const/let over var');
300
+ conventions.push('Use async/await over callbacks when possible');
301
+ if (
302
+ analysis.dependencies.frameworks.some((f: {name: string}) =>
303
+ f.name.includes('React'),
304
+ )
305
+ ) {
306
+ conventions.push('Use functional components with hooks');
307
+ conventions.push('Follow React naming conventions for components');
308
+ }
309
+ break;
310
+
311
+ case 'Python':
312
+ conventions.push('Follow PEP 8 style guide');
313
+ conventions.push('Use snake_case for variables and functions');
314
+ conventions.push('Use PascalCase for classes');
315
+ conventions.push('Include docstrings for functions and classes');
316
+ conventions.push('Use type hints where appropriate');
317
+ break;
318
+
319
+ case 'Rust':
320
+ conventions.push('Follow Rust naming conventions (snake_case)');
321
+ conventions.push('Use cargo fmt for code formatting');
322
+ conventions.push('Handle errors explicitly with Result<T, E>');
323
+ conventions.push('Prefer owned types over references when possible');
324
+ break;
325
+
326
+ case 'Go':
327
+ conventions.push('Follow Go naming conventions');
328
+ conventions.push('Use gofmt for formatting');
329
+ conventions.push('Handle errors explicitly');
330
+ conventions.push('Use interfaces for abstraction');
331
+ conventions.push('Keep functions and methods concise');
332
+ break;
333
+
334
+ case 'Java':
335
+ conventions.push('Follow Java naming conventions');
336
+ conventions.push('Use camelCase for methods and variables');
337
+ conventions.push('Use PascalCase for classes');
338
+ conventions.push('Include JavaDoc for public methods');
339
+ break;
340
+ }
341
+ }
342
+
343
+ return conventions;
344
+ }
345
+
346
+ /**
347
+ * Get language-specific notes for AI assistance
348
+ */
349
+ private static getLanguageSpecificNotes(language: string): string[] {
350
+ switch (language) {
351
+ case 'JavaScript':
352
+ case 'TypeScript':
353
+ return [
354
+ 'Check package.json for available scripts before running commands',
355
+ 'Be aware of Node.js version requirements',
356
+ 'Consider impact on bundle size when adding dependencies',
357
+ ];
358
+
359
+ case 'Python':
360
+ return [
361
+ 'Check virtual environment setup before running commands',
362
+ 'Be mindful of Python version compatibility',
363
+ 'Follow import organization (stdlib, third-party, local)',
364
+ ];
365
+
366
+ case 'Rust':
367
+ return [
368
+ 'Run cargo check before cargo build for faster feedback',
369
+ 'Consider memory safety and ownership when suggesting changes',
370
+ 'Use cargo clippy for additional linting',
371
+ ];
372
+
373
+ case 'Go':
374
+ return [
375
+ 'Run go mod tidy after adding dependencies',
376
+ 'Consider goroutine usage for concurrent operations',
377
+ 'Follow Go idioms for error handling',
378
+ ];
379
+
380
+ default:
381
+ return [
382
+ 'Check project documentation for specific conventions',
383
+ 'Test changes thoroughly before committing',
384
+ ];
385
+ }
386
+ }
387
+
388
+ /**
389
+ * Get framework-specific notes for AI assistance
390
+ */
391
+ private static getFrameworkSpecificNotes(framework: string): string[] {
392
+ switch (framework) {
393
+ case 'React':
394
+ return [
395
+ 'Follow React hooks best practices',
396
+ 'Consider component reusability when creating new components',
397
+ ];
398
+
399
+ case 'Next.js':
400
+ return [
401
+ 'Be aware of SSR/SSG implications when making changes',
402
+ 'Check routing structure before adding new pages',
403
+ ];
404
+
405
+ case 'Django':
406
+ return [
407
+ 'Run migrations after model changes',
408
+ 'Follow Django project structure conventions',
409
+ ];
410
+
411
+ case 'Express.js':
412
+ return [
413
+ 'Consider middleware order when adding new routes',
414
+ 'Use proper error handling middleware',
415
+ ];
416
+
417
+ default:
418
+ return [];
419
+ }
420
+ }
421
+ }