@nanocollective/nanocoder 1.23.0 → 1.24.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 (440) hide show
  1. package/LICENSE.md +1 -15
  2. package/README.md +25 -884
  3. package/assets/nanocoder-vscode.vsix +0 -0
  4. package/dist/ai-sdk-client/ai-sdk-client.d.ts +3 -2
  5. package/dist/ai-sdk-client/ai-sdk-client.d.ts.map +1 -1
  6. package/dist/ai-sdk-client/ai-sdk-client.js +16 -2
  7. package/dist/ai-sdk-client/ai-sdk-client.js.map +1 -1
  8. package/dist/ai-sdk-client/chat/chat-handler.d.ts +2 -1
  9. package/dist/ai-sdk-client/chat/chat-handler.d.ts.map +1 -1
  10. package/dist/ai-sdk-client/chat/chat-handler.js +37 -70
  11. package/dist/ai-sdk-client/chat/chat-handler.js.map +1 -1
  12. package/dist/ai-sdk-client/chat/streaming-handler.d.ts +2 -2
  13. package/dist/ai-sdk-client/chat/streaming-handler.d.ts.map +1 -1
  14. package/dist/ai-sdk-client/chat/streaming-handler.js +4 -23
  15. package/dist/ai-sdk-client/chat/streaming-handler.js.map +1 -1
  16. package/dist/ai-sdk-client/error-handling/error-parser.d.ts.map +1 -1
  17. package/dist/ai-sdk-client/error-handling/error-parser.js +7 -2
  18. package/dist/ai-sdk-client/error-handling/error-parser.js.map +1 -1
  19. package/dist/ai-sdk-client/providers/provider-factory.d.ts +2 -1
  20. package/dist/ai-sdk-client/providers/provider-factory.d.ts.map +1 -1
  21. package/dist/ai-sdk-client/providers/provider-factory.js +55 -0
  22. package/dist/ai-sdk-client/providers/provider-factory.js.map +1 -1
  23. package/dist/app/App.d.ts +1 -1
  24. package/dist/app/App.d.ts.map +1 -1
  25. package/dist/app/App.js +66 -50
  26. package/dist/app/App.js.map +1 -1
  27. package/dist/app/components/chat-input.d.ts +4 -1
  28. package/dist/app/components/chat-input.d.ts.map +1 -1
  29. package/dist/app/components/chat-input.js +4 -3
  30. package/dist/app/components/chat-input.js.map +1 -1
  31. package/dist/app/components/modal-selectors.d.ts +6 -7
  32. package/dist/app/components/modal-selectors.d.ts.map +1 -1
  33. package/dist/app/components/modal-selectors.js +11 -7
  34. package/dist/app/components/modal-selectors.js.map +1 -1
  35. package/dist/app/components/settings-selector.d.ts.map +1 -1
  36. package/dist/app/components/settings-selector.js +3 -3
  37. package/dist/app/components/settings-selector.js.map +1 -1
  38. package/dist/app/helpers.d.ts.map +1 -1
  39. package/dist/app/helpers.js +2 -4
  40. package/dist/app/helpers.js.map +1 -1
  41. package/dist/app/index.d.ts +0 -1
  42. package/dist/app/index.d.ts.map +1 -1
  43. package/dist/app/index.js +0 -1
  44. package/dist/app/index.js.map +1 -1
  45. package/dist/app/types.d.ts +2 -0
  46. package/dist/app/types.d.ts.map +1 -1
  47. package/dist/app/utils/app-util.d.ts +1 -5
  48. package/dist/app/utils/app-util.d.ts.map +1 -1
  49. package/dist/app/utils/app-util.js +60 -460
  50. package/dist/app/utils/app-util.js.map +1 -1
  51. package/dist/app/utils/handlers/compact-handler.d.ts +6 -0
  52. package/dist/app/utils/handlers/compact-handler.d.ts.map +1 -0
  53. package/dist/app/utils/handlers/compact-handler.js +148 -0
  54. package/dist/app/utils/handlers/compact-handler.js.map +1 -0
  55. package/dist/app/utils/handlers/context-max-handler.d.ts +11 -0
  56. package/dist/app/utils/handlers/context-max-handler.d.ts.map +1 -0
  57. package/dist/app/utils/handlers/context-max-handler.js +102 -0
  58. package/dist/app/utils/handlers/context-max-handler.js.map +1 -0
  59. package/dist/app/utils/handlers/create-handler.d.ts +17 -0
  60. package/dist/app/utils/handlers/create-handler.d.ts.map +1 -0
  61. package/dist/app/utils/handlers/create-handler.js +112 -0
  62. package/dist/app/utils/handlers/create-handler.js.map +1 -0
  63. package/dist/app/utils/handlers/session-handler.d.ts +8 -0
  64. package/dist/app/utils/handlers/session-handler.d.ts.map +1 -0
  65. package/dist/app/utils/handlers/session-handler.js +99 -0
  66. package/dist/app/utils/handlers/session-handler.js.map +1 -0
  67. package/dist/auth/github-copilot.d.ts +44 -0
  68. package/dist/auth/github-copilot.d.ts.map +1 -0
  69. package/dist/auth/github-copilot.js +178 -0
  70. package/dist/auth/github-copilot.js.map +1 -0
  71. package/dist/cli.js +83 -3
  72. package/dist/cli.js.map +1 -1
  73. package/dist/client-factory.d.ts +1 -1
  74. package/dist/client-factory.d.ts.map +1 -1
  75. package/dist/client-factory.js +39 -8
  76. package/dist/client-factory.js.map +1 -1
  77. package/dist/commands/compact.d.ts +1 -6
  78. package/dist/commands/compact.d.ts.map +1 -1
  79. package/dist/commands/compact.js +2 -13
  80. package/dist/commands/compact.js.map +1 -1
  81. package/dist/commands/context-max.d.ts +1 -2
  82. package/dist/commands/context-max.d.ts.map +1 -1
  83. package/dist/commands/context-max.js +2 -9
  84. package/dist/commands/context-max.js.map +1 -1
  85. package/dist/commands/copilot-login-command.d.ts +3 -0
  86. package/dist/commands/copilot-login-command.d.ts.map +1 -0
  87. package/dist/commands/copilot-login-command.js +9 -0
  88. package/dist/commands/copilot-login-command.js.map +1 -0
  89. package/dist/commands/copilot-login.d.ts +9 -0
  90. package/dist/commands/copilot-login.d.ts.map +1 -0
  91. package/dist/commands/copilot-login.js +70 -0
  92. package/dist/commands/copilot-login.js.map +1 -0
  93. package/dist/commands/create-stub-command.d.ts +8 -0
  94. package/dist/commands/create-stub-command.d.ts.map +1 -0
  95. package/dist/commands/create-stub-command.js +14 -0
  96. package/dist/commands/create-stub-command.js.map +1 -0
  97. package/dist/commands/explorer.d.ts +1 -2
  98. package/dist/commands/explorer.d.ts.map +1 -1
  99. package/dist/commands/explorer.js +2 -9
  100. package/dist/commands/explorer.js.map +1 -1
  101. package/dist/commands/help.d.ts.map +1 -1
  102. package/dist/commands/help.js +1 -1
  103. package/dist/commands/help.js.map +1 -1
  104. package/dist/commands/ide.d.ts +1 -2
  105. package/dist/commands/ide.d.ts.map +1 -1
  106. package/dist/commands/ide.js +2 -9
  107. package/dist/commands/ide.js.map +1 -1
  108. package/dist/commands/index.d.ts +2 -0
  109. package/dist/commands/index.d.ts.map +1 -1
  110. package/dist/commands/index.js +2 -0
  111. package/dist/commands/index.js.map +1 -1
  112. package/dist/commands/init.d.ts.map +1 -1
  113. package/dist/commands/init.js +2 -1
  114. package/dist/commands/init.js.map +1 -1
  115. package/dist/commands/model.d.ts +1 -2
  116. package/dist/commands/model.d.ts.map +1 -1
  117. package/dist/commands/model.js +2 -10
  118. package/dist/commands/model.js.map +1 -1
  119. package/dist/commands/provider.d.ts +1 -2
  120. package/dist/commands/provider.d.ts.map +1 -1
  121. package/dist/commands/provider.js +2 -10
  122. package/dist/commands/provider.js.map +1 -1
  123. package/dist/commands/resume.d.ts +8 -0
  124. package/dist/commands/resume.d.ts.map +1 -0
  125. package/dist/commands/resume.js +11 -0
  126. package/dist/commands/resume.js.map +1 -0
  127. package/dist/commands/settings.d.ts +1 -2
  128. package/dist/commands/settings.d.ts.map +1 -1
  129. package/dist/commands/settings.js +2 -10
  130. package/dist/commands/settings.js.map +1 -1
  131. package/dist/commands/status.d.ts +1 -2
  132. package/dist/commands/status.d.ts.map +1 -1
  133. package/dist/commands/status.js +2 -10
  134. package/dist/commands/status.js.map +1 -1
  135. package/dist/components/assistant-message.d.ts.map +1 -1
  136. package/dist/components/assistant-message.js +2 -27
  137. package/dist/components/assistant-message.js.map +1 -1
  138. package/dist/components/provider-selector.d.ts.map +1 -1
  139. package/dist/components/provider-selector.js +4 -3
  140. package/dist/components/provider-selector.js.map +1 -1
  141. package/dist/components/session-selector.d.ts +12 -0
  142. package/dist/components/session-selector.d.ts.map +1 -0
  143. package/dist/components/session-selector.js +108 -0
  144. package/dist/components/session-selector.js.map +1 -0
  145. package/dist/components/text-input.d.ts +2 -1
  146. package/dist/components/text-input.d.ts.map +1 -1
  147. package/dist/components/text-input.js +11 -6
  148. package/dist/components/text-input.js.map +1 -1
  149. package/dist/components/tool-confirmation.d.ts.map +1 -1
  150. package/dist/components/tool-confirmation.js +9 -6
  151. package/dist/components/tool-confirmation.js.map +1 -1
  152. package/dist/components/ui/styled-title.js +2 -2
  153. package/dist/components/ui/styled-title.js.map +1 -1
  154. package/dist/components/user-input.d.ts +3 -1
  155. package/dist/components/user-input.d.ts.map +1 -1
  156. package/dist/components/user-input.js +35 -23
  157. package/dist/components/user-input.js.map +1 -1
  158. package/dist/components/user-message.d.ts.map +1 -1
  159. package/dist/components/user-message.js +1 -23
  160. package/dist/components/user-message.js.map +1 -1
  161. package/dist/components/vscode-extension-prompt.d.ts +6 -1
  162. package/dist/components/vscode-extension-prompt.d.ts.map +1 -1
  163. package/dist/components/vscode-extension-prompt.js +80 -36
  164. package/dist/components/vscode-extension-prompt.js.map +1 -1
  165. package/dist/config/copilot-credentials.d.ts +27 -0
  166. package/dist/config/copilot-credentials.d.ts.map +1 -0
  167. package/dist/config/copilot-credentials.js +81 -0
  168. package/dist/config/copilot-credentials.js.map +1 -0
  169. package/dist/config/index.d.ts +0 -2
  170. package/dist/config/index.d.ts.map +1 -1
  171. package/dist/config/index.js +63 -27
  172. package/dist/config/index.js.map +1 -1
  173. package/dist/config/mcp-config-loader.d.ts +2 -3
  174. package/dist/config/mcp-config-loader.d.ts.map +1 -1
  175. package/dist/config/mcp-config-loader.js +136 -181
  176. package/dist/config/mcp-config-loader.js.map +1 -1
  177. package/dist/config/nanocoder-tools-config.js +2 -2
  178. package/dist/config/nanocoder-tools-config.js.map +1 -1
  179. package/dist/config/themes.d.ts.map +1 -1
  180. package/dist/config/themes.js +9 -766
  181. package/dist/config/themes.js.map +1 -1
  182. package/dist/config/validation.d.ts.map +1 -1
  183. package/dist/config/validation.js +0 -19
  184. package/dist/config/validation.js.map +1 -1
  185. package/dist/custom-commands/parser.d.ts.map +1 -1
  186. package/dist/custom-commands/parser.js +0 -9
  187. package/dist/custom-commands/parser.js.map +1 -1
  188. package/dist/hooks/chat-handler/conversation/conversation-loop.d.ts +5 -0
  189. package/dist/hooks/chat-handler/conversation/conversation-loop.d.ts.map +1 -1
  190. package/dist/hooks/chat-handler/conversation/conversation-loop.js +78 -97
  191. package/dist/hooks/chat-handler/conversation/conversation-loop.js.map +1 -1
  192. package/dist/hooks/chat-handler/conversation/tool-executor.d.ts +7 -2
  193. package/dist/hooks/chat-handler/conversation/tool-executor.d.ts.map +1 -1
  194. package/dist/hooks/chat-handler/conversation/tool-executor.js +112 -42
  195. package/dist/hooks/chat-handler/conversation/tool-executor.js.map +1 -1
  196. package/dist/hooks/chat-handler/types.d.ts +3 -0
  197. package/dist/hooks/chat-handler/types.d.ts.map +1 -1
  198. package/dist/hooks/chat-handler/useChatHandler.d.ts +1 -1
  199. package/dist/hooks/chat-handler/useChatHandler.d.ts.map +1 -1
  200. package/dist/hooks/chat-handler/useChatHandler.js +7 -1
  201. package/dist/hooks/chat-handler/useChatHandler.js.map +1 -1
  202. package/dist/hooks/useAppHandlers.d.ts +8 -1
  203. package/dist/hooks/useAppHandlers.d.ts.map +1 -1
  204. package/dist/hooks/useAppHandlers.js +119 -13
  205. package/dist/hooks/useAppHandlers.js.map +1 -1
  206. package/dist/hooks/useAppInitialization.d.ts +5 -3
  207. package/dist/hooks/useAppInitialization.d.ts.map +1 -1
  208. package/dist/hooks/useAppInitialization.js +51 -30
  209. package/dist/hooks/useAppInitialization.js.map +1 -1
  210. package/dist/hooks/useAppState.d.ts +15 -10
  211. package/dist/hooks/useAppState.d.ts.map +1 -1
  212. package/dist/hooks/useAppState.js +37 -28
  213. package/dist/hooks/useAppState.js.map +1 -1
  214. package/dist/hooks/useModeHandlers.d.ts +8 -14
  215. package/dist/hooks/useModeHandlers.d.ts.map +1 -1
  216. package/dist/hooks/useModeHandlers.js +31 -101
  217. package/dist/hooks/useModeHandlers.js.map +1 -1
  218. package/dist/hooks/useNonInteractiveMode.d.ts +7 -0
  219. package/dist/hooks/useNonInteractiveMode.d.ts.map +1 -1
  220. package/dist/hooks/useNonInteractiveMode.js +39 -2
  221. package/dist/hooks/useNonInteractiveMode.js.map +1 -1
  222. package/dist/hooks/useSessionAutosave.d.ts +16 -0
  223. package/dist/hooks/useSessionAutosave.d.ts.map +1 -0
  224. package/dist/hooks/useSessionAutosave.js +133 -0
  225. package/dist/hooks/useSessionAutosave.js.map +1 -0
  226. package/dist/hooks/useToolHandler.d.ts +2 -1
  227. package/dist/hooks/useToolHandler.d.ts.map +1 -1
  228. package/dist/hooks/useToolHandler.js +9 -3
  229. package/dist/hooks/useToolHandler.js.map +1 -1
  230. package/dist/mcp/mcp-client.d.ts.map +1 -1
  231. package/dist/mcp/mcp-client.js +3 -2
  232. package/dist/mcp/mcp-client.js.map +1 -1
  233. package/dist/mcp/transport-factory.d.ts.map +1 -1
  234. package/dist/mcp/transport-factory.js +4 -36
  235. package/dist/mcp/transport-factory.js.map +1 -1
  236. package/dist/models/models-dev-client.d.ts.map +1 -1
  237. package/dist/models/models-dev-client.js +21 -14
  238. package/dist/models/models-dev-client.js.map +1 -1
  239. package/dist/session/session-manager.d.ts +57 -0
  240. package/dist/session/session-manager.d.ts.map +1 -0
  241. package/dist/session/session-manager.js +361 -0
  242. package/dist/session/session-manager.js.map +1 -0
  243. package/dist/test-utils/render-with-theme.d.ts.map +1 -1
  244. package/dist/test-utils/render-with-theme.js +2 -1
  245. package/dist/test-utils/render-with-theme.js.map +1 -1
  246. package/dist/tool-calling/tool-parser.d.ts +3 -2
  247. package/dist/tool-calling/tool-parser.d.ts.map +1 -1
  248. package/dist/tool-calling/tool-parser.js +6 -27
  249. package/dist/tool-calling/tool-parser.js.map +1 -1
  250. package/dist/tools/execute-bash.d.ts.map +1 -1
  251. package/dist/tools/execute-bash.js +5 -0
  252. package/dist/tools/execute-bash.js.map +1 -1
  253. package/dist/tools/fetch-url.d.ts.map +1 -1
  254. package/dist/tools/fetch-url.js +11 -2
  255. package/dist/tools/fetch-url.js.map +1 -1
  256. package/dist/tools/file-ops/copy-file.d.ts.map +1 -1
  257. package/dist/tools/file-ops/copy-file.js +6 -36
  258. package/dist/tools/file-ops/copy-file.js.map +1 -1
  259. package/dist/tools/file-ops/create-directory.d.ts.map +1 -1
  260. package/dist/tools/file-ops/create-directory.js +2 -19
  261. package/dist/tools/file-ops/create-directory.js.map +1 -1
  262. package/dist/tools/file-ops/delete-file.d.ts.map +1 -1
  263. package/dist/tools/file-ops/delete-file.js +6 -20
  264. package/dist/tools/file-ops/delete-file.js.map +1 -1
  265. package/dist/tools/file-ops/move-file.d.ts.map +1 -1
  266. package/dist/tools/file-ops/move-file.js +6 -36
  267. package/dist/tools/file-ops/move-file.js.map +1 -1
  268. package/dist/tools/file-ops/string-replace-preview.d.ts +10 -0
  269. package/dist/tools/file-ops/string-replace-preview.d.ts.map +1 -0
  270. package/dist/tools/file-ops/string-replace-preview.js +171 -0
  271. package/dist/tools/file-ops/string-replace-preview.js.map +1 -0
  272. package/dist/tools/file-ops/string-replace.d.ts.map +1 -1
  273. package/dist/tools/file-ops/string-replace.js +9 -292
  274. package/dist/tools/file-ops/string-replace.js.map +1 -1
  275. package/dist/tools/file-ops/write-file.d.ts.map +1 -1
  276. package/dist/tools/file-ops/write-file.js +7 -66
  277. package/dist/tools/file-ops/write-file.js.map +1 -1
  278. package/dist/tools/find-files.d.ts.map +1 -1
  279. package/dist/tools/find-files.js +1 -0
  280. package/dist/tools/find-files.js.map +1 -1
  281. package/dist/tools/git/git-diff.d.ts.map +1 -1
  282. package/dist/tools/git/git-diff.js +1 -0
  283. package/dist/tools/git/git-diff.js.map +1 -1
  284. package/dist/tools/git/git-log.d.ts.map +1 -1
  285. package/dist/tools/git/git-log.js +1 -0
  286. package/dist/tools/git/git-log.js.map +1 -1
  287. package/dist/tools/git/git-status.d.ts.map +1 -1
  288. package/dist/tools/git/git-status.js +1 -0
  289. package/dist/tools/git/git-status.js.map +1 -1
  290. package/dist/tools/index.d.ts +1 -0
  291. package/dist/tools/index.d.ts.map +1 -1
  292. package/dist/tools/index.js +7 -0
  293. package/dist/tools/index.js.map +1 -1
  294. package/dist/tools/list-directory.d.ts.map +1 -1
  295. package/dist/tools/list-directory.js +2 -1
  296. package/dist/tools/list-directory.js.map +1 -1
  297. package/dist/tools/lsp-get-diagnostics.d.ts.map +1 -1
  298. package/dist/tools/lsp-get-diagnostics.js +1 -5
  299. package/dist/tools/lsp-get-diagnostics.js.map +1 -1
  300. package/dist/tools/read-file.d.ts.map +1 -1
  301. package/dist/tools/read-file.js +1 -0
  302. package/dist/tools/read-file.js.map +1 -1
  303. package/dist/tools/search-file-contents.d.ts.map +1 -1
  304. package/dist/tools/search-file-contents.js +124 -32
  305. package/dist/tools/search-file-contents.js.map +1 -1
  306. package/dist/tools/tasks/list-tasks.d.ts.map +1 -1
  307. package/dist/tools/tasks/list-tasks.js +1 -0
  308. package/dist/tools/tasks/list-tasks.js.map +1 -1
  309. package/dist/tools/tool-manager.d.ts +10 -0
  310. package/dist/tools/tool-manager.d.ts.map +1 -1
  311. package/dist/tools/tool-manager.js +16 -2
  312. package/dist/tools/tool-manager.js.map +1 -1
  313. package/dist/tools/tool-registry.d.ts +9 -1
  314. package/dist/tools/tool-registry.d.ts.map +1 -1
  315. package/dist/tools/tool-registry.js +17 -1
  316. package/dist/tools/tool-registry.js.map +1 -1
  317. package/dist/tools/web-search.d.ts.map +1 -1
  318. package/dist/tools/web-search.js +1 -0
  319. package/dist/tools/web-search.js.map +1 -1
  320. package/dist/types/app.d.ts +3 -0
  321. package/dist/types/app.d.ts.map +1 -1
  322. package/dist/types/commands.d.ts +1 -2
  323. package/dist/types/commands.d.ts.map +1 -1
  324. package/dist/types/config.d.ts +11 -15
  325. package/dist/types/config.d.ts.map +1 -1
  326. package/dist/types/core.d.ts +13 -3
  327. package/dist/types/core.d.ts.map +1 -1
  328. package/dist/types/core.js.map +1 -1
  329. package/dist/types/markdown-parser.d.ts +2 -10
  330. package/dist/types/markdown-parser.d.ts.map +1 -1
  331. package/dist/types/mcp.d.ts +2 -28
  332. package/dist/types/mcp.d.ts.map +1 -1
  333. package/dist/types/ui.d.ts +1 -1
  334. package/dist/types/ui.d.ts.map +1 -1
  335. package/dist/utils/ansi-truncate.d.ts +6 -0
  336. package/dist/utils/ansi-truncate.d.ts.map +1 -0
  337. package/dist/utils/ansi-truncate.js +39 -0
  338. package/dist/utils/ansi-truncate.js.map +1 -0
  339. package/dist/utils/installation-detector.d.ts +6 -0
  340. package/dist/utils/installation-detector.d.ts.map +1 -1
  341. package/dist/utils/installation-detector.js +33 -19
  342. package/dist/utils/installation-detector.js.map +1 -1
  343. package/dist/utils/logging/health-monitor/checks/memory-check.d.ts.map +1 -1
  344. package/dist/utils/logging/health-monitor/checks/memory-check.js +2 -1
  345. package/dist/utils/logging/health-monitor/checks/memory-check.js.map +1 -1
  346. package/dist/utils/logging/health-monitor/core/health-monitor.d.ts.map +1 -1
  347. package/dist/utils/logging/health-monitor/core/health-monitor.js +3 -2
  348. package/dist/utils/logging/health-monitor/core/health-monitor.js.map +1 -1
  349. package/dist/utils/logging/performance.d.ts.map +1 -1
  350. package/dist/utils/logging/performance.js +21 -17
  351. package/dist/utils/logging/performance.js.map +1 -1
  352. package/dist/utils/logging/pino-logger.d.ts.map +1 -1
  353. package/dist/utils/logging/pino-logger.js +7 -8
  354. package/dist/utils/logging/pino-logger.js.map +1 -1
  355. package/dist/utils/logging/redaction.d.ts.map +1 -1
  356. package/dist/utils/logging/redaction.js +2 -0
  357. package/dist/utils/logging/redaction.js.map +1 -1
  358. package/dist/utils/logging/request-tracker.d.ts.map +1 -1
  359. package/dist/utils/logging/request-tracker.js +6 -5
  360. package/dist/utils/logging/request-tracker.js.map +1 -1
  361. package/dist/utils/logging/safe-process.d.ts +16 -0
  362. package/dist/utils/logging/safe-process.d.ts.map +1 -0
  363. package/dist/utils/logging/safe-process.js +37 -0
  364. package/dist/utils/logging/safe-process.js.map +1 -0
  365. package/dist/utils/logging/types.d.ts +0 -3
  366. package/dist/utils/logging/types.d.ts.map +1 -1
  367. package/dist/utils/message-builder.d.ts +0 -5
  368. package/dist/utils/message-builder.d.ts.map +1 -1
  369. package/dist/utils/message-builder.js +0 -8
  370. package/dist/utils/message-builder.js.map +1 -1
  371. package/dist/utils/path-validation.d.ts.map +1 -1
  372. package/dist/utils/path-validation.js +3 -1
  373. package/dist/utils/path-validation.js.map +1 -1
  374. package/dist/utils/path-validators.d.ts +16 -0
  375. package/dist/utils/path-validators.d.ts.map +1 -0
  376. package/dist/utils/path-validators.js +55 -0
  377. package/dist/utils/path-validators.js.map +1 -0
  378. package/dist/utils/prompt-processor.d.ts.map +1 -1
  379. package/dist/utils/prompt-processor.js +1 -3
  380. package/dist/utils/prompt-processor.js.map +1 -1
  381. package/dist/utils/response-formatter.d.ts.map +1 -1
  382. package/dist/utils/response-formatter.js +2 -17
  383. package/dist/utils/response-formatter.js.map +1 -1
  384. package/dist/utils/text-wrapping.d.ts +8 -0
  385. package/dist/utils/text-wrapping.d.ts.map +1 -0
  386. package/dist/utils/text-wrapping.js +29 -0
  387. package/dist/utils/text-wrapping.js.map +1 -0
  388. package/dist/utils/tool-approval.d.ts +6 -0
  389. package/dist/utils/tool-approval.d.ts.map +1 -0
  390. package/dist/utils/tool-approval.js +15 -0
  391. package/dist/utils/tool-approval.js.map +1 -0
  392. package/dist/utils/tool-result-display.d.ts +20 -1
  393. package/dist/utils/tool-result-display.d.ts.map +1 -1
  394. package/dist/utils/tool-result-display.js +96 -3
  395. package/dist/utils/tool-result-display.js.map +1 -1
  396. package/dist/vscode/extension-installer.d.ts +34 -7
  397. package/dist/vscode/extension-installer.d.ts.map +1 -1
  398. package/dist/vscode/extension-installer.js +151 -64
  399. package/dist/vscode/extension-installer.js.map +1 -1
  400. package/dist/vscode/index.d.ts +1 -1
  401. package/dist/vscode/index.d.ts.map +1 -1
  402. package/dist/vscode/index.js +1 -1
  403. package/dist/vscode/index.js.map +1 -1
  404. package/dist/wizards/mcp-wizard.d.ts.map +1 -1
  405. package/dist/wizards/mcp-wizard.js +2 -1
  406. package/dist/wizards/mcp-wizard.js.map +1 -1
  407. package/dist/wizards/provider-wizard.d.ts.map +1 -1
  408. package/dist/wizards/provider-wizard.js +4 -2
  409. package/dist/wizards/provider-wizard.js.map +1 -1
  410. package/dist/wizards/steps/location-step.d.ts.map +1 -1
  411. package/dist/wizards/steps/location-step.js +2 -1
  412. package/dist/wizards/steps/location-step.js.map +1 -1
  413. package/dist/wizards/steps/mcp-step.d.ts.map +1 -1
  414. package/dist/wizards/steps/mcp-step.js +2 -1
  415. package/dist/wizards/steps/mcp-step.js.map +1 -1
  416. package/dist/wizards/steps/provider-step.d.ts.map +1 -1
  417. package/dist/wizards/steps/provider-step.js +4 -1
  418. package/dist/wizards/steps/provider-step.js.map +1 -1
  419. package/dist/wizards/steps/summary-step.d.ts.map +1 -1
  420. package/dist/wizards/steps/summary-step.js +2 -1
  421. package/dist/wizards/steps/summary-step.js.map +1 -1
  422. package/dist/wizards/templates/mcp-templates.d.ts +0 -8
  423. package/dist/wizards/templates/mcp-templates.d.ts.map +1 -1
  424. package/dist/wizards/templates/mcp-templates.js.map +1 -1
  425. package/dist/wizards/templates/provider-templates.d.ts.map +1 -1
  426. package/dist/wizards/templates/provider-templates.js +59 -0
  427. package/dist/wizards/templates/provider-templates.js.map +1 -1
  428. package/dist/wizards/validation.d.ts.map +1 -1
  429. package/dist/wizards/validation.js +0 -1
  430. package/dist/wizards/validation.js.map +1 -1
  431. package/package.json +20 -12
  432. package/source/config/themes.json +787 -0
  433. package/dist/ai-sdk-client/chat/tool-processor.d.ts +0 -10
  434. package/dist/ai-sdk-client/chat/tool-processor.d.ts.map +0 -1
  435. package/dist/ai-sdk-client/chat/tool-processor.js +0 -58
  436. package/dist/ai-sdk-client/chat/tool-processor.js.map +0 -1
  437. package/dist/tool-calling/json-parser.d.ts +0 -28
  438. package/dist/tool-calling/json-parser.d.ts.map +0 -1
  439. package/dist/tool-calling/json-parser.js +0 -219
  440. package/dist/tool-calling/json-parser.js.map +0 -1
