@nanocollective/nanocoder 1.22.5 → 1.24.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 (590) hide show
  1. package/LICENSE.md +1 -15
  2. package/README.md +25 -821
  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 +11 -3
  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 +148 -37
  26. package/dist/app/App.js.map +1 -1
  27. package/dist/app/components/chat-input.d.ts +9 -1
  28. package/dist/app/components/chat-input.d.ts.map +1 -1
  29. package/dist/app/components/chat-input.js +11 -8
  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 -0
  48. package/dist/app/utils/app-util.d.ts.map +1 -1
  49. package/dist/app/utils/app-util.js +69 -204
  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 +64 -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 +42 -10
  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 +14 -0
  82. package/dist/commands/context-max.d.ts.map +1 -0
  83. package/dist/commands/context-max.js +15 -0
  84. package/dist/commands/context-max.js.map +1 -0
  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/custom-commands.d.ts.map +1 -1
  98. package/dist/commands/custom-commands.js +88 -4
  99. package/dist/commands/custom-commands.js.map +1 -1
  100. package/dist/commands/exit.d.ts.map +1 -1
  101. package/dist/commands/exit.js +5 -8
  102. package/dist/commands/exit.js.map +1 -1
  103. package/dist/commands/explorer.d.ts +1 -2
  104. package/dist/commands/explorer.d.ts.map +1 -1
  105. package/dist/commands/explorer.js +2 -9
  106. package/dist/commands/explorer.js.map +1 -1
  107. package/dist/commands/help.d.ts.map +1 -1
  108. package/dist/commands/help.js +1 -1
  109. package/dist/commands/help.js.map +1 -1
  110. package/dist/commands/ide.d.ts +2 -0
  111. package/dist/commands/ide.d.ts.map +1 -0
  112. package/dist/commands/ide.js +3 -0
  113. package/dist/commands/ide.js.map +1 -0
  114. package/dist/commands/index.d.ts +5 -0
  115. package/dist/commands/index.d.ts.map +1 -1
  116. package/dist/commands/index.js +5 -0
  117. package/dist/commands/index.js.map +1 -1
  118. package/dist/commands/init.d.ts.map +1 -1
  119. package/dist/commands/init.js +2 -1
  120. package/dist/commands/init.js.map +1 -1
  121. package/dist/commands/model.d.ts +1 -2
  122. package/dist/commands/model.d.ts.map +1 -1
  123. package/dist/commands/model.js +2 -10
  124. package/dist/commands/model.js.map +1 -1
  125. package/dist/commands/provider.d.ts +1 -2
  126. package/dist/commands/provider.d.ts.map +1 -1
  127. package/dist/commands/provider.js +2 -10
  128. package/dist/commands/provider.js.map +1 -1
  129. package/dist/commands/resume.d.ts +8 -0
  130. package/dist/commands/resume.d.ts.map +1 -0
  131. package/dist/commands/resume.js +11 -0
  132. package/dist/commands/resume.js.map +1 -0
  133. package/dist/commands/schedule.d.ts +3 -0
  134. package/dist/commands/schedule.d.ts.map +1 -0
  135. package/dist/commands/schedule.js +177 -0
  136. package/dist/commands/schedule.js.map +1 -0
  137. package/dist/commands/settings.d.ts +1 -2
  138. package/dist/commands/settings.d.ts.map +1 -1
  139. package/dist/commands/settings.js +2 -10
  140. package/dist/commands/settings.js.map +1 -1
  141. package/dist/commands/status.d.ts +1 -2
  142. package/dist/commands/status.d.ts.map +1 -1
  143. package/dist/commands/status.js +2 -10
  144. package/dist/commands/status.js.map +1 -1
  145. package/dist/commands/usage.d.ts.map +1 -1
  146. package/dist/commands/usage.js +4 -3
  147. package/dist/commands/usage.js.map +1 -1
  148. package/dist/components/assistant-message.d.ts.map +1 -1
  149. package/dist/components/assistant-message.js +2 -27
  150. package/dist/components/assistant-message.js.map +1 -1
  151. package/dist/components/development-mode-indicator.d.ts +3 -2
  152. package/dist/components/development-mode-indicator.d.ts.map +1 -1
  153. package/dist/components/development-mode-indicator.js +23 -9
  154. package/dist/components/development-mode-indicator.js.map +1 -1
  155. package/dist/components/ide-selector.d.ts +7 -0
  156. package/dist/components/ide-selector.d.ts.map +1 -0
  157. package/dist/components/ide-selector.js +17 -0
  158. package/dist/components/ide-selector.js.map +1 -0
  159. package/dist/components/provider-selector.d.ts.map +1 -1
  160. package/dist/components/provider-selector.js +4 -3
  161. package/dist/components/provider-selector.js.map +1 -1
  162. package/dist/components/question-prompt.d.ts +8 -0
  163. package/dist/components/question-prompt.d.ts.map +1 -0
  164. package/dist/components/question-prompt.js +58 -0
  165. package/dist/components/question-prompt.js.map +1 -0
  166. package/dist/components/scheduler-view.d.ts +14 -0
  167. package/dist/components/scheduler-view.d.ts.map +1 -0
  168. package/dist/components/scheduler-view.js +17 -0
  169. package/dist/components/scheduler-view.js.map +1 -0
  170. package/dist/components/session-selector.d.ts +12 -0
  171. package/dist/components/session-selector.d.ts.map +1 -0
  172. package/dist/components/session-selector.js +108 -0
  173. package/dist/components/session-selector.js.map +1 -0
  174. package/dist/components/text-input.d.ts +13 -0
  175. package/dist/components/text-input.d.ts.map +1 -0
  176. package/dist/components/text-input.js +175 -0
  177. package/dist/components/text-input.js.map +1 -0
  178. package/dist/components/tool-confirmation.d.ts.map +1 -1
  179. package/dist/components/tool-confirmation.js +9 -6
  180. package/dist/components/tool-confirmation.js.map +1 -1
  181. package/dist/components/ui/styled-title.js +2 -2
  182. package/dist/components/ui/styled-title.js.map +1 -1
  183. package/dist/components/user-input.d.ts +4 -1
  184. package/dist/components/user-input.d.ts.map +1 -1
  185. package/dist/components/user-input.js +29 -24
  186. package/dist/components/user-input.js.map +1 -1
  187. package/dist/components/user-message.d.ts.map +1 -1
  188. package/dist/components/user-message.js +1 -23
  189. package/dist/components/user-message.js.map +1 -1
  190. package/dist/components/vscode-extension-prompt.d.ts +6 -1
  191. package/dist/components/vscode-extension-prompt.d.ts.map +1 -1
  192. package/dist/components/vscode-extension-prompt.js +80 -36
  193. package/dist/components/vscode-extension-prompt.js.map +1 -1
  194. package/dist/config/copilot-credentials.d.ts +27 -0
  195. package/dist/config/copilot-credentials.d.ts.map +1 -0
  196. package/dist/config/copilot-credentials.js +81 -0
  197. package/dist/config/copilot-credentials.js.map +1 -0
  198. package/dist/config/index.d.ts +0 -2
  199. package/dist/config/index.d.ts.map +1 -1
  200. package/dist/config/index.js +63 -27
  201. package/dist/config/index.js.map +1 -1
  202. package/dist/config/mcp-config-loader.d.ts +2 -3
  203. package/dist/config/mcp-config-loader.d.ts.map +1 -1
  204. package/dist/config/mcp-config-loader.js +136 -181
  205. package/dist/config/mcp-config-loader.js.map +1 -1
  206. package/dist/config/nanocoder-tools-config.js +2 -2
  207. package/dist/config/nanocoder-tools-config.js.map +1 -1
  208. package/dist/config/themes.d.ts.map +1 -1
  209. package/dist/config/themes.js +9 -746
  210. package/dist/config/themes.js.map +1 -1
  211. package/dist/config/validation.d.ts.map +1 -1
  212. package/dist/config/validation.js +0 -19
  213. package/dist/config/validation.js.map +1 -1
  214. package/dist/custom-commands/command-integration.d.ts +24 -0
  215. package/dist/custom-commands/command-integration.d.ts.map +1 -0
  216. package/dist/custom-commands/command-integration.js +68 -0
  217. package/dist/custom-commands/command-integration.js.map +1 -0
  218. package/dist/custom-commands/executor.d.ts.map +1 -1
  219. package/dist/custom-commands/executor.js +12 -2
  220. package/dist/custom-commands/executor.js.map +1 -1
  221. package/dist/custom-commands/loader.d.ts +33 -5
  222. package/dist/custom-commands/loader.d.ts.map +1 -1
  223. package/dist/custom-commands/loader.js +191 -18
  224. package/dist/custom-commands/loader.js.map +1 -1
  225. package/dist/custom-commands/parser.d.ts.map +1 -1
  226. package/dist/custom-commands/parser.js +106 -48
  227. package/dist/custom-commands/parser.js.map +1 -1
  228. package/dist/hooks/chat-handler/conversation/conversation-loop.d.ts +6 -1
  229. package/dist/hooks/chat-handler/conversation/conversation-loop.d.ts.map +1 -1
  230. package/dist/hooks/chat-handler/conversation/conversation-loop.js +89 -76
  231. package/dist/hooks/chat-handler/conversation/conversation-loop.js.map +1 -1
  232. package/dist/hooks/chat-handler/conversation/tool-executor.d.ts +7 -2
  233. package/dist/hooks/chat-handler/conversation/tool-executor.d.ts.map +1 -1
  234. package/dist/hooks/chat-handler/conversation/tool-executor.js +109 -41
  235. package/dist/hooks/chat-handler/conversation/tool-executor.js.map +1 -1
  236. package/dist/hooks/chat-handler/types.d.ts +6 -1
  237. package/dist/hooks/chat-handler/types.d.ts.map +1 -1
  238. package/dist/hooks/chat-handler/useChatHandler.d.ts +1 -1
  239. package/dist/hooks/chat-handler/useChatHandler.d.ts.map +1 -1
  240. package/dist/hooks/chat-handler/useChatHandler.js +19 -5
  241. package/dist/hooks/chat-handler/useChatHandler.js.map +1 -1
  242. package/dist/hooks/useAppHandlers.d.ts +10 -1
  243. package/dist/hooks/useAppHandlers.d.ts.map +1 -1
  244. package/dist/hooks/useAppHandlers.js +124 -13
  245. package/dist/hooks/useAppHandlers.js.map +1 -1
  246. package/dist/hooks/useAppInitialization.d.ts +5 -3
  247. package/dist/hooks/useAppInitialization.d.ts.map +1 -1
  248. package/dist/hooks/useAppInitialization.js +54 -30
  249. package/dist/hooks/useAppInitialization.js.map +1 -1
  250. package/dist/hooks/useAppState.d.ts +27 -7
  251. package/dist/hooks/useAppState.d.ts.map +1 -1
  252. package/dist/hooks/useAppState.js +54 -22
  253. package/dist/hooks/useAppState.js.map +1 -1
  254. package/dist/hooks/useContextPercentage.d.ts +17 -0
  255. package/dist/hooks/useContextPercentage.d.ts.map +1 -0
  256. package/dist/hooks/useContextPercentage.js +71 -0
  257. package/dist/hooks/useContextPercentage.js.map +1 -0
  258. package/dist/hooks/useModeHandlers.d.ts +9 -12
  259. package/dist/hooks/useModeHandlers.d.ts.map +1 -1
  260. package/dist/hooks/useModeHandlers.js +31 -91
  261. package/dist/hooks/useModeHandlers.js.map +1 -1
  262. package/dist/hooks/useNonInteractiveMode.d.ts +7 -0
  263. package/dist/hooks/useNonInteractiveMode.d.ts.map +1 -1
  264. package/dist/hooks/useNonInteractiveMode.js +42 -3
  265. package/dist/hooks/useNonInteractiveMode.js.map +1 -1
  266. package/dist/hooks/useSchedulerMode.d.ts +30 -0
  267. package/dist/hooks/useSchedulerMode.d.ts.map +1 -0
  268. package/dist/hooks/useSchedulerMode.js +99 -0
  269. package/dist/hooks/useSchedulerMode.js.map +1 -0
  270. package/dist/hooks/useSessionAutosave.d.ts +16 -0
  271. package/dist/hooks/useSessionAutosave.d.ts.map +1 -0
  272. package/dist/hooks/useSessionAutosave.js +133 -0
  273. package/dist/hooks/useSessionAutosave.js.map +1 -0
  274. package/dist/hooks/useToolHandler.d.ts +2 -1
  275. package/dist/hooks/useToolHandler.d.ts.map +1 -1
  276. package/dist/hooks/useToolHandler.js +9 -3
  277. package/dist/hooks/useToolHandler.js.map +1 -1
  278. package/dist/lsp/lsp-manager.d.ts.map +1 -1
  279. package/dist/lsp/lsp-manager.js +10 -0
  280. package/dist/lsp/lsp-manager.js.map +1 -1
  281. package/dist/mcp/mcp-client.d.ts.map +1 -1
  282. package/dist/mcp/mcp-client.js +23 -3
  283. package/dist/mcp/mcp-client.js.map +1 -1
  284. package/dist/mcp/transport-factory.d.ts.map +1 -1
  285. package/dist/mcp/transport-factory.js +4 -36
  286. package/dist/mcp/transport-factory.js.map +1 -1
  287. package/dist/models/index.d.ts +1 -1
  288. package/dist/models/index.d.ts.map +1 -1
  289. package/dist/models/index.js +1 -1
  290. package/dist/models/index.js.map +1 -1
  291. package/dist/models/models-dev-client.d.ts +8 -1
  292. package/dist/models/models-dev-client.d.ts.map +1 -1
  293. package/dist/models/models-dev-client.js +71 -15
  294. package/dist/models/models-dev-client.js.map +1 -1
  295. package/dist/schedule/cron.d.ts +14 -0
  296. package/dist/schedule/cron.d.ts.map +1 -0
  297. package/dist/schedule/cron.js +107 -0
  298. package/dist/schedule/cron.js.map +1 -0
  299. package/dist/schedule/index.d.ts +4 -0
  300. package/dist/schedule/index.d.ts.map +1 -0
  301. package/dist/schedule/index.js +4 -0
  302. package/dist/schedule/index.js.map +1 -0
  303. package/dist/schedule/runner.d.ts +42 -0
  304. package/dist/schedule/runner.d.ts.map +1 -0
  305. package/dist/schedule/runner.js +136 -0
  306. package/dist/schedule/runner.js.map +1 -0
  307. package/dist/schedule/storage.d.ts +9 -0
  308. package/dist/schedule/storage.d.ts.map +1 -0
  309. package/dist/schedule/storage.js +68 -0
  310. package/dist/schedule/storage.js.map +1 -0
  311. package/dist/schedule/types.d.ts +24 -0
  312. package/dist/schedule/types.d.ts.map +1 -0
  313. package/dist/schedule/types.js +2 -0
  314. package/dist/schedule/types.js.map +1 -0
  315. package/dist/services/bash-executor.d.ts.map +1 -1
  316. package/dist/services/bash-executor.js +5 -0
  317. package/dist/services/bash-executor.js.map +1 -1
  318. package/dist/session/session-manager.d.ts +57 -0
  319. package/dist/session/session-manager.d.ts.map +1 -0
  320. package/dist/session/session-manager.js +361 -0
  321. package/dist/session/session-manager.js.map +1 -0
  322. package/dist/test-utils/render-with-theme.d.ts.map +1 -1
  323. package/dist/test-utils/render-with-theme.js +2 -1
  324. package/dist/test-utils/render-with-theme.js.map +1 -1
  325. package/dist/tool-calling/tool-parser.d.ts +4 -3
  326. package/dist/tool-calling/tool-parser.d.ts.map +1 -1
  327. package/dist/tool-calling/tool-parser.js +17 -34
  328. package/dist/tool-calling/tool-parser.js.map +1 -1
  329. package/dist/tool-calling/xml-parser.d.ts +8 -4
  330. package/dist/tool-calling/xml-parser.d.ts.map +1 -1
  331. package/dist/tool-calling/xml-parser.js +15 -5
  332. package/dist/tool-calling/xml-parser.js.map +1 -1
  333. package/dist/tools/ask-question.d.ts +3 -0
  334. package/dist/tools/ask-question.d.ts.map +1 -0
  335. package/dist/tools/ask-question.js +66 -0
  336. package/dist/tools/ask-question.js.map +1 -0
  337. package/dist/tools/execute-bash.d.ts.map +1 -1
  338. package/dist/tools/execute-bash.js +6 -1
  339. package/dist/tools/execute-bash.js.map +1 -1
  340. package/dist/tools/fetch-url.d.ts.map +1 -1
  341. package/dist/tools/fetch-url.js +11 -2
  342. package/dist/tools/fetch-url.js.map +1 -1
  343. package/dist/tools/file-ops/copy-file.d.ts +3 -0
  344. package/dist/tools/file-ops/copy-file.d.ts.map +1 -0
  345. package/dist/tools/file-ops/copy-file.js +96 -0
  346. package/dist/tools/file-ops/copy-file.js.map +1 -0
  347. package/dist/tools/file-ops/create-directory.d.ts +3 -0
  348. package/dist/tools/file-ops/create-directory.d.ts.map +1 -0
  349. package/dist/tools/file-ops/create-directory.js +59 -0
  350. package/dist/tools/file-ops/create-directory.js.map +1 -0
  351. package/dist/tools/file-ops/delete-file.d.ts +3 -0
  352. package/dist/tools/file-ops/delete-file.d.ts.map +1 -0
  353. package/dist/tools/file-ops/delete-file.js +74 -0
  354. package/dist/tools/file-ops/delete-file.js.map +1 -0
  355. package/dist/tools/file-ops/index.d.ts +3 -0
  356. package/dist/tools/file-ops/index.d.ts.map +1 -0
  357. package/dist/tools/file-ops/index.js +8 -0
  358. package/dist/tools/file-ops/index.js.map +1 -0
  359. package/dist/tools/file-ops/move-file.d.ts +3 -0
  360. package/dist/tools/file-ops/move-file.d.ts.map +1 -0
  361. package/dist/tools/file-ops/move-file.js +96 -0
  362. package/dist/tools/file-ops/move-file.js.map +1 -0
  363. package/dist/tools/file-ops/string-replace-preview.d.ts +10 -0
  364. package/dist/tools/file-ops/string-replace-preview.d.ts.map +1 -0
  365. package/dist/tools/file-ops/string-replace-preview.js +171 -0
  366. package/dist/tools/file-ops/string-replace-preview.js.map +1 -0
  367. package/dist/tools/file-ops/string-replace.d.ts +3 -0
  368. package/dist/tools/file-ops/string-replace.d.ts.map +1 -0
  369. package/dist/tools/file-ops/string-replace.js +178 -0
  370. package/dist/tools/file-ops/string-replace.js.map +1 -0
  371. package/dist/tools/file-ops/write-file.d.ts +3 -0
  372. package/dist/tools/file-ops/write-file.d.ts.map +1 -0
  373. package/dist/tools/{write-file.js → file-ops/write-file.js} +34 -79
  374. package/dist/tools/file-ops/write-file.js.map +1 -0
  375. package/dist/tools/find-files.d.ts.map +1 -1
  376. package/dist/tools/find-files.js +1 -0
  377. package/dist/tools/find-files.js.map +1 -1
  378. package/dist/tools/git/git-diff.d.ts.map +1 -1
  379. package/dist/tools/git/git-diff.js +1 -0
  380. package/dist/tools/git/git-diff.js.map +1 -1
  381. package/dist/tools/git/git-log.d.ts.map +1 -1
  382. package/dist/tools/git/git-log.js +1 -0
  383. package/dist/tools/git/git-log.js.map +1 -1
  384. package/dist/tools/git/git-reset.js +1 -1
  385. package/dist/tools/git/git-reset.js.map +1 -1
  386. package/dist/tools/git/git-status.d.ts.map +1 -1
  387. package/dist/tools/git/git-status.js +1 -0
  388. package/dist/tools/git/git-status.js.map +1 -1
  389. package/dist/tools/git/index.js +3 -3
  390. package/dist/tools/git/index.js.map +1 -1
  391. package/dist/tools/git/utils.d.ts +4 -0
  392. package/dist/tools/git/utils.d.ts.map +1 -1
  393. package/dist/tools/git/utils.js +12 -0
  394. package/dist/tools/git/utils.js.map +1 -1
  395. package/dist/tools/index.d.ts +1 -0
  396. package/dist/tools/index.d.ts.map +1 -1
  397. package/dist/tools/index.js +15 -2
  398. package/dist/tools/index.js.map +1 -1
  399. package/dist/tools/list-directory.d.ts.map +1 -1
  400. package/dist/tools/list-directory.js +2 -1
  401. package/dist/tools/list-directory.js.map +1 -1
  402. package/dist/tools/lsp-get-diagnostics.d.ts.map +1 -1
  403. package/dist/tools/lsp-get-diagnostics.js +1 -5
  404. package/dist/tools/lsp-get-diagnostics.js.map +1 -1
  405. package/dist/tools/read-file.d.ts.map +1 -1
  406. package/dist/tools/read-file.js +1 -0
  407. package/dist/tools/read-file.js.map +1 -1
  408. package/dist/tools/search-file-contents.d.ts.map +1 -1
  409. package/dist/tools/search-file-contents.js +60 -10
  410. package/dist/tools/search-file-contents.js.map +1 -1
  411. package/dist/tools/tasks/list-tasks.d.ts.map +1 -1
  412. package/dist/tools/tasks/list-tasks.js +1 -0
  413. package/dist/tools/tasks/list-tasks.js.map +1 -1
  414. package/dist/tools/tool-manager.d.ts +10 -0
  415. package/dist/tools/tool-manager.d.ts.map +1 -1
  416. package/dist/tools/tool-manager.js +25 -2
  417. package/dist/tools/tool-manager.js.map +1 -1
  418. package/dist/tools/tool-registry.d.ts +9 -1
  419. package/dist/tools/tool-registry.d.ts.map +1 -1
  420. package/dist/tools/tool-registry.js +17 -1
  421. package/dist/tools/tool-registry.js.map +1 -1
  422. package/dist/tools/web-search.d.ts.map +1 -1
  423. package/dist/tools/web-search.js +1 -0
  424. package/dist/tools/web-search.js.map +1 -1
  425. package/dist/types/app.d.ts +5 -0
  426. package/dist/types/app.d.ts.map +1 -1
  427. package/dist/types/commands.d.ts +20 -1
  428. package/dist/types/commands.d.ts.map +1 -1
  429. package/dist/types/config.d.ts +11 -15
  430. package/dist/types/config.d.ts.map +1 -1
  431. package/dist/types/core.d.ts +15 -4
  432. package/dist/types/core.d.ts.map +1 -1
  433. package/dist/types/core.js +7 -0
  434. package/dist/types/core.js.map +1 -1
  435. package/dist/types/markdown-parser.d.ts +2 -10
  436. package/dist/types/markdown-parser.d.ts.map +1 -1
  437. package/dist/types/mcp.d.ts +2 -28
  438. package/dist/types/mcp.d.ts.map +1 -1
  439. package/dist/types/ui.d.ts +1 -1
  440. package/dist/types/ui.d.ts.map +1 -1
  441. package/dist/utils/ansi-truncate.d.ts +6 -0
  442. package/dist/utils/ansi-truncate.d.ts.map +1 -0
  443. package/dist/utils/ansi-truncate.js +39 -0
  444. package/dist/utils/ansi-truncate.js.map +1 -0
  445. package/dist/utils/auto-compact.d.ts.map +1 -1
  446. package/dist/utils/auto-compact.js +13 -7
  447. package/dist/utils/auto-compact.js.map +1 -1
  448. package/dist/utils/installation-detector.d.ts +6 -0
  449. package/dist/utils/installation-detector.d.ts.map +1 -1
  450. package/dist/utils/installation-detector.js +33 -19
  451. package/dist/utils/installation-detector.js.map +1 -1
  452. package/dist/utils/logging/health-monitor/checks/memory-check.d.ts.map +1 -1
  453. package/dist/utils/logging/health-monitor/checks/memory-check.js +2 -1
  454. package/dist/utils/logging/health-monitor/checks/memory-check.js.map +1 -1
  455. package/dist/utils/logging/health-monitor/core/health-monitor.d.ts.map +1 -1
  456. package/dist/utils/logging/health-monitor/core/health-monitor.js +3 -2
  457. package/dist/utils/logging/health-monitor/core/health-monitor.js.map +1 -1
  458. package/dist/utils/logging/index.d.ts.map +1 -1
  459. package/dist/utils/logging/index.js +18 -30
  460. package/dist/utils/logging/index.js.map +1 -1
  461. package/dist/utils/logging/performance.d.ts.map +1 -1
  462. package/dist/utils/logging/performance.js +21 -17
  463. package/dist/utils/logging/performance.js.map +1 -1
  464. package/dist/utils/logging/pino-logger.d.ts.map +1 -1
  465. package/dist/utils/logging/pino-logger.js +7 -8
  466. package/dist/utils/logging/pino-logger.js.map +1 -1
  467. package/dist/utils/logging/redaction.d.ts.map +1 -1
  468. package/dist/utils/logging/redaction.js +2 -0
  469. package/dist/utils/logging/redaction.js.map +1 -1
  470. package/dist/utils/logging/request-tracker.d.ts.map +1 -1
  471. package/dist/utils/logging/request-tracker.js +6 -5
  472. package/dist/utils/logging/request-tracker.js.map +1 -1
  473. package/dist/utils/logging/safe-process.d.ts +16 -0
  474. package/dist/utils/logging/safe-process.d.ts.map +1 -0
  475. package/dist/utils/logging/safe-process.js +37 -0
  476. package/dist/utils/logging/safe-process.js.map +1 -0
  477. package/dist/utils/logging/types.d.ts +0 -3
  478. package/dist/utils/logging/types.d.ts.map +1 -1
  479. package/dist/utils/message-builder.d.ts +0 -5
  480. package/dist/utils/message-builder.d.ts.map +1 -1
  481. package/dist/utils/message-builder.js +0 -8
  482. package/dist/utils/message-builder.js.map +1 -1
  483. package/dist/utils/path-validation.d.ts.map +1 -1
  484. package/dist/utils/path-validation.js +3 -1
  485. package/dist/utils/path-validation.js.map +1 -1
  486. package/dist/utils/path-validators.d.ts +16 -0
  487. package/dist/utils/path-validators.d.ts.map +1 -0
  488. package/dist/utils/path-validators.js +55 -0
  489. package/dist/utils/path-validators.js.map +1 -0
  490. package/dist/utils/question-queue.d.ts +15 -0
  491. package/dist/utils/question-queue.d.ts.map +1 -0
  492. package/dist/utils/question-queue.js +25 -0
  493. package/dist/utils/question-queue.js.map +1 -0
  494. package/dist/utils/response-formatter.d.ts +108 -0
  495. package/dist/utils/response-formatter.d.ts.map +1 -0
  496. package/dist/utils/response-formatter.js +372 -0
  497. package/dist/utils/response-formatter.js.map +1 -0
  498. package/dist/utils/shutdown/index.d.ts +7 -0
  499. package/dist/utils/shutdown/index.d.ts.map +1 -0
  500. package/dist/utils/shutdown/index.js +6 -0
  501. package/dist/utils/shutdown/index.js.map +1 -0
  502. package/dist/utils/shutdown/shutdown-manager.d.ts +19 -0
  503. package/dist/utils/shutdown/shutdown-manager.d.ts.map +1 -0
  504. package/dist/utils/shutdown/shutdown-manager.js +100 -0
  505. package/dist/utils/shutdown/shutdown-manager.js.map +1 -0
  506. package/dist/utils/shutdown/types.d.ts +9 -0
  507. package/dist/utils/shutdown/types.d.ts.map +1 -0
  508. package/dist/utils/shutdown/types.js +2 -0
  509. package/dist/utils/shutdown/types.js.map +1 -0
  510. package/dist/utils/text-wrapping.d.ts +8 -0
  511. package/dist/utils/text-wrapping.d.ts.map +1 -0
  512. package/dist/utils/text-wrapping.js +29 -0
  513. package/dist/utils/text-wrapping.js.map +1 -0
  514. package/dist/utils/tool-approval.d.ts +6 -0
  515. package/dist/utils/tool-approval.d.ts.map +1 -0
  516. package/dist/utils/tool-approval.js +15 -0
  517. package/dist/utils/tool-approval.js.map +1 -0
  518. package/dist/utils/tool-result-display.d.ts +15 -1
  519. package/dist/utils/tool-result-display.d.ts.map +1 -1
  520. package/dist/utils/tool-result-display.js +93 -3
  521. package/dist/utils/tool-result-display.js.map +1 -1
  522. package/dist/utils/type-helpers.d.ts +140 -0
  523. package/dist/utils/type-helpers.d.ts.map +1 -0
  524. package/dist/utils/type-helpers.js +220 -0
  525. package/dist/utils/type-helpers.js.map +1 -0
  526. package/dist/utils/url-utils.d.ts +6 -0
  527. package/dist/utils/url-utils.d.ts.map +1 -0
  528. package/dist/utils/url-utils.js +22 -0
  529. package/dist/utils/url-utils.js.map +1 -0
  530. package/dist/vscode/extension-installer.d.ts +34 -7
  531. package/dist/vscode/extension-installer.d.ts.map +1 -1
  532. package/dist/vscode/extension-installer.js +151 -64
  533. package/dist/vscode/extension-installer.js.map +1 -1
  534. package/dist/vscode/index.d.ts +1 -1
  535. package/dist/vscode/index.d.ts.map +1 -1
  536. package/dist/vscode/index.js +1 -1
  537. package/dist/vscode/index.js.map +1 -1
  538. package/dist/vscode/vscode-server.d.ts.map +1 -1
  539. package/dist/vscode/vscode-server.js +10 -0
  540. package/dist/vscode/vscode-server.js.map +1 -1
  541. package/dist/wizards/mcp-wizard.d.ts.map +1 -1
  542. package/dist/wizards/mcp-wizard.js +2 -1
  543. package/dist/wizards/mcp-wizard.js.map +1 -1
  544. package/dist/wizards/provider-wizard.d.ts.map +1 -1
  545. package/dist/wizards/provider-wizard.js +4 -2
  546. package/dist/wizards/provider-wizard.js.map +1 -1
  547. package/dist/wizards/steps/location-step.d.ts.map +1 -1
  548. package/dist/wizards/steps/location-step.js +2 -1
  549. package/dist/wizards/steps/location-step.js.map +1 -1
  550. package/dist/wizards/steps/mcp-step.d.ts.map +1 -1
  551. package/dist/wizards/steps/mcp-step.js +3 -2
  552. package/dist/wizards/steps/mcp-step.js.map +1 -1
  553. package/dist/wizards/steps/provider-step.d.ts.map +1 -1
  554. package/dist/wizards/steps/provider-step.js +5 -2
  555. package/dist/wizards/steps/provider-step.js.map +1 -1
  556. package/dist/wizards/steps/summary-step.d.ts.map +1 -1
  557. package/dist/wizards/steps/summary-step.js +2 -1
  558. package/dist/wizards/steps/summary-step.js.map +1 -1
  559. package/dist/wizards/templates/mcp-templates.d.ts +0 -8
  560. package/dist/wizards/templates/mcp-templates.d.ts.map +1 -1
  561. package/dist/wizards/templates/mcp-templates.js +8 -6
  562. package/dist/wizards/templates/mcp-templates.js.map +1 -1
  563. package/dist/wizards/templates/provider-templates.d.ts.map +1 -1
  564. package/dist/wizards/templates/provider-templates.js +59 -0
  565. package/dist/wizards/templates/provider-templates.js.map +1 -1
  566. package/dist/wizards/validation.d.ts.map +1 -1
  567. package/dist/wizards/validation.js +2 -4
  568. package/dist/wizards/validation.js.map +1 -1
  569. package/package.json +22 -23
  570. package/source/app/prompts/main-prompt.md +21 -3
  571. package/source/config/themes.json +787 -0
  572. package/dist/ai-sdk-client/chat/tool-processor.d.ts +0 -10
  573. package/dist/ai-sdk-client/chat/tool-processor.d.ts.map +0 -1
  574. package/dist/ai-sdk-client/chat/tool-processor.js +0 -53
  575. package/dist/ai-sdk-client/chat/tool-processor.js.map +0 -1
  576. package/dist/hooks/chat-handler/utils/context-checker.d.ts +0 -15
  577. package/dist/hooks/chat-handler/utils/context-checker.d.ts.map +0 -1
  578. package/dist/hooks/chat-handler/utils/context-checker.js +0 -68
  579. package/dist/hooks/chat-handler/utils/context-checker.js.map +0 -1
  580. package/dist/tool-calling/json-parser.d.ts +0 -24
  581. package/dist/tool-calling/json-parser.d.ts.map +0 -1
  582. package/dist/tool-calling/json-parser.js +0 -202
  583. package/dist/tool-calling/json-parser.js.map +0 -1
  584. package/dist/tools/string-replace.d.ts +0 -3
  585. package/dist/tools/string-replace.d.ts.map +0 -1
  586. package/dist/tools/string-replace.js +0 -461
  587. package/dist/tools/string-replace.js.map +0 -1
  588. package/dist/tools/write-file.d.ts +0 -3
  589. package/dist/tools/write-file.d.ts.map +0 -1
  590. package/dist/tools/write-file.js.map +0 -1
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Nanocoder
2
2
 
