@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,245 @@
1
+ import { ChatOpenAI } from '@langchain/openai';
2
+ import { AIMessage, HumanMessage, SystemMessage, ToolMessage, } from '@langchain/core/messages';
3
+ import { logError } from './utils/message-queue.js';
4
+ import { XMLToolCallParser } from './tool-calling/xml-parser.js';
5
+ /**
6
+ * Converts our Message format to LangChain BaseMessage format
7
+ */
8
+ function convertToLangChainMessage(message) {
9
+ switch (message.role) {
10
+ case 'user':
11
+ return new HumanMessage(message.content || '');
12
+ case 'system':
13
+ return new SystemMessage(message.content || '');
14
+ case 'assistant':
15
+ if (message.tool_calls && message.tool_calls.length > 0) {
16
+ return new AIMessage({
17
+ content: message.content || '',
18
+ tool_calls: message.tool_calls.map(tc => ({
19
+ id: tc.id,
20
+ name: tc.function.name,
21
+ args: tc.function.arguments,
22
+ })),
23
+ });
24
+ }
25
+ return new AIMessage(message.content || '');
26
+ case 'tool':
27
+ return new ToolMessage({
28
+ content: message.content || '',
29
+ tool_call_id: message.tool_call_id || '',
30
+ name: message.name || '',
31
+ });
32
+ default:
33
+ throw new Error(`Unsupported message role: ${message.role}`);
34
+ }
35
+ }
36
+ /**
37
+ * Converts LangChain AIMessage back to our Message format
38
+ */
39
+ function convertFromLangChainMessage(message) {
40
+ const result = {
41
+ role: 'assistant',
42
+ content: message.content,
43
+ };
44
+ if (message.tool_calls && message.tool_calls.length > 0) {
45
+ result.tool_calls = message.tool_calls.map(tc => ({
46
+ id: tc.id || '',
47
+ function: {
48
+ name: tc.name,
49
+ arguments: tc.args,
50
+ },
51
+ }));
52
+ }
53
+ return result;
54
+ }
55
+ export class LangGraphClient {
56
+ chatModel;
57
+ currentModel;
58
+ availableModels;
59
+ providerConfig;
60
+ modelInfoCache = new Map();
61
+ constructor(providerConfig) {
62
+ this.providerConfig = providerConfig;
63
+ this.availableModels = providerConfig.models;
64
+ this.currentModel = providerConfig.models[0] || '';
65
+ this.chatModel = this.createChatModel();
66
+ }
67
+ static async create(providerConfig) {
68
+ const client = new LangGraphClient(providerConfig);
69
+ // Fetch OpenRouter model info if this is OpenRouter
70
+ await client.fetchModelInfo();
71
+ return client;
72
+ }
73
+ createChatModel() {
74
+ const { config } = this.providerConfig;
75
+ const chatConfig = {
76
+ modelName: this.currentModel,
77
+ openAIApiKey: config.apiKey || 'dummy-key',
78
+ configuration: {
79
+ baseURL: config.baseURL,
80
+ },
81
+ ...config,
82
+ };
83
+ return new ChatOpenAI(chatConfig);
84
+ }
85
+ setModel(model) {
86
+ this.currentModel = model;
87
+ this.chatModel = this.createChatModel();
88
+ }
89
+ getCurrentModel() {
90
+ return this.currentModel;
91
+ }
92
+ getContextSize() {
93
+ // For OpenRouter, get from cached model info
94
+ if (this.providerConfig.name === 'openrouter') {
95
+ const modelData = this.modelInfoCache.get(this.currentModel);
96
+ if (modelData && modelData.context_length) {
97
+ return modelData.context_length;
98
+ }
99
+ return 0;
100
+ }
101
+ // For OpenAI-compatible (local models), we can't reliably know the context
102
+ if (this.providerConfig.name === 'openai-compatible') {
103
+ return 0;
104
+ }
105
+ // Try to get from LangChain model if available
106
+ if (this.chatModel && this.chatModel.maxTokens) {
107
+ return this.chatModel.maxTokens;
108
+ }
109
+ return 0;
110
+ }
111
+ async getAvailableModels() {
112
+ return this.availableModels;
113
+ }
114
+ async chat(messages, tools) {
115
+ try {
116
+ const langchainMessages = messages.map(convertToLangChainMessage);
117
+ let result;
118
+ // Try to bind tools if available - fallback to XML parsing
119
+ if (tools.length > 0) {
120
+ try {
121
+ // Convert our tools to LangChain format
122
+ const langchainTools = tools.map(tool => ({
123
+ type: 'function',
124
+ function: {
125
+ name: tool.function.name,
126
+ description: tool.function.description,
127
+ parameters: tool.function.parameters,
128
+ },
129
+ }));
130
+ // Try binding tools to the model
131
+ const modelWithTools = this.chatModel.bindTools(langchainTools);
132
+ result = (await modelWithTools.invoke(langchainMessages));
133
+ }
134
+ catch (bindError) {
135
+ // Tool binding failed, fall back to base model
136
+ result = (await this.chatModel.invoke(langchainMessages));
137
+ }
138
+ }
139
+ else {
140
+ // No tools, use base model
141
+ result = (await this.chatModel.invoke(langchainMessages));
142
+ }
143
+ let convertedMessage = convertFromLangChainMessage(result);
144
+ // If no native tool calls but tools are available, try XML parsing
145
+ if (tools.length > 0 &&
146
+ (!convertedMessage.tool_calls ||
147
+ convertedMessage.tool_calls.length === 0) &&
148
+ convertedMessage.content) {
149
+ const content = convertedMessage.content;
150
+ if (XMLToolCallParser.hasToolCalls(content)) {
151
+ const parsedToolCalls = XMLToolCallParser.parseToolCalls(content);
152
+ const toolCalls = XMLToolCallParser.convertToToolCalls(parsedToolCalls);
153
+ const cleanedContent = XMLToolCallParser.removeToolCallsFromContent(content);
154
+ convertedMessage = {
155
+ ...convertedMessage,
156
+ content: cleanedContent,
157
+ tool_calls: toolCalls,
158
+ };
159
+ }
160
+ }
161
+ return {
162
+ choices: [
163
+ {
164
+ message: convertedMessage,
165
+ },
166
+ ],
167
+ };
168
+ }
169
+ catch (error) {
170
+ logError(`LangGraph chat error: ${error}`);
171
+ return null;
172
+ }
173
+ }
174
+ async *chatStream(messages, tools) {
175
+ try {
176
+ // Use the non-streaming chat method which handles tool calls properly
177
+ const result = await this.chat(messages, tools);
178
+ if (!result) {
179
+ yield { done: true };
180
+ return;
181
+ }
182
+ const message = result.choices[0].message;
183
+ // If there are tool calls, yield them with preserved content
184
+ if (message.tool_calls && message.tool_calls.length > 0) {
185
+ yield {
186
+ message: {
187
+ content: message.content || '',
188
+ tool_calls: message.tool_calls,
189
+ },
190
+ done: false,
191
+ };
192
+ }
193
+ else if (message.content) {
194
+ // If there's content, simulate streaming by yielding it in chunks
195
+ const content = message.content;
196
+ const chunkSize = 50;
197
+ for (let i = 0; i < content.length; i += chunkSize) {
198
+ const chunk = content.slice(i, i + chunkSize);
199
+ yield {
200
+ message: {
201
+ content: chunk,
202
+ },
203
+ done: false,
204
+ };
205
+ // Small delay to simulate streaming
206
+ await new Promise(resolve => setTimeout(resolve, 10));
207
+ }
208
+ yield { done: true };
209
+ }
210
+ else {
211
+ yield { done: true };
212
+ }
213
+ }
214
+ catch (error) {
215
+ logError(`LangGraph stream error: ${error}`);
216
+ return;
217
+ }
218
+ }
219
+ async clearContext() {
220
+ // No internal state to clear in unified approach
221
+ }
222
+ async fetchModelInfo() {
223
+ if (this.providerConfig.name.toLowerCase() !== 'openrouter') {
224
+ return;
225
+ }
226
+ try {
227
+ const response = await fetch('https://openrouter.ai/api/v1/models', {
228
+ headers: {
229
+ Authorization: `Bearer ${this.providerConfig.config.apiKey}`,
230
+ 'Content-Type': 'application/json',
231
+ },
232
+ });
233
+ if (response.ok) {
234
+ const data = await response.json();
235
+ for (const model of data.data) {
236
+ this.modelInfoCache.set(model.id, model);
237
+ }
238
+ }
239
+ }
240
+ catch (error) {
241
+ logError(`Failed to fetch OpenRouter model info: ${error}`);
242
+ }
243
+ }
244
+ }
245
+ //# sourceMappingURL=langgraph-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"langgraph-client.js","sourceRoot":"","sources":["../source/langgraph-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Tool } from '../types/index.js';
2
+ import type { MCPServer, MCPTool, MCPInitResult } from '../types/index.js';
3
+ export declare class MCPClient {
4
+ private clients;
5
+ private transports;
6
+ private serverTools;
7
+ private isConnected;
8
+ constructor();
9
+ connectToServer(server: MCPServer): Promise<void>;
10
+ connectToServers(servers: MCPServer[], onProgress?: (result: MCPInitResult) => void): Promise<MCPInitResult[]>;
11
+ getAllTools(): Tool[];
12
+ getToolMapping(): Map<string, {
13
+ serverName: string;
14
+ originalName: string;
15
+ }>;
16
+ callTool(toolName: string, args: Record<string, any>): Promise<string>;
17
+ private executeToolCall;
18
+ disconnect(): Promise<void>;
19
+ getConnectedServers(): string[];
20
+ isServerConnected(serverName: string): boolean;
21
+ getServerTools(serverName: string): MCPTool[];
22
+ }
23
+ //# sourceMappingURL=mcp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../source/mcp/mcp-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAI5C,OAAO,KAAK,EAAC,SAAS,EAAE,OAAO,EAAE,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAEzE,qBAAa,SAAS;IACrB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,UAAU,CAAgD;IAClE,OAAO,CAAC,WAAW,CAAqC;IACxD,OAAO,CAAC,WAAW,CAAkB;;IAI/B,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDjD,gBAAgB,CACrB,OAAO,EAAE,SAAS,EAAE,EACpB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAC1C,OAAO,CAAC,aAAa,EAAE,CAAC;IAmC3B,WAAW,IAAI,IAAI,EAAE;IA4BrB,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAC,CAAC;IAkBnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YA6B9D,eAAe;IA+BvB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC,mBAAmB,IAAI,MAAM,EAAE;IAI/B,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI9C,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,EAAE;CAG7C"}
@@ -0,0 +1,194 @@
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
+ import { shouldLog } from '../config/logging.js';
4
+ import { logInfo, logError } from '../utils/message-queue.js';
5
+ export class MCPClient {
6
+ clients = new Map();
7
+ transports = new Map();
8
+ serverTools = new Map();
9
+ isConnected = false;
10
+ constructor() { }
11
+ async connectToServer(server) {
12
+ try {
13
+ // Create transport for the server
14
+ // When not in verbose mode, suppress stderr output from MCP servers
15
+ const transport = new StdioClientTransport({
16
+ command: server.command,
17
+ args: server.args || [],
18
+ env: {
19
+ ...server.env,
20
+ // Set log level environment variables that many servers respect
21
+ LOG_LEVEL: shouldLog('debug') ? 'DEBUG' : 'ERROR',
22
+ DEBUG: shouldLog('debug') ? '1' : '0',
23
+ VERBOSE: shouldLog('debug') ? '1' : '0',
24
+ },
25
+ // Suppress stderr if not in verbose mode
26
+ stderr: shouldLog('debug') ? 'inherit' : 'ignore',
27
+ });
28
+ // Create and connect client
29
+ const client = new Client({
30
+ name: 'nanocoder-mcp-client',
31
+ version: '1.0.0',
32
+ });
33
+ await client.connect(transport);
34
+ // Store client and transport
35
+ this.clients.set(server.name, client);
36
+ this.transports.set(server.name, transport);
37
+ // List available tools from this server
38
+ const toolsResult = await client.listTools();
39
+ const tools = toolsResult.tools.map(tool => ({
40
+ name: tool.name,
41
+ description: tool.description || undefined,
42
+ inputSchema: tool.inputSchema,
43
+ serverName: server.name,
44
+ }));
45
+ this.serverTools.set(server.name, tools);
46
+ // Success - no console logging here, will be handled by app
47
+ }
48
+ catch (error) {
49
+ // Error - no console logging here, will be handled by app
50
+ throw error;
51
+ }
52
+ }
53
+ async connectToServers(servers, onProgress) {
54
+ const results = [];
55
+ // Connect to servers in parallel for better performance
56
+ const connectionPromises = servers.map(async (server) => {
57
+ try {
58
+ await this.connectToServer(server);
59
+ const tools = this.serverTools.get(server.name) || [];
60
+ const result = {
61
+ serverName: server.name,
62
+ success: true,
63
+ toolCount: tools.length,
64
+ };
65
+ results.push(result);
66
+ onProgress?.(result);
67
+ return result;
68
+ }
69
+ catch (error) {
70
+ const result = {
71
+ serverName: server.name,
72
+ success: false,
73
+ error: error instanceof Error ? error.message : String(error),
74
+ };
75
+ results.push(result);
76
+ onProgress?.(result);
77
+ return result;
78
+ }
79
+ });
80
+ // Wait for all connections to complete
81
+ await Promise.all(connectionPromises);
82
+ this.isConnected = true;
83
+ return results;
84
+ }
85
+ getAllTools() {
86
+ const tools = [];
87
+ for (const [serverName, serverTools] of this.serverTools.entries()) {
88
+ for (const mcpTool of serverTools) {
89
+ // Convert MCP tool to nanocoder Tool format
90
+ // Use the original tool name for better model compatibility
91
+ const tool = {
92
+ type: 'function',
93
+ function: {
94
+ name: mcpTool.name,
95
+ description: mcpTool.description
96
+ ? `[MCP:${serverName}] ${mcpTool.description}`
97
+ : `MCP tool from ${serverName}`,
98
+ parameters: mcpTool.inputSchema || {
99
+ type: 'object',
100
+ properties: {},
101
+ required: [],
102
+ },
103
+ },
104
+ };
105
+ tools.push(tool);
106
+ }
107
+ }
108
+ return tools;
109
+ }
110
+ getToolMapping() {
111
+ const mapping = new Map();
112
+ for (const [serverName, serverTools] of this.serverTools.entries()) {
113
+ for (const mcpTool of serverTools) {
114
+ mapping.set(mcpTool.name, {
115
+ serverName,
116
+ originalName: mcpTool.name,
117
+ });
118
+ }
119
+ }
120
+ return mapping;
121
+ }
122
+ async callTool(toolName, args) {
123
+ // First, try to find which server has this tool
124
+ const toolMapping = this.getToolMapping();
125
+ const mapping = toolMapping.get(toolName);
126
+ if (!mapping) {
127
+ // Fallback: try parsing as prefixed name (mcp_serverName_toolName) for backward compatibility
128
+ const parts = toolName.split('_');
129
+ if (parts.length >= 3 && parts[0] === 'mcp' && parts[1]) {
130
+ const serverName = parts[1];
131
+ const originalToolName = parts.slice(2).join('_');
132
+ const client = this.clients.get(serverName);
133
+ if (client) {
134
+ return this.executeToolCall(client, originalToolName, args);
135
+ }
136
+ }
137
+ throw new Error(`MCP tool not found: ${toolName}`);
138
+ }
139
+ const client = this.clients.get(mapping.serverName);
140
+ if (!client) {
141
+ throw new Error(`No MCP client connected for server: ${mapping.serverName}`);
142
+ }
143
+ return this.executeToolCall(client, mapping.originalName, args);
144
+ }
145
+ async executeToolCall(client, toolName, args) {
146
+ try {
147
+ const result = await client.callTool({
148
+ name: toolName,
149
+ arguments: args,
150
+ });
151
+ // Convert result content to string
152
+ if (result.content &&
153
+ Array.isArray(result.content) &&
154
+ result.content.length > 0) {
155
+ const content = result.content[0];
156
+ if (content.type === 'text') {
157
+ return content.text || '';
158
+ }
159
+ else {
160
+ return JSON.stringify(content);
161
+ }
162
+ }
163
+ return 'Tool executed successfully (no output)';
164
+ }
165
+ catch (error) {
166
+ throw new Error(`MCP tool execution failed: ${error}`);
167
+ }
168
+ }
169
+ async disconnect() {
170
+ for (const [serverName, client] of this.clients.entries()) {
171
+ try {
172
+ await client.close();
173
+ logInfo(`Disconnected from MCP server: ${serverName}`);
174
+ }
175
+ catch (error) {
176
+ logError(`Error disconnecting from ${serverName}: ${error}`);
177
+ }
178
+ }
179
+ this.clients.clear();
180
+ this.transports.clear();
181
+ this.serverTools.clear();
182
+ this.isConnected = false;
183
+ }
184
+ getConnectedServers() {
185
+ return Array.from(this.clients.keys());
186
+ }
187
+ isServerConnected(serverName) {
188
+ return this.clients.has(serverName);
189
+ }
190
+ getServerTools(serverName) {
191
+ return this.serverTools.get(serverName) || [];
192
+ }
193
+ }
194
+ //# sourceMappingURL=mcp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../source/mcp/mcp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ToolHandler } from '../types/index.js';
2
+ import { MCPClient } from "./mcp-client.js";
3
+ /**
4
+ * Creates tool handlers for MCP tools that integrate with the existing tool system
5
+ */
6
+ export declare class MCPToolAdapter {
7
+ private mcpClient;
8
+ constructor(mcpClient: MCPClient);
9
+ /**
10
+ * Creates a tool handler function for an MCP tool
11
+ */
12
+ createToolHandler(toolName: string): ToolHandler;
13
+ /**
14
+ * Registers all MCP tools in the tool registry
15
+ */
16
+ registerMCPTools(toolRegistry: Record<string, ToolHandler>): void;
17
+ /**
18
+ * Unregisters all MCP tools from the tool registry
19
+ */
20
+ unregisterMCPTools(toolRegistry: Record<string, ToolHandler>): void;
21
+ }
22
+ //# sourceMappingURL=mcp-tool-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tool-adapter.d.ts","sourceRoot":"","sources":["../../source/mcp/mcp-tool-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,SAAS;IAIhC;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAWhD;;OAEG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI;IAajE;;OAEG;IACH,kBAAkB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI;CAQpE"}
@@ -0,0 +1,49 @@
1
+ import { logError } from '../utils/message-queue.js';
2
+ /**
3
+ * Creates tool handlers for MCP tools that integrate with the existing tool system
4
+ */
5
+ export class MCPToolAdapter {
6
+ mcpClient;
7
+ constructor(mcpClient) {
8
+ this.mcpClient = mcpClient;
9
+ }
10
+ /**
11
+ * Creates a tool handler function for an MCP tool
12
+ */
13
+ createToolHandler(toolName) {
14
+ return async (args) => {
15
+ try {
16
+ const result = await this.mcpClient.callTool(toolName, args);
17
+ return result;
18
+ }
19
+ catch (error) {
20
+ return `Error executing MCP tool: ${error}`;
21
+ }
22
+ };
23
+ }
24
+ /**
25
+ * Registers all MCP tools in the tool registry
26
+ */
27
+ registerMCPTools(toolRegistry) {
28
+ const mcpTools = this.mcpClient.getAllTools();
29
+ for (const tool of mcpTools) {
30
+ const toolName = tool.function.name;
31
+ // Check for conflicts with existing tools
32
+ if (toolRegistry[toolName]) {
33
+ logError(`Warning: MCP tool "${toolName}" conflicts with existing tool. MCP tool will override.`);
34
+ }
35
+ toolRegistry[toolName] = this.createToolHandler(toolName);
36
+ }
37
+ }
38
+ /**
39
+ * Unregisters all MCP tools from the tool registry
40
+ */
41
+ unregisterMCPTools(toolRegistry) {
42
+ const mcpTools = this.mcpClient.getAllTools();
43
+ for (const tool of mcpTools) {
44
+ const toolName = tool.function.name;
45
+ delete toolRegistry[toolName];
46
+ }
47
+ }
48
+ }
49
+ //# sourceMappingURL=mcp-tool-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tool-adapter.js","sourceRoot":"","sources":["../../source/mcp/mcp-tool-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAC,MAAM,2BAA2B,CAAC;AAEnD;;GAEG;AACH,MAAM,OAAO,cAAc;IACjB,SAAS,CAAY;IAE7B,YAAY,SAAoB;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,QAAgB;QAChC,OAAO,KAAK,EAAE,IAAS,EAAE,EAAE;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC7D,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,6BAA6B,KAAK,EAAE,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,YAAyC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAE9C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACpC,0CAA0C;YAC1C,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,QAAQ,CAAC,sBAAsB,QAAQ,yDAAyD,CAAC,CAAC;YACpG,CAAC;YACD,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,YAAyC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAE9C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACpC,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type { ToolCall, ToolResult, ToolHandler } from './types/index.js';
2
+ import type { ToolManager } from './tools/tool-manager.js';
3
+ export declare function setToolRegistryGetter(getter: () => Record<string, ToolHandler>): void;
4
+ export declare function setToolManagerGetter(getter: () => ToolManager | null): void;
5
+ export declare function getToolManager(): ToolManager | null;
6
+ export declare function processToolUse(toolCall: ToolCall): Promise<ToolResult>;
7
+ //# sourceMappingURL=message-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-handler.d.ts","sourceRoot":"","sources":["../source/message-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAQzD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,QAE9E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,WAAW,GAAG,IAAI,QAEpE;AAED,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAsC5E"}
@@ -0,0 +1,53 @@
1
+ // This will be set by the ChatSession
2
+ let toolRegistryGetter = null;
3
+ // This will be set by the App
4
+ let toolManagerGetter = null;
5
+ export function setToolRegistryGetter(getter) {
6
+ toolRegistryGetter = getter;
7
+ }
8
+ export function setToolManagerGetter(getter) {
9
+ toolManagerGetter = getter;
10
+ }
11
+ export function getToolManager() {
12
+ return toolManagerGetter ? toolManagerGetter() : null;
13
+ }
14
+ export async function processToolUse(toolCall) {
15
+ if (!toolRegistryGetter) {
16
+ throw new Error('Tool registry not initialized');
17
+ }
18
+ const toolRegistry = toolRegistryGetter();
19
+ const handler = toolRegistry[toolCall.function.name];
20
+ if (!handler) {
21
+ throw new Error(`Unknown tool: ${toolCall.function.name}`);
22
+ }
23
+ try {
24
+ // Parse arguments if they're a JSON string
25
+ let parsedArgs = toolCall.function.arguments;
26
+ if (typeof parsedArgs === 'string') {
27
+ try {
28
+ parsedArgs = JSON.parse(parsedArgs);
29
+ }
30
+ catch (e) {
31
+ throw new Error(`Invalid tool arguments: ${e.message}`);
32
+ }
33
+ }
34
+ const result = await handler(parsedArgs);
35
+ return {
36
+ tool_call_id: toolCall.id,
37
+ role: "tool",
38
+ name: toolCall.function.name,
39
+ content: result,
40
+ };
41
+ }
42
+ catch (error) {
43
+ // Convert exceptions to error messages that the model can see and correct
44
+ const errorMessage = `Error: ${error instanceof Error ? error.message : String(error)}`;
45
+ return {
46
+ tool_call_id: toolCall.id,
47
+ role: "tool",
48
+ name: toolCall.function.name,
49
+ content: errorMessage,
50
+ };
51
+ }
52
+ }
53
+ //# sourceMappingURL=message-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-handler.js","sourceRoot":"","sources":["../source/message-handler.ts"],"names":[],"mappings":"AAGA,sCAAsC;AACtC,IAAI,kBAAkB,GAA+C,IAAI,CAAC;AAE1E,8BAA8B;AAC9B,IAAI,iBAAiB,GAAsC,IAAI,CAAC;AAEhE,MAAM,UAAU,qBAAqB,CAAC,MAAyC;IAC7E,kBAAkB,GAAG,MAAM,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAgC;IACpE,iBAAiB,GAAG,MAAM,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,OAAO,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAkB;IACrD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC;QACH,2CAA2C;QAC3C,IAAI,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC7C,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,2BAA4B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,OAAO;YACL,YAAY,EAAE,QAAQ,CAAC,EAAE;YACzB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;YAC5B,OAAO,EAAE,MAAM;SAChB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0EAA0E;QAC1E,MAAM,YAAY,GAAG,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACxF,OAAO;YACL,YAAY,EAAE,QAAQ,CAAC,EAAE;YACzB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;YAC5B,OAAO,EAAE,YAAY;SACtB,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ declare class PromptHistory {
2
+ private history;
3
+ private currentIndex;
4
+ loadHistory(): Promise<void>;
5
+ saveHistory(): Promise<void>;
6
+ addPrompt(prompt: string): void;
7
+ getPrevious(): string | null;
8
+ getNext(): string | null;
9
+ resetIndex(): void;
10
+ getHistory(): string[];
11
+ }
12
+ export declare const promptHistory: PromptHistory;
13
+ export {};
14
+ //# sourceMappingURL=prompt-history.d.ts.map