@nanocollective/nanocoder 1.17.3 → 1.19.0

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 (688) hide show
  1. package/README.md +178 -13
  2. package/assets/nanocoder-vscode.vsix +0 -0
  3. package/dist/ai-sdk-client-empty-message.spec.d.ts +2 -0
  4. package/dist/ai-sdk-client-empty-message.spec.d.ts.map +1 -0
  5. package/dist/ai-sdk-client-empty-message.spec.js +124 -0
  6. package/dist/ai-sdk-client-empty-message.spec.js.map +1 -0
  7. package/dist/ai-sdk-client.d.ts +19 -3
  8. package/dist/ai-sdk-client.d.ts.map +1 -1
  9. package/dist/ai-sdk-client.js +359 -211
  10. package/dist/ai-sdk-client.js.map +1 -1
  11. package/dist/app/utils/appUtils.d.ts +1 -1
  12. package/dist/app/utils/appUtils.d.ts.map +1 -1
  13. package/dist/app/utils/appUtils.js +80 -14
  14. package/dist/app/utils/appUtils.js.map +1 -1
  15. package/dist/app.d.ts +22 -1
  16. package/dist/app.d.ts.map +1 -1
  17. package/dist/app.js +369 -53
  18. package/dist/app.js.map +1 -1
  19. package/dist/cli.js +37 -2
  20. package/dist/cli.js.map +1 -1
  21. package/dist/cli.spec.d.ts +2 -0
  22. package/dist/cli.spec.d.ts.map +1 -0
  23. package/dist/cli.spec.js +101 -0
  24. package/dist/cli.spec.js.map +1 -0
  25. package/dist/client-factory.d.ts.map +1 -1
  26. package/dist/client-factory.js +2 -2
  27. package/dist/client-factory.js.map +1 -1
  28. package/dist/commands/checkpoint.d.ts +6 -0
  29. package/dist/commands/checkpoint.d.ts.map +1 -0
  30. package/dist/commands/checkpoint.js +277 -0
  31. package/dist/commands/checkpoint.js.map +1 -0
  32. package/dist/commands/clear.d.ts.map +1 -1
  33. package/dist/commands/clear.js +1 -1
  34. package/dist/commands/clear.js.map +1 -1
  35. package/dist/commands/custom-commands.d.ts.map +1 -1
  36. package/dist/commands/custom-commands.js +4 -4
  37. package/dist/commands/custom-commands.js.map +1 -1
  38. package/dist/commands/exit.d.ts.map +1 -1
  39. package/dist/commands/exit.js.map +1 -1
  40. package/dist/commands/export.d.ts.map +1 -1
  41. package/dist/commands/export.js +2 -2
  42. package/dist/commands/export.js.map +1 -1
  43. package/dist/commands/help.d.ts.map +1 -1
  44. package/dist/commands/help.js +5 -5
  45. package/dist/commands/help.js.map +1 -1
  46. package/dist/commands/index.d.ts +2 -2
  47. package/dist/commands/index.d.ts.map +1 -1
  48. package/dist/commands/index.js +2 -2
  49. package/dist/commands/index.js.map +1 -1
  50. package/dist/commands/init.d.ts.map +1 -1
  51. package/dist/commands/init.js +15 -14
  52. package/dist/commands/init.js.map +1 -1
  53. package/dist/commands/lsp.d.ts.map +1 -1
  54. package/dist/commands/lsp.js +6 -6
  55. package/dist/commands/lsp.js.map +1 -1
  56. package/dist/commands/mcp.d.ts +1 -1
  57. package/dist/commands/mcp.d.ts.map +1 -1
  58. package/dist/commands/mcp.js +6 -6
  59. package/dist/commands/mcp.js.map +1 -1
  60. package/dist/commands/model-database.d.ts +8 -0
  61. package/dist/commands/model-database.d.ts.map +1 -0
  62. package/dist/commands/model-database.js +193 -0
  63. package/dist/commands/model-database.js.map +1 -0
  64. package/dist/commands/model.d.ts.map +1 -1
  65. package/dist/commands/model.js.map +1 -1
  66. package/dist/commands/provider.d.ts.map +1 -1
  67. package/dist/commands/provider.js.map +1 -1
  68. package/dist/commands/setup-config.js +1 -1
  69. package/dist/commands/setup-config.js.map +1 -1
  70. package/dist/commands/status.d.ts.map +1 -1
  71. package/dist/commands/status.js.map +1 -1
  72. package/dist/commands/theme.d.ts.map +1 -1
  73. package/dist/commands/theme.js.map +1 -1
  74. package/dist/commands/update.d.ts.map +1 -1
  75. package/dist/commands/update.js +5 -5
  76. package/dist/commands/update.js.map +1 -1
  77. package/dist/commands/usage.d.ts.map +1 -1
  78. package/dist/commands/usage.js +4 -4
  79. package/dist/commands/usage.js.map +1 -1
  80. package/dist/commands.d.ts.map +1 -1
  81. package/dist/commands.js +1 -1
  82. package/dist/commands.js.map +1 -1
  83. package/dist/components/assistant-message.d.ts.map +1 -1
  84. package/dist/components/assistant-message.js +5 -4
  85. package/dist/components/assistant-message.js.map +1 -1
  86. package/dist/components/bash-execution-indicator.d.ts.map +1 -1
  87. package/dist/components/bash-execution-indicator.js +2 -2
  88. package/dist/components/bash-execution-indicator.js.map +1 -1
  89. package/dist/components/cancelling-indicator.js +3 -3
  90. package/dist/components/cancelling-indicator.js.map +1 -1
  91. package/dist/components/chat-queue.d.ts.map +1 -1
  92. package/dist/components/chat-queue.js +1 -1
  93. package/dist/components/chat-queue.js.map +1 -1
  94. package/dist/components/checkpoint-display.d.ts +8 -0
  95. package/dist/components/checkpoint-display.d.ts.map +1 -0
  96. package/dist/components/checkpoint-display.js +29 -0
  97. package/dist/components/checkpoint-display.js.map +1 -0
  98. package/dist/components/checkpoint-selector.d.ts +11 -0
  99. package/dist/components/checkpoint-selector.d.ts.map +1 -0
  100. package/dist/components/checkpoint-selector.js +55 -0
  101. package/dist/components/checkpoint-selector.js.map +1 -0
  102. package/dist/components/error-message.d.ts.map +1 -1
  103. package/dist/components/error-message.js +4 -4
  104. package/dist/components/error-message.js.map +1 -1
  105. package/dist/components/info-message.d.ts.map +1 -1
  106. package/dist/components/info-message.js +4 -4
  107. package/dist/components/info-message.js.map +1 -1
  108. package/dist/components/model-selector.d.ts.map +1 -1
  109. package/dist/components/model-selector.js +7 -7
  110. package/dist/components/model-selector.js.map +1 -1
  111. package/dist/components/provider-selector.d.ts.map +1 -1
  112. package/dist/components/provider-selector.js +6 -6
  113. package/dist/components/provider-selector.js.map +1 -1
  114. package/dist/components/security-disclaimer.d.ts.map +1 -1
  115. package/dist/components/security-disclaimer.js +4 -4
  116. package/dist/components/security-disclaimer.js.map +1 -1
  117. package/dist/components/status.d.ts +5 -0
  118. package/dist/components/status.d.ts.map +1 -1
  119. package/dist/components/status.js +36 -7
  120. package/dist/components/status.js.map +1 -1
  121. package/dist/components/success-message.d.ts.map +1 -1
  122. package/dist/components/success-message.js +4 -4
  123. package/dist/components/success-message.js.map +1 -1
  124. package/dist/components/theme-selector.d.ts.map +1 -1
  125. package/dist/components/theme-selector.js +8 -8
  126. package/dist/components/theme-selector.js.map +1 -1
  127. package/dist/components/tool-confirmation.d.ts.map +1 -1
  128. package/dist/components/tool-confirmation.js +7 -7
  129. package/dist/components/tool-confirmation.js.map +1 -1
  130. package/dist/components/tool-execution-indicator.d.ts.map +1 -1
  131. package/dist/components/tool-execution-indicator.js +2 -2
  132. package/dist/components/tool-execution-indicator.js.map +1 -1
  133. package/dist/components/tool-message.d.ts.map +1 -1
  134. package/dist/components/tool-message.js +4 -5
  135. package/dist/components/tool-message.js.map +1 -1
  136. package/dist/components/ui/titled-box.d.ts +16 -0
  137. package/dist/components/ui/titled-box.d.ts.map +1 -0
  138. package/dist/components/ui/titled-box.js +10 -0
  139. package/dist/components/ui/titled-box.js.map +1 -0
  140. package/dist/components/usage/progress-bar.d.ts.map +1 -1
  141. package/dist/components/usage/progress-bar.js +3 -0
  142. package/dist/components/usage/progress-bar.js.map +1 -1
  143. package/dist/components/usage/usage-display.d.ts.map +1 -1
  144. package/dist/components/usage/usage-display.js +7 -4
  145. package/dist/components/usage/usage-display.js.map +1 -1
  146. package/dist/components/user-input.d.ts.map +1 -1
  147. package/dist/components/user-input.js +9 -8
  148. package/dist/components/user-input.js.map +1 -1
  149. package/dist/components/user-message.d.ts.map +1 -1
  150. package/dist/components/user-message.js +1 -1
  151. package/dist/components/user-message.js.map +1 -1
  152. package/dist/components/vscode-extension-prompt.js +3 -3
  153. package/dist/components/vscode-extension-prompt.js.map +1 -1
  154. package/dist/components/warning-message.d.ts.map +1 -1
  155. package/dist/components/warning-message.js +4 -4
  156. package/dist/components/warning-message.js.map +1 -1
  157. package/dist/components/welcome-message.d.ts.map +1 -1
  158. package/dist/components/welcome-message.js +4 -4
  159. package/dist/components/welcome-message.js.map +1 -1
  160. package/dist/config/index.d.ts.map +1 -1
  161. package/dist/config/index.js +7 -7
  162. package/dist/config/index.js.map +1 -1
  163. package/dist/config/index.spec.js +4 -4
  164. package/dist/config/index.spec.js.map +1 -1
  165. package/dist/config/paths.spec.js +1 -1
  166. package/dist/config/paths.spec.js.map +1 -1
  167. package/dist/config/preferences.d.ts +0 -2
  168. package/dist/config/preferences.d.ts.map +1 -1
  169. package/dist/config/preferences.js +1 -11
  170. package/dist/config/preferences.js.map +1 -1
  171. package/dist/context/mode-context.d.ts +12 -0
  172. package/dist/context/mode-context.d.ts.map +1 -0
  173. package/dist/context/mode-context.js +21 -0
  174. package/dist/context/mode-context.js.map +1 -0
  175. package/dist/context/mode-context.spec.d.ts +2 -0
  176. package/dist/context/mode-context.spec.d.ts.map +1 -0
  177. package/dist/context/mode-context.spec.js +61 -0
  178. package/dist/context/mode-context.spec.js.map +1 -0
  179. package/dist/custom-commands/executor.d.ts.map +1 -1
  180. package/dist/custom-commands/executor.js.map +1 -1
  181. package/dist/custom-commands/loader.d.ts.map +1 -1
  182. package/dist/custom-commands/loader.js +1 -1
  183. package/dist/custom-commands/loader.js.map +1 -1
  184. package/dist/custom-commands/parser.d.ts.map +1 -1
  185. package/dist/custom-commands/parser.js.map +1 -1
  186. package/dist/hooks/useAppInitialization.d.ts +9 -5
  187. package/dist/hooks/useAppInitialization.d.ts.map +1 -1
  188. package/dist/hooks/useAppInitialization.js +119 -45
  189. package/dist/hooks/useAppInitialization.js.map +1 -1
  190. package/dist/hooks/useAppState.d.ts +28 -9
  191. package/dist/hooks/useAppState.d.ts.map +1 -1
  192. package/dist/hooks/useAppState.js +28 -8
  193. package/dist/hooks/useAppState.js.map +1 -1
  194. package/dist/hooks/useChatHandler.d.ts +5 -3
  195. package/dist/hooks/useChatHandler.d.ts.map +1 -1
  196. package/dist/hooks/useChatHandler.js +218 -118
  197. package/dist/hooks/useChatHandler.js.map +1 -1
  198. package/dist/hooks/useDirectoryTrust.js +1 -1
  199. package/dist/hooks/useDirectoryTrust.js.map +1 -1
  200. package/dist/hooks/useInputState.js +2 -2
  201. package/dist/hooks/useInputState.js.map +1 -1
  202. package/dist/hooks/useModeHandlers.d.ts +5 -5
  203. package/dist/hooks/useModeHandlers.d.ts.map +1 -1
  204. package/dist/hooks/useModeHandlers.js +12 -12
  205. package/dist/hooks/useModeHandlers.js.map +1 -1
  206. package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
  207. package/dist/hooks/useTerminalWidth.js +3 -3
  208. package/dist/hooks/useTerminalWidth.js.map +1 -1
  209. package/dist/hooks/useTheme.d.ts.map +1 -1
  210. package/dist/hooks/useTheme.js +1 -1
  211. package/dist/hooks/useTheme.js.map +1 -1
  212. package/dist/hooks/useToolHandler.d.ts +1 -1
  213. package/dist/hooks/useToolHandler.d.ts.map +1 -1
  214. package/dist/hooks/useToolHandler.js +4 -4
  215. package/dist/hooks/useToolHandler.js.map +1 -1
  216. package/dist/hooks/useUIState.d.ts +1 -1
  217. package/dist/hooks/useUIState.d.ts.map +1 -1
  218. package/dist/hooks/useUIState.js.map +1 -1
  219. package/dist/hooks/useVSCodeServer.js +2 -2
  220. package/dist/hooks/useVSCodeServer.js.map +1 -1
  221. package/dist/init/agents-template-generator.d.ts +1 -1
  222. package/dist/init/agents-template-generator.d.ts.map +1 -1
  223. package/dist/init/agents-template-generator.js.map +1 -1
  224. package/dist/init/existing-rules-extractor.js +1 -1
  225. package/dist/init/existing-rules-extractor.js.map +1 -1
  226. package/dist/init/file-scanner.js +2 -2
  227. package/dist/init/file-scanner.js.map +1 -1
  228. package/dist/init/framework-detector.js +1 -1
  229. package/dist/init/framework-detector.js.map +1 -1
  230. package/dist/init/project-analyzer.d.ts +1 -1
  231. package/dist/init/project-analyzer.d.ts.map +1 -1
  232. package/dist/init/project-analyzer.js +3 -3
  233. package/dist/init/project-analyzer.js.map +1 -1
  234. package/dist/lsp/lsp-client.d.ts +1 -1
  235. package/dist/lsp/lsp-client.d.ts.map +1 -1
  236. package/dist/lsp/lsp-client.js +1 -1
  237. package/dist/lsp/lsp-client.js.map +1 -1
  238. package/dist/lsp/lsp-client.spec.js +1 -2
  239. package/dist/lsp/lsp-client.spec.js.map +1 -1
  240. package/dist/lsp/lsp-manager.d.ts +1 -1
  241. package/dist/lsp/lsp-manager.d.ts.map +1 -1
  242. package/dist/lsp/lsp-manager.js.map +1 -1
  243. package/dist/lsp/lsp-manager.spec.js +1 -1
  244. package/dist/lsp/lsp-manager.spec.js.map +1 -1
  245. package/dist/lsp/protocol.spec.js +1 -1
  246. package/dist/lsp/protocol.spec.js.map +1 -1
  247. package/dist/lsp/server-discovery.spec.js +1 -1
  248. package/dist/lsp/server-discovery.spec.js.map +1 -1
  249. package/dist/markdown-parser/index.spec.js.map +1 -1
  250. package/dist/markdown-parser/table-parser.spec.js.map +1 -1
  251. package/dist/mcp/mcp-client.d.ts +3 -2
  252. package/dist/mcp/mcp-client.d.ts.map +1 -1
  253. package/dist/mcp/mcp-client.js +279 -96
  254. package/dist/mcp/mcp-client.js.map +1 -1
  255. package/dist/mcp/transport-factory.d.ts +1 -1
  256. package/dist/mcp/transport-factory.d.ts.map +1 -1
  257. package/dist/mcp/transport-factory.js +16 -3
  258. package/dist/mcp/transport-factory.js.map +1 -1
  259. package/dist/mcp/transport-factory.spec.js +30 -48
  260. package/dist/mcp/transport-factory.spec.js.map +1 -1
  261. package/dist/message-handler.d.ts +1 -1
  262. package/dist/message-handler.d.ts.map +1 -1
  263. package/dist/message-handler.js +1 -1
  264. package/dist/message-handler.js.map +1 -1
  265. package/dist/model-database/database-engine.d.ts +25 -0
  266. package/dist/model-database/database-engine.d.ts.map +1 -0
  267. package/dist/model-database/database-engine.js +37 -0
  268. package/dist/model-database/database-engine.js.map +1 -0
  269. package/dist/model-database/database-engine.spec.d.ts +2 -0
  270. package/dist/model-database/database-engine.spec.d.ts.map +1 -0
  271. package/dist/model-database/database-engine.spec.js +413 -0
  272. package/dist/model-database/database-engine.spec.js.map +1 -0
  273. package/dist/model-database/model-database.d.ts +30 -0
  274. package/dist/model-database/model-database.d.ts.map +1 -0
  275. package/dist/model-database/model-database.js +82 -0
  276. package/dist/model-database/model-database.js.map +1 -0
  277. package/dist/model-database/model-database.spec.d.ts +2 -0
  278. package/dist/model-database/model-database.spec.d.ts.map +1 -0
  279. package/dist/model-database/model-database.spec.js +322 -0
  280. package/dist/model-database/model-database.spec.js.map +1 -0
  281. package/dist/model-database/model-engine.d.ts +25 -0
  282. package/dist/model-database/model-engine.d.ts.map +1 -0
  283. package/dist/model-database/model-engine.js +49 -0
  284. package/dist/model-database/model-engine.js.map +1 -0
  285. package/dist/model-database/model-engine.spec.d.ts +2 -0
  286. package/dist/model-database/model-engine.spec.d.ts.map +1 -0
  287. package/dist/model-database/model-engine.spec.js +381 -0
  288. package/dist/model-database/model-engine.spec.js.map +1 -0
  289. package/dist/model-database/model-fetcher.d.ts +14 -0
  290. package/dist/model-database/model-fetcher.d.ts.map +1 -0
  291. package/dist/model-database/model-fetcher.js +249 -0
  292. package/dist/model-database/model-fetcher.js.map +1 -0
  293. package/dist/model-database/model-fetcher.spec.d.ts +2 -0
  294. package/dist/model-database/model-fetcher.spec.d.ts.map +1 -0
  295. package/dist/model-database/model-fetcher.spec.js +498 -0
  296. package/dist/model-database/model-fetcher.spec.js.map +1 -0
  297. package/dist/models/models-cache.d.ts +1 -1
  298. package/dist/models/models-cache.d.ts.map +1 -1
  299. package/dist/models/models-cache.js +1 -1
  300. package/dist/models/models-cache.js.map +1 -1
  301. package/dist/models/models-dev-client.d.ts.map +1 -1
  302. package/dist/models/models-dev-client.js +23 -7
  303. package/dist/models/models-dev-client.js.map +1 -1
  304. package/dist/prompt-history.js +2 -2
  305. package/dist/prompt-history.js.map +1 -1
  306. package/dist/services/checkpoint-manager.d.ts +68 -0
  307. package/dist/services/checkpoint-manager.d.ts.map +1 -0
  308. package/dist/services/checkpoint-manager.js +345 -0
  309. package/dist/services/checkpoint-manager.js.map +1 -0
  310. package/dist/services/checkpoint-manager.spec.d.ts +2 -0
  311. package/dist/services/checkpoint-manager.spec.d.ts.map +1 -0
  312. package/dist/services/checkpoint-manager.spec.js +353 -0
  313. package/dist/services/checkpoint-manager.spec.js.map +1 -0
  314. package/dist/services/file-snapshot.d.ts +32 -0
  315. package/dist/services/file-snapshot.d.ts.map +1 -0
  316. package/dist/services/file-snapshot.js +161 -0
  317. package/dist/services/file-snapshot.js.map +1 -0
  318. package/dist/services/file-snapshot.spec.d.ts +2 -0
  319. package/dist/services/file-snapshot.spec.d.ts.map +1 -0
  320. package/dist/services/file-snapshot.spec.js +285 -0
  321. package/dist/services/file-snapshot.spec.js.map +1 -0
  322. package/dist/test-utils/render-with-theme.d.ts +7 -0
  323. package/dist/test-utils/render-with-theme.d.ts.map +1 -0
  324. package/dist/test-utils/render-with-theme.js +38 -0
  325. package/dist/test-utils/render-with-theme.js.map +1 -0
  326. package/dist/tokenization/tokenizer-factory.js +2 -2
  327. package/dist/tokenization/tokenizer-factory.js.map +1 -1
  328. package/dist/tokenization/tokenizer-factory.spec.js +2 -2
  329. package/dist/tokenization/tokenizer-factory.spec.js.map +1 -1
  330. package/dist/tokenization/tokenizers/anthropic-tokenizer.d.ts +1 -1
  331. package/dist/tokenization/tokenizers/anthropic-tokenizer.d.ts.map +1 -1
  332. package/dist/tokenization/tokenizers/anthropic-tokenizer.js.map +1 -1
  333. package/dist/tokenization/tokenizers/anthropic-tokenizer.spec.js.map +1 -1
  334. package/dist/tokenization/tokenizers/fallback-tokenizer.d.ts +1 -1
  335. package/dist/tokenization/tokenizers/fallback-tokenizer.d.ts.map +1 -1
  336. package/dist/tokenization/tokenizers/fallback-tokenizer.spec.js.map +1 -1
  337. package/dist/tokenization/tokenizers/llama-tokenizer.d.ts +1 -1
  338. package/dist/tokenization/tokenizers/llama-tokenizer.d.ts.map +1 -1
  339. package/dist/tokenization/tokenizers/llama-tokenizer.js.map +1 -1
  340. package/dist/tokenization/tokenizers/llama-tokenizer.spec.js.map +1 -1
  341. package/dist/tokenization/tokenizers/openai-tokenizer.d.ts +1 -1
  342. package/dist/tokenization/tokenizers/openai-tokenizer.d.ts.map +1 -1
  343. package/dist/tokenization/tokenizers/openai-tokenizer.js.map +1 -1
  344. package/dist/tokenization/tokenizers/openai-tokenizer.spec.js.map +1 -1
  345. package/dist/tool-calling/json-parser.d.ts.map +1 -1
  346. package/dist/tool-calling/json-parser.js +12 -14
  347. package/dist/tool-calling/json-parser.js.map +1 -1
  348. package/dist/tool-calling/json-parser.spec.js +7 -7
  349. package/dist/tool-calling/json-parser.spec.js.map +1 -1
  350. package/dist/tool-calling/tool-parser.d.ts.map +1 -1
  351. package/dist/tool-calling/tool-parser.js +38 -10
  352. package/dist/tool-calling/tool-parser.js.map +1 -1
  353. package/dist/tool-calling/tool-parser.spec.js +82 -4
  354. package/dist/tool-calling/tool-parser.spec.js.map +1 -1
  355. package/dist/tool-calling/xml-parser.d.ts.map +1 -1
  356. package/dist/tool-calling/xml-parser.js +21 -23
  357. package/dist/tool-calling/xml-parser.js.map +1 -1
  358. package/dist/tool-calling/xml-parser.spec.js +23 -3
  359. package/dist/tool-calling/xml-parser.spec.js.map +1 -1
  360. package/dist/tools/create-file.d.ts +24 -2
  361. package/dist/tools/create-file.d.ts.map +1 -1
  362. package/dist/tools/create-file.js +20 -16
  363. package/dist/tools/create-file.js.map +1 -1
  364. package/dist/tools/delete-lines.d.ts +18 -2
  365. package/dist/tools/delete-lines.d.ts.map +1 -1
  366. package/dist/tools/delete-lines.js +22 -17
  367. package/dist/tools/delete-lines.js.map +1 -1
  368. package/dist/tools/execute-bash.d.ts +2 -2
  369. package/dist/tools/execute-bash.d.ts.map +1 -1
  370. package/dist/tools/execute-bash.js +13 -12
  371. package/dist/tools/execute-bash.js.map +1 -1
  372. package/dist/tools/execute-function.spec.d.ts +2 -0
  373. package/dist/tools/execute-function.spec.d.ts.map +1 -0
  374. package/dist/tools/execute-function.spec.js +141 -0
  375. package/dist/tools/execute-function.spec.js.map +1 -0
  376. package/dist/tools/fetch-url.d.ts +16 -2
  377. package/dist/tools/fetch-url.d.ts.map +1 -1
  378. package/dist/tools/fetch-url.js +13 -13
  379. package/dist/tools/fetch-url.js.map +1 -1
  380. package/dist/tools/find-files.d.ts +18 -2
  381. package/dist/tools/find-files.d.ts.map +1 -1
  382. package/dist/tools/find-files.js +13 -11
  383. package/dist/tools/find-files.js.map +1 -1
  384. package/dist/tools/index.d.ts +2 -3
  385. package/dist/tools/index.d.ts.map +1 -1
  386. package/dist/tools/index.js +35 -25
  387. package/dist/tools/index.js.map +1 -1
  388. package/dist/tools/insert-lines.d.ts +18 -2
  389. package/dist/tools/insert-lines.d.ts.map +1 -1
  390. package/dist/tools/insert-lines.js +21 -16
  391. package/dist/tools/insert-lines.js.map +1 -1
  392. package/dist/tools/lsp-get-diagnostics.d.ts +10 -2
  393. package/dist/tools/lsp-get-diagnostics.d.ts.map +1 -1
  394. package/dist/tools/lsp-get-diagnostics.js +13 -11
  395. package/dist/tools/lsp-get-diagnostics.js.map +1 -1
  396. package/dist/tools/needs-approval.spec.d.ts +2 -0
  397. package/dist/tools/needs-approval.spec.d.ts.map +1 -0
  398. package/dist/tools/needs-approval.spec.js +308 -0
  399. package/dist/tools/needs-approval.spec.js.map +1 -0
  400. package/dist/tools/read-file.d.ts +2 -2
  401. package/dist/tools/read-file.d.ts.map +1 -1
  402. package/dist/tools/read-file.js +16 -18
  403. package/dist/tools/read-file.js.map +1 -1
  404. package/dist/tools/replace-lines.d.ts +19 -2
  405. package/dist/tools/replace-lines.d.ts.map +1 -1
  406. package/dist/tools/replace-lines.js +21 -16
  407. package/dist/tools/replace-lines.js.map +1 -1
  408. package/dist/tools/search-file-contents.d.ts +20 -2
  409. package/dist/tools/search-file-contents.d.ts.map +1 -1
  410. package/dist/tools/search-file-contents.js +17 -14
  411. package/dist/tools/search-file-contents.js.map +1 -1
  412. package/dist/tools/tool-manager.d.ts +1 -1
  413. package/dist/tools/tool-manager.d.ts.map +1 -1
  414. package/dist/tools/tool-manager.js +1 -1
  415. package/dist/tools/tool-manager.js.map +1 -1
  416. package/dist/tools/tool-registry.d.ts +1 -1
  417. package/dist/tools/tool-registry.d.ts.map +1 -1
  418. package/dist/tools/web-search.d.ts +2 -2
  419. package/dist/tools/web-search.d.ts.map +1 -1
  420. package/dist/tools/web-search.js +14 -14
  421. package/dist/tools/web-search.js.map +1 -1
  422. package/dist/types/app.d.ts +7 -4
  423. package/dist/types/app.d.ts.map +1 -1
  424. package/dist/types/checkpoint.d.ts +43 -0
  425. package/dist/types/checkpoint.d.ts.map +1 -0
  426. package/dist/types/checkpoint.js +2 -0
  427. package/dist/types/checkpoint.js.map +1 -0
  428. package/dist/types/config.d.ts +0 -1
  429. package/dist/types/config.d.ts.map +1 -1
  430. package/dist/types/core-connection-status.spec.d.ts +2 -0
  431. package/dist/types/core-connection-status.spec.d.ts.map +1 -0
  432. package/dist/types/core-connection-status.spec.js +52 -0
  433. package/dist/types/core-connection-status.spec.js.map +1 -0
  434. package/dist/types/core.d.ts +34 -29
  435. package/dist/types/core.d.ts.map +1 -1
  436. package/dist/types/core.js +1 -1
  437. package/dist/types/core.js.map +1 -1
  438. package/dist/types/index.d.ts +1 -0
  439. package/dist/types/index.d.ts.map +1 -1
  440. package/dist/types/index.js +1 -0
  441. package/dist/types/index.js.map +1 -1
  442. package/dist/types/system.d.ts +5 -30
  443. package/dist/types/system.d.ts.map +1 -1
  444. package/dist/usage/calculator.spec.js +1 -1
  445. package/dist/usage/calculator.spec.js.map +1 -1
  446. package/dist/usage/storage.d.ts +1 -1
  447. package/dist/usage/storage.d.ts.map +1 -1
  448. package/dist/usage/storage.js +9 -3
  449. package/dist/usage/storage.js.map +1 -1
  450. package/dist/usage/storage.spec.js +3 -3
  451. package/dist/usage/storage.spec.js.map +1 -1
  452. package/dist/usage/tracker.d.ts.map +1 -1
  453. package/dist/usage/tracker.js +1 -1
  454. package/dist/usage/tracker.js.map +1 -1
  455. package/dist/usage/tracker.spec.js +4 -4
  456. package/dist/usage/tracker.spec.js.map +1 -1
  457. package/dist/utils/atomic-deletion.spec.js +1 -1
  458. package/dist/utils/atomic-deletion.spec.js.map +1 -1
  459. package/dist/utils/checkpoint-utils.d.ts +12 -0
  460. package/dist/utils/checkpoint-utils.d.ts.map +1 -0
  461. package/dist/utils/checkpoint-utils.js +85 -0
  462. package/dist/utils/checkpoint-utils.js.map +1 -0
  463. package/dist/utils/checkpoint-utils.spec.d.ts +2 -0
  464. package/dist/utils/checkpoint-utils.spec.d.ts.map +1 -0
  465. package/dist/utils/checkpoint-utils.spec.js +182 -0
  466. package/dist/utils/checkpoint-utils.spec.js.map +1 -0
  467. package/dist/utils/error-formatter.d.ts +35 -0
  468. package/dist/utils/error-formatter.d.ts.map +1 -1
  469. package/dist/utils/error-formatter.js +123 -0
  470. package/dist/utils/error-formatter.js.map +1 -1
  471. package/dist/utils/file-autocomplete.js +2 -2
  472. package/dist/utils/file-autocomplete.js.map +1 -1
  473. package/dist/utils/file-autocomplete.spec.js +1 -1
  474. package/dist/utils/file-autocomplete.spec.js.map +1 -1
  475. package/dist/utils/file-content-loader.js +1 -1
  476. package/dist/utils/file-content-loader.js.map +1 -1
  477. package/dist/utils/file-content-loader.spec.js +4 -4
  478. package/dist/utils/file-content-loader.spec.js.map +1 -1
  479. package/dist/utils/file-mention-handler.js.map +1 -1
  480. package/dist/utils/file-mention-handler.spec.js +4 -4
  481. package/dist/utils/file-mention-handler.spec.js.map +1 -1
  482. package/dist/utils/file-mention-parser.spec.js +2 -2
  483. package/dist/utils/file-mention-parser.spec.js.map +1 -1
  484. package/dist/utils/installation-detector.js +2 -2
  485. package/dist/utils/installation-detector.js.map +1 -1
  486. package/dist/utils/installation-detector.spec.js +10 -17
  487. package/dist/utils/installation-detector.spec.js.map +1 -1
  488. package/dist/utils/logging/config.d.ts +41 -0
  489. package/dist/utils/logging/config.d.ts.map +1 -0
  490. package/dist/utils/logging/config.js +188 -0
  491. package/dist/utils/logging/config.js.map +1 -0
  492. package/dist/utils/logging/config.spec.d.ts +2 -0
  493. package/dist/utils/logging/config.spec.d.ts.map +1 -0
  494. package/dist/utils/logging/config.spec.js +233 -0
  495. package/dist/utils/logging/config.spec.js.map +1 -0
  496. package/dist/utils/logging/console-facade.d.ts +93 -0
  497. package/dist/utils/logging/console-facade.d.ts.map +1 -0
  498. package/dist/utils/logging/console-facade.js +295 -0
  499. package/dist/utils/logging/console-facade.js.map +1 -0
  500. package/dist/utils/logging/console-facade.spec.d.ts +2 -0
  501. package/dist/utils/logging/console-facade.spec.d.ts.map +1 -0
  502. package/dist/utils/logging/console-facade.spec.js +143 -0
  503. package/dist/utils/logging/console-facade.spec.js.map +1 -0
  504. package/dist/utils/logging/correlation.d.ts +139 -0
  505. package/dist/utils/logging/correlation.d.ts.map +1 -0
  506. package/dist/utils/logging/correlation.js +410 -0
  507. package/dist/utils/logging/correlation.js.map +1 -0
  508. package/dist/utils/logging/correlation.spec.d.ts +2 -0
  509. package/dist/utils/logging/correlation.spec.d.ts.map +1 -0
  510. package/dist/utils/logging/correlation.spec.js +449 -0
  511. package/dist/utils/logging/correlation.spec.js.map +1 -0
  512. package/dist/utils/logging/formatters.d.ts +70 -0
  513. package/dist/utils/logging/formatters.d.ts.map +1 -0
  514. package/dist/utils/logging/formatters.js +186 -0
  515. package/dist/utils/logging/formatters.js.map +1 -0
  516. package/dist/utils/logging/formatters.spec.d.ts +2 -0
  517. package/dist/utils/logging/formatters.spec.d.ts.map +1 -0
  518. package/dist/utils/logging/formatters.spec.js +356 -0
  519. package/dist/utils/logging/formatters.spec.js.map +1 -0
  520. package/dist/utils/logging/health-monitor.d.ts +216 -0
  521. package/dist/utils/logging/health-monitor.d.ts.map +1 -0
  522. package/dist/utils/logging/health-monitor.js +760 -0
  523. package/dist/utils/logging/health-monitor.js.map +1 -0
  524. package/dist/utils/logging/health-monitor.spec.d.ts +2 -0
  525. package/dist/utils/logging/health-monitor.spec.d.ts.map +1 -0
  526. package/dist/utils/logging/health-monitor.spec.js +305 -0
  527. package/dist/utils/logging/health-monitor.spec.js.map +1 -0
  528. package/dist/utils/logging/index.d.ts +100 -0
  529. package/dist/utils/logging/index.d.ts.map +1 -0
  530. package/dist/utils/logging/index.js +186 -0
  531. package/dist/utils/logging/index.js.map +1 -0
  532. package/dist/utils/logging/index.spec.d.ts +2 -0
  533. package/dist/utils/logging/index.spec.d.ts.map +1 -0
  534. package/dist/utils/logging/index.spec.js +214 -0
  535. package/dist/utils/logging/index.spec.js.map +1 -0
  536. package/dist/utils/logging/integration.spec.d.ts +2 -0
  537. package/dist/utils/logging/integration.spec.d.ts.map +1 -0
  538. package/dist/utils/logging/integration.spec.js +312 -0
  539. package/dist/utils/logging/integration.spec.js.map +1 -0
  540. package/dist/utils/logging/log-method-factory.d.ts +43 -0
  541. package/dist/utils/logging/log-method-factory.d.ts.map +1 -0
  542. package/dist/utils/logging/log-method-factory.js +176 -0
  543. package/dist/utils/logging/log-method-factory.js.map +1 -0
  544. package/dist/utils/logging/log-method-factory.spec.d.ts +2 -0
  545. package/dist/utils/logging/log-method-factory.spec.d.ts.map +1 -0
  546. package/dist/utils/logging/log-method-factory.spec.js +428 -0
  547. package/dist/utils/logging/log-method-factory.spec.js.map +1 -0
  548. package/dist/utils/logging/log-query.d.ts +275 -0
  549. package/dist/utils/logging/log-query.d.ts.map +1 -0
  550. package/dist/utils/logging/log-query.js +621 -0
  551. package/dist/utils/logging/log-query.js.map +1 -0
  552. package/dist/utils/logging/log-query.spec.d.ts +2 -0
  553. package/dist/utils/logging/log-query.spec.d.ts.map +1 -0
  554. package/dist/utils/logging/log-query.spec.js +737 -0
  555. package/dist/utils/logging/log-query.spec.js.map +1 -0
  556. package/dist/utils/logging/logger-provider.d.ts +73 -0
  557. package/dist/utils/logging/logger-provider.d.ts.map +1 -0
  558. package/dist/utils/logging/logger-provider.js +298 -0
  559. package/dist/utils/logging/logger-provider.js.map +1 -0
  560. package/dist/utils/logging/logger-provider.spec.d.ts +2 -0
  561. package/dist/utils/logging/logger-provider.spec.d.ts.map +1 -0
  562. package/dist/utils/logging/logger-provider.spec.js +204 -0
  563. package/dist/utils/logging/logger-provider.spec.js.map +1 -0
  564. package/dist/utils/logging/performance.d.ts +147 -0
  565. package/dist/utils/logging/performance.d.ts.map +1 -0
  566. package/dist/utils/logging/performance.js +520 -0
  567. package/dist/utils/logging/performance.js.map +1 -0
  568. package/dist/utils/logging/performance.spec.d.ts +2 -0
  569. package/dist/utils/logging/performance.spec.d.ts.map +1 -0
  570. package/dist/utils/logging/performance.spec.js +139 -0
  571. package/dist/utils/logging/performance.spec.js.map +1 -0
  572. package/dist/utils/logging/pino-logger.d.ts +22 -0
  573. package/dist/utils/logging/pino-logger.d.ts.map +1 -0
  574. package/dist/utils/logging/pino-logger.js +372 -0
  575. package/dist/utils/logging/pino-logger.js.map +1 -0
  576. package/dist/utils/logging/pino-logger.spec.d.ts +2 -0
  577. package/dist/utils/logging/pino-logger.spec.d.ts.map +1 -0
  578. package/dist/utils/logging/pino-logger.spec.js +294 -0
  579. package/dist/utils/logging/pino-logger.spec.js.map +1 -0
  580. package/dist/utils/logging/redaction.d.ts +38 -0
  581. package/dist/utils/logging/redaction.d.ts.map +1 -0
  582. package/dist/utils/logging/redaction.js +210 -0
  583. package/dist/utils/logging/redaction.js.map +1 -0
  584. package/dist/utils/logging/redaction.spec.d.ts +2 -0
  585. package/dist/utils/logging/redaction.spec.d.ts.map +1 -0
  586. package/dist/utils/logging/redaction.spec.js +338 -0
  587. package/dist/utils/logging/redaction.spec.js.map +1 -0
  588. package/dist/utils/logging/request-tracker.d.ts +189 -0
  589. package/dist/utils/logging/request-tracker.d.ts.map +1 -0
  590. package/dist/utils/logging/request-tracker.js +569 -0
  591. package/dist/utils/logging/request-tracker.js.map +1 -0
  592. package/dist/utils/logging/request-tracker.spec.d.ts +2 -0
  593. package/dist/utils/logging/request-tracker.spec.d.ts.map +1 -0
  594. package/dist/utils/logging/request-tracker.spec.js +868 -0
  595. package/dist/utils/logging/request-tracker.spec.js.map +1 -0
  596. package/dist/utils/logging/transports.d.ts +55 -0
  597. package/dist/utils/logging/transports.d.ts.map +1 -0
  598. package/dist/utils/logging/transports.js +252 -0
  599. package/dist/utils/logging/transports.js.map +1 -0
  600. package/dist/utils/logging/transports.spec.d.ts +2 -0
  601. package/dist/utils/logging/transports.spec.d.ts.map +1 -0
  602. package/dist/utils/logging/transports.spec.js +390 -0
  603. package/dist/utils/logging/transports.spec.js.map +1 -0
  604. package/dist/utils/logging/types.d.ts +173 -0
  605. package/dist/utils/logging/types.d.ts.map +1 -0
  606. package/dist/utils/logging/types.js +5 -0
  607. package/dist/utils/logging/types.js.map +1 -0
  608. package/dist/utils/message-queue.d.ts +64 -4
  609. package/dist/utils/message-queue.d.ts.map +1 -1
  610. package/dist/utils/message-queue.js +282 -28
  611. package/dist/utils/message-queue.js.map +1 -1
  612. package/dist/utils/paste-utils.spec.js +1 -1
  613. package/dist/utils/paste-utils.spec.js.map +1 -1
  614. package/dist/utils/prompt-processor.d.ts +2 -3
  615. package/dist/utils/prompt-processor.d.ts.map +1 -1
  616. package/dist/utils/prompt-processor.js +4 -52
  617. package/dist/utils/prompt-processor.js.map +1 -1
  618. package/dist/utils/tool-cancellation.spec.js.map +1 -1
  619. package/dist/utils/tool-result-display.d.ts +2 -2
  620. package/dist/utils/tool-result-display.d.ts.map +1 -1
  621. package/dist/utils/tool-result-display.js +3 -3
  622. package/dist/utils/tool-result-display.js.map +1 -1
  623. package/dist/utils/update-checker.d.ts.map +1 -1
  624. package/dist/utils/update-checker.js +1 -1
  625. package/dist/utils/update-checker.js.map +1 -1
  626. package/dist/utils/update-checker.spec.js +2 -2
  627. package/dist/utils/update-checker.spec.js.map +1 -1
  628. package/dist/vscode/extension-installer.js +1 -1
  629. package/dist/vscode/extension-installer.js.map +1 -1
  630. package/dist/vscode/extension-installer.spec.js +1 -1
  631. package/dist/vscode/extension-installer.spec.js.map +1 -1
  632. package/dist/vscode/protocol.spec.js +1 -1
  633. package/dist/vscode/protocol.spec.js.map +1 -1
  634. package/dist/vscode/vscode-server.d.ts.map +1 -1
  635. package/dist/vscode/vscode-server.js +2 -2
  636. package/dist/vscode/vscode-server.js.map +1 -1
  637. package/dist/vscode/vscode-server.spec.js.map +1 -1
  638. package/dist/wizard/config-wizard.d.ts.map +1 -1
  639. package/dist/wizard/config-wizard.js +16 -12
  640. package/dist/wizard/config-wizard.js.map +1 -1
  641. package/dist/wizard/steps/location-step.js +4 -4
  642. package/dist/wizard/steps/location-step.js.map +1 -1
  643. package/dist/wizard/steps/mcp-step.d.ts.map +1 -1
  644. package/dist/wizard/steps/mcp-step.js +4 -4
  645. package/dist/wizard/steps/mcp-step.js.map +1 -1
  646. package/dist/wizard/steps/provider-step.d.ts.map +1 -1
  647. package/dist/wizard/steps/provider-step.js +4 -4
  648. package/dist/wizard/steps/provider-step.js.map +1 -1
  649. package/dist/wizard/steps/summary-step.d.ts.map +1 -1
  650. package/dist/wizard/steps/summary-step.js +2 -2
  651. package/dist/wizard/steps/summary-step.js.map +1 -1
  652. package/dist/wizard/templates/provider-templates.d.ts.map +1 -1
  653. package/dist/wizard/templates/provider-templates.js +66 -2
  654. package/dist/wizard/templates/provider-templates.js.map +1 -1
  655. package/dist/wizard/validation-array.spec.js +1 -1
  656. package/dist/wizard/validation-array.spec.js.map +1 -1
  657. package/dist/wizard/validation.spec.js +1 -1
  658. package/dist/wizard/validation.spec.js.map +1 -1
  659. package/package.json +28 -26
  660. package/source/app/prompts/main-prompt.md +29 -96
  661. package/dist/commands/recommendations.d.ts +0 -8
  662. package/dist/commands/recommendations.d.ts.map +0 -1
  663. package/dist/commands/recommendations.js +0 -311
  664. package/dist/commands/recommendations.js.map +0 -1
  665. package/dist/commands/streaming.d.ts +0 -3
  666. package/dist/commands/streaming.d.ts.map +0 -1
  667. package/dist/commands/streaming.js +0 -23
  668. package/dist/commands/streaming.js.map +0 -1
  669. package/dist/components/thinking-indicator.d.ts +0 -3
  670. package/dist/components/thinking-indicator.d.ts.map +0 -1
  671. package/dist/components/thinking-indicator.js +0 -69
  672. package/dist/components/thinking-indicator.js.map +0 -1
  673. package/dist/recommendations/model-database.d.ts +0 -8
  674. package/dist/recommendations/model-database.d.ts.map +0 -1
  675. package/dist/recommendations/model-database.js +0 -514
  676. package/dist/recommendations/model-database.js.map +0 -1
  677. package/dist/recommendations/model-engine.d.ts +0 -16
  678. package/dist/recommendations/model-engine.d.ts.map +0 -1
  679. package/dist/recommendations/model-engine.js +0 -185
  680. package/dist/recommendations/model-engine.js.map +0 -1
  681. package/dist/recommendations/recommendation-engine.d.ts +0 -39
  682. package/dist/recommendations/recommendation-engine.d.ts.map +0 -1
  683. package/dist/recommendations/recommendation-engine.js +0 -144
  684. package/dist/recommendations/recommendation-engine.js.map +0 -1
  685. package/dist/system/detector.d.ts +0 -18
  686. package/dist/system/detector.d.ts.map +0 -1
  687. package/dist/system/detector.js +0 -140
  688. package/dist/system/detector.js.map +0 -1