@@ -1,6 +1,5 @@
1
1
  import { config as loadEnv } from 'dotenv';
2
2
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
3
- import { homedir } from 'os';
4
3
  import { dirname, join } from 'path';
5
4
  import { fileURLToPath } from 'url';
6
5
  import { loadAllMCPConfigs, loadAllProviderConfigs, } from '../config/mcp-config-loader.js';
@@ -38,14 +37,6 @@ export function getClosestConfigFile(fileName) {
38
37
  confDirMap[fileName] = cwdPath; // nosemgrep
39
38
  return cwdPath; // nosemgrep
40
39
  }
41
- // Next lets check the $HOME for a hidden file. This should only be for
42
- // legacy support
43
- const homePath = join(homedir(), `.${fileName}`); // nosemgrep
44
- if (existsSync(homePath)) {
45
- // nosemgrep
46
- confDirMap[fileName] = homePath; // nosemgrep
47
- return homePath; // nosemgrep
48
- }
49
40
  }
50
41
  // Last, lets look for an user level config.
51
42
  // If the file doesn't exist, create it
@@ -130,12 +121,6 @@ function loadAutoCompactConfig() {
130
121
  if (globalConfig) {
131
122
  return globalConfig;
132
123
  }
133
- // Fallback to home directory
134
- const homePath = join(homedir(), '.agents.config.json');
135
- const homeConfig = tryLoadAutoCompactFromPath(homePath, defaults);
136
- if (homeConfig) {
137
- return homeConfig;
138
- }
139
124
  return defaults;
140
125
  }
