@nanocollective/nanocoder 1.11.3

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 (392) hide show
  1. package/LICENSE.md +23 -0
  2. package/README.md +366 -0
  3. package/dist/app/hooks/useAppInitialization.d.ts +26 -0
  4. package/dist/app/hooks/useAppInitialization.d.ts.map +1 -0
  5. package/dist/app/hooks/useAppInitialization.js +151 -0
  6. package/dist/app/hooks/useAppInitialization.js.map +1 -0
  7. package/dist/app/hooks/useAppState.d.ts +84 -0
  8. package/dist/app/hooks/useAppState.d.ts.map +1 -0
  9. package/dist/app/hooks/useAppState.js +162 -0
  10. package/dist/app/hooks/useAppState.js.map +1 -0
  11. package/dist/app/hooks/useChatHandler.d.ts +26 -0
  12. package/dist/app/hooks/useChatHandler.d.ts.map +1 -0
  13. package/dist/app/hooks/useChatHandler.js +532 -0
  14. package/dist/app/hooks/useChatHandler.js.map +1 -0
  15. package/dist/app/hooks/useDirectoryTrust.d.ts +15 -0
  16. package/dist/app/hooks/useDirectoryTrust.d.ts.map +1 -0
  17. package/dist/app/hooks/useDirectoryTrust.js +77 -0
  18. package/dist/app/hooks/useDirectoryTrust.js.map +1 -0
  19. package/dist/app/hooks/useModeHandlers.d.ts +31 -0
  20. package/dist/app/hooks/useModeHandlers.d.ts.map +1 -0
  21. package/dist/app/hooks/useModeHandlers.js +98 -0
  22. package/dist/app/hooks/useModeHandlers.js.map +1 -0
  23. package/dist/app/hooks/useToolHandler.d.ts +32 -0
  24. package/dist/app/hooks/useToolHandler.d.ts.map +1 -0
  25. package/dist/app/hooks/useToolHandler.js +154 -0
  26. package/dist/app/hooks/useToolHandler.js.map +1 -0
  27. package/dist/app/utils/appUtils.d.ts +4 -0
  28. package/dist/app/utils/appUtils.d.ts.map +1 -0
  29. package/dist/app/utils/appUtils.js +147 -0
  30. package/dist/app/utils/appUtils.js.map +1 -0
  31. package/dist/app/utils/conversationState.d.ts +68 -0
  32. package/dist/app/utils/conversationState.d.ts.map +1 -0
  33. package/dist/app/utils/conversationState.js +199 -0
  34. package/dist/app/utils/conversationState.js.map +1 -0
  35. package/dist/app.d.ts +2 -0
  36. package/dist/app.d.ts.map +1 -0
  37. package/dist/app.js +193 -0
  38. package/dist/app.js.map +1 -0
  39. package/dist/cli.d.ts +3 -0
  40. package/dist/cli.d.ts.map +1 -0
  41. package/dist/cli.js +6 -0
  42. package/dist/cli.js.map +1 -0
  43. package/dist/client-factory.d.ts +6 -0
  44. package/dist/client-factory.d.ts.map +1 -0
  45. package/dist/client-factory.js +111 -0
  46. package/dist/client-factory.js.map +1 -0
  47. package/dist/command-parser.d.ts +5 -0
  48. package/dist/command-parser.d.ts.map +1 -0
  49. package/dist/command-parser.js +36 -0
  50. package/dist/command-parser.js.map +1 -0
  51. package/dist/commands/clear.d.ts +3 -0
  52. package/dist/commands/clear.d.ts.map +1 -0
  53. package/dist/commands/clear.js +17 -0
  54. package/dist/commands/clear.js.map +1 -0
  55. package/dist/commands/custom-commands.d.ts +3 -0
  56. package/dist/commands/custom-commands.d.ts.map +1 -0
  57. package/dist/commands/custom-commands.js +41 -0
  58. package/dist/commands/custom-commands.js.map +1 -0
  59. package/dist/commands/debug.d.ts +3 -0
  60. package/dist/commands/debug.d.ts.map +1 -0
  61. package/dist/commands/debug.js +86 -0
  62. package/dist/commands/debug.js.map +1 -0
  63. package/dist/commands/exit.d.ts +3 -0
  64. package/dist/commands/exit.d.ts.map +1 -0
  65. package/dist/commands/exit.js +17 -0
  66. package/dist/commands/exit.js.map +1 -0
  67. package/dist/commands/export.d.ts +3 -0
  68. package/dist/commands/export.d.ts.map +1 -0
  69. package/dist/commands/export.js +63 -0
  70. package/dist/commands/export.js.map +1 -0
  71. package/dist/commands/help.d.ts +3 -0
  72. package/dist/commands/help.d.ts.map +1 -0
  73. package/dist/commands/help.js +31 -0
  74. package/dist/commands/help.js.map +1 -0
  75. package/dist/commands/index.d.ts +13 -0
  76. package/dist/commands/index.d.ts.map +1 -0
  77. package/dist/commands/index.js +13 -0
  78. package/dist/commands/index.js.map +1 -0
  79. package/dist/commands/init.d.ts +3 -0
  80. package/dist/commands/init.d.ts.map +1 -0
  81. package/dist/commands/init.js +214 -0
  82. package/dist/commands/init.js.map +1 -0
  83. package/dist/commands/mcp.d.ts +9 -0
  84. package/dist/commands/mcp.d.ts.map +1 -0
  85. package/dist/commands/mcp.js +41 -0
  86. package/dist/commands/mcp.js.map +1 -0
  87. package/dist/commands/model.d.ts +3 -0
  88. package/dist/commands/model.d.ts.map +1 -0
  89. package/dist/commands/model.js +11 -0
  90. package/dist/commands/model.js.map +1 -0
  91. package/dist/commands/provider.d.ts +3 -0
  92. package/dist/commands/provider.d.ts.map +1 -0
  93. package/dist/commands/provider.js +11 -0
  94. package/dist/commands/provider.js.map +1 -0
  95. package/dist/commands/theme.d.ts +3 -0
  96. package/dist/commands/theme.d.ts.map +1 -0
  97. package/dist/commands/theme.js +11 -0
  98. package/dist/commands/theme.js.map +1 -0
  99. package/dist/commands/update.d.ts +3 -0
  100. package/dist/commands/update.d.ts.map +1 -0
  101. package/dist/commands/update.js +10 -0
  102. package/dist/commands/update.js.map +1 -0
  103. package/dist/commands.d.ts +16 -0
  104. package/dist/commands.d.ts.map +1 -0
  105. package/dist/commands.js +46 -0
  106. package/dist/commands.js.map +1 -0
  107. package/dist/components/assistant-message.d.ts +4 -0
  108. package/dist/components/assistant-message.d.ts.map +1 -0
  109. package/dist/components/assistant-message.js +43 -0
  110. package/dist/components/assistant-message.js.map +1 -0
  111. package/dist/components/bash-execution-indicator.d.ts +4 -0
  112. package/dist/components/bash-execution-indicator.d.ts.map +1 -0
  113. package/dist/components/bash-execution-indicator.js +9 -0
  114. package/dist/components/bash-execution-indicator.js.map +1 -0
  115. package/dist/components/cancelling-indicator.d.ts +3 -0
  116. package/dist/components/cancelling-indicator.d.ts.map +1 -0
  117. package/dist/components/cancelling-indicator.js +10 -0
  118. package/dist/components/cancelling-indicator.js.map +1 -0
  119. package/dist/components/chat-queue.d.ts +4 -0
  120. package/dist/components/chat-queue.d.ts.map +1 -0
  121. package/dist/components/chat-queue.js +23 -0
  122. package/dist/components/chat-queue.js.map +1 -0
  123. package/dist/components/custom-commands.d.ts +7 -0
  124. package/dist/components/custom-commands.d.ts.map +1 -0
  125. package/dist/components/custom-commands.js +27 -0
  126. package/dist/components/custom-commands.js.map +1 -0
  127. package/dist/components/error-message.d.ts +7 -0
  128. package/dist/components/error-message.d.ts.map +1 -0
  129. package/dist/components/error-message.js +12 -0
  130. package/dist/components/error-message.js.map +1 -0
  131. package/dist/components/info-message.d.ts +6 -0
  132. package/dist/components/info-message.d.ts.map +1 -0
  133. package/dist/components/info-message.js +11 -0
  134. package/dist/components/info-message.js.map +1 -0
  135. package/dist/components/model-selector.d.ts +10 -0
  136. package/dist/components/model-selector.d.ts.map +1 -0
  137. package/dist/components/model-selector.js +59 -0
  138. package/dist/components/model-selector.js.map +1 -0
  139. package/dist/components/provider-selector.d.ts +9 -0
  140. package/dist/components/provider-selector.d.ts.map +1 -0
  141. package/dist/components/provider-selector.js +36 -0
  142. package/dist/components/provider-selector.js.map +1 -0
  143. package/dist/components/security-disclaimer.d.ts +7 -0
  144. package/dist/components/security-disclaimer.d.ts.map +1 -0
  145. package/dist/components/security-disclaimer.js +36 -0
  146. package/dist/components/security-disclaimer.js.map +1 -0
  147. package/dist/components/status.d.ts +6 -0
  148. package/dist/components/status.d.ts.map +1 -0
  149. package/dist/components/status.js +35 -0
  150. package/dist/components/status.js.map +1 -0
  151. package/dist/components/success-message.d.ts +6 -0
  152. package/dist/components/success-message.d.ts.map +1 -0
  153. package/dist/components/success-message.js +11 -0
  154. package/dist/components/success-message.js.map +1 -0
  155. package/dist/components/theme-selector.d.ts +8 -0
  156. package/dist/components/theme-selector.d.ts.map +1 -0
  157. package/dist/components/theme-selector.js +40 -0
  158. package/dist/components/theme-selector.js.map +1 -0
  159. package/dist/components/thinking-indicator.d.ts +4 -0
  160. package/dist/components/thinking-indicator.d.ts.map +1 -0
  161. package/dist/components/thinking-indicator.js +32 -0
  162. package/dist/components/thinking-indicator.js.map +1 -0
  163. package/dist/components/tool-confirmation.d.ts +9 -0
  164. package/dist/components/tool-confirmation.d.ts.map +1 -0
  165. package/dist/components/tool-confirmation.js +72 -0
  166. package/dist/components/tool-confirmation.js.map +1 -0
  167. package/dist/components/tool-execution-indicator.d.ts +3 -0
  168. package/dist/components/tool-execution-indicator.d.ts.map +1 -0
  169. package/dist/components/tool-execution-indicator.js +9 -0
  170. package/dist/components/tool-execution-indicator.js.map +1 -0
  171. package/dist/components/tool-message.d.ts +10 -0
  172. package/dist/components/tool-message.d.ts.map +1 -0
  173. package/dist/components/tool-message.js +16 -0
  174. package/dist/components/tool-message.js.map +1 -0
  175. package/dist/components/update-message.d.ts +7 -0
  176. package/dist/components/update-message.d.ts.map +1 -0
  177. package/dist/components/update-message.js +93 -0
  178. package/dist/components/update-message.js.map +1 -0
  179. package/dist/components/user-input.d.ts +10 -0
  180. package/dist/components/user-input.d.ts.map +1 -0
  181. package/dist/components/user-input.js +188 -0
  182. package/dist/components/user-input.js.map +1 -0
  183. package/dist/components/user-message.d.ts +4 -0
  184. package/dist/components/user-message.d.ts.map +1 -0
  185. package/dist/components/user-message.js +15 -0
  186. package/dist/components/user-message.js.map +1 -0
  187. package/dist/components/welcome-message.d.ts +3 -0
  188. package/dist/components/welcome-message.d.ts.map +1 -0
  189. package/dist/components/welcome-message.js +21 -0
  190. package/dist/components/welcome-message.js.map +1 -0
  191. package/dist/config/index.d.ts +10 -0
  192. package/dist/config/index.d.ts.map +1 -0
  193. package/dist/config/index.js +44 -0
  194. package/dist/config/index.js.map +1 -0
  195. package/dist/config/logging.d.ts +14 -0
  196. package/dist/config/logging.d.ts.map +1 -0
  197. package/dist/config/logging.js +58 -0
  198. package/dist/config/logging.js.map +1 -0
  199. package/dist/config/preferences.d.ts +7 -0
  200. package/dist/config/preferences.d.ts.map +1 -0
  201. package/dist/config/preferences.js +46 -0
  202. package/dist/config/preferences.js.map +1 -0
  203. package/dist/config/themes.d.ts +6 -0
  204. package/dist/config/themes.d.ts.map +1 -0
  205. package/dist/config/themes.js +295 -0
  206. package/dist/config/themes.js.map +1 -0
  207. package/dist/custom-commands/executor.d.ts +12 -0
  208. package/dist/custom-commands/executor.d.ts.map +1 -0
  209. package/dist/custom-commands/executor.js +45 -0
  210. package/dist/custom-commands/executor.js.map +1 -0
  211. package/dist/custom-commands/index.d.ts +4 -0
  212. package/dist/custom-commands/index.d.ts.map +1 -0
  213. package/dist/custom-commands/index.js +4 -0
  214. package/dist/custom-commands/index.js.map +1 -0
  215. package/dist/custom-commands/loader.d.ts +41 -0
  216. package/dist/custom-commands/loader.d.ts.map +1 -0
  217. package/dist/custom-commands/loader.js +129 -0
  218. package/dist/custom-commands/loader.js.map +1 -0
  219. package/dist/custom-commands/parser.d.ts +10 -0
  220. package/dist/custom-commands/parser.d.ts.map +1 -0
  221. package/dist/custom-commands/parser.js +181 -0
  222. package/dist/custom-commands/parser.js.map +1 -0
  223. package/dist/hooks/useInputState.d.ts +14 -0
  224. package/dist/hooks/useInputState.d.ts.map +1 -0
  225. package/dist/hooks/useInputState.js +66 -0
  226. package/dist/hooks/useInputState.js.map +1 -0
  227. package/dist/hooks/useTerminalWidth.d.ts +2 -0
  228. package/dist/hooks/useTerminalWidth.d.ts.map +1 -0
  229. package/dist/hooks/useTerminalWidth.js +20 -0
  230. package/dist/hooks/useTerminalWidth.js.map +1 -0
  231. package/dist/hooks/useTheme.d.ts +9 -0
  232. package/dist/hooks/useTheme.d.ts.map +1 -0
  233. package/dist/hooks/useTheme.js +10 -0
  234. package/dist/hooks/useTheme.js.map +1 -0
  235. package/dist/hooks/useUIState.d.ts +19 -0
  236. package/dist/hooks/useUIState.d.ts.map +1 -0
  237. package/dist/hooks/useUIState.js +46 -0
  238. package/dist/hooks/useUIState.js.map +1 -0
  239. package/dist/init/agents-template-generator.d.ts +29 -0
  240. package/dist/init/agents-template-generator.d.ts.map +1 -0
  241. package/dist/init/agents-template-generator.js +340 -0
  242. package/dist/init/agents-template-generator.js.map +1 -0
  243. package/dist/init/existing-rules-extractor.d.ts +43 -0
  244. package/dist/init/existing-rules-extractor.d.ts.map +1 -0
  245. package/dist/init/existing-rules-extractor.js +226 -0
  246. package/dist/init/existing-rules-extractor.js.map +1 -0
  247. package/dist/init/file-scanner.d.ts +40 -0
  248. package/dist/init/file-scanner.d.ts.map +1 -0
  249. package/dist/init/file-scanner.js +153 -0
  250. package/dist/init/file-scanner.js.map +1 -0
  251. package/dist/init/framework-detector.d.ts +57 -0
  252. package/dist/init/framework-detector.d.ts.map +1 -0
  253. package/dist/init/framework-detector.js +277 -0
  254. package/dist/init/framework-detector.js.map +1 -0
  255. package/dist/init/language-detector.d.ts +31 -0
  256. package/dist/init/language-detector.d.ts.map +1 -0
  257. package/dist/init/language-detector.js +205 -0
  258. package/dist/init/language-detector.js.map +1 -0
  259. package/dist/init/project-analyzer.d.ts +62 -0
  260. package/dist/init/project-analyzer.d.ts.map +1 -0
  261. package/dist/init/project-analyzer.js +294 -0
  262. package/dist/init/project-analyzer.js.map +1 -0
  263. package/dist/langgraph-client.d.ts +20 -0
  264. package/dist/langgraph-client.d.ts.map +1 -0
  265. package/dist/langgraph-client.js +245 -0
  266. package/dist/langgraph-client.js.map +1 -0
  267. package/dist/mcp/mcp-client.d.ts +23 -0
  268. package/dist/mcp/mcp-client.d.ts.map +1 -0
  269. package/dist/mcp/mcp-client.js +194 -0
  270. package/dist/mcp/mcp-client.js.map +1 -0
  271. package/dist/mcp/mcp-tool-adapter.d.ts +22 -0
  272. package/dist/mcp/mcp-tool-adapter.d.ts.map +1 -0
  273. package/dist/mcp/mcp-tool-adapter.js +49 -0
  274. package/dist/mcp/mcp-tool-adapter.js.map +1 -0
  275. package/dist/message-handler.d.ts +7 -0
  276. package/dist/message-handler.d.ts.map +1 -0
  277. package/dist/message-handler.js +53 -0
  278. package/dist/message-handler.js.map +1 -0
  279. package/dist/prompt-history.d.ts +14 -0
  280. package/dist/prompt-history.d.ts.map +1 -0
  281. package/dist/prompt-history.js +88 -0
  282. package/dist/prompt-history.js.map +1 -0
  283. package/dist/tool-calling/index.d.ts +6 -0
  284. package/dist/tool-calling/index.d.ts.map +1 -0
  285. package/dist/tool-calling/index.js +5 -0
  286. package/dist/tool-calling/index.js.map +1 -0
  287. package/dist/tool-calling/json-parser.d.ts +7 -0
  288. package/dist/tool-calling/json-parser.d.ts.map +1 -0
  289. package/dist/tool-calling/json-parser.js +168 -0
  290. package/dist/tool-calling/json-parser.js.map +1 -0
  291. package/dist/tool-calling/xml-parser.d.ts +34 -0
  292. package/dist/tool-calling/xml-parser.d.ts.map +1 -0
  293. package/dist/tool-calling/xml-parser.js +113 -0
  294. package/dist/tool-calling/xml-parser.js.map +1 -0
  295. package/dist/tools/create-file.d.ts +3 -0
  296. package/dist/tools/create-file.d.ts.map +1 -0
  297. package/dist/tools/create-file.js +66 -0
  298. package/dist/tools/create-file.js.map +1 -0
  299. package/dist/tools/delete-lines.d.ts +3 -0
  300. package/dist/tools/delete-lines.d.ts.map +1 -0
  301. package/dist/tools/delete-lines.js +218 -0
  302. package/dist/tools/delete-lines.js.map +1 -0
  303. package/dist/tools/execute-bash.d.ts +3 -0
  304. package/dist/tools/execute-bash.d.ts.map +1 -0
  305. package/dist/tools/execute-bash.js +107 -0
  306. package/dist/tools/execute-bash.js.map +1 -0
  307. package/dist/tools/index.d.ts +7 -0
  308. package/dist/tools/index.d.ts.map +1 -0
  309. package/dist/tools/index.js +23 -0
  310. package/dist/tools/index.js.map +1 -0
  311. package/dist/tools/insert-lines.d.ts +3 -0
  312. package/dist/tools/insert-lines.d.ts.map +1 -0
  313. package/dist/tools/insert-lines.js +185 -0
  314. package/dist/tools/insert-lines.js.map +1 -0
  315. package/dist/tools/read-file.d.ts +3 -0
  316. package/dist/tools/read-file.d.ts.map +1 -0
  317. package/dist/tools/read-file.js +81 -0
  318. package/dist/tools/read-file.js.map +1 -0
  319. package/dist/tools/read-many-files.d.ts +3 -0
  320. package/dist/tools/read-many-files.d.ts.map +1 -0
  321. package/dist/tools/read-many-files.js +109 -0
  322. package/dist/tools/read-many-files.js.map +1 -0
  323. package/dist/tools/replace-lines.d.ts +3 -0
  324. package/dist/tools/replace-lines.d.ts.map +1 -0
  325. package/dist/tools/replace-lines.js +220 -0
  326. package/dist/tools/replace-lines.js.map +1 -0
  327. package/dist/tools/tool-manager.d.ts +54 -0
  328. package/dist/tools/tool-manager.d.ts.map +1 -0
  329. package/dist/tools/tool-manager.js +108 -0
  330. package/dist/tools/tool-manager.js.map +1 -0
  331. package/dist/types/app.d.ts +46 -0
  332. package/dist/types/app.d.ts.map +1 -0
  333. package/dist/types/app.js +2 -0
  334. package/dist/types/app.js.map +1 -0
  335. package/dist/types/commands.d.ts +36 -0
  336. package/dist/types/commands.d.ts.map +1 -0
  337. package/dist/types/commands.js +2 -0
  338. package/dist/types/commands.js.map +1 -0
  339. package/dist/types/components.d.ts +87 -0
  340. package/dist/types/components.d.ts.map +1 -0
  341. package/dist/types/components.js +2 -0
  342. package/dist/types/components.js.map +1 -0
  343. package/dist/types/config.d.ts +35 -0
  344. package/dist/types/config.d.ts.map +1 -0
  345. package/dist/types/config.js +2 -0
  346. package/dist/types/config.js.map +1 -0
  347. package/dist/types/core.d.ts +57 -0
  348. package/dist/types/core.d.ts.map +1 -0
  349. package/dist/types/core.js +2 -0
  350. package/dist/types/core.js.map +1 -0
  351. package/dist/types/hooks.d.ts +26 -0
  352. package/dist/types/hooks.d.ts.map +1 -0
  353. package/dist/types/hooks.js +2 -0
  354. package/dist/types/hooks.js.map +1 -0
  355. package/dist/types/index.d.ts +11 -0
  356. package/dist/types/index.d.ts.map +1 -0
  357. package/dist/types/index.js +12 -0
  358. package/dist/types/index.js.map +1 -0
  359. package/dist/types/mcp.d.ts +19 -0
  360. package/dist/types/mcp.d.ts.map +1 -0
  361. package/dist/types/mcp.js +2 -0
  362. package/dist/types/mcp.js.map +1 -0
  363. package/dist/types/tools.d.ts +31 -0
  364. package/dist/types/tools.d.ts.map +1 -0
  365. package/dist/types/tools.js +2 -0
  366. package/dist/types/tools.js.map +1 -0
  367. package/dist/types/ui.d.ts +22 -0
  368. package/dist/types/ui.d.ts.map +1 -0
  369. package/dist/types/ui.js +2 -0
  370. package/dist/types/ui.js.map +1 -0
  371. package/dist/types/utils.d.ts +19 -0
  372. package/dist/types/utils.d.ts.map +1 -0
  373. package/dist/types/utils.js +2 -0
  374. package/dist/types/utils.js.map +1 -0
  375. package/dist/utils/message-queue.d.ts +8 -0
  376. package/dist/utils/message-queue.d.ts.map +1 -0
  377. package/dist/utils/message-queue.js +50 -0
  378. package/dist/utils/message-queue.js.map +1 -0
  379. package/dist/utils/programming-language-helper.d.ts +2 -0
  380. package/dist/utils/programming-language-helper.d.ts.map +1 -0
  381. package/dist/utils/programming-language-helper.js +32 -0
  382. package/dist/utils/programming-language-helper.js.map +1 -0
  383. package/dist/utils/prompt-processor.d.ts +6 -0
  384. package/dist/utils/prompt-processor.d.ts.map +1 -0
  385. package/dist/utils/prompt-processor.js +103 -0
  386. package/dist/utils/prompt-processor.js.map +1 -0
  387. package/dist/utils/update-checker.d.ts +6 -0
  388. package/dist/utils/update-checker.d.ts.map +1 -0
  389. package/dist/utils/update-checker.js +120 -0
  390. package/dist/utils/update-checker.js.map +1 -0
  391. package/package.json +97 -0
  392. package/source/app/prompts/main-prompt.md +107 -0