@@ -1,185 +0,0 @@
1
- import { modelDatabase } from '../recommendations/model-database.js';
2
- export class ModelMatchingEngine {
3
- static instance;
4
- static getInstance() {
5
- if (!ModelMatchingEngine.instance) {
6
- ModelMatchingEngine.instance = new ModelMatchingEngine();
7
- }
8
- return ModelMatchingEngine.instance;
9
- }
10
- getCompatibleModels(systemCapabilities) {
11
- const allModels = modelDatabase.getAllModels();
12
- const recommendations = [];
13
- for (const model of allModels) {
14
- const compatibility = this.assessModelCompatibility(model, systemCapabilities);
15
- const warnings = this.generateWarnings(model, systemCapabilities);
16
- const recommendation = this.generateRecommendationText(model, compatibility);
17
- recommendations.push({
18
- model,
19
- compatibility,
20
- warnings,
21
- recommendation,
22
- });
23
- }
24
- // Sort by compatibility and capability score
25
- return recommendations.sort((a, b) => {
26
- const compatibilityScore = this.getCompatibilityScore(a.compatibility) -
27
- this.getCompatibilityScore(b.compatibility);
28
- if (compatibilityScore !== 0)
29
- return compatibilityScore;
30
- // If compatibility is the same, sort by overall capability
31
- const aScore = this.calculateOverallCapabilityScore(a.model);
32
- const bScore = this.calculateOverallCapabilityScore(b.model);
33
- return bScore - aScore;
34
- });
35
- }
36
- getTopRecommendations(systemCapabilities, count = 5) {
37
- const compatible = this.getCompatibleModels(systemCapabilities);
38
- return compatible
39
- .filter(rec => rec.compatibility !== 'incompatible')
40
- .slice(0, count);
41
- }
42
- getBestLocalModel(systemCapabilities) {
43
- const localModels = this.getCompatibleModels(systemCapabilities).filter(rec => rec.model.local && rec.compatibility !== 'incompatible');
44
- return localModels.length > 0 ? localModels[0] : null;
45
- }
46
- getBestApiModel(systemCapabilities) {
47
- const apiModels = this.getCompatibleModels(systemCapabilities).filter(rec => rec.model.api && rec.compatibility !== 'incompatible');
48
- return apiModels.length > 0 ? apiModels[0] : null;
49
- }
50
- assessModelCompatibility(model, system) {
51
- // Check if model can be accessed via API
52
- const canUseApi = model.api && system.network.connected;
53
- // Check if model can be run locally
54
- let canUseLocal = false;
55
- if (model.local) {
56
- const requiredMemory = model.minMemoryGB || 8; // Default 8GB if not specified
57
- canUseLocal = system.memory.total >= requiredMemory;
58
- }
59
- // Model is incompatible if neither method works
60
- if (!canUseApi && !canUseLocal) {
61
- return 'incompatible';
62
- }
63
- // Perfect if we can use API (no resource constraints)
64
- if (canUseApi) {
65
- return 'perfect';
66
- }
67
- // For local-only models, check GPU availability
68
- const gpuAvailable = system.gpu.available && system.gpu.type !== 'none';
69
- return gpuAvailable ? 'perfect' : 'good';
70
- }
71
- generateWarnings(model, system) {
72
- const warnings = [];
73
- if (model.local) {
74
- const requiredMemory = model.minMemoryGB || 8;
75
- // Check if user can't run locally
76
- if (system.memory.total < requiredMemory) {
77
- if (model.api) {
78
- warnings.push(`Cannot run locally - requires ${requiredMemory}GB RAM (you have ${system.memory.total}GB). Run only via API.`);
79
- }
80
- else {
81
- warnings.push(`Cannot run locally - requires ${requiredMemory}GB RAM (you have ${system.memory.total}GB)`);
82
- }
83
- }
84
- else {
85
- // GPU warnings (only if they CAN run it locally)
86
- const gpuAvailable = system.gpu.available && system.gpu.type !== 'none';
87
- if (!gpuAvailable) {
88
- warnings.push('GPU recommended for better performance - will be slow on CPU');
89
- }
90
- // Memory warnings
91
- if (system.memory.total === requiredMemory) {
92
- warnings.push(`Running at minimum RAM (${requiredMemory}GB) - may be slow`);
93
- }
94
- }
95
- }
96
- if (model.api) {
97
- // Network warnings
98
- if (!system.network.connected) {
99
- warnings.push('API access requires internet connection');
100
- }
101
- else if (system.network.speed === 'slow') {
102
- warnings.push('May have delays due to slow internet connection');
103
- }
104
- // Cost warnings
105
- if (model.costType === 'paid') {
106
- warnings.push('Usage costs apply - monitor your spending');
107
- }
108
- }
109
- // Capability warnings based on ratings (0-10 scale, 0 = not supported)
110
- if (model.quality.agentic === 0) {
111
- warnings.push('Does not support agentic coding workflows');
112
- }
113
- else if (model.quality.agentic <= 4) {
114
- warnings.push('Limited capabilities for complex agentic coding tasks');
115
- }
116
- if (model.quality.local === 0) {
117
- warnings.push('Cannot be run locally - proprietary/closed-source model');
118
- }
119
- else if (model.quality.local <= 3) {
120
- warnings.push('Difficult to run locally - requires significant resources');
121
- }
122
- return warnings;
123
- }
124
- generateRecommendationText(model, compatibility) {
125
- if (compatibility === 'incompatible') {
126
- if (model.local) {
127
- const requiredMemory = model.minMemoryGB || 8;
128
- return `Cannot run locally - needs ${requiredMemory}GB RAM. ${model.api ? 'Try API access instead.' : ''}`;
129
- }
130
- return 'Requires internet connection for API access';
131
- }
132
- const strengths = [];
133
- // Analyze capabilities (0-10 scale)
134
- if (model.quality.agentic >= 8) {
135
- strengths.push('Excellent agentic coding abilities');
136
- }
137
- else if (model.quality.agentic >= 6) {
138
- strengths.push('Good agentic coding capabilities');
139
- }
140
- if (model.quality.local >= 8) {
141
- strengths.push('Easy to run locally');
142
- }
143
- else if (model.quality.local >= 6) {
144
- strengths.push('Reasonable to run locally');
145
- }
146
- if (model.quality.cost >= 8) {
147
- strengths.push('Excellent value - free or very cheap');
148
- }
149
- else if (model.quality.cost >= 6) {
150
- strengths.push('Good cost-effectiveness');
151
- }
152
- if (model.local && model.api) {
153
- strengths.push('Available locally and via API');
154
- }
155
- else if (model.local) {
156
- strengths.push('Private/local only');
157
- }
158
- // Build recommendation text as bullet points
159
- if (strengths.length > 0) {
160
- return strengths.map(s => `• ${s}`).join('\n');
161
- }
162
- return '• Standard model for general use';
163
- }
164
- getCompatibilityScore(compatibility) {
165
- switch (compatibility) {
166
- case 'perfect':
167
- return 4;
168
- case 'good':
169
- return 3;
170
- case 'marginal':
171
- return 2;
172
- case 'incompatible':
173
- return 1;
174
- }
175
- }
176
- calculateOverallCapabilityScore(model) {
177
- // Weight heavily in favor of agentic capabilities (coding ability is most important)
178
- // Then local feasibility, and finally cost
179
- return (model.quality.agentic * 3.0 +
180
- model.quality.local * 0.8 +
181
- model.quality.cost * 0.5);
182
- }
183
- }
184
- export const modelMatchingEngine = ModelMatchingEngine.getInstance();
185
- //# sourceMappingURL=model-engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-engine.js","sourceRoot":"","sources":["../../source/recommendations/model-engine.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import { SystemCapabilities, ModelRecommendation } from '../types/index.js';
2
- export interface ModelRecommendationEnhanced extends ModelRecommendation {
3
- recommendedProvider: string;
4
- }
5
- interface RecommendationResult {
6
- quickStart: ModelRecommendationEnhanced | null;
7
- allModels: ModelRecommendationEnhanced[];
8
- }
9
- export declare class RecommendationEngine {
10
- private static instance;
11
- static getInstance(): RecommendationEngine;
12
- /**
13
- * Get all recommendations based on system capabilities
14
- */
15
- getRecommendations(systemCapabilities: SystemCapabilities): RecommendationResult;
16
- /**
17
- * Enhance a model with setup instructions
18
- */
19
- private enhanceModel;
20
- /**
21
- * Sort models by priority for recommendations:
22
- * 1. High-quality local models (free + powerful)
23
- * 2. High-quality API models (powerful but paid)
24
- * 3. Lower-quality local models
25
- * 4. Lower-quality API models
26
- */
27
- private sortModelsByPriority;
28
- /**
29
- * Get a simple quick start recommendation
30
- */
31
- getQuickStartRecommendation(systemCapabilities: SystemCapabilities): {
32
- model: string;
33
- provider: string;
34
- reasoning: string;
35
- } | null;
36
- }
37
- export declare const recommendationEngine: RecommendationEngine;
38
- export {};
39
- //# sourceMappingURL=recommendation-engine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recommendation-engine.d.ts","sourceRoot":"","sources":["../../source/recommendations/recommendation-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAGtE,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACvE,mBAAmB,EAAE,MAAM,CAAC;CAC5B;AAED,UAAU,oBAAoB;IAC7B,UAAU,EAAE,2BAA2B,GAAG,IAAI,CAAC;IAC/C,SAAS,EAAE,2BAA2B,EAAE,CAAC;CACzC;AAED,qBAAa,oBAAoB;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAE9C,MAAM,CAAC,WAAW,IAAI,oBAAoB;IAO1C;;OAEG;IACH,kBAAkB,CACjB,kBAAkB,EAAE,kBAAkB,GACpC,oBAAoB;IA+BvB;;OAEG;IACH,OAAO,CAAC,YAAY;IA8BpB;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAoE5B;;OAEG;IACH,2BAA2B,CAAC,kBAAkB,EAAE,kBAAkB,GAAG;QACpE,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;CAeR;AAED,eAAO,MAAM,oBAAoB,sBAAqC,CAAC"}
@@ -1,144 +0,0 @@
1
- import { modelMatchingEngine } from '../recommendations/model-engine.js';
2
- export class RecommendationEngine {
3
- static instance;
4
- static getInstance() {
5
- if (!RecommendationEngine.instance) {
6
- RecommendationEngine.instance = new RecommendationEngine();
7
- }
8
- return RecommendationEngine.instance;
9
- }
10
- /**
11
- * Get all recommendations based on system capabilities
12
- */
13
- getRecommendations(systemCapabilities) {
14
- // Get all compatible models
15
- const compatibleModels = modelMatchingEngine.getCompatibleModels(systemCapabilities);
16
- // Enhance each model with setup instructions
17
- const enhancedModels = compatibleModels.map(model => this.enhanceModel(model, systemCapabilities));
18
- // Filter out incompatible models
19
- const usableModels = enhancedModels.filter(m => m.compatibility !== 'incompatible');
20
- // Sort models by priority:
21
- // 1. Free (local) + high quality
22
- // 2. Low cost + high quality
23
- // 3. By agentic capabilities
24
- // 4. By compatibility
25
- const sortedModels = this.sortModelsByPriority(usableModels);
26
- // Pick the best quick start option (prioritize local models if available)
27
- const quickStart = sortedModels[0] || null;
28
- return {
29
- quickStart,
30
- allModels: sortedModels,
31
- };
32
- }
33
- /**
34
- * Enhance a model with setup instructions
35
- */
36
- enhanceModel(modelRec, systemCapabilities) {
37
- const model = modelRec.model;
38
- // Determine best access method based on system capabilities
39
- const canUseLocal = model.local &&
40
- systemCapabilities.memory.total >= (model.minMemoryGB || 8);
41
- const canUseApi = model.api && systemCapabilities.network.connected;
42
- let recommendedProvider = '';
43
- if (canUseLocal && !canUseApi) {
44
- recommendedProvider = 'local';
45
- }
46
- else if (!canUseLocal && canUseApi) {
47
- recommendedProvider = 'api';
48
- }
49
- else if (canUseLocal && canUseApi) {
50
- recommendedProvider = 'local (API also available)';
51
- }
52
- else {
53
- recommendedProvider = 'unavailable';
54
- }
55
- return {
56
- ...modelRec,
57
- recommendedProvider,
58
- };
59
- }
60
- /**
61
- * Sort models by priority for recommendations:
62
- * 1. High-quality local models (free + powerful)
63
- * 2. High-quality API models (powerful but paid)
64
- * 3. Lower-quality local models
65
- * 4. Lower-quality API models
66
- */
67
- sortModelsByPriority(models) {
68
- return models.sort((a, b) => {
69
- // Calculate quality scores - prioritize agentic capabilities heavily
70
- const aQuality = a.model.quality.agentic * 3.0 +
71
- a.model.quality.local * 0.8 +
72
- a.model.quality.cost * 0.5;
73
- const bQuality = b.model.quality.agentic * 3.0 +
74
- b.model.quality.local * 0.8 +
75
- b.model.quality.cost * 0.5;
76
- // Determine what the user can ACTUALLY use based on recommendedProvider
77
- const aCanUseLocal = a.recommendedProvider.includes('local');
78
- const bCanUseLocal = b.recommendedProvider.includes('local');
79
- const aApiOnly = a.recommendedProvider === 'api';
80
- const bApiOnly = b.recommendedProvider === 'api';
81
- // Define quality thresholds (out of 43 possible with new weighting: agentic*3 + local*0.8 + cost*0.5)
82
- const highQuality = 24; // 24+ = high quality (agentic 8+)
83
- const decentQuality = 15; // 15+ = decent (agentic 5+), below = poor
84
- const aHighQuality = aQuality >= highQuality;
85
- const bHighQuality = bQuality >= highQuality;
86
- const aDecentQuality = aQuality >= decentQuality;
87
- const bDecentQuality = bQuality >= decentQuality;
88
- // 1. High-quality API beats poor-quality local (don't recommend trash just because it's free)
89
- if (aApiOnly && bCanUseLocal && aHighQuality && !bDecentQuality)
90
- return -1;
91
- if (bApiOnly && aCanUseLocal && bHighQuality && !aDecentQuality)
92
- return 1;
93
- // 2. Decent+ local models beat API-only (free is better if quality is acceptable)
94
- if (aCanUseLocal && bApiOnly && aDecentQuality)
95
- return -1;
96
- if (bCanUseLocal && aApiOnly && bDecentQuality)
97
- return 1;
98
- // 3. Among models user can run locally, prefer high quality
99
- if (aCanUseLocal && bCanUseLocal) {
100
- if (aHighQuality && !bHighQuality)
101
- return -1;
102
- if (bHighQuality && !aHighQuality)
103
- return 1;
104
- // Same quality tier - prefer higher score
105
- return bQuality - aQuality;
106
- }
107
- // 4. Among API-only models, prefer free over paid
108
- if (aApiOnly && bApiOnly) {
109
- const aCost = a.model.costType === 'free' ? 0 : 1;
110
- const bCost = b.model.costType === 'free' ? 0 : 1;
111
- if (aCost !== bCost)
112
- return aCost - bCost;
113
- // Same cost - prefer higher quality
114
- return bQuality - aQuality;
115
- }
116
- // 5. Compare by compatibility as final tiebreaker
117
- const compatibilityOrder = {
118
- perfect: 4,
119
- good: 3,
120
- marginal: 2,
121
- incompatible: 1,
122
- };
123
- return (compatibilityOrder[b.compatibility] -
124
- compatibilityOrder[a.compatibility]);
125
- });
126
- }
127
- /**
128
- * Get a simple quick start recommendation
129
- */
130
- getQuickStartRecommendation(systemCapabilities) {
131
- const result = this.getRecommendations(systemCapabilities);
132
- if (!result.quickStart) {
133
- return null;
134
- }
135
- const model = result.quickStart;
136
- return {
137
- model: model.model.name,
138
- provider: model.recommendedProvider,
139
- reasoning: model.recommendation,
140
- };
141
- }
142
- }
143
- export const recommendationEngine = RecommendationEngine.getInstance();
144
- //# sourceMappingURL=recommendation-engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recommendation-engine.js","sourceRoot":"","sources":["../../source/recommendations/recommendation-engine.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import { SystemCapabilities } from '../types/index.js';
2
- export declare class SystemDetector {
3
- private static instance;
4
- private cachedCapabilities;
5
- private lastDetection;
6
- private readonly CACHE_DURATION;
7
- static getInstance(): SystemDetector;
8
- getSystemCapabilities(): Promise<SystemCapabilities>;
9
- private detectSystemCapabilities;
10
- private detectCpu;
11
- private detectMemory;
12
- private detectPlatform;
13
- private detectGpu;
14
- private detectNetwork;
15
- clearCache(): void;
16
- }
17
- export declare const systemDetector: SystemDetector;
18
- //# sourceMappingURL=detector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../source/system/detector.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAIjD,qBAAa,cAAc;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IAEzC,MAAM,CAAC,WAAW,IAAI,cAAc;IAO9B,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,CAAC;YAe5C,wBAAwB;YAkBxB,SAAS;YAQT,YAAY;YAQZ,cAAc;YAKd,SAAS;YAgDT,aAAa;IAmC3B,UAAU,IAAI,IAAI;CAIlB;AAED,eAAO,MAAM,cAAc,gBAA+B,CAAC"}
@@ -1,140 +0,0 @@
1
- import { exec } from 'node:child_process';
2
- import { promisify } from 'node:util';
3
- import * as si from 'systeminformation';
4
- const execAsync = promisify(exec);
5
- export class SystemDetector {
6
- static instance;
7
- cachedCapabilities = null;
8
- lastDetection = 0;
9
- CACHE_DURATION = 30_000; // 30 seconds
10
- static getInstance() {
11
- if (!SystemDetector.instance) {
12
- SystemDetector.instance = new SystemDetector();
13
- }
14
- return SystemDetector.instance;
15
- }
16
- async getSystemCapabilities() {
17
- const now = Date.now();
18
- if (this.cachedCapabilities &&
19
- now - this.lastDetection < this.CACHE_DURATION) {
20
- return this.cachedCapabilities;
21
- }
22
- const capabilities = await this.detectSystemCapabilities();
23
- this.cachedCapabilities = capabilities;
24
- this.lastDetection = now;
25
- return capabilities;
26
- }
27
- async detectSystemCapabilities() {
28
- const [cpu, memory, gpu, platform, network] = await Promise.all([
29
- this.detectCpu(),
30
- this.detectMemory(),
31
- this.detectGpu(),
32
- this.detectPlatform(),
33
- this.detectNetwork(),
34
- ]);
35
- return {
36
- cpu,
37
- memory,
38
- gpu,
39
- platform,
40
- network,
41
- };
42
- }
43
- async detectCpu() {
44
- const cpuInfo = await si.cpu();
45
- return {
46
- cores: cpuInfo.cores,
47
- architecture: cpuInfo.family,
48
- };
49
- }
50
- async detectMemory() {
51
- const memInfo = await si.mem();
52
- return {
53
- total: Math.round(memInfo.total / 1024 ** 3), // Convert to GB
54
- available: Math.round(memInfo.available / 1024 ** 3), // Convert to GB
55
- };
56
- }
57
- async detectPlatform() {
58
- const osInfo = await si.osInfo();
59
- return osInfo.platform;
60
- }
61
- async detectGpu() {
62
- try {
63
- const graphics = await si.graphics();
64
- if (graphics.controllers && graphics.controllers.length > 0) {
65
- const controller = graphics.controllers[0];
66
- const vendor = controller.vendor?.toLowerCase() || '';
67
- const model = controller.model?.toLowerCase() || '';
68
- let type = 'none';
69
- if (vendor.includes('nvidia') || model.includes('nvidia')) {
70
- type = 'nvidia';
71
- }
72
- else if (vendor.includes('amd') ||
73
- model.includes('amd') ||
74
- model.includes('radeon')) {
75
- type = 'amd';
76
- }
77
- else if (vendor.includes('apple') || model.includes('apple')) {
78
- type = 'apple';
79
- }
80
- else if (vendor.includes('intel') || model.includes('intel')) {
81
- type = 'intel';
82
- }
83
- const memoryMB = typeof controller.vram === 'number'
84
- ? controller.vram
85
- : typeof controller.vramDynamic === 'number'
86
- ? controller.vramDynamic
87
- : 0;
88
- const memoryGB = memoryMB > 0 ? Math.round(memoryMB / 1024) : undefined;
89
- return {
90
- available: true,
91
- type,
92
- memory: memoryGB,
93
- };
94
- }
95
- }
96
- catch {
97
- // Fallback to basic detection if systeminformation fails
98
- }
99
- return {
100
- available: false,
101
- type: 'none',
102
- };
103
- }
104
- async detectNetwork() {
105
- try {
106
- // Simple connectivity test
107
- const testUrls = ['google.com', 'cloudflare.com'];
108
- const results = await Promise.allSettled(testUrls.map(async (url) => {
109
- const start = Date.now();
110
- await execAsync(`ping -c 1 -W 2000 ${url}`, { timeout: 3000 });
111
- return Date.now() - start;
112
- }));
113
- const successful = results.filter(r => r.status === 'fulfilled');
114
- if (successful.length === 0) {
115
- return { connected: false };
116
- }
117
- const avgLatency = successful.reduce((sum, r) => sum + r.value, 0) / successful.length;
118
- let speed;
119
- if (avgLatency < 50)
120
- speed = 'fast';
121
- else if (avgLatency < 200)
122
- speed = 'medium';
123
- else
124
- speed = 'slow';
125
- return {
126
- connected: true,
127
- speed,
128
- };
129
- }
130
- catch {
131
- return { connected: false };
132
- }
133
- }
134
- clearCache() {
135
- this.cachedCapabilities = null;
136
- this.lastDetection = 0;
137
- }
138
- }
139
- export const systemDetector = SystemDetector.getInstance();
140
- //# sourceMappingURL=detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../source/system/detector.ts"],"names":[],"mappings":"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"}