141
126
  // Validate and clamp threshold to valid range (50-95)
@@ -150,6 +135,66 @@ function validateMode(mode) {
150
135
  }
151
136
  return 'conservative';
152
137
  }
138
+ // Try to load session config from a specific path
139
+ // Returns the config if found and valid, null otherwise
140
+ function tryLoadSessionsFromPath(configPath, defaults) {
141
+ if (!existsSync(configPath)) {
142
+ return null;
143
+ }
144
+ try {
145
+ const rawData = readFileSync(configPath, 'utf-8');
146
+ const config = JSON.parse(rawData);
147
+ const sessions = config.nanocoder?.sessions;
148
+ if (sessions && typeof sessions === 'object') {
149
+ const normalizeSessionNumber = (value, min, fallback) => {
150
+ if (typeof value === 'number' && Number.isFinite(value)) {
151
+ return Math.max(min, value);
152
+ }
153
+ return fallback;
154
+ };
155
+ return {
156
+ autoSave: sessions.autoSave !== undefined
157
+ ? Boolean(sessions.autoSave)
158
+ : defaults.autoSave,
159
+ saveInterval: normalizeSessionNumber(sessions.saveInterval, 1000, // Minimum 1 second
160
+ defaults.saveInterval ?? 30000),
161
+ maxSessions: normalizeSessionNumber(sessions.maxSessions, 1, defaults.maxSessions ?? 100),
162
+ maxMessages: normalizeSessionNumber(sessions.maxMessages, 1, defaults.maxMessages ?? 1000),
163
+ retentionDays: normalizeSessionNumber(sessions.retentionDays, 1, defaults.retentionDays ?? 30),
164
+ directory: sessions.directory || defaults.directory,
165
+ };
166
+ }
167
+ }
168
+ catch (error) {
169
+ logError(`Failed to load session config from ${configPath}: ${String(error)}`);
170
+ }
171
+ return null;
172
+ }
173
+ // Load session configuration and Returns default config if not specified
174
+ function loadSessionConfig() {
175
+ const defaults = {
176
+ autoSave: true,
177
+ saveInterval: 30000, // 30 seconds
178
+ maxSessions: 100,
179
+ maxMessages: 1000,
180
+ retentionDays: 30,
181
+ directory: '',
182
+ };
183
+ // Try to load from project-level config first
184
+ const projectConfigPath = join(process.cwd(), 'agents.config.json');
185
+ const projectConfig = tryLoadSessionsFromPath(projectConfigPath, defaults);
186
+ if (projectConfig) {
187
+ return projectConfig;
188
+ }
189
+ // Try global config
190
+ const configDir = getConfigPath();
191
+ const globalConfigPath = join(configDir, 'agents.config.json');
192
+ const globalConfig = tryLoadSessionsFromPath(globalConfigPath, defaults);
193
+ if (globalConfig) {
194
+ return globalConfig;
195
+ }
196
+ return defaults;
197
+ }
153
198
  // Function to load app configuration from agents.config.json if it exists