@@ -0,0 +1,214 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { TitledBox, titleStyles } from '@mishieck/ink-titled-box';
4
+ import { Box, Text } from 'ink';
5
+ import { colors } from '../config/index.js';
6
+ import { useTerminalWidth } from '../hooks/useTerminalWidth.js';
7
+ import ErrorMessage from '../components/error-message.js';
8
+ import { existsSync, mkdirSync, writeFileSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { ProjectAnalyzer } from '../init/project-analyzer.js';
11
+ import { AgentsTemplateGenerator } from '../init/agents-template-generator.js';
12
+ import { ExistingRulesExtractor } from '../init/existing-rules-extractor.js';
13
+ function InitSuccess({ created, analysis, }) {
14
+ const boxWidth = useTerminalWidth();
15
+ return (_jsxs(TitledBox, { borderStyle: "round", titles: ['Project Initialized'], titleStyles: titleStyles.pill, width: boxWidth, borderColor: colors.primary, paddingX: 2, paddingY: 1, flexDirection: "column", marginBottom: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.primary, bold: true, children: "\u2713 Nanocoder project initialized successfully!" }) }), analysis && (_jsxs(_Fragment, { children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.white, bold: true, children: "Project Analysis:" }) }), _jsxs(Text, { color: colors.secondary, children: ["\u2022 Type: ", analysis.projectType] }), _jsxs(Text, { color: colors.secondary, children: ["\u2022 Primary Language: ", analysis.primaryLanguage] }), analysis.frameworks.length > 0 && (_jsxs(Text, { color: colors.secondary, children: ["\u2022 Frameworks: ", analysis.frameworks.slice(0, 3).join(', ')] })), _jsxs(Text, { color: colors.secondary, children: ["\u2022 Files Analyzed: ", analysis.totalFiles] }), _jsx(Box, { marginBottom: 1 })] })), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.white, bold: true, children: "Files Created:" }) }), created.map((item, index) => (_jsxs(Text, { color: colors.secondary, children: ["\u2022 ", item] }, index))), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: colors.white, children: "Your project is now ready for AI-assisted development!" }), _jsx(Text, { color: colors.secondary, children: "The AGENTS.md file will help AI understand your project context." })] })] }));
16
+ }
17
+ function InitError({ message }) {
18
+ return _jsx(ErrorMessage, { message: `✗ ${message}` });
19
+ }
20
+ const DEFAULT_CONFIG = {
21
+ nanocoder: {
22
+ providers: [
23
+ {
24
+ name: 'OpenRouter',
25
+ baseUrl: 'https://openrouter.ai/api/v1',
26
+ apiKey: 'your-openrouter-api-key-here',
27
+ models: ['openai/gpt-4o-mini', 'anthropic/claude-3-haiku'],
28
+ },
29
+ {
30
+ name: 'Local Ollama',
31
+ baseUrl: 'http://localhost:11434/v1',
32
+ models: ['llama3.2', 'qwen2.5-coder'],
33
+ },
34
+ ],
35
+ mcpServers: [],
36
+ },
37
+ };
38
+ // Enhanced example commands based on detected project type
39
+ const getExampleCommands = (projectType, primaryLanguage) => {
40
+ const baseCommands = {
41
+ 'review.md': `---
42
+ description: Review code and suggest improvements
43
+ aliases: [code-review, cr]
44
+ parameters: [files]
45
+ ---
46
+
47
+ Review the code in {{files}} and provide detailed feedback on:
48
+
49
+ 1. Code quality and best practices
50
+ 2. Potential bugs or issues
51
+ 3. Performance considerations
52
+ 4. Readability and maintainability
53
+ 5. Security concerns
54
+
55
+ Provide specific, actionable suggestions for improvement.`,
56
+ 'test.md': `---
57
+ description: Generate comprehensive unit tests
58
+ aliases: [unittest, test-gen]
59
+ parameters: [filename]
60
+ ---
61
+
62
+ Generate comprehensive unit tests for {{filename}}.
63
+
64
+ Consider:
65
+ 1. Test all public functions and methods
66
+ 2. Include edge cases and error scenarios
67
+ 3. Use appropriate mocking where needed
68
+ 4. Follow existing test framework conventions
69
+ 5. Ensure good test coverage
70
+
71
+ If no filename provided, suggest which files need tests.`,
72
+ };
73
+ // Add language/framework-specific commands
74
+ const additionalCommands = {};
75
+ if (primaryLanguage === 'JavaScript' || primaryLanguage === 'TypeScript') {
76
+ additionalCommands['refactor.md'] = `---
77
+ description: Refactor JavaScript/TypeScript code
78
+ aliases: [refactor-js, clean]
79
+ parameters: [target]
80
+ ---
81
+
82
+ Refactor {{target}} to improve:
83
+
84
+ 1. Code structure and organization
85
+ 2. Modern ES6+ syntax usage
86
+ 3. Performance optimizations
87
+ 4. Type safety (for TypeScript)
88
+ 5. Reusability and maintainability
89
+
90
+ Follow current project conventions and patterns.`;
91
+ }
92
+ if (primaryLanguage === 'Python') {
93
+ additionalCommands['optimize.md'] = `---
94
+ description: Optimize Python code for performance
95
+ aliases: [perf, optimize-py]
96
+ parameters: [file]
97
+ ---
98
+
99
+ Analyze and optimize {{file}} for:
100
+
101
+ 1. Algorithm efficiency
102
+ 2. Memory usage
103
+ 3. Pythonic patterns
104
+ 4. Performance bottlenecks
105
+ 5. Code readability
106
+
107
+ Follow PEP 8 and project conventions.`;
108
+ }
109
+ if (projectType.includes('Web')) {
110
+ additionalCommands['component.md'] = `---
111
+ description: Create a new UI component
112
+ aliases: [comp, ui]
113
+ parameters: [name, type]
114
+ ---
115
+
116
+ Create a new {{type}} component named {{name}} that:
117
+
118
+ 1. Follows project component patterns
119
+ 2. Includes proper TypeScript types
120
+ 3. Has responsive design considerations
121
+ 4. Includes basic styling structure
122
+ 5. Has proper prop validation
123
+
124
+ Make it reusable and well-documented.`;
125
+ }
126
+ return { ...baseCommands, ...additionalCommands };
127
+ };
128
+ export const initCommand = {
129
+ name: 'init',
130
+ description: 'Initialize nanocoder configuration and analyze project structure',
131
+ handler: async (_args, _messages, _metadata) => {
132
+ const cwd = process.cwd();
133
+ const created = [];
134
+ try {
135
+ // Check if already initialized
136
+ const configPath = join(cwd, 'agents.config.json');
137
+ const agentsPath = join(cwd, 'AGENTS.md');
138
+ const nanocoderDir = join(cwd, '.nanocoder');
139
+ // Check for existing initialization
140
+ const hasConfig = existsSync(configPath);
141
+ const hasAgents = existsSync(agentsPath);
142
+ const hasNanocoder = existsSync(nanocoderDir);
143
+ if (hasConfig && hasAgents && hasNanocoder) {
144
+ return React.createElement(InitError, {
145
+ key: `init-error-${Date.now()}`,
146
+ message: 'Project already fully initialized. Found agents.config.json, AGENTS.md, and .nanocoder/ directory.',
147
+ });
148
+ }
149
+ // Show progress indicator for analysis
150
+ // Note: In a real implementation, we'd want to show this as a loading state
151
+ // For now, we'll do the analysis synchronously
152
+ // Analyze the project
153
+ const analyzer = new ProjectAnalyzer(cwd);
154
+ const analysis = analyzer.analyze();
155
+ // Extract existing AI configuration files
156
+ const rulesExtractor = new ExistingRulesExtractor(cwd);
157
+ const existingRules = rulesExtractor.extractExistingRules();
158
+ // Create agents.config.json if it doesn't exist
159
+ if (!hasConfig) {
160
+ writeFileSync(configPath, JSON.stringify(DEFAULT_CONFIG, null, 2));
161
+ created.push('agents.config.json');
162
+ }
163
+ // Create AGENTS.md based on analysis and existing rules
164
+ if (!hasAgents) {
165
+ const agentsContent = AgentsTemplateGenerator.generateAgentsMd(analysis, existingRules);
166
+ writeFileSync(agentsPath, agentsContent);
167
+ created.push('AGENTS.md');
168
+ // Report found existing rules
169
+ if (existingRules.length > 0) {
170
+ const sourceFiles = existingRules.map(r => r.source).join(', ');
171
+ created.push(`↳ Merged content from: ${sourceFiles}`);
172
+ }
173
+ }
174
+ // Create .nanocoder directory structure
175
+ if (!hasNanocoder) {
176
+ mkdirSync(nanocoderDir, { recursive: true });
177
+ created.push('.nanocoder/');
178
+ }
179
+ const commandsDir = join(nanocoderDir, 'commands');
180
+ if (!existsSync(commandsDir)) {
181
+ mkdirSync(commandsDir, { recursive: true });
182
+ created.push('.nanocoder/commands/');
183
+ }
184
+ // Create example custom commands based on project analysis
185
+ const exampleCommands = getExampleCommands(analysis.projectType, analysis.languages.primary?.name || 'Unknown');
186
+ for (const [filename, content] of Object.entries(exampleCommands)) {
187
+ const filePath = join(commandsDir, filename);
188
+ if (!existsSync(filePath)) {
189
+ writeFileSync(filePath, content);
190
+ created.push(`.nanocoder/commands/${filename}`);
191
+ }
192
+ }
193
+ // Prepare analysis summary for display
194
+ const analysisSummary = {
195
+ projectType: analysis.projectType,
196
+ primaryLanguage: analysis.languages.primary?.name || 'Unknown',
197
+ frameworks: analysis.dependencies.frameworks.map(f => f.name),
198
+ totalFiles: analysis.structure.scannedFiles,
199
+ };
200
+ return React.createElement(InitSuccess, {
201
+ key: `init-success-${Date.now()}`,
202
+ created,
203
+ analysis: analysisSummary,
204
+ });
205
+ }
206
+ catch (error) {
207
+ return React.createElement(InitError, {
208
+ key: `init-error-${Date.now()}`,
209
+ message: `Failed to initialize project: ${error.message}`,
210
+ });
211
+ }
212
+ },
213
+ };
214
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../source/commands/init.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Command } from '../types/index.js';
2
+ import { ToolManager } from '../tools/tool-manager.js';
3
+ interface MCPProps {
4
+ toolManager: ToolManager | null;
5
+ }
6
+ export declare function MCP({ toolManager }: MCPProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare const mcpCommand: Command;
8
+ export {};
9
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../source/commands/mcp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAQrD,UAAU,QAAQ;IACjB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC;AAED,wBAAgB,GAAG,CAAC,EAAC,WAAW,EAAC,EAAE,QAAQ,2CAiF1C;AAED,eAAO,MAAM,UAAU,EAAE,OAWxB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { getToolManager } from '../message-handler.js';
3
+ import React from 'react';
4
+ import { TitledBox, titleStyles } from '@mishieck/ink-titled-box';
5
+ import { Box, Text } from 'ink';
6
+ import { useTerminalWidth } from '../hooks/useTerminalWidth.js';
7
+ import { useTheme } from '../hooks/useTheme.js';
8
+ export function MCP({ toolManager }) {
9
+ const boxWidth = useTerminalWidth();
10
+ const { colors } = useTheme();
11
+ const connectedServers = toolManager?.getConnectedServers() || [];
12
+ return (_jsx(TitledBox, { borderStyle: "round", titles: ['/mcp'], titleStyles: titleStyles.pill, width: boxWidth, borderColor: colors.primary, paddingX: 2, paddingY: 1, flexDirection: "column", marginBottom: 1, children: connectedServers.length === 0 ? (_jsxs(_Fragment, { children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.white, bold: true, children: "No MCP servers connected" }) }), _jsxs(Text, { color: colors.white, children: ["To connect MCP servers, add them to your", ' ', _jsx(Text, { color: colors.primary, children: "agents.config.json" }), " file:"] }), _jsx(Box, { marginTop: 1, marginBottom: 1, children: _jsx(Text, { color: colors.secondary, children: `{
13
+ "nanocoder": {
14
+ "mcpServers": [
15
+ {
16
+ "name": "example-server",
17
+ "command": "node",
18
+ "args": ["path/to/server.js"],
19
+ "env": {
20
+ "API_KEY": "your-key"
21
+ }
22
+ }
23
+ ]
24
+ }
25
+ }` }) })] })) : (_jsxs(_Fragment, { children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: colors.primary, children: ["Connected MCP Servers (", connectedServers.length, "):"] }) }), connectedServers.map((serverName, index) => {
26
+ const serverTools = toolManager?.getServerTools(serverName) || [];
27
+ return (_jsx(Box, { marginBottom: 1, children: _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: colors.white, children: ["\u2022 ", _jsx(Text, { color: colors.primary, children: serverName }), ":", ' ', serverTools.length, " tool", serverTools.length !== 1 ? 's' : ''] }), serverTools.length > 0 && (_jsxs(Text, { color: colors.secondary, children: ["Tools: ", serverTools.map((t) => t.name).join(', ')] }))] }) }, index));
28
+ })] })) }, colors.primary));
29
+ }
30
+ export const mcpCommand = {
31
+ name: 'mcp',
32
+ description: 'Show connected MCP servers and their tools',
33
+ handler: async (_args, _messages, _metadata) => {
34
+ const toolManager = getToolManager();
35
+ return React.createElement(MCP, {
36
+ key: `mcp-${Date.now()}`,
37
+ toolManager: toolManager,
38
+ });
39
+ },
40
+ };
41
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../source/commands/mcp.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from '../types/index.js';
2
+ export declare const modelCommand: Command;
3
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../source/commands/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAE1C,eAAO,MAAM,YAAY,EAAE,OAQ1B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export const modelCommand = {
3
+ name: 'model',
4
+ description: 'Select a model for the current provider',
5
+ handler: async (_args, _messages, _metadata) => {
6
+ // This command is handled specially in app.tsx
7
+ // This handler exists only for registration purposes
8
+ return React.createElement(React.Fragment);
9
+ },
10
+ };
11
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../source/commands/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,YAAY,GAAY;IACpC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,yCAAyC;IACtD,OAAO,EAAE,KAAK,EAAE,KAAe,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QACxD,+CAA+C;QAC/C,qDAAqD;QACrD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;CACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from '../types/index.js';
2
+ export declare const providerCommand: Command;
3
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../source/commands/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAE1C,eAAO,MAAM,eAAe,EAAE,OAQ7B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export const providerCommand = {
3
+ name: 'provider',
4
+ description: 'Switch between AI providers',
5
+ handler: async (_args, _messages, _metadata) => {
6
+ // This command is handled specially in app.tsx
7
+ // This handler exists only for registration purposes
8
+ return React.createElement(React.Fragment);
9
+ },
10
+ };
11
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../source/commands/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,eAAe,GAAY;IACvC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,6BAA6B;IAC1C,OAAO,EAAE,KAAK,EAAE,KAAe,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QACxD,+CAA+C;QAC/C,qDAAqD;QACrD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;CACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from '../types/index.js';
2
+ export declare const themeCommand: Command;
3
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../source/commands/theme.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAE/C,eAAO,MAAM,YAAY,EAAE,OAQ1B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export const themeCommand = {
3
+ name: 'theme',
4
+ description: 'Select a theme for the Nanocoder CLI',
5
+ handler: async (_args, _messages, _metadata) => {
6
+ // This command is handled specially in app.tsx
7
+ // This handler exists only for registration purposes
8
+ return React.createElement(React.Fragment);
9
+ },
10
+ };
11
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../source/commands/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,YAAY,GAAY;IACpC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,sCAAsC;IACnD,OAAO,EAAE,KAAK,EAAE,KAAe,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QACxD,+CAA+C;QAC/C,qDAAqD;QACrD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;CACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from '../types/index.js';
2
+ export declare const updateCommand: Command;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../source/commands/update.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAI1C,eAAO,MAAM,aAAa,EAAE,OAM3B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import UpdateMessage from '../components/update-message.js';
3
+ export const updateCommand = {
4
+ name: 'update',
5
+ description: 'Update Nanocoder to the latest version',
6
+ handler: async (_args) => {
7
+ return React.createElement(UpdateMessage);
8
+ },
9
+ };
10
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../source/commands/update.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,aAAa,MAAM,iCAAiC,CAAC;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAY;IACrC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,wCAAwC;IACrD,OAAO,EAAE,KAAK,EAAE,KAAe,EAAE,EAAE;QAClC,OAAO,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;CACD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Command } from './types/index.js';
2
+ import React from 'react';
3
+ export declare class CommandRegistry {
4
+ private commands;
5
+ register(command: Command | Command[]): void;
6
+ get(name: string): Command | undefined;
7
+ getAll(): Command[];
8
+ getCompletions(prefix: string): string[];
9
+ execute(input: string, messages: import('./types/index.js').Message[], metadata: {
10
+ provider: string;
11
+ model: string;
12
+ tokens: number;
13
+ }): Promise<void | string | React.ReactNode>;
14
+ }
15
+ export declare const commandRegistry: CommandRegistry;
16
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../source/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAA8B;IAE9C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI;IAQ5C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAItC,MAAM,IAAI,OAAO,EAAE;IAInB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAMlC,OAAO,CACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,kBAAkB,EAAE,OAAO,EAAE,EAC9C,QAAQ,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,GACzD,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;CAwB3C;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import ErrorMessage from './components/error-message.js';
3
+ export class CommandRegistry {
4
+ commands = new Map();
5
+ register(command) {
6
+ if (Array.isArray(command)) {
7
+ command.forEach(cmd => this.register(cmd));
8
+ return;
9
+ }
10
+ this.commands.set(command.name, command);
11
+ }
12
+ get(name) {
13
+ return this.commands.get(name);
14
+ }
15
+ getAll() {
16
+ return Array.from(this.commands.values());
17
+ }
18
+ getCompletions(prefix) {
19
+ return Array.from(this.commands.keys())
20
+ .filter(name => name.startsWith(prefix))
21
+ .sort();
22
+ }
23
+ async execute(input, messages, metadata) {
24
+ const parts = input.trim().split(/\s+/);
25
+ const commandName = parts[0];
26
+ if (!commandName) {
27
+ return React.createElement(ErrorMessage, {
28
+ key: `error-${Date.now()}`,
29
+ message: 'Invalid command. Type /help for available commands.',
30
+ hideBox: true,
31
+ });
32
+ }
33
+ const args = parts.slice(1);
34
+ const command = this.get(commandName);
35
+ if (!command) {
36
+ return React.createElement(ErrorMessage, {
37
+ key: `error-${Date.now()}`,
38
+ message: `Unknown command: ${commandName}. Type /help for available commands.`,
39
+ hideBox: true,
40
+ });
41
+ }
42
+ return await command.handler(args, messages, metadata);
43
+ }
44
+ }
45
+ export const commandRegistry = new CommandRegistry();
46
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../source/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,YAAY,MAAM,+BAA+B,CAAC;AAEzD,MAAM,OAAO,eAAe;IACnB,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE9C,QAAQ,CAAC,OAA4B;QACpC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,OAAO;QACR,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,MAAM;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,cAAc,CAAC,MAAc;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;aACrC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aACvC,IAAI,EAAE,CAAC;IACV,CAAC;IAED,KAAK,CAAC,OAAO,CACZ,KAAa,EACb,QAA8C,EAC9C,QAA2D;QAE3D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;gBACxC,GAAG,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC1B,OAAO,EAAE,qDAAqD;gBAC9D,OAAO,EAAE,IAAI;aACb,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;gBACxC,GAAG,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC1B,OAAO,EAAE,oBAAoB,WAAW,sCAAsC;gBAC9E,OAAO,EAAE,IAAI;aACb,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;CACD;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AssistantMessageProps } from '../types/index.js';
2
+ declare const _default: import("react").NamedExoticComponent<AssistantMessageProps>;
3
+ export default _default;
4
+ //# sourceMappingURL=assistant-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-message.d.ts","sourceRoot":"","sources":["../../source/components/assistant-message.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;;AAM7D,wBAgEG"}
@@ -0,0 +1,43 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Text, Box } from 'ink';
3
+ import { memo, useMemo } from 'react';
4
+ import { useTheme } from '../hooks/useTheme.js';
5
+ // Performance optimization: truncate very long messages to prevent input lag
6
+ const MAX_MESSAGE_LENGTH = 6000; // characters - beyond this causes input lag
7
+ const TRUNCATE_PREVIEW_LENGTH = 3000; // characters to show before truncation
8
+ export default memo(function AssistantMessage({ message, model, }) {
9
+ const { colors } = useTheme();
10
+ const { displayMessage, wasTruncated, remainingChars } = useMemo(() => {
11
+ if (message.length <= MAX_MESSAGE_LENGTH) {
12
+ return {
13
+ displayMessage: message,
14
+ wasTruncated: false,
15
+ remainingChars: 0,
16
+ };
17
+ }
18
+ // Find a good truncation point (prefer end of line or sentence)
19
+ const truncateAt = TRUNCATE_PREVIEW_LENGTH;
20
+ let cutPoint = truncateAt;
21
+ // Try to find a natural break point near the truncation point
22
+ const searchArea = message.slice(Math.max(0, truncateAt - 100), truncateAt + 100);
23
+ const lineBreak = searchArea.lastIndexOf('\n');
24
+ const sentenceEnd = searchArea.lastIndexOf('.');
25
+ const paragraphEnd = searchArea.lastIndexOf('\n\n');
26
+ if (paragraphEnd !== -1) {
27
+ cutPoint = truncateAt - 100 + paragraphEnd + 2;
28
+ }
29
+ else if (lineBreak !== -1) {
30
+ cutPoint = truncateAt - 100 + lineBreak + 1;
31
+ }
32
+ else if (sentenceEnd !== -1) {
33
+ cutPoint = truncateAt - 100 + sentenceEnd + 1;
34
+ }
35
+ return {
36
+ displayMessage: message.slice(0, cutPoint).trimEnd(),
37
+ wasTruncated: true,
38
+ remainingChars: message.length - cutPoint,
39
+ };
40
+ }, [message]);
41
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Box, { children: _jsxs(Text, { color: colors.primary, bold: true, children: [model, ":"] }) }), _jsx(Text, { color: colors.white, children: displayMessage }), wasTruncated && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Text, { color: colors.secondary, dimColor: true, children: ["... [", remainingChars.toLocaleString(), " more characters truncated for performance]"] }), _jsx(Text, { color: colors.info, children: "Scroll up to see the beginning or use terminal's buffer to view full response" })] }))] }));
42
+ });
43
+ //# sourceMappingURL=assistant-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-message.js","sourceRoot":"","sources":["../../source/components/assistant-message.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AACpC,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAG9C,6EAA6E;AAC7E,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,4CAA4C;AAC7E,MAAM,uBAAuB,GAAG,IAAI,CAAC,CAAC,uCAAuC;AAE7E,eAAe,IAAI,CAAC,SAAS,gBAAgB,CAAC,EAC7C,OAAO,EACP,KAAK,GACkB;IACvB,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,EAAE,CAAC;IAC5B,MAAM,EAAC,cAAc,EAAE,YAAY,EAAE,cAAc,EAAC,GAAG,OAAO,CAAC,GAAG,EAAE;QACnE,IAAI,OAAO,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;YAC1C,OAAO;gBACN,cAAc,EAAE,OAAO;gBACvB,YAAY,EAAE,KAAK;gBACnB,cAAc,EAAE,CAAC;aACjB,CAAC;QACH,CAAC;QAED,gEAAgE;QAChE,MAAM,UAAU,GAAG,uBAAuB,CAAC;QAC3C,IAAI,QAAQ,GAAG,UAAU,CAAC;QAE1B,8DAA8D;QAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,GAAG,CAAC,EAC7B,UAAU,GAAG,GAAG,CAChB,CAAC;QACF,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEpD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,QAAQ,GAAG,UAAU,GAAG,GAAG,GAAG,YAAY,GAAG,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,UAAU,GAAG,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/B,QAAQ,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO;YACN,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE;YACpD,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,OAAO,CAAC,MAAM,GAAG,QAAQ;SACzC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,CACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aAC1C,KAAC,GAAG,cACH,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,mBAC/B,KAAK,SACA,GACF,EACN,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,cAAc,GAAQ,EACjD,YAAY,IAAI,CAChB,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACxC,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,4BAChC,cAAc,CAAC,cAAc,EAAE,mDAE/B,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,8FAGjB,IACF,CACN,IACI,CACN,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { BashExecutionIndicatorProps } from '../types/index.js';
2
+ declare const _default: import("react").NamedExoticComponent<BashExecutionIndicatorProps>;
3
+ export default _default;
4
+ //# sourceMappingURL=bash-execution-indicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash-execution-indicator.d.ts","sourceRoot":"","sources":["../../source/components/bash-execution-indicator.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,mBAAmB,CAAC;;AAEnE,wBAeG"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import { useTheme } from '../hooks/useTheme.js';
5
+ export default memo(function BashExecutionIndicator({ command, }) {
6
+ const { colors } = useTheme();
7
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: colors.tool, children: "\u25CF Executing: " }), _jsx(Text, { color: colors.secondary, children: command })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.secondary, children: "Press Escape to cancel" }) })] }));
8
+ });
9
+ //# sourceMappingURL=bash-execution-indicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash-execution-indicator.js","sourceRoot":"","sources":["../../source/components/bash-execution-indicator.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAG9C,eAAe,IAAI,CAAC,SAAS,sBAAsB,CAAC,EACnD,OAAO,GACsB;IAC7B,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,EAAE,CAAC;IAC5B,OAAO,CACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aAC1C,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,aACvB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,mCAAsB,EAC9C,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,YAAG,OAAO,GAAQ,IAC1C,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,uCAA+B,GACvD,IACD,CACN,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("react").NamedExoticComponent<object>;
2
+ export default _default;
3
+ //# sourceMappingURL=cancelling-indicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancelling-indicator.d.ts","sourceRoot":"","sources":["../../source/components/cancelling-indicator.tsx"],"names":[],"mappings":";AAKA,wBAUG"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import Spinner from 'ink-spinner';
5
+ import { useTheme } from '../hooks/useTheme.js';
6
+ export default memo(function CancellingIndicator() {
7
+ const { colors } = useTheme();
8
+ return (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: _jsxs(Box, { children: [_jsx(Spinner, { type: "dots2" }), _jsx(Text, { color: colors.secondary, children: " Cancelling..." })] }) }));
9
+ });
10
+ //# sourceMappingURL=cancelling-indicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancelling-indicator.js","sourceRoot":"","sources":["../../source/components/cancelling-indicator.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,eAAe,IAAI,CAAC,SAAS,mBAAmB;IAC/C,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,EAAE,CAAC;IAC5B,OAAO,CACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,YAC1C,MAAC,GAAG,eACH,KAAC,OAAO,IAAC,IAAI,EAAC,OAAO,GAAG,EACxB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,+BAAuB,IAC/C,GACD,CACN,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ChatQueueProps } from '../types/index.js';
2
+ declare const _default: import("react").NamedExoticComponent<ChatQueueProps>;
3
+ export default _default;
4
+ //# sourceMappingURL=chat-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-queue.d.ts","sourceRoot":"","sources":["../../source/components/chat-queue.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;;AAItD,wBA+BG"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box } from 'ink';
3
+ import { useMemo, Fragment, memo } from 'react';
4
+ const defaultDisplayCount = 20;
5
+ export default memo(function ChatQueue({ staticComponents = [], queuedComponents = [], displayCount = defaultDisplayCount, }) {
6
+ const allComponents = useMemo(() => {
7
+ const totalLength = queuedComponents.length;
8
+ const slicedQueuedComponents = queuedComponents.slice(Math.max(totalLength - displayCount, 0));
9
+ const components = [...staticComponents, ...slicedQueuedComponents];
10
+ return components;
11
+ }, [staticComponents, queuedComponents, displayCount]);
12
+ return (_jsx(Box, { flexDirection: "column", children: allComponents.map((component, index) => {
13
+ // Use component key if it exists, otherwise generate a fallback key
14
+ const key = component &&
15
+ typeof component === 'object' &&
16
+ 'key' in component &&
17
+ component.key
18
+ ? component.key
19
+ : `component-${index}`;
20
+ return _jsx(Fragment, { children: component }, key);
21
+ }) }));
22
+ });
23
+ //# sourceMappingURL=chat-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-queue.js","sourceRoot":"","sources":["../../source/components/chat-queue.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,OAAO,EAAY,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAC,MAAM,OAAO,CAAC;AAGzD,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,eAAe,IAAI,CAAC,SAAS,SAAS,CAAC,EACtC,gBAAgB,GAAG,EAAE,EACrB,gBAAgB,GAAG,EAAE,EACrB,YAAY,GAAG,mBAAmB,GAClB;IAChB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC;QAC5C,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,KAAK,CACpD,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,YAAY,EAAE,CAAC,CAAC,CACvC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,sBAAsB,CAAC,CAAC;QACpE,OAAO,UAAU,CAAC;IACnB,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;IAEvD,OAAO,CACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACzB,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;YACvC,oEAAoE;YACpE,MAAM,GAAG,GACR,SAAS;gBACT,OAAO,SAAS,KAAK,QAAQ;gBAC7B,KAAK,IAAI,SAAS;gBAClB,SAAS,CAAC,GAAG;gBACZ,CAAC,CAAC,SAAS,CAAC,GAAG;gBACf,CAAC,CAAC,aAAa,KAAK,EAAE,CAAC;YAEvB,OAAO,KAAC,QAAQ,cAAY,SAAS,IAAf,GAAG,CAAwB,CAAC;QACrD,CAAC,CAAC,GACG,CACN,CAAC;AACH,CAAC,CAAC,CAAC"}