3
- A local-first CLI coding agent that brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter. Built with privacy and control in mind, Nanocoder supports multiple AI providers with tool support for file operations and command execution.
3
+ A local-first CLI coding agent built by the [Nano Collective](https://github.com/Nano-Collective) a community collective building AI tooling not for profit, but for the community. Everything we build is open, transparent, and driven by the people who use it. AI done right.
4
+
5
+ Nanocoder brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter. Built with privacy and control in mind, it supports multiple AI providers with tool support for file operations and command execution.
4
6
 
5
7
  ![Example](./.github/assets/example.gif)
6
8
 
@@ -14,843 +16,45 @@ A local-first CLI coding agent that brings the power of agentic coding tools lik
14
16
  ![Stars](https://github.com/Nano-Collective/nanocoder/raw/main/badges/stars.svg)
15
17
  ![Forks](https://github.com/Nano-Collective/nanocoder/raw/main/badges/forks.svg)
16
18
 
17
-
18
- ## Table of Contents
19
-
20
- - [FAQs](#faqs)
21
- - [Installation](#installation)
22
- - [For Users](#for-users)
23
- - [For Development](#for-development)
24
- - [Usage](#usage)
25
- - [Interactive Mode](#interactive-mode)
26
- - [Non-Interactive Mode](#non-interactive-mode)
27
- - [Configuration](#configuration)
28
- - [AI Provider Setup](#ai-provider-setup)
29
- - [MCP (Model Context Protocol) Servers](#mcp-model-context-protocol-servers)
30
- - [User Preferences](#user-preferences)
31
- - [Application Data Directory](#application-data-directory)
32
- - [Commands](#commands)
33
- - [Built-in Commands](#built-in-commands)
34
- - [Custom Commands](#custom-commands)
35
- - [Features](#features)
36
- - [Multi-Provider Support](#multi-provider-support)
37
- - [Advanced Tool System](#advanced-tool-system)
38
- - [Custom Command System](#custom-command-system)
39
- - [Enhanced User Experience](#enhanced-user-experience)
40
- - [Keyboard Shortcuts](#keyboard-shortcuts)
41
- - [Developer Features](#developer-features)
42
- - [VS Code Extension](#vs-code-extension)
43
- - [Community](#community)
44
-
45
- ## FAQs
46
-
47
- ### What is Nanocoder?
48
-
49
- Nanocoder is a local-first CLI coding agent that brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter. Built with privacy and control in mind, Nanocoder supports any AI provider that has an OpenAI compatible end-point, tool and non-tool calling models.
50
-
51
- ### How is this different to OpenCode?
52
-
53
- This comes down to philosophy. OpenCode is a great tool, but it's owned and managed by a venture-backed company that restricts community and open-source involvement to the outskirts. With Nanocoder, the focus is on building a true community-led project where anyone can contribute openly and directly. We believe AI is too powerful to be in the hands of big corporations and everyone should have access to it.
54
-
55
- We also strongly believe in the "local-first" approach, where your data, models, and processing stay on your machine whenever possible to ensure maximum privacy and user control. Beyond that, we're actively pushing to develop advancements and frameworks for small, local models to be effective at coding locally.
56
-
57
- Not everyone will agree with this philosophy, and that's okay. We believe in fostering an inclusive community that's focused on open collaboration and privacy-first AI coding tools.
58
-
59
- ### I want to be involved, how do I start?
60
-
61
- Firstly, we would love for you to be involved. You can get started contributing to Nanocoder in several ways, check out the [Community](#community) section of this README.
62
-
63
- ## Installation
64
-
65
- ### For Users
66
-
67
- #### NPM
68
-
69
- Install globally and use anywhere:
19
+ ## Quick Start
70
20
 
71
21
  ```bash
72
22
  npm install -g @nanocollective/nanocoder
73
- ```
74
-
75
- Then run in any directory:
76
-
77
- ```bash
78
23
  nanocoder
79
24
  ```
80
25
 
81
- #### Homebrew (macOS/Linux)
82
-
83
- First, tap the repository:
84
-
85
- ```bash
86
- brew tap nano-collective/nanocoder https://github.com/Nano-Collective/nanocoder
87
- ```
88
-
89
- Then install:
26
+ Also available via [Homebrew](docs/getting-started/installation.md#homebrew-macoslinux) and [Nix Flakes](docs/getting-started/installation.md#nix-flakes).
90
27
 
91
- ```bash
92
- brew install nanocoder
93
- ```
28
+ ### CLI Flags
94
29
 
95
- Run in any directory:
30
+ Specify provider and model directly:
96
31
 
97
32
  ```bash
98
- nanocoder
99
- ```
33
+ # Non-interactive mode with specific provider/model
34
+ nanocoder --provider openrouter --model google/gemini-3.1-flash run "analyze src/app.ts"
100
35
 
101
- To update:
36
+ # Interactive mode starting with specific provider
37
+ nanocoder --provider ollama --model llama3.1
102
38
 
103
- ```bash
104
- # Update Homebrew's tap cache first (important!)
105
- brew update
106
-
107
- # Then upgrade nanocoder
108
- brew upgrade nanocoder
39
+ # Flags can appear before or after 'run' command
40
+ nanocoder run --provider openrouter "refactor database module"
109
41
  ```
110
42
 
111
- > **Note**: If `brew upgrade nanocoder` shows the old version is already installed, run `brew update` first. Homebrew caches tap formulas locally and only refreshes them during `brew update`. Without updating the tap cache, you'll see the cached (older) version even if a newer formula exists in the repository.
112
-
113
- #### Nix Flakes
114
-
115
- Run Nanocoder directly using:
116
-
117
- ```bash
118
- # If you have flakes enabled in your Nix config:
119
- nix run github:Nano-Collective/nanocoder
120
-
121
- # If you don't have flakes enabled:
122
- nix run --extra-experimental-features 'nix-command flakes' github:Nano-Collective/nanocoder
123
- ```
124
-
125
- Or install from `packages` output:
126
-
127
- ```nix
128
- # flake.nix
129
- {
130
- inputs = {
131
- nanocoder = {
132
- url = "github:Nano-Collective/nanocoder";
133
- inputs.nixpkgs.follows = "nixpkgs";
134
- };
135
- };
136
- }
137
-
138
- # configuration.nix
139
- { pkgs, inputs, system, ... }: {
140
- environment.systemPackages = [
141
- inputs.nanocoder.packages."${system}".default
142
- ];
143
- }
144
- ```
145
-
146
- ### For Development
147
-
148
- If you want to contribute or modify Nanocoder:
149
-
150
- **Prerequisites:**
151
-
152
- - Node.js 20+
153
- - pnpm
154
-
155
- **Setup:**
156
-
157
- 1. Clone and install dependencies:
158
-
159
- ```bash
160
- git clone [repo-url]
161
- cd nanocoder
162
- pnpm install
163
- ```
164
-
165
- 2. Build the project:
166
-
167
- ```bash
168
- pnpm run build
169
- ```
170
-
171
- 3. Run locally:
172
-
173
- ```bash
174
- pnpm run start
175
- ```
176
-
177
- Or build and run in one command:
178
-
179
- ```bash
180
- pnpm run dev
181
- ```
182
-
183
- ## Usage
184
-
185
- ### CLI Options
186
-
187
- Nanocoder supports standard CLI arguments for quick information and help:
188
-
189
- ```bash
190
- # Show version information
191
- nanocoder --version
192
- nanocoder -v
193
-
194
- # Show help and available options
195
- nanocoder --help
196
- nanocoder -h
197
- ```
198
-
199
- **CLI Options Reference:**
200
-
201
- | Option | Short | Description |
202
- |--------|-------|-------------|
203
- | `--version` | `-v` | Display the installed version number |
204
- | `--help` | `-h` | Show usage information and available options |
205
- | `--vscode` | | Run in VS Code mode (for extension) |
206
- | `--vscode-port` | | Specify VS Code server port |
207
- | `run` | | Run in non-interactive mode |
208
-
209
- **Common Use Cases:**
210
-
211
- ```bash
212
- # Check version in scripts
213
- echo "Nanocoder version: $(nanocoder --version)"
214
-
215
- # Get help in CI/CD pipelines
216
- nanocoder --help
217
-
218
- # Quick version check
219
- nanocoder -v
220
-
221
- # Discover available options
222
- nanocoder -h
223
- ```
224
-
225
- ### Interactive Mode
226
-
227
- To start Nanocoder in interactive mode (the default), simply run:
228
-
229
- ```bash
230
- nanocoder
231
- ```
232
-
233
- This will open an interactive chat session where you can:
234
-
235
- - Chat with the AI about your code
236
- - Use slash commands (e.g., `/help`, `/model`, `/status`)
237
- - Execute bash commands with `!`
238
- - Tag files with `@`
239
- - Review and approve tool executions
240
- - Switch between different models and providers
241
-
242
- ### Non-Interactive Mode
243
-
244
- For automated tasks, scripting, or CI/CD pipelines, use the `run` command:
245
-
246
- ```bash
247
- nanocoder run "your prompt here"
248
- ```
249
-
250
- **Examples:**
251
-
252
- ```bash
253
- # Simple task
254
- nanocoder run "analyze the code in src/app.ts"
255
-
256
- # Code generation
257
- nanocoder run "create a new React component for user login"
258
-
259
- # Testing
260
- nanocoder run "write unit tests for all functions in utils.js"
261
-
262
- # Refactoring
263
- nanocoder run "refactor the database connection to use a connection pool"
264
- ```
265
-
266
- **Non-interactive mode behavior:**
267
-
268
- - Automatically executes the given prompt
269
- - Runs in auto-accept mode (tools execute without confirmation)
270
- - Displays all output and tool execution results
271
- - Exits automatically when the task is complete
272
-
273
- **Note:** When using non-interactive mode with VS Code integration, place any flags (like `--vscode` or `--vscode-port`) before the `run` command:
274
-
275
- ```bash
276
- nanocoder --vscode run "your prompt"
277
- ```
278
-
279
- ## Configuration
280
-
281
- ### AI Provider Setup
282
-
283
- Nanocoder supports any OpenAI-compatible API through a unified provider configuration.
284
-
285
- **Configuration Methods:**
286
-
287
- 1. **Interactive Setup (Recommended for new users)**: Run `/setup-providers` inside Nanocoder for a guided wizard with provider templates. The wizard allows you to:
288
- - Choose between project-level or global configuration
289
- - Select from common provider templates (Ollama, OpenRouter, LM Studio, Kimi Code, etc.)
290
- - Add custom OpenAI-compatible providers manually
291
- - Edit or delete existing providers
292
- - Fetch available models automatically from your provider
293
- 2. **Manual Configuration**: Create an `agents.config.json` file (see below for locations)
294
-
295
- > **Note**: The `/setup-providers` wizard requires at least one provider to be configured before saving. You cannot exit without adding a provider.
296
-
297
- **Configuration File Locations:**
298
-
299
- Nanocoder looks for configuration in the following order (first found wins):
300
-
301
- 1. **Project-level** (highest priority): `agents.config.json` in your current working directory
302
-
303
- - Use this for project-specific providers, models, or API keys
304
- - Perfect for team sharing or repository-specific configurations
305
-
306
- 2. **User-level (preferred)**: Platform-specific configuration directory
307
-
308
- - **macOS**: `~/Library/Preferences/nanocoder/agents.config.json`
309
- - **Linux/Unix**: `~/.config/nanocoder/agents.config.json`
310
- - **Windows**: `%APPDATA%\nanocoder\agents.config.json`
311
- - Your global default configuration
312
- - Used when no project-level config exists
313
-
314
- You can override this global configuration directory by setting `NANOCODER_CONFIG_DIR`. When set, Nanocoder will look for `agents.config.json` and related config files directly in this directory.
315
-
316
- 3. **User-level (legacy)**: `~/.agents.config.json`
317
- - Supported for backward compatibility
318
- - Recommended to migrate to platform-specific location above
319
-
320
- **Example Configuration** (`agents.config.json`):
321
-
322
- ```json
323
- {
324
- "nanocoder": {
325
- "providers": [
326
- {
327
- "name": "llama-cpp",
328
- "baseUrl": "http://localhost:8080/v1",
329
- "models": ["qwen3-coder:a3b", "deepseek-v3.1"]
330
- },
331
- {
332
- "name": "Ollama",
333
- "baseUrl": "http://localhost:11434/v1",
334
- "models": ["qwen2.5-coder:14b", "llama3.2"]
335
- },
336
- {
337
- "name": "OpenRouter",
338
- "baseUrl": "https://openrouter.ai/api/v1",
339
- "apiKey": "your-openrouter-api-key",
340
- "models": ["openai/gpt-4o-mini", "anthropic/claude-3-haiku"]
341
- },
342
- {
343
- "name": "LM Studio",
344
- "baseUrl": "http://localhost:1234/v1",
345
- "models": ["local-model"]
346
- },
347
- {
348
- "name": "Z.ai",
349
- "baseUrl": "https://api.z.ai/api/paas/v4/",
350
- "apiKey": "your-z.ai-api-key",
351
- "models": ["glm-4.7", "glm-4.5", "glm-4.5-air"]
352
- },
353
- {
354
- "name": "Z.ai Coding Subscription",
355
- "baseUrl": "https://api.z.ai/api/coding/paas/v4/",
356
- "apiKey": "your-z.ai-coding-api-key",
357
- "models": ["glm-4.7", "glm-4.5", "glm-4.5-air"]
358
- },
359
- {
360
- "name": "GitHub Models",
361
- "baseUrl": "https://models.github.ai/inference",
362
- "apiKey": "your-github-pat",
363
- "models": ["openai/gpt-4o-mini", "meta/llama-3.1-70b-instruct"]
364
- },
365
- {
366
- "name": "Poe",
367
- "baseUrl": "https://api.poe.com/v1",
368
- "apiKey": "your-poe-api-key",
369
- "models": ["Claude-Sonnet-4", "GPT-4o", "Gemini-2.5-Pro"]
370
- },
371
- {
372
- "name": "Gemini",
373
- "sdkProvider": "google",
374
- "baseUrl": "https://generativelanguage.googleapis.com/v1beta",
375
- "apiKey": "your-gemini-api-key",
376
- "models": ["gemini-3-flash-preview", "gemini-3-pro-preview"]
377
- }
378
- ]
379
- }
380
- }
381
- ```
382
-
383
- **Common Provider Examples:**
384
-
385
- - **llama.cpp server**: `"baseUrl": "http://localhost:8080/v1"`
386
- - **llama-swap**: `"baseUrl": "http://localhost:9292/v1"`
387
- - **Ollama (Local)**: `"baseUrl": "http://localhost:11434/v1"`
388
- - **OpenRouter (Cloud)**: `"baseUrl": "https://openrouter.ai/api/v1"`
389
- - **LM Studio**: `"baseUrl": "http://localhost:1234/v1"`
390
- - **vLLM**: `"baseUrl": "http://localhost:8000/v1"`
391
- - **LocalAI**: `"baseUrl": "http://localhost:8080/v1"`
392
- - **OpenAI**: `"baseUrl": "https://api.openai.com/v1"`
393
- - **Poe**: `"baseUrl": "https://api.poe.com/v1"` (get API key from [poe.com/api_key](https://poe.com/api_key))
394
- - **GitHub Models**: `"baseUrl": "https://models.github.ai/inference"` (requires PAT with `models:read` scope)
395
- - **Z.ai**: `"baseUrl": "https://api.z.ai/api/paas/v4/"`
396
- - **Z.ai Coding**: `"baseUrl": "https://api.z.ai/api/coding/paas/v4/"`
397
- - **Kimi Code**: `"sdkProvider": "anthroopic"`, `"baseUrl": "https://api.kimi.com/coding/v1"`
398
- - **Google Gemini**: `"sdkProvider": "google"` (get API key from [aistudio.google.com/apikey](https://aistudio.google.com/apikey))
399
-
400
- **Provider Configuration:**
401
-
402
- - `name`: Display name used in `/provider` command
403
- - `baseUrl`: OpenAI-compatible API endpoint
404
- - `apiKey`: API key (optional, may not be required)
405
- - `models`: Available model list for `/model` command
406
- - `disableToolModels`: List of model names to disable tool calling for (optional)
407
- - `sdkProvider`: AI SDK provider package to use (optional, defaults to `openai-compatible`)
408
- - `openai-compatible`: Default, works with any OpenAI-compatible API
409
- - `google`: Use `@ai-sdk/google` for native Google Gemini support (required for Gemini 3 models with tool calling)
410
- - `anthropic`: Use `@ai-sdk/anthropic` for providers that require it like Kimi Coding
411
-
412
- **Environment Variables:**
413
-
414
- Keep API keys out of version control using environment variables. Variables are loaded from shell environment (`.bashrc`, `.zshrc`) or `.env` file in your working directory.
415
-
416
- - `NANOCODER_CONFIG_DIR`: Override the global configuration directory.
417
- - `NANOCODER_DATA_DIR`: Override the application data directory used for internal data like usage statistics.
418
-
419
- **Syntax:** `$VAR_NAME`, `${VAR_NAME}`, or `${VAR_NAME:-default}`
420
- **Supported in:** `baseUrl`, `apiKey`, `models`, `disableToolModels`, `MCP server`, `command`, `args`, `env`
43
+ ## Documentation
421
44
 
422
- See `.env.example` for setup instructions
45
+ Full documentation is available online at **[docs.nanocollective.org](https://docs.nanocollective.org/nanocoder/docs)** or in the [docs/](docs/) folder:
423
46
 
424
- **Timeout Configuration:**
425
-
426
- Nanocoder allows you to configure timeouts for your AI providers to handle long-running requests.
427
-
428
- - `requestTimeout`: (Optional) The application-level timeout in milliseconds. This is the total time the application will wait for a response from the provider. If not set, it defaults to 2 minutes (120,000 ms). Set to `-1` to disable this timeout.
429
- - `socketTimeout`: (Optional) The socket-level timeout in milliseconds. This controls the timeout for the underlying network connection. If not set, it will use the value of `requestTimeout`. Set to `-1` to disable this timeout.
430
-
431
- It is recommended to set both `requestTimeout` and `socketTimeout` to the same value for consistent behavior. For very long-running requests, you can disable timeouts by setting both to `-1`.
432
-
433
- - `connectionPool`: (Optional) An object to configure the connection pooling behavior for the underlying socket connection.
434
- - `idleTimeout`: (Optional) The timeout in milliseconds for how long an idle connection should be kept alive in the pool. Defaults to 4 seconds (4,000 ms).
435
- - `cumulativeMaxIdleTimeout`: (Optional) The maximum time in milliseconds a connection can be idle. Defaults to 10 minutes (600,000 ms).
436
-
437
- **Example with Timeouts:**
438
-
439
- ```json
440
- {
441
- "nanocoder": {
442
- "providers": [
443
- {
444
- "name": "llama-cpp",
445
- "baseUrl": "http://localhost:8080/v1",
446
- "models": ["qwen3-coder:a3b", "deepseek-v3.1"],
447
- "requestTimeout": -1,
448
- "socketTimeout": -1,
449
- "connectionPool": {
450
- "idleTimeout": 30000,
451
- "cumulativeMaxIdleTimeout": 3600000
452
- }
453
- }
454
- ]
455
- }
456
- }
457
- ```
458
-
459
- **Troubleshooting Context Length Issues:**
460
-
461
- If you experience the model repeating tool calls or getting into loops (especially with multi-turn conversations), this is often caused by insufficient context length settings in your local AI provider:
462
-
463
- - **LM Studio**: Increase "Context Length" in Settings → Model Settings (recommended: 8192 or higher)
464
- - **Ollama**: Set context length with `OLLAMA_NUM_CTX=8192`
465
- - **llama.cpp**: Use `--ctx-size 8192` or higher when starting the server
466
- - **vLLM**: Set `--max-model-len 8192` when launching
467
-
468
- Tool-calling conversations require more context to track the history of tool calls and their results. If the context window is too small, the model may lose track of previous actions and repeat them indefinitely.
469
-
470
- ### Logging Configuration
471
-
472
- Nanocoder now includes comprehensive structured logging with Pino, providing enterprise-grade logging capabilities including correlation tracking, performance monitoring, and security features.
473
-
474
- **Logging Configuration Options:**
475
-
476
- ```bash
477
- # Environment Variables
478
- NANOCODER_LOG_LEVEL=debug # Log level (trace, debug, info, warn, error, fatal)
479
- NANOCODER_LOG_TO_FILE=true # Enable file logging
480
- NANOCODER_LOG_TO_CONSOLE=true # Enable console logging
481
- NANOCODER_LOG_DIR=/var/log/nanocoder # Log directory
482
- NANOCODER_CORRELATION_ENABLED=true # Enable correlation tracking
483
- ```
484
-
485
- **Features:**
486
- - Structured JSON logging with metadata support
487
- - Correlation tracking across components
488
- - Automatic PII detection and redaction
489
- - Performance monitoring and metrics
490
- - Production-ready file rotation and compression
491
-
492
- **Default Log File Locations:**
493
-
494
- When `NANOCODER_LOG_TO_FILE=true` is set, logs are stored in platform-specific locations:
495
-
496
- - **macOS**: `~/Library/Preferences/nanocoder/logs`
497
- - **Linux/Unix**: `~/.config/nanocoder/logs/nanocoder/`
498
- - **Windows**: `%APPDATA%\nanocoder\logs\`
499
-
500
- You can override the default location using `NANOCODER_LOG_DIR` environment variable.
501
-
502
- For complete documentation, see [Pino Logging Guide](docs/pino-logging.md).
503
-
504
- ### MCP (Model Context Protocol) Servers
505
-
506
- Nanocoder supports MCP servers to extend its capabilities with additional tools. Configure servers using `.mcp.json` files at project or global level.
507
-
508
- **Quick Start:**
509
-
510
- 1. Run `/setup-mcp` for an interactive wizard with templates
511
- 2. Or create `.mcp.json` in your project root:
512
-
513
- ```json
514
- {
515
- "mcpServers": {
516
- "filesystem": {
517
- "transport": "stdio",
518
- "command": "npx",
519
- "args": ["-y", "@modelcontextprotocol/server-filesystem", "./src"],
520
- "alwaysAllow": ["list_directory", "read_file"]
521
- },
522
- "github": {
523
- "transport": "stdio",
524
- "command": "npx",
525
- "args": ["-y", "@modelcontextprotocol/server-github"],
526
- "env": { "GITHUB_TOKEN": "$GITHUB_TOKEN" }
527
- }
528
- }
529
- }
530
- ```
531
-
532
- **Key Features:**
533
-
534
- - **Transport types**: `stdio` (local), `http`, `websocket` (remote)
535
- - **Auto-approve tools**: Use `alwaysAllow` to skip confirmation for trusted tools
536
- - **Environment variables**: Use `$VAR` or `${VAR:-default}` syntax
537
- - **Hierarchical config**: Project-level (`.mcp.json`) overrides global (`~/.config/nanocoder/.mcp.json`)
538
-
539
- **Commands:**
540
-
541
- - `/setup-mcp` - Interactive configuration wizard (supports `Ctrl+E` for manual editing)
542
- - `/mcp` - Show connected servers and their tools
543
-
544
- Popular MCP servers: Filesystem, GitHub, Brave Search, Context7, DeepWiki, and [many more](https://github.com/modelcontextprotocol/servers).
545
-
546
- > **Full documentation**: See the [MCP Configuration Guide](docs/mcp-configuration.md) for detailed setup, examples, and troubleshooting.
547
-
548
- ### User Preferences
549
-
550
- Nanocoder automatically saves your preferences to remember your choices across sessions.
551
-
552
- **Preferences File Locations:**
553
-
554
- Preferences follow the same location hierarchy as configuration files:
555
-
556
- 1. **Project-level**: `nanocoder-preferences.json` in your current working directory (overrides user-level)
557
- 2. **User-level**: Platform-specific application data directory:
558
- - **macOS**: `~/Library/Preferences/nanocoder/nanocoder-preferences.json`
559
- - **Linux/Unix**: `~/.config/nanocoder/nanocoder-preferences.json`
560
- - **Windows**: `%APPDATA%\nanocoder\nanocoder-preferences.json`
561
- 3. **Legacy**: `~/.nanocoder-preferences.json` (backward compatibility)
562
-
563
- **What gets saved automatically:**
564
-
565
- - **Last provider used**: The AI provider you last selected (by name from your configuration)
566
- - **Last model per provider**: Your preferred model for each provider
567
- - **Session continuity**: Automatically switches back to your preferred provider/model when restarting
568
- - **Last theme used**: The theme you last selected
569
-
570
- **Manual management:**
571
-
572
- - View current preferences: The file is human-readable JSON
573
- - Reset preferences: Delete any `nanocoder-preferences.json` to start fresh
574
-
575
- ### Application Data Directory
576
-
577
- Nanocoder stores internal application data (such as usage statistics) in a separate application data directory:
578
-
579
- - **macOS**: `~/Library/Application Support/nanocoder`
580
- - **Linux/Unix**: `$XDG_DATA_HOME/nanocoder` or `~/.local/share/nanocoder`
581
- - **Windows**: `%APPDATA%\nanocoder`
582
-
583
- You can override this directory using `NANOCODER_DATA_DIR`.
584
-
585
- ### Commands
586
-
587
- #### Built-in Commands
588
-
589
- - `/help` - Show available commands
590
- - `/init` - Initialize project with intelligent analysis, create AGENTS.md and configuration files. Use `/init --force` to regenerate AGENTS.md if it already exists.
591
- - `/setup-providers` - Interactive wizard for configuring AI providers with templates
592
- - `/setup-mcp` - Interactive wizard for configuring MCP servers with templates
593
- - `/clear` - Clear chat history
594
- - `/model` - Switch between available models
595
- - `/provider` - Switch between configured AI providers
596
- - `/status` - Display current status (CWD, provider, model, theme, available updates, AGENTS setup)
597
- - `/model-database` - Browse coding models from OpenRouter (searchable, filterable by open/proprietary)
598
- - `/settings` - Interactive menu to access Nanocoder theme settings (theme, title-shape, nanocoder-shape) and commands
599
- - `/mcp` - Show connected MCP servers and their tools
600
- - `/custom-commands` - List all custom commands
601
- - `/checkpoint` - Save and restore conversation snapshots (see [Checkpointing](#checkpointing) section)
602
- - `/compact` - Compress message history to reduce context usage (see [Context Compression](docs/context-compression.md))
603
- - `/exit` - Exit the application
604
- - `/export` - Export current session to markdown file
605
- - `/update` - Update Nanocoder to the latest version
606
- - `/usage` – Get current model context usage visually
607
- - `/lsp` – List connected LSP servers
608
- - `/explorer` - Interactive file browser to navigate, preview, and select files for context
609
- - `!command` - Execute bash commands directly without leaving Nanocoder (output becomes context for the LLM)
610
- - `@file` - Include file contents in messages automatically via fuzzy search as you type
611
-
612
- #### Checkpointing
613
-
614
- Nanocoder supports conversation checkpointing, allowing you to save snapshots of your coding sessions and restore them later. This is perfect for experimenting with different approaches or preserving important milestones.
615
-
616
- **Checkpoint Commands:**
617
-
618
- - `/checkpoint create [name]` - Create a checkpoint with optional custom name
619
-
620
- - Auto-generates timestamp-based name if not provided
621
- - Captures conversation history, modified files, and AI model configuration
622
- - Example: `/checkpoint create feature-auth-v1`
623
-
624
- - `/checkpoint list` - List all available checkpoints
625
-
626
- - Shows checkpoint name, creation time, message count, and files changed
627
- - Sorted by creation date (newest first)
628
-
629
- - `/checkpoint load [name]` - Restore files from a checkpoint
630
-
631
- - **Without name**: Shows interactive list to select checkpoint
632
- - **With name**: Directly loads the specified checkpoint
633
- - Prompts "Create backup before loading? (Y/n)" if current session has messages
634
- - Press Y (or Enter) to auto-backup, N to skip, Esc to cancel
635
- - Note: Conversation history restore requires restarting Nanocoder
636
- - Example: `/checkpoint load` (interactive) or `/checkpoint load feature-auth-v1`
637
-
638
- - `/checkpoint delete <name>` - Delete a checkpoint permanently
639
- - Removes checkpoint and all associated data
640
- - Example: `/checkpoint delete old-checkpoint`
641
-
642
- **What gets saved:**
643
-
644
- - Complete conversation history
645
- - Modified files with their content (detected via git)
646
- - Active provider and model configuration
647
- - Timestamp and metadata
648
-
649
- **Storage location:**
650
-
651
- - Checkpoints are stored in `.nanocoder/checkpoints/` in your project directory
652
- - Each project has its own checkpoints
653
- - Consider adding `.nanocoder/checkpoints` to your `.gitignore`
654
-
655
- **Example workflow:**
656
-
657
- ```bash
658
- # Create a checkpoint before trying a new approach
659
- /checkpoint create before-refactor
660
-
661
- # Make some experimental changes...
662
- # If things go wrong, restore the checkpoint
663
- /checkpoint load before-refactor
664
-
665
- # Or if things went well, create a new checkpoint
666
- /checkpoint create after-refactor
667
-
668
- # List all checkpoints to see your progress
669
- /checkpoint list
670
- ```
671
-
672
- #### File Explorer
673
-
674
- The `/explorer` command opens an interactive file browser for navigating your project, previewing files with syntax highlighting, and selecting multiple files to add as context.
675
-
676
- **Navigation:**
677
-
678
- | Key | Action |
679
- |-----|--------|
680
- | ↑/↓ | Navigate through files and directories |
681
- | Enter | Expand/collapse directory or preview file |
682
- | Space | Toggle file/directory selection |
683
- | / | Enter search mode (filters all files including nested) |
684
- | Backspace | Collapse current directory |
685
- | Esc | Exit explorer (selected files are added to input) |
686
-
687
- **Features:**
688
-
689
- - **Tree view**: Browse your project structure with expandable directories
690
- - **File preview**: View file contents with syntax highlighting before selecting
691
- - **Compressed indentation**: Preview displays content with compressed indentation (tabs/4-spaces become 2-spaces) for narrow terminals
692
- - **Multi-select**: Select multiple files to add as context at once
693
- - **Directory selection**: Press Space on a directory to select all files within it
694
- - **Search**: Press `/` to filter files by name across the entire tree
695
- - **Token estimation**: Shows estimated token count for selected files with warning for large selections (10k+ tokens)
696
- - **VS Code integration**: When running with `--vscode`, previewing a file also opens it in VS Code for full-featured viewing
697
-
698
- **Selection indicators:**
699
-
700
- - `✓` - File or directory fully selected
701
- - `◐` - Directory partially selected (some files within)
702
- - `✗` - File not selected (in preview mode)
703
- - `v` / `>` - Directory expanded / collapsed
704
-
705
- **Example workflow:**
706
-
707
- ```bash
708
- # Open the file explorer
709
- /explorer
710
-
711
- # Navigate to src/components, expand it
712
- # Select multiple component files with Space
713
- # Press Esc to add them to your input as @file mentions
714
- ```
715
-
716
- #### Custom Commands
717
-
718
- Nanocoder supports custom commands defined as markdown files in the `.nanocoder/commands` directory. Like `agents.config.json`, this directory is created per codebase, allowing you to create reusable prompts with parameters and organize them by category specific to each project.
719
-
720
- **Example custom command** (`.nanocoder/commands/test.md`):
721
-
722
- ```markdown
723
- ---
724
- description: 'Generate comprehensive unit tests for the specified component'
725
- aliases: ['testing', 'spec']
726
- parameters:
727
- - name: 'component'
728
- description: 'The component or function to test'
729
- required: true
730
- ---
731
-
732
- Generate comprehensive unit tests for {{component}}. Include:
733
-
734
- - Happy path scenarios
735
- - Edge cases and error handling
736
- - Mock dependencies where appropriate
737
- - Clear test descriptions
738
- ```
739
-
740
- **Usage**: `/test component="UserService"`
741
-
742
- **Features**:
743
-
744
- - YAML frontmatter for metadata (description, aliases, parameters)
745
- - Template variable substitution with `{{parameter}}` syntax
746
- - Namespace support through directories (e.g., `/refactor:dry`)
747
- - Autocomplete integration for command discovery
748
- - Parameter validation and prompting
749
-
750
- **Pre-installed Commands**:
751
-
752
- - `/test` - Generate comprehensive unit tests for components
753
- - `/review` - Perform thorough code reviews with suggestions
754
- - `/refactor:dry` - Apply DRY (Don't Repeat Yourself) principle
755
- - `/refactor:solid` - Apply SOLID design principles
756
-
757
- ## Features
758
-
759
- ### Multi-Provider Support
760
-
761
- - **Universal OpenAI compatibility**: Works with any OpenAI-compatible API
762
- - **Local providers**: Ollama, LM Studio, vLLM, LocalAI, llama.cpp
763
- - **Cloud providers**: OpenRouter, OpenAI, and other hosted services
764
- - **Smart fallback**: Automatically switches to available providers if one fails
765
- - **Per-provider preferences**: Remembers your preferred model for each provider
766
- - **Dynamic configuration**: Add any provider with just a name and endpoint
767
-
768
- ### Advanced Tool System
769
-
770
- - **Built-in tools**: File operations, bash command execution
771
- - **MCP (Model Context Protocol) servers**: Extend capabilities with any MCP-compatible tool
772
- - **Dynamic tool loading**: Tools are loaded on-demand from configured MCP servers
773
- - **Tool approval**: Optional confirmation before executing potentially destructive operations
774
-
775
- ### Custom Command System
776
-
777
- - **Markdown-based commands**: Define reusable prompts in `.nanocoder/commands/`
778
- - **Template variables**: Use `{{parameter}}` syntax for dynamic content
779
- - **Namespace organization**: Organize commands in folders (e.g., `refactor/dry.md`)
780
- - **Autocomplete support**: Tab completion for command discovery
781
- - **Rich metadata**: YAML frontmatter for descriptions, aliases, and parameters
782
-
783
- ### Enhanced User Experience
784
-
785
- - **Smart autocomplete**: Tab completion for commands with real-time suggestions
786
- - **Colorized output**: Syntax highlighting and structured display
787
- - **Session persistence**: Maintains context and preferences across sessions
788
- - **Real-time streaming**: Live token-by-token streaming of AI responses
789
- - **Real-time indicators**: Shows token usage, timing, and processing status
790
- - **First-time directory security disclaimer**: Prompts on first run and stores a per-project trust decision to prevent accidental exposure of local code or secrets.
791
- - **Development modes**: Three modes to control tool execution behavior (toggle with Shift+Tab)
792
- - **Normal mode**: Standard tool confirmation flow - review potentially dangerous tool calls before execution
793
- - **Auto-accept mode**: Automatically accepts more tool calls without confirmation for faster workflows
794
- - **Plan mode**: AI suggests actions but doesn't execute tools - useful for planning and exploration
795
-
796
- ### Keyboard Shortcuts
797
-
798
- | Action | Shortcut | Notes |
799
- |--------|----------|-------|
800
- | Submit prompt | Enter | |
801
- | New line (multi-line input) | Ctrl+J | Most reliable across terminals |
802
- | New line (multi-line input) | Shift+Enter | Terminal-dependent |
803
- | New line (multi-line input) | Option/Alt+Enter | VS Code integrated terminal |
804
- | Toggle development mode | Shift+Tab | Cycles through normal/auto-accept/plan |
805
- | Cancel AI response | Esc | While AI is processing |
806
- | Clear input | Esc (twice) | Press Esc twice to clear current input |
807
- | History navigation | ↑/↓ | Navigate through prompt history |
808
-
809
- > **Note on multi-line input**: Terminal support for Shift+Enter / Option/Alt+Enter varies in terminals and operating systems. If one of these shortcuts doesn't work in your terminal, try and use Ctrl+J which sends a literal newline character and works more reliably across platforms and software.
810
-
811
- ### Developer Features
812
-
813
- - **TypeScript-first**: Full type safety and IntelliSense support
814
- - **Extensible architecture**: Plugin-style system for adding new capabilities
815
- - **Project-specific config**: Different settings per project via `agents.config.json`
816
- - **Error resilience**: Graceful handling of provider failures and network issues
817
-
818
- ## VS Code Extension
819
-
820
- Nanocoder includes a VS Code extension that provides live diff previews of file changes directly in your editor. When the AI suggests file modifications, you can see exactly what will change before approving.
821
-
822
- To get started, run Nanocoder with the `--vscode` flag:
823
-
824
- ```bash
825
- nanocoder --vscode
826
- ```
827
-
828
- For full documentation including installation options, configuration, and troubleshooting, see the [VS Code Extension Guide](docs/vscode-extension.md).
47
+ - **[Getting Started](docs/getting-started/index.md)** - Installation, setup, and first steps
48
+ - **[Configuration](docs/configuration/index.md)** - AI providers, MCP servers, preferences, logging, timeouts
49
+ - **[Features](docs/features/index.md)** - Custom commands, checkpointing, development modes, task management, and more
50
+ - **[Commands Reference](docs/commands.md)** - Complete list of built-in slash commands
51
+ - **[Keyboard Shortcuts](docs/keyboard-shortcuts.md)** - Full shortcut reference
52
+ - **[Community](docs/community.md)** - Contributing, Discord, and how to help
829
53
 
830
54
  ## Community
831
55
 
832
- We're a small community-led team building Nanocoder and would love your help! Whether you're interested in contributing code, documentation, or just being part of our community, there are several ways to get involved.
833
-
834
- **If you want to contribute to the code:**
835
-
836
- - Read our detailed [CONTRIBUTING.md](CONTRIBUTING.md) guide for information on development setup, coding standards, and how to submit your changes.
837
-
838
- **If you want to be part of our community or help with other aspects like design or marketing:**
839
-
840
- - Join our Discord server to connect with other users, ask questions, share ideas, and get help: [Join our Discord server](https://discord.gg/ktPDV6rekE)
841
-
842
- - Head to our GitHub issues or discussions to open and join current conversations with others in the community.
843
-
844
- **What does Nanocoder need help with?**
845
-
846
- Nanocoder could benefit from help all across the board. Such as:
847
-
848
- - Adding support for new AI providers
849
- - Improving tool functionality
850
- - Enhancing the user experience
851
- - Writing documentation
852
- - Reporting bugs or suggesting features
853
- - Marketing and getting the word out
854
- - Design and building more great software
56
+ The Nano Collective is a community collective building AI tooling for the community, not for profit. We'd love your help!
855
57
 
856
- All contributions and community participation are welcome!
58
+ - **Contributing**: See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines
59
+ - **Discord**: [Join our server](https://discord.gg/ktPDV6rekE) to connect with other users and contributors
60
+ - **GitHub**: Open issues or join discussions on our repository