154
199
  function loadAppConfig() {
155
200
  // Load providers from the new hierarchical configuration system
@@ -159,10 +204,13 @@ function loadAppConfig() {
159
204
  const mcpServers = mcpServersWithSource.map(item => item.server);
160
205
  // Load auto-compact configuration
161
206
  const autoCompact = loadAutoCompactConfig();
207
+ // Load session configuration
208
+ const sessions = loadSessionConfig();
162
209
  return {
163
210
  providers,
164
211
  mcpServers,
165
212
  autoCompact,
213
+ sessions,
166
214
  };
167
215
  }
168
216
  let _appConfig = null;
@@ -176,12 +224,6 @@ export function getAppConfig() {
176
224
  }
177
225
  return _appConfig;
178
226
  }
179
- // Legacy export for backward compatibility - use a getter
180
- export const appConfig = new Proxy({}, {
181
- get(_target, prop) {
182
- return getAppConfig()[prop];
183
- },
184
- });
185
227
  // Function to reload the app configuration (useful after config file changes)
186
228
  export function reloadAppConfig() {
187
229
  _appConfig = loadAppConfig();
@@ -199,12 +241,6 @@ export function getColors() {
199
241
  }
200
242
  return cachedColors;
201
243
  }
202
- // Legacy export for backwards compatibility - use a getter to avoid circular dependency
203
- export const colors = new Proxy({}, {
204
- get(_target, prop) {
205
- return getColors()[prop];
206
- },
207
- });
208
244
  // Get the package root directory (where this module is installed)
209
245
  const __filename = fileURLToPath(import.meta.url);
210
246
  const __dirname = dirname(__filename);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,IAAI,OAAO,EAAC,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAC,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAC,MAAM,IAAI,CAAC;AACtE,OAAO,EAAC,OAAO,EAAC,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAC,OAAO,EAAE,IAAI,EAAC,MAAM,MAAM,CAAC;AACnC,OAAO,EAAC,aAAa,EAAC,MAAM,KAAK,CAAC;AAClC,OAAO,EACN,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,YAAY,EAAE,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAO7D,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAE/C,6EAA6E;AAC7E,mEAAmE;AACnE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACzB,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IAClC,IAAI,CAAC;QACJ,OAAO,CAAC,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC,CAAC;IAC1B,CAAC;YAAS,CAAC;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC;IACtC,CAAC;AACF,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,MAAM,UAAU,GAA2B,EAAE,CAAC;AAErD,oEAAoE;AACpE,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACpD,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAElC,sEAAsE;QACtE,iFAAiF;QACjF,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAEtE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1B,mDAAmD;YACnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY;YAC3D,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,YAAY;gBACZ,UAAU,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,YAAY;gBAE5C,OAAO,OAAO,CAAC,CAAC,YAAY;YAC7B,CAAC;YAED,uEAAuE;YACvE,iBAAiB;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY;YAC9D,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,YAAY;gBACZ,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,YAAY;gBAE7C,OAAO,QAAQ,CAAC,CAAC,YAAY;YAC9B,CAAC;QACF,CAAC;QAED,4CAA4C;QAE5C,uCAAuC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY;QAC1D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,YAAY;YACZ,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,UAAU,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC,YAAY;QAE/C,OAAO,UAAU,CAAC,CAAC,YAAY;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,QAAQ,CAAC,kBAAkB,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,sEAAsE;IACtE,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB,EAAE,QAAgB;IAChE,IAAI,CAAC;QACJ,0EAA0E;QAC1E,gEAAgE;QAChE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY;QAC7D,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,YAAY;YACZ,oCAAoC;YACpC,MAAM,YAAY,GAAG,EAAE,CAAC;YAExB,SAAS,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;YACvC,aAAa,CACZ,cAAc,EAAE,YAAY;YAC5B,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,EACrC,OAAO,CACP,CAAC;QACH,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,QAAQ,CAAC,mBAAmB,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;AACF,CAAC;AAED,uDAAuD;AACvD,wDAAwD;AACxD,SAAS,0BAA0B,CAClC,UAAkB,EAClB,QAA2B;IAE3B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;QAClD,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpD,OAAO;gBACN,OAAO,EACN,WAAW,CAAC,OAAO,KAAK,SAAS;oBAChC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;oBAC9B,CAAC,CAAC,QAAQ,CAAC,OAAO;gBACpB,SAAS,EAAE,iBAAiB,CAC3B,WAAW,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAC3C;gBACD,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;gBACrD,UAAU,EACT,WAAW,CAAC,UAAU,KAAK,SAAS;oBACnC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC;oBACjC,CAAC,CAAC,QAAQ,CAAC,UAAU;aACvB,CAAC;QACH,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,QAAQ,CACP,2CAA2C,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CACzE,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,SAAS,qBAAqB;IAC7B,MAAM,QAAQ,GAAsB;QACnC,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,IAAI;KAChB,CAAC;IAEF,8CAA8C;IAC9C,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,0BAA0B,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC9E,IAAI,aAAa,EAAE,CAAC;QACnB,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,oBAAoB;IACpB,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,0BAA0B,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAC5E,IAAI,YAAY,EAAE,CAAC;QAClB,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClE,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,sDAAsD;AACtD,SAAS,iBAAiB,CAAC,SAAkB;IAC5C,MAAM,GAAG,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,4BAA4B;AAC5B,SAAS,YAAY,CAAC,IAAa;IAClC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,cAAc,CAAC;AACvB,CAAC;AAED,0EAA0E;AAC1E,SAAS,aAAa;IACrB,gEAAgE;IAChE,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAC;IAE3C,kEAAkE;IAClE,MAAM,oBAAoB,GAAG,iBAAiB,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjE,kCAAkC;IAClC,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAC;IAE5C,OAAO;QACN,SAAS;QACT,UAAU;QACV,WAAW;KACX,CAAC;AACH,CAAC;AAED,IAAI,UAAU,GAAqB,IAAI,CAAC;AAExC;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,UAAU,GAAG,aAAa,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,EAAe,EAAE;IACnD,GAAG,CAAC,OAAO,EAAE,IAAI;QAChB,OAAO,YAAY,EAAE,CAAC,IAAuB,CAAC,CAAC;IAChD,CAAC;CACD,CAAC,CAAC;AAEH,8EAA8E;AAC9E,MAAM,UAAU,eAAe;IAC9B,UAAU,GAAG,aAAa,EAAE,CAAC;AAC9B,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,cAAc;IAC7B,UAAU,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC,MAAM,UAAU,SAAS;IACxB,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,IAAI,YAAY,CAAC;QAChE,YAAY,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,YAAY,CAAC;AACrB,CAAC;AAED,wFAAwF;AACxF,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAY,EAAE;IAC7C,GAAG,CAAC,OAAO,EAAE,IAAI;QAChB,OAAO,SAAS,EAAE,CAAC,IAAoB,CAAC,CAAC;IAC1C,CAAC;CACD,CAAC,CAAC;AAEH,kEAAkE;AAClE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,oFAAoF;AACpF,mGAAmG;AACnG,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAC7B,SAAS,EACT,yCAAyC,CACzC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/config/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { MCPServerConfig, ProviderConfig } from '../types/config.js';
2
- export type ConfigSource = 'project' | 'global';
2
+ export type ConfigSource = 'project' | 'global' | 'env';
3
3
  export interface MCPServerWithSource {
4
4
  server: MCPServerConfig;
5
5
  source: ConfigSource;
@@ -10,7 +10,6 @@ export interface MCPServerWithSource {
10
10
  export declare function loadProjectMCPConfig(): MCPServerWithSource[];
11
11
  /**
12
12
  * Load global MCP configuration from ~/.config/nanocoder/.mcp.json
13
- * Falls back to agents.config.json with deprecation warning
14
13
  */
15
14
  export declare function loadGlobalMCPConfig(): MCPServerWithSource[];
16
15
  /**
@@ -18,7 +17,7 @@ export declare function loadGlobalMCPConfig(): MCPServerWithSource[];
18
17
  * ALL servers from both locations are loaded (project servers shown first)
19
18
  * No overriding - each unique server is preserved
20
19
  */
21
- export declare function mergeMCPConfigs(projectServers: MCPServerWithSource[], globalServers: MCPServerWithSource[]): MCPServerWithSource[];
20
+ export declare function mergeMCPConfigs(projectServers: MCPServerWithSource[], globalServers: MCPServerWithSource[], envServers?: MCPServerWithSource[]): MCPServerWithSource[];
22
21
  /**
23
22
  * Load all MCP configurations with proper hierarchy and merging
24
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config-loader.d.ts","sourceRoot":"","sources":["../../source/config/mcp-config-loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,eAAe,EAAE,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAIpE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;CACrB;AA0ED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,mBAAmB,EAAE,CA4C5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,mBAAmB,EAAE,CA0D3D;AAuED;;;;GAIG;AACH,wBAAgB,eAAe,CAC9B,cAAc,EAAE,mBAAmB,EAAE,EACrC,aAAa,EAAE,mBAAmB,EAAE,GAClC,mBAAmB,EAAE,CAgBvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,EAAE,CAOzD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,EAAE,CAqBzD"}
1
+ {"version":3,"file":"mcp-config-loader.d.ts","sourceRoot":"","sources":["../../source/config/mcp-config-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,eAAe,EAAE,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAIpE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExD,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;CACrB;AAmDD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,mBAAmB,EAAE,CA0B5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,mBAAmB,EAAE,CA2B3D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC9B,cAAc,EAAE,mBAAmB,EAAE,EACrC,aAAa,EAAE,mBAAmB,EAAE,EACpC,UAAU,GAAE,mBAAmB,EAAO,GACpC,mBAAmB,EAAE,CAuBvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,EAAE,CAQzD;AAmDD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,EAAE,CA0BzD"}
@@ -1,68 +1,47 @@
1
1
  import { existsSync, readFileSync } from 'fs';
2
- import { homedir } from 'os';
3
2
  import { join } from 'path';
4
3
  import { substituteEnvVars } from '../config/env-substitution.js';
5
4
  import { getConfigPath } from '../config/paths.js';
6
5
  import { logError } from '../utils/message-queue.js';
7
6
  /**
8
- * Show deprecation warning for array format MCP configuration
9
- */
10
- function showArrayFormatDeprecationWarning() {
11
- logError('Warning: Array format for MCP servers is deprecated.');
12
- logError('Please use object format: { "mcpServers": { "serverName": { ... } } }');
13
- }
14
- /**
15
- * Show deprecation warning for MCP servers in agents.config.json
16
- */
17
- function showAgentsConfigDeprecationWarning() {
18
- const _configPath = join(getConfigPath(), '.mcp.json');
19
- logError('Warning: MCP servers in agents.config.json are deprecated.');
20
- logError(`Please migrate to ${_configPath}. See documentation for details.`);
21
- }
22
- /**
23
- * Parse MCP servers from config object, supporting both array and object formats
24
- * Converts array format to normalized server list with deprecation warning
7
+ * Parse MCP servers from .mcp.json config object.
8
+ * Only supports object format: { "mcpServers": { "serverName": { ... } } }
25
9
  */
26
10
  function parseMCPServers(config) {
27
11
  if (typeof config !== 'object' || config === null) {
28
12
  return null;
29
13
  }
30
14
  const configObj = config;
31
- let mcpServers = null;
32
- let usedArrayFormat = false;
33
- // Direct array format at root
34
- if (Array.isArray(config)) {
35
- mcpServers = config;
36
- usedArrayFormat = true;
37
- }
38
- else if ('nanocoder' in configObj &&
39
- configObj.nanocoder &&
40
- typeof configObj.nanocoder === 'object' &&
41
- 'mcpServers' in configObj.nanocoder &&
42
- Array.isArray(configObj.nanocoder.mcpServers)) {
43
- mcpServers = configObj.nanocoder
44
- .mcpServers;
45
- usedArrayFormat = true;
46
- }
47
- else if ('mcpServers' in configObj && Array.isArray(configObj.mcpServers)) {
48
- mcpServers = configObj.mcpServers;
49
- usedArrayFormat = true;
50
- }
51
- else if ('mcpServers' in configObj &&
15
+ if ('mcpServers' in configObj &&
52
16
  configObj.mcpServers &&
53
17
  typeof configObj.mcpServers === 'object' &&
54
18
  !Array.isArray(configObj.mcpServers)) {
55
- // Claude Code format: { "serverName": { ...serverConfig } }
56
- mcpServers = Object.entries(configObj.mcpServers).map(([name, serverConfig]) => ({
19
+ return Object.entries(configObj.mcpServers).map(([name, serverConfig]) => ({
57
20
  name,
58
21
  ...serverConfig,
59
22
  }));
60
23
  }
61
- // Show deprecation warning if array format was used
62
- if (usedArrayFormat && mcpServers && mcpServers.length > 0) {
63
- showArrayFormatDeprecationWarning();
64
- }
65
- return mcpServers;
24
+ return null;
25
+ }
26
+ /**
27
+ * Map a raw parsed server object to MCPServerConfig
28
+ */
29
+ function mapServerConfig(server) {
30
+ const typedServer = server;
31
+ return {
32
+ name: typedServer.name,
33
+ transport: typedServer.transport,
34
+ command: typedServer.command,
35
+ args: typedServer.args,
36
+ env: typedServer.env,
37
+ url: typedServer.url,
38
+ headers: typedServer.headers,
39
+ timeout: typedServer.timeout,
40
+ alwaysAllow: typedServer.alwaysAllow,
41
+ description: typedServer.description,
42
+ tags: typedServer.tags,
43
+ enabled: typedServer.enabled,
44
+ };
66
45
  }
67
46
  /**
68
47
  * Load project-level MCP configuration from .mcp.json
@@ -77,29 +56,11 @@ export function loadProjectMCPConfig() {
77
56
  const config = JSON.parse(rawData);
78
57
  const mcpServers = parseMCPServers(config);
79
58
  if (Array.isArray(mcpServers) && mcpServers.length > 0) {
80
- // Apply environment variable substitution
81
59
  const processedServers = substituteEnvVars(mcpServers);
82
- return processedServers.map((server) => {
83
- const typedServer = server;
84
- return {
85
- server: {
86
- name: typedServer.name,
87
- transport: typedServer.transport,
88
- command: typedServer.command,
89
- args: typedServer.args,
90
- env: typedServer.env,
91
- url: typedServer.url,
92
- headers: typedServer.headers,
93
- auth: typedServer.auth,
94
- timeout: typedServer.timeout,
95
- reconnect: typedServer.reconnect,
96
- description: typedServer.description,
97
- tags: typedServer.tags,
98
- enabled: typedServer.enabled,
99
- },
100
- source: 'project',
101
- };
102
- });
60
+ return processedServers.map((server) => ({
61
+ server: mapServerConfig(server),
62
+ source: 'project',
63
+ }));
103
64
  }
104
65
  }
105
66
  catch (error) {
@@ -109,113 +70,27 @@ export function loadProjectMCPConfig() {
109
70
  }
110
71
  /**
111
72
  * Load global MCP configuration from ~/.config/nanocoder/.mcp.json
112
- * Falls back to agents.config.json with deprecation warning
113
73
  */
114
74
  export function loadGlobalMCPConfig() {
115
75
  const configDir = getConfigPath();
116
- const newConfigPath = join(configDir, '.mcp.json');
117
- // First, check the new .mcp.json location
118
- if (existsSync(newConfigPath)) {
119
- try {
120
- const rawData = readFileSync(newConfigPath, 'utf-8');
121
- const config = JSON.parse(rawData);
122
- const mcpServers = parseMCPServers(config);
123
- if (Array.isArray(mcpServers) && mcpServers.length > 0) {
124
- const processedServers = substituteEnvVars(mcpServers);
125
- return processedServers.map((server) => {
126
- const typedServer = server;
127
- return {
128
- server: {
129
- name: typedServer.name,
130
- transport: typedServer.transport,
131
- command: typedServer.command,
132
- args: typedServer.args,
133
- env: typedServer.env,
134
- url: typedServer.url,
135
- headers: typedServer.headers,
136
- auth: typedServer.auth,
137
- timeout: typedServer.timeout,
138
- reconnect: typedServer.reconnect,
139
- description: typedServer.description,
140
- tags: typedServer.tags,
141
- enabled: typedServer.enabled,
142
- },
143
- source: 'global',
144
- };
145
- });
146
- }
147
- }
148
- catch (error) {
149
- logError(`Failed to load MCP config from ${newConfigPath}: ${String(error)}`);
150
- }
76
+ const configPath = join(configDir, '.mcp.json');
77
+ if (!existsSync(configPath)) {
151
78
  return [];
152
79
  }
153
- // Fallback to legacy agents.config.json with deprecation warning
154
- const homePath = join(homedir(), '.agents.config.json');
155
- if (existsSync(homePath)) {
156
- return loadMCPConfigFromAgentsConfig(homePath);
157
- }
158
- const legacyConfigPath = join(configDir, 'agents.config.json');
159
- if (existsSync(legacyConfigPath)) {
160
- return loadMCPConfigFromAgentsConfig(legacyConfigPath);
161
- }
162
- return [];
163
- }
164
- /**
165
- * Load MCP config from legacy agents.config.json with deprecation warning
166
- */
167
- function loadMCPConfigFromAgentsConfig(filePath) {
168
80
  try {
169
- const rawData = readFileSync(filePath, 'utf-8');
81
+ const rawData = readFileSync(configPath, 'utf-8');
170
82
  const config = JSON.parse(rawData);
171
- let mcpServers = null;
172
- let hasMcpServers = false;
173
- if (config.nanocoder && Array.isArray(config.nanocoder.mcpServers)) {
174
- mcpServers = config.nanocoder.mcpServers;
175
- hasMcpServers = mcpServers !== null && mcpServers.length > 0;
176
- }
177
- else if (config.nanocoder &&
178
- config.nanocoder.mcpServers &&
179
- typeof config.nanocoder.mcpServers === 'object' &&
180
- !Array.isArray(config.nanocoder.mcpServers)) {
181
- // Claude Code format in agents.config.json
182
- mcpServers = Object.entries(config.nanocoder.mcpServers).map(([name, serverConfig]) => ({
183
- name,
184
- ...serverConfig,
185
- }));
186
- hasMcpServers = mcpServers && mcpServers.length > 0;
187
- }
188
- // Show deprecation warning if MCP servers found in agents.config.json
189
- if (hasMcpServers) {
190
- showAgentsConfigDeprecationWarning();
191
- }
83
+ const mcpServers = parseMCPServers(config);
192
84
  if (Array.isArray(mcpServers) && mcpServers.length > 0) {
193
85
  const processedServers = substituteEnvVars(mcpServers);
194
- return processedServers.map((server) => {
195
- const typedServer = server;
196
- return {
197
- server: {
198
- name: typedServer.name,
199
- transport: typedServer.transport,
200
- command: typedServer.command,
201
- args: typedServer.args,
202
- env: typedServer.env,
203
- url: typedServer.url,
204
- headers: typedServer.headers,
205
- auth: typedServer.auth,
206
- timeout: typedServer.timeout,
207
- reconnect: typedServer.reconnect,
208
- description: typedServer.description,
209
- tags: typedServer.tags,
210
- enabled: typedServer.enabled,
211
- },
212
- source: 'global',
213
- };
214
- });
86
+ return processedServers.map((server) => ({
87
+ server: mapServerConfig(server),
88
+ source: 'global',
89
+ }));
215
90
  }
216
91
  }
217
92
  catch (error) {
218
- logError(`Failed to load MCP config from ${filePath}: ${String(error)}`);
93
+ logError(`Failed to load MCP config from ${configPath}: ${String(error)}`);
219
94
  }
220
95
  return [];
221
96
  }
@@ -224,13 +99,19 @@ function loadMCPConfigFromAgentsConfig(filePath) {
224
99
  * ALL servers from both locations are loaded (project servers shown first)
225
100
  * No overriding - each unique server is preserved
226
101
  */
227
- export function mergeMCPConfigs(projectServers, globalServers) {
102
+ export function mergeMCPConfigs(projectServers, globalServers, envServers = []) {
228
103
  const serverMap = new Map();
229
- // Add project servers first (displayed first in UI)
104
+ // Add env servers first (highest priority, displayed first in UI)
105
+ for (const envServer of envServers) {
106
+ serverMap.set(envServer.server.name, envServer);
107
+ }
108
+ // Add project servers next
230
109
  for (const projectServer of projectServers) {
231
- serverMap.set(projectServer.server.name, projectServer);
110
+ if (!serverMap.has(projectServer.server.name)) {
111
+ serverMap.set(projectServer.server.name, projectServer);
112
+ }
232
113
  }
233
- // Add global servers (only if not already added from project)
114
+ // Add global servers (only if not already added from project or env)
234
115
  for (const globalServer of globalServers) {
235
116
  if (!serverMap.has(globalServer.server.name)) {
236
117
  serverMap.set(globalServer.server.name, globalServer);
@@ -245,7 +126,49 @@ export function loadAllMCPConfigs() {
245
126
  const projectServers = loadProjectMCPConfig();
246
127
  // Skip loading global servers in test environment to allow test isolation
247
128
  const globalServers = process.env.NODE_ENV === 'test' ? [] : loadGlobalMCPConfig();
248
- return mergeMCPConfigs(projectServers, globalServers);
129
+ const envServers = loadEnvMCPConfigs();
130
+ return mergeMCPConfigs(projectServers, globalServers, envServers);
131
+ }
132
+ /**
133
+ * Load MCP configuration from environment variables (highest precedence)
134
+ */
135
+ function loadEnvMCPConfigs() {
136
+ let rawData = process.env.NANOCODER_MCPSERVERS;
137
+ if (!rawData && process.env.NANOCODER_MCPSERVERS_FILE) {
138
+ if (existsSync(process.env.NANOCODER_MCPSERVERS_FILE)) {
139
+ try {
140
+ rawData = readFileSync(process.env.NANOCODER_MCPSERVERS_FILE, 'utf-8');
141
+ }
142
+ catch (error) {
143
+ logError(`Failed to read NANOCODER_MCPSERVERS_FILE at ${process.env.NANOCODER_MCPSERVERS_FILE}: ${String(error)}`);
144
+ }
145
+ }
146
+ }
147
+ if (!rawData) {
148
+ return [];
149
+ }
150
+ try {
151
+ const config = JSON.parse(rawData);
152
+ // Accept direct array format (env vars) or standard .mcp.json wrapper format
153
+ let servers = null;
154
+ if (Array.isArray(config)) {
155
+ servers = config;
156
+ }
157
+ else {
158
+ servers = parseMCPServers(config);
159
+ }
160
+ if (Array.isArray(servers) && servers.length > 0) {
161
+ const processedServers = substituteEnvVars(servers);
162
+ return processedServers.map((server) => ({
163
+ server: mapServerConfig(server),
164
+ source: 'env',
165
+ }));
166
+ }
167
+ }
168
+ catch (error) {
169
+ logError(`Failed to parse MCP configs from environment: ${String(error)}`);
170
+ }
171
+ return [];
249
172
  }
250
173
  /**
251
174
  * Load provider configurations from all available levels (project and global)
@@ -255,17 +178,21 @@ export function loadAllProviderConfigs() {
255
178
  const projectProviders = loadProjectProviderConfigs();
256
179
  // Skip loading global providers in test environment to allow test isolation
257
180
  const globalProviders = process.env.NODE_ENV === 'test' ? [] : loadGlobalProviderConfigs();
258
- // Merge providers with project providers taking precedence over global ones
259
- // If a provider with the same name exists in both, project version wins
181
+ const envProviders = loadEnvProviderConfigs();
182
+ // Merge providers with env providers taking highest precedence
260
183
  const providerMap = new Map();
261
- // Add global providers first (lower priority)
184
+ // Add global providers first (lowest priority)
262
185
  for (const provider of globalProviders) {
263
186
  providerMap.set(provider.name, provider);
264
187
  }
265
- // Add project providers (higher priority) - they will override global ones
188
+ // Add project providers (medium priority) - overrides global ones
266
189
  for (const provider of projectProviders) {
267
190
  providerMap.set(provider.name, provider);
268
191
  }
192
+ // Add env providers last (highest priority) - overrides all
193
+ for (const provider of envProviders) {
194
+ providerMap.set(provider.name, provider);
195
+ }
269
196
  return Array.from(providerMap.values());
270
197
  }
271
198
  /**
@@ -301,15 +228,7 @@ function loadProjectProviderConfigs() {
301
228
  function loadGlobalProviderConfigs() {
302
229
  // Use the same path resolution logic as getClosestConfigFile
303
230
  const configDir = getConfigPath();
304
- // Check the $HOME for a hidden file. This should only be for legacy support
305
- const homePath = join(homedir(), '.agents.config.json');
306
- if (existsSync(homePath)) {
307
- const providers = loadProviderConfigFromFile(homePath);
308
- if (providers.length > 0) {
309
- return providers;
310
- }
311
- }
312
- // Next, lets look for a user level config.
231
+ // Look for a user level config.
313
232
  const configPath = join(configDir, 'agents.config.json');
314
233
  if (existsSync(configPath)) {
315
234
  return loadProviderConfigFromFile(configPath);
@@ -338,4 +257,40 @@ function loadProviderConfigFromFile(filePath) {
338
257
  }
339
258
  return [];
340
259
  }
260
+ /**
261
+ * Load provider configurations from environment variables
262
+ */
263
+ function loadEnvProviderConfigs() {
264
+ let rawData = process.env.NANOCODER_PROVIDERS;
265
+ if (!rawData && process.env.NANOCODER_PROVIDERS_FILE) {
266
+ if (existsSync(process.env.NANOCODER_PROVIDERS_FILE)) {
267
+ try {
268
+ rawData = readFileSync(process.env.NANOCODER_PROVIDERS_FILE, 'utf-8');
269
+ }
270
+ catch (error) {
271
+ logError(`Failed to read NANOCODER_PROVIDERS_FILE at ${process.env.NANOCODER_PROVIDERS_FILE}: ${String(error)}`);
272
+ }
273
+ }
274
+ }
275
+ if (!rawData) {
276
+ return [];
277
+ }
278
+ try {
279
+ const config = JSON.parse(rawData);
280
+ // Accept direct array format or standard agents.config.json wrapper format
281
+ if (Array.isArray(config)) {
282
+ return substituteEnvVars(config);
283
+ }
284
+ else if (config.nanocoder && Array.isArray(config.nanocoder.providers)) {
285
+ return substituteEnvVars(config.nanocoder.providers);
286
+ }
287
+ else if (Array.isArray(config.providers)) {
288
+ return substituteEnvVars(config.providers);
289
+ }
290
+ }
291
+ catch (error) {
292
+ logError(`Failed to parse provider configs from environment: ${String(error)}`);
293
+ }
294
+ return [];
295
+ }
341
296
  //# sourceMappingURL=mcp-config-loader.js.map