@tyvm/knowhow 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (492) hide show
  1. package/.vscode/launch.json +14 -0
  2. package/CONFIG.md +336 -0
  3. package/README.md +49 -0
  4. package/autodoc/chat.mdx +20 -0
  5. package/autodoc/cli.mdx +11 -0
  6. package/autodoc/plugins/asana.mdx +47 -0
  7. package/autodoc/plugins/downloader/downloader.mdx +38 -0
  8. package/autodoc/plugins/downloader/plugin.mdx +37 -0
  9. package/autodoc/plugins/downloader/types.mdx +42 -0
  10. package/autodoc/plugins/embedding.mdx +41 -0
  11. package/autodoc/plugins/figma.mdx +45 -0
  12. package/autodoc/plugins/github.mdx +40 -0
  13. package/autodoc/plugins/jira.mdx +46 -0
  14. package/autodoc/plugins/language.mdx +37 -0
  15. package/autodoc/plugins/linear.mdx +35 -0
  16. package/autodoc/plugins/notion.mdx +38 -0
  17. package/autodoc/plugins/plugins.mdx +59 -0
  18. package/autodoc/plugins/types.mdx +51 -0
  19. package/autodoc/plugins/vim.mdx +39 -0
  20. package/autodoc/tools/addInternalTools.mdx +1 -0
  21. package/autodoc/tools/agentCall.mdx +1 -0
  22. package/autodoc/tools/asana/definitions.mdx +10 -0
  23. package/autodoc/tools/asana/index.mdx +12 -0
  24. package/autodoc/tools/askHuman.mdx +1 -0
  25. package/autodoc/tools/callPlugin.mdx +1 -0
  26. package/autodoc/tools/embeddingSearch.mdx +1 -0
  27. package/autodoc/tools/execCommand.mdx +1 -0
  28. package/autodoc/tools/fileSearch.mdx +1 -0
  29. package/autodoc/tools/finalAnswer.mdx +1 -0
  30. package/autodoc/tools/github/definitions.mdx +6 -0
  31. package/autodoc/tools/github/index.mdx +8 -0
  32. package/autodoc/tools/index.mdx +14 -0
  33. package/autodoc/tools/lintFile.mdx +7 -0
  34. package/autodoc/tools/list.mdx +16 -0
  35. package/autodoc/tools/modifyFile.mdx +7 -0
  36. package/autodoc/tools/patch.mdx +9 -0
  37. package/autodoc/tools/readBlocks.mdx +1 -0
  38. package/autodoc/tools/readFile.mdx +1 -0
  39. package/autodoc/tools/scanFile.mdx +1 -0
  40. package/autodoc/tools/textSearch.mdx +6 -0
  41. package/autodoc/tools/types/fileblock.mdx +1 -0
  42. package/autodoc/tools/visionTool.mdx +1 -0
  43. package/autodoc/tools/writeFile.mdx +1 -0
  44. package/jest.config.js +18 -0
  45. package/package.json +89 -0
  46. package/src/agents/base/base.ts +619 -0
  47. package/src/agents/base/prompt.ts +26 -0
  48. package/src/agents/configurable/ConfigAgent.ts +23 -0
  49. package/src/agents/developer/developer.ts +69 -0
  50. package/src/agents/index.ts +8 -0
  51. package/src/agents/interface.ts +11 -0
  52. package/src/agents/patcher/codebase.md +27 -0
  53. package/src/agents/patcher/patcher.ts +110 -0
  54. package/src/agents/researcher/researcher.ts +109 -0
  55. package/src/agents/tools/addInternalTools.ts +21 -0
  56. package/src/agents/tools/agentCall.ts +18 -0
  57. package/src/agents/tools/aiClient.ts +36 -0
  58. package/src/agents/tools/asana/definitions.ts +199 -0
  59. package/src/agents/tools/asana/index.ts +108 -0
  60. package/src/agents/tools/askHuman.ts +8 -0
  61. package/src/agents/tools/callPlugin.ts +4 -0
  62. package/src/agents/tools/embeddingSearch.ts +5 -0
  63. package/src/agents/tools/execCommand.ts +26 -0
  64. package/src/agents/tools/fileSearch.ts +33 -0
  65. package/src/agents/tools/finalAnswer.ts +4 -0
  66. package/src/agents/tools/github/definitions.ts +89 -0
  67. package/src/agents/tools/github/index.ts +67 -0
  68. package/src/agents/tools/googleSearch.ts +242 -0
  69. package/src/agents/tools/index.ts +24 -0
  70. package/src/agents/tools/language/definitions.ts +97 -0
  71. package/src/agents/tools/language/index.ts +19 -0
  72. package/src/agents/tools/lintFile.ts +17 -0
  73. package/src/agents/tools/list.ts +514 -0
  74. package/src/agents/tools/loadWebpage.ts +129 -0
  75. package/src/agents/tools/modifyFile.ts +53 -0
  76. package/src/agents/tools/patch.ts +672 -0
  77. package/src/agents/tools/readBlocks.ts +41 -0
  78. package/src/agents/tools/readFile.ts +39 -0
  79. package/src/agents/tools/scanFile.ts +16 -0
  80. package/src/agents/tools/textSearch.ts +21 -0
  81. package/src/agents/tools/types/fileblock.ts +5 -0
  82. package/src/agents/tools/visionTool.ts +5 -0
  83. package/src/agents/tools/writeFile.ts +46 -0
  84. package/src/agents/vim/vim.ts +153 -0
  85. package/src/ai.ts +167 -0
  86. package/src/chat.ts +412 -0
  87. package/src/cli.ts +85 -0
  88. package/src/clients/anthropic.ts +399 -0
  89. package/src/clients/gemini.ts +486 -0
  90. package/src/clients/http.ts +107 -0
  91. package/src/clients/index.ts +183 -0
  92. package/src/clients/knowhow.ts +33 -0
  93. package/src/clients/openai.ts +253 -0
  94. package/src/clients/types.ts +91 -0
  95. package/src/clients/xai.ts +132 -0
  96. package/src/config.ts +211 -0
  97. package/src/conversion.ts +140 -0
  98. package/src/dataset/diffs/README.md +12 -0
  99. package/src/dataset/diffs/debug-errors.ts +29 -0
  100. package/src/dataset/diffs/debug.ts +64 -0
  101. package/src/dataset/diffs/generate.ts +71 -0
  102. package/src/dataset/diffs/jsonl.ts +54 -0
  103. package/src/dataset/diffs/test.ts +193 -0
  104. package/src/embeddings.ts +411 -0
  105. package/src/hashes.ts +67 -0
  106. package/src/index.ts +376 -0
  107. package/src/login.ts +78 -0
  108. package/src/microphone.ts +136 -0
  109. package/src/modules/index.ts +37 -0
  110. package/src/modules/types.ts +48 -0
  111. package/src/plugins/asana.ts +134 -0
  112. package/src/plugins/downloader/downloader.ts +204 -0
  113. package/src/plugins/downloader/plugin.ts +85 -0
  114. package/src/plugins/downloader/types.ts +85 -0
  115. package/src/plugins/embedding.ts +42 -0
  116. package/src/plugins/figma.ts +137 -0
  117. package/src/plugins/github.ts +153 -0
  118. package/src/plugins/jira.ts +104 -0
  119. package/src/plugins/language.ts +100 -0
  120. package/src/plugins/linear.ts +219 -0
  121. package/src/plugins/notion.ts +170 -0
  122. package/src/plugins/plugins.ts +56 -0
  123. package/src/plugins/types.ts +5 -0
  124. package/src/plugins/url.ts +63 -0
  125. package/src/plugins/vim.ts +73 -0
  126. package/src/prompts/BasicCodeDocumenter.ts +1 -0
  127. package/src/prompts/BasicProjectDocumenter.ts +1 -0
  128. package/src/prompts/EmbeddingSeachHelper.ts +1 -0
  129. package/src/prompts/index.ts +9 -0
  130. package/src/server/index.ts +14 -0
  131. package/src/services/AgentService.ts +98 -0
  132. package/src/services/EmbeddingService.ts +410 -0
  133. package/src/services/EventService.ts +20 -0
  134. package/src/services/GitHub.ts +60 -0
  135. package/src/services/KnowhowClient.ts +113 -0
  136. package/src/services/Mcp.ts +270 -0
  137. package/src/services/McpServer.ts +119 -0
  138. package/src/services/McpWebsocketTransport.ts +64 -0
  139. package/src/services/S3.ts +126 -0
  140. package/src/services/Tools.ts +65 -0
  141. package/src/services/flags.ts +52 -0
  142. package/src/services/index.ts +8 -0
  143. package/src/types.ts +225 -0
  144. package/src/utils/index.ts +108 -0
  145. package/src/worker.ts +80 -0
  146. package/tests/integration/figma.test.ts +70 -0
  147. package/tests/integration/fileblocks/readwrite.test.ts +95 -0
  148. package/tests/integration/patching/input.txt +145 -0
  149. package/tests/integration/patching/output.txt +145 -0
  150. package/tests/integration/patching/patch.txt +15 -0
  151. package/tests/integration/patching/unseen.txt +80 -0
  152. package/tests/integration/patching.test.ts +136 -0
  153. package/tests/languagePlugin.test.ts +74 -0
  154. package/tests/patching/corrupted.test.ts +78 -0
  155. package/tests/patching/imports.patch.txt +11 -0
  156. package/tests/patching/imports.test.ts +43 -0
  157. package/tests/patching/imports.txt +11 -0
  158. package/tests/patching/interface.patch.txt +15 -0
  159. package/tests/patching/interface.txt +7 -0
  160. package/tests/test.spec.ts +132 -0
  161. package/ts_build/src/agents/base/base.d.ts +88 -0
  162. package/ts_build/src/agents/base/base.js +464 -0
  163. package/ts_build/src/agents/base/base.js.map +1 -0
  164. package/ts_build/src/agents/base/prompt.d.ts +1 -0
  165. package/ts_build/src/agents/base/prompt.js +30 -0
  166. package/ts_build/src/agents/base/prompt.js.map +1 -0
  167. package/ts_build/src/agents/configurable/ConfigAgent.d.ts +10 -0
  168. package/ts_build/src/agents/configurable/ConfigAgent.js +25 -0
  169. package/ts_build/src/agents/configurable/ConfigAgent.js.map +1 -0
  170. package/ts_build/src/agents/configurable/OpenAIAgent.d.ts +0 -0
  171. package/ts_build/src/agents/configurable/OpenAIAgent.js +1 -0
  172. package/ts_build/src/agents/configurable/OpenAIAgent.js.map +1 -0
  173. package/ts_build/src/agents/developer/developer.d.ts +9 -0
  174. package/ts_build/src/agents/developer/developer.js +69 -0
  175. package/ts_build/src/agents/developer/developer.js.map +1 -0
  176. package/ts_build/src/agents/index.d.ts +7 -0
  177. package/ts_build/src/agents/index.js +38 -0
  178. package/ts_build/src/agents/index.js.map +1 -0
  179. package/ts_build/src/agents/interface.d.ts +10 -0
  180. package/ts_build/src/agents/interface.js +3 -0
  181. package/ts_build/src/agents/interface.js.map +1 -0
  182. package/ts_build/src/agents/patcher/patcher.d.ts +9 -0
  183. package/ts_build/src/agents/patcher/patcher.js +106 -0
  184. package/ts_build/src/agents/patcher/patcher.js.map +1 -0
  185. package/ts_build/src/agents/researcher/researcher.d.ts +9 -0
  186. package/ts_build/src/agents/researcher/researcher.js +107 -0
  187. package/ts_build/src/agents/researcher/researcher.js.map +1 -0
  188. package/ts_build/src/agents/tools/addInternalTools.d.ts +5 -0
  189. package/ts_build/src/agents/tools/addInternalTools.js +18 -0
  190. package/ts_build/src/agents/tools/addInternalTools.js.map +1 -0
  191. package/ts_build/src/agents/tools/agentCall.d.ts +1 -0
  192. package/ts_build/src/agents/tools/agentCall.js +21 -0
  193. package/ts_build/src/agents/tools/agentCall.js.map +1 -0
  194. package/ts_build/src/agents/tools/aiClient.d.ts +6 -0
  195. package/ts_build/src/agents/tools/aiClient.js +25 -0
  196. package/ts_build/src/agents/tools/aiClient.js.map +1 -0
  197. package/ts_build/src/agents/tools/asana/definitions.d.ts +202 -0
  198. package/ts_build/src/agents/tools/asana/definitions.js +197 -0
  199. package/ts_build/src/agents/tools/asana/definitions.js.map +1 -0
  200. package/ts_build/src/agents/tools/asana/index.d.ts +8 -0
  201. package/ts_build/src/agents/tools/asana/index.js +98 -0
  202. package/ts_build/src/agents/tools/asana/index.js.map +1 -0
  203. package/ts_build/src/agents/tools/askHuman.d.ts +1 -0
  204. package/ts_build/src/agents/tools/askHuman.js +15 -0
  205. package/ts_build/src/agents/tools/askHuman.js.map +1 -0
  206. package/ts_build/src/agents/tools/callPlugin.d.ts +1 -0
  207. package/ts_build/src/agents/tools/callPlugin.js +9 -0
  208. package/ts_build/src/agents/tools/callPlugin.js.map +1 -0
  209. package/ts_build/src/agents/tools/client.d.ts +5 -0
  210. package/ts_build/src/agents/tools/client.js +21 -0
  211. package/ts_build/src/agents/tools/client.js.map +1 -0
  212. package/ts_build/src/agents/tools/embeddingSearch.d.ts +1 -0
  213. package/ts_build/src/agents/tools/embeddingSearch.js +9 -0
  214. package/ts_build/src/agents/tools/embeddingSearch.js.map +1 -0
  215. package/ts_build/src/agents/tools/execCommand.d.ts +1 -0
  216. package/ts_build/src/agents/tools/execCommand.js +25 -0
  217. package/ts_build/src/agents/tools/execCommand.js.map +1 -0
  218. package/ts_build/src/agents/tools/fileSearch.d.ts +1 -0
  219. package/ts_build/src/agents/tools/fileSearch.js +31 -0
  220. package/ts_build/src/agents/tools/fileSearch.js.map +1 -0
  221. package/ts_build/src/agents/tools/finalAnswer.d.ts +1 -0
  222. package/ts_build/src/agents/tools/finalAnswer.js +8 -0
  223. package/ts_build/src/agents/tools/finalAnswer.js.map +1 -0
  224. package/ts_build/src/agents/tools/github/definitions.d.ts +47 -0
  225. package/ts_build/src/agents/tools/github/definitions.js +86 -0
  226. package/ts_build/src/agents/tools/github/definitions.js.map +1 -0
  227. package/ts_build/src/agents/tools/github/index.d.ts +789 -0
  228. package/ts_build/src/agents/tools/github/index.js +56 -0
  229. package/ts_build/src/agents/tools/github/index.js.map +1 -0
  230. package/ts_build/src/agents/tools/googleSearch.d.ts +93 -0
  231. package/ts_build/src/agents/tools/googleSearch.js +117 -0
  232. package/ts_build/src/agents/tools/googleSearch.js.map +1 -0
  233. package/ts_build/src/agents/tools/googleSearchTypes.d.ts +74 -0
  234. package/ts_build/src/agents/tools/googleSearchTypes.js +3 -0
  235. package/ts_build/src/agents/tools/googleSearchTypes.js.map +1 -0
  236. package/ts_build/src/agents/tools/index.d.ts +24 -0
  237. package/ts_build/src/agents/tools/index.js +41 -0
  238. package/ts_build/src/agents/tools/index.js.map +1 -0
  239. package/ts_build/src/agents/tools/language/definitions.d.ts +89 -0
  240. package/ts_build/src/agents/tools/language/definitions.js +95 -0
  241. package/ts_build/src/agents/tools/language/definitions.js.map +1 -0
  242. package/ts_build/src/agents/tools/language/index.d.ts +4 -0
  243. package/ts_build/src/agents/tools/language/index.js +22 -0
  244. package/ts_build/src/agents/tools/language/index.js.map +1 -0
  245. package/ts_build/src/agents/tools/lintFile.d.ts +1 -0
  246. package/ts_build/src/agents/tools/lintFile.js +22 -0
  247. package/ts_build/src/agents/tools/lintFile.js.map +1 -0
  248. package/ts_build/src/agents/tools/list.d.ts +2 -0
  249. package/ts_build/src/agents/tools/list.js +505 -0
  250. package/ts_build/src/agents/tools/list.js.map +1 -0
  251. package/ts_build/src/agents/tools/loadWebpage.d.ts +8 -0
  252. package/ts_build/src/agents/tools/loadWebpage.js +97 -0
  253. package/ts_build/src/agents/tools/loadWebpage.js.map +1 -0
  254. package/ts_build/src/agents/tools/modifyFile.d.ts +2 -0
  255. package/ts_build/src/agents/tools/modifyFile.js +74 -0
  256. package/ts_build/src/agents/tools/modifyFile.js.map +1 -0
  257. package/ts_build/src/agents/tools/patch.d.ts +21 -0
  258. package/ts_build/src/agents/tools/patch.js +443 -0
  259. package/ts_build/src/agents/tools/patch.js.map +1 -0
  260. package/ts_build/src/agents/tools/readBlocks.d.ts +2 -0
  261. package/ts_build/src/agents/tools/readBlocks.js +59 -0
  262. package/ts_build/src/agents/tools/readBlocks.js.map +1 -0
  263. package/ts_build/src/agents/tools/readFile.d.ts +1 -0
  264. package/ts_build/src/agents/tools/readFile.js +46 -0
  265. package/ts_build/src/agents/tools/readFile.js.map +1 -0
  266. package/ts_build/src/agents/tools/scanFile.d.ts +1 -0
  267. package/ts_build/src/agents/tools/scanFile.js +36 -0
  268. package/ts_build/src/agents/tools/scanFile.js.map +1 -0
  269. package/ts_build/src/agents/tools/textSearch.d.ts +1 -0
  270. package/ts_build/src/agents/tools/textSearch.js +22 -0
  271. package/ts_build/src/agents/tools/textSearch.js.map +1 -0
  272. package/ts_build/src/agents/tools/types/fileblock.d.ts +5 -0
  273. package/ts_build/src/agents/tools/types/fileblock.js +3 -0
  274. package/ts_build/src/agents/tools/types/fileblock.js.map +1 -0
  275. package/ts_build/src/agents/tools/visionTool.d.ts +1 -0
  276. package/ts_build/src/agents/tools/visionTool.js +9 -0
  277. package/ts_build/src/agents/tools/visionTool.js.map +1 -0
  278. package/ts_build/src/agents/tools/writeFile.d.ts +2 -0
  279. package/ts_build/src/agents/tools/writeFile.js +61 -0
  280. package/ts_build/src/agents/tools/writeFile.js.map +1 -0
  281. package/ts_build/src/agents/vim/vim.d.ts +14 -0
  282. package/ts_build/src/agents/vim/vim.js +171 -0
  283. package/ts_build/src/agents/vim/vim.js.map +1 -0
  284. package/ts_build/src/ai.d.ts +10 -0
  285. package/ts_build/src/ai.js +102 -0
  286. package/ts_build/src/ai.js.map +1 -0
  287. package/ts_build/src/chat.d.ts +13 -0
  288. package/ts_build/src/chat.js +319 -0
  289. package/ts_build/src/chat.js.map +1 -0
  290. package/ts_build/src/cli.d.ts +2 -0
  291. package/ts_build/src/cli.js +98 -0
  292. package/ts_build/src/cli.js.map +1 -0
  293. package/ts_build/src/clients/anthropic.d.ts +31 -0
  294. package/ts_build/src/clients/anthropic.js +344 -0
  295. package/ts_build/src/clients/anthropic.js.map +1 -0
  296. package/ts_build/src/clients/gemini.d.ts +20 -0
  297. package/ts_build/src/clients/gemini.js +347 -0
  298. package/ts_build/src/clients/gemini.js.map +1 -0
  299. package/ts_build/src/clients/http.d.ts +12 -0
  300. package/ts_build/src/clients/http.js +91 -0
  301. package/ts_build/src/clients/http.js.map +1 -0
  302. package/ts_build/src/clients/index.d.ts +47 -0
  303. package/ts_build/src/clients/index.js +143 -0
  304. package/ts_build/src/clients/index.js.map +1 -0
  305. package/ts_build/src/clients/knowhow.d.ts +10 -0
  306. package/ts_build/src/clients/knowhow.js +24 -0
  307. package/ts_build/src/clients/knowhow.js.map +1 -0
  308. package/ts_build/src/clients/openai.d.ts +20 -0
  309. package/ts_build/src/clients/openai.js +221 -0
  310. package/ts_build/src/clients/openai.js.map +1 -0
  311. package/ts_build/src/clients/types.d.ts +89 -0
  312. package/ts_build/src/clients/types.js +3 -0
  313. package/ts_build/src/clients/types.js.map +1 -0
  314. package/ts_build/src/clients/xai.d.ts +22 -0
  315. package/ts_build/src/clients/xai.js +108 -0
  316. package/ts_build/src/clients/xai.js.map +1 -0
  317. package/ts_build/src/config.d.ts +9 -0
  318. package/ts_build/src/config.js +216 -0
  319. package/ts_build/src/config.js.map +1 -0
  320. package/ts_build/src/conversion.d.ts +7 -0
  321. package/ts_build/src/conversion.js +114 -0
  322. package/ts_build/src/conversion.js.map +1 -0
  323. package/ts_build/src/dataset/diffs/debug-errors.d.ts +1 -0
  324. package/ts_build/src/dataset/diffs/debug-errors.js +28 -0
  325. package/ts_build/src/dataset/diffs/debug-errors.js.map +1 -0
  326. package/ts_build/src/dataset/diffs/debug.d.ts +1 -0
  327. package/ts_build/src/dataset/diffs/debug.js +50 -0
  328. package/ts_build/src/dataset/diffs/debug.js.map +1 -0
  329. package/ts_build/src/dataset/diffs/generate.d.ts +1 -0
  330. package/ts_build/src/dataset/diffs/generate.js +70 -0
  331. package/ts_build/src/dataset/diffs/generate.js.map +1 -0
  332. package/ts_build/src/dataset/diffs/jsonl.d.ts +1 -0
  333. package/ts_build/src/dataset/diffs/jsonl.js +47 -0
  334. package/ts_build/src/dataset/diffs/jsonl.js.map +1 -0
  335. package/ts_build/src/dataset/diffs/test.d.ts +1 -0
  336. package/ts_build/src/dataset/diffs/test.js +114 -0
  337. package/ts_build/src/dataset/diffs/test.js.map +1 -0
  338. package/ts_build/src/embeddings.d.ts +19 -0
  339. package/ts_build/src/embeddings.js +322 -0
  340. package/ts_build/src/embeddings.js.map +1 -0
  341. package/ts_build/src/hashes.d.ts +6 -0
  342. package/ts_build/src/hashes.js +78 -0
  343. package/ts_build/src/hashes.js.map +1 -0
  344. package/ts_build/src/index.d.ts +14 -0
  345. package/ts_build/src/index.js +258 -0
  346. package/ts_build/src/index.js.map +1 -0
  347. package/ts_build/src/login.d.ts +2 -0
  348. package/ts_build/src/login.js +63 -0
  349. package/ts_build/src/login.js.map +1 -0
  350. package/ts_build/src/microphone.d.ts +9 -0
  351. package/ts_build/src/microphone.js +131 -0
  352. package/ts_build/src/microphone.js.map +1 -0
  353. package/ts_build/src/modules/index.d.ts +3 -0
  354. package/ts_build/src/modules/index.js +34 -0
  355. package/ts_build/src/modules/index.js.map +1 -0
  356. package/ts_build/src/modules/types.d.ts +37 -0
  357. package/ts_build/src/modules/types.js +3 -0
  358. package/ts_build/src/modules/types.js.map +1 -0
  359. package/ts_build/src/plugins/asana.d.ts +16 -0
  360. package/ts_build/src/plugins/asana.js +114 -0
  361. package/ts_build/src/plugins/asana.js.map +1 -0
  362. package/ts_build/src/plugins/downloader/downloader.d.ts +12 -0
  363. package/ts_build/src/plugins/downloader/downloader.js +174 -0
  364. package/ts_build/src/plugins/downloader/downloader.js.map +1 -0
  365. package/ts_build/src/plugins/downloader/index.d.ts +3 -0
  366. package/ts_build/src/plugins/downloader/index.js +41 -0
  367. package/ts_build/src/plugins/downloader/index.js.map +1 -0
  368. package/ts_build/src/plugins/downloader/plugin.d.ts +8 -0
  369. package/ts_build/src/plugins/downloader/plugin.js +83 -0
  370. package/ts_build/src/plugins/downloader/plugin.js.map +1 -0
  371. package/ts_build/src/plugins/downloader/types.d.ts +82 -0
  372. package/ts_build/src/plugins/downloader/types.js +79 -0
  373. package/ts_build/src/plugins/downloader/types.js.map +1 -0
  374. package/ts_build/src/plugins/embedding.d.ts +5 -0
  375. package/ts_build/src/plugins/embedding.js +28 -0
  376. package/ts_build/src/plugins/embedding.js.map +1 -0
  377. package/ts_build/src/plugins/figma.d.ts +20 -0
  378. package/ts_build/src/plugins/figma.js +94 -0
  379. package/ts_build/src/plugins/figma.js.map +1 -0
  380. package/ts_build/src/plugins/github.d.ts +1223 -0
  381. package/ts_build/src/plugins/github.js +115 -0
  382. package/ts_build/src/plugins/github.js.map +1 -0
  383. package/ts_build/src/plugins/jira.d.ts +15 -0
  384. package/ts_build/src/plugins/jira.js +94 -0
  385. package/ts_build/src/plugins/jira.js.map +1 -0
  386. package/ts_build/src/plugins/language.d.ts +8 -0
  387. package/ts_build/src/plugins/language.js +69 -0
  388. package/ts_build/src/plugins/language.js.map +1 -0
  389. package/ts_build/src/plugins/linear.d.ts +23 -0
  390. package/ts_build/src/plugins/linear.js +184 -0
  391. package/ts_build/src/plugins/linear.js.map +1 -0
  392. package/ts_build/src/plugins/notion.d.ts +32 -0
  393. package/ts_build/src/plugins/notion.js +131 -0
  394. package/ts_build/src/plugins/notion.js.map +1 -0
  395. package/ts_build/src/plugins/plugins.d.ts +11 -0
  396. package/ts_build/src/plugins/plugins.js +51 -0
  397. package/ts_build/src/plugins/plugins.js.map +1 -0
  398. package/ts_build/src/plugins/types.d.ts +5 -0
  399. package/ts_build/src/plugins/types.js +3 -0
  400. package/ts_build/src/plugins/types.js.map +1 -0
  401. package/ts_build/src/plugins/url.d.ts +8 -0
  402. package/ts_build/src/plugins/url.js +50 -0
  403. package/ts_build/src/plugins/url.js.map +1 -0
  404. package/ts_build/src/plugins/vim.d.ts +11 -0
  405. package/ts_build/src/plugins/vim.js +63 -0
  406. package/ts_build/src/plugins/vim.js.map +1 -0
  407. package/ts_build/src/prompts/BasicCodeDocumenter.d.ts +2 -0
  408. package/ts_build/src/prompts/BasicCodeDocumenter.js +4 -0
  409. package/ts_build/src/prompts/BasicCodeDocumenter.js.map +1 -0
  410. package/ts_build/src/prompts/BasicProjectDocumenter.d.ts +2 -0
  411. package/ts_build/src/prompts/BasicProjectDocumenter.js +4 -0
  412. package/ts_build/src/prompts/BasicProjectDocumenter.js.map +1 -0
  413. package/ts_build/src/prompts/EmbeddingSeachHelper.d.ts +2 -0
  414. package/ts_build/src/prompts/EmbeddingSeachHelper.js +4 -0
  415. package/ts_build/src/prompts/EmbeddingSeachHelper.js.map +1 -0
  416. package/ts_build/src/prompts/index.d.ts +13 -0
  417. package/ts_build/src/prompts/index.js +15 -0
  418. package/ts_build/src/prompts/index.js.map +1 -0
  419. package/ts_build/src/server/index.d.ts +1 -0
  420. package/ts_build/src/server/index.js +17 -0
  421. package/ts_build/src/server/index.js.map +1 -0
  422. package/ts_build/src/services/AgentService.d.ts +14 -0
  423. package/ts_build/src/services/AgentService.js +87 -0
  424. package/ts_build/src/services/AgentService.js.map +1 -0
  425. package/ts_build/src/services/EmbeddingService.d.ts +39 -0
  426. package/ts_build/src/services/EmbeddingService.js +307 -0
  427. package/ts_build/src/services/EmbeddingService.js.map +1 -0
  428. package/ts_build/src/services/EventService.d.ts +9 -0
  429. package/ts_build/src/services/EventService.js +20 -0
  430. package/ts_build/src/services/EventService.js.map +1 -0
  431. package/ts_build/src/services/GitHub.d.ts +11 -0
  432. package/ts_build/src/services/GitHub.js +52 -0
  433. package/ts_build/src/services/GitHub.js.map +1 -0
  434. package/ts_build/src/services/KnowhowClient.d.ts +18 -0
  435. package/ts_build/src/services/KnowhowClient.js +85 -0
  436. package/ts_build/src/services/KnowhowClient.js.map +1 -0
  437. package/ts_build/src/services/Mcp.d.ts +377 -0
  438. package/ts_build/src/services/Mcp.js +221 -0
  439. package/ts_build/src/services/Mcp.js.map +1 -0
  440. package/ts_build/src/services/McpServer.d.ts +19 -0
  441. package/ts_build/src/services/McpServer.js +104 -0
  442. package/ts_build/src/services/McpServer.js.map +1 -0
  443. package/ts_build/src/services/McpWebsocketTransport.d.ts +13 -0
  444. package/ts_build/src/services/McpWebsocketTransport.js +59 -0
  445. package/ts_build/src/services/McpWebsocketTransport.js.map +1 -0
  446. package/ts_build/src/services/S3.d.ts +9 -0
  447. package/ts_build/src/services/S3.js +116 -0
  448. package/ts_build/src/services/S3.js.map +1 -0
  449. package/ts_build/src/services/Tools.d.ts +19 -0
  450. package/ts_build/src/services/Tools.js +51 -0
  451. package/ts_build/src/services/Tools.js.map +1 -0
  452. package/ts_build/src/services/flags.d.ts +13 -0
  453. package/ts_build/src/services/flags.js +48 -0
  454. package/ts_build/src/services/flags.js.map +1 -0
  455. package/ts_build/src/services/index.d.ts +8 -0
  456. package/ts_build/src/services/index.js +38 -0
  457. package/ts_build/src/services/index.js.map +1 -0
  458. package/ts_build/src/terminal.d.ts +1 -0
  459. package/ts_build/src/terminal.js +35 -0
  460. package/ts_build/src/terminal.js.map +1 -0
  461. package/ts_build/src/types.d.ts +181 -0
  462. package/ts_build/src/types.js +94 -0
  463. package/ts_build/src/types.js.map +1 -0
  464. package/ts_build/src/utils/index.d.ts +24 -0
  465. package/ts_build/src/utils/index.js +116 -0
  466. package/ts_build/src/utils/index.js.map +1 -0
  467. package/ts_build/src/worker.d.ts +1 -0
  468. package/ts_build/src/worker.js +68 -0
  469. package/ts_build/src/worker.js.map +1 -0
  470. package/ts_build/tests/integration/figma.test.d.ts +1 -0
  471. package/ts_build/tests/integration/figma.test.js +47 -0
  472. package/ts_build/tests/integration/figma.test.js.map +1 -0
  473. package/ts_build/tests/integration/fileblocks/readwrite.test.d.ts +1 -0
  474. package/ts_build/tests/integration/fileblocks/readwrite.test.js +95 -0
  475. package/ts_build/tests/integration/fileblocks/readwrite.test.js.map +1 -0
  476. package/ts_build/tests/integration/patching.test.d.ts +1 -0
  477. package/ts_build/tests/integration/patching.test.js +117 -0
  478. package/ts_build/tests/integration/patching.test.js.map +1 -0
  479. package/ts_build/tests/languagePlugin.test.d.ts +1 -0
  480. package/ts_build/tests/languagePlugin.test.js +78 -0
  481. package/ts_build/tests/languagePlugin.test.js.map +1 -0
  482. package/ts_build/tests/patching/corrupted.test.d.ts +1 -0
  483. package/ts_build/tests/patching/corrupted.test.js +53 -0
  484. package/ts_build/tests/patching/corrupted.test.js.map +1 -0
  485. package/ts_build/tests/patching/imports.test.d.ts +1 -0
  486. package/ts_build/tests/patching/imports.test.js +61 -0
  487. package/ts_build/tests/patching/imports.test.js.map +1 -0
  488. package/ts_build/tests/test.spec.d.ts +1 -0
  489. package/ts_build/tests/test.spec.js +101 -0
  490. package/ts_build/tests/test.spec.js.map +1 -0
  491. package/tsconfig.json +31 -0
  492. package/tslint.json +11 -0
@@ -0,0 +1,170 @@
1
+ import { Client } from "@notionhq/client";
2
+ import { Plugin } from "./types";
3
+ import { PageObjectResponse } from "@notionhq/client/build/src/api-endpoints";
4
+ import { Embeddable, MinimalEmbedding } from "../types";
5
+
6
+ export class NotionPlugin implements Plugin {
7
+ notionClient: Client;
8
+
9
+ constructor() {
10
+ this.notionClient = new Client({
11
+ auth: process.env.NOTION_TOKEN,
12
+ });
13
+ }
14
+
15
+ extractUrls(userPrompt: string): string[] {
16
+ const notionUrlRegex = /https:\/\/www\.notion\.so\/[^\s]+/g;
17
+ const matches = userPrompt.match(notionUrlRegex);
18
+ return matches || [];
19
+ }
20
+
21
+ getIdFromUrl(url: string): string {
22
+ return url.split("-").pop() || "";
23
+ }
24
+
25
+ findKeyInObject<T>(obj: T, searchKey = "plain_text") {
26
+ if (!obj) {
27
+ return null;
28
+ }
29
+ const keys = Object.keys(obj);
30
+ for (const key of keys) {
31
+ if (key === searchKey) {
32
+ return obj[key];
33
+ } else if (typeof obj[key] === "object") {
34
+ const result = this.findKeyInObject(obj[key], searchKey);
35
+ if (result) {
36
+ return result;
37
+ }
38
+ }
39
+ }
40
+ }
41
+ async getAllChildBlocks(
42
+ pageId: string,
43
+ maxDepth = 1,
44
+ currentDepth = 1,
45
+ processed = {}
46
+ ) {
47
+ if (processed[pageId] || currentDepth > maxDepth) {
48
+ return { results: [] };
49
+ }
50
+ console.log(
51
+ `Notion Plugin: Fetching all blocks for page ${pageId} at depth ${currentDepth}`
52
+ );
53
+ processed[pageId] = true;
54
+ const response = await this.notionClient.blocks.children.list({
55
+ block_id: pageId,
56
+ });
57
+
58
+ let cursor = response.next_cursor;
59
+ while (cursor) {
60
+ console.log("Fetching more blocks");
61
+ const childResponse = await this.notionClient.blocks.children.list({
62
+ block_id: pageId,
63
+ start_cursor: cursor,
64
+ });
65
+ response.results.push(...childResponse.results);
66
+ cursor = childResponse.next_cursor;
67
+ }
68
+
69
+ for (const block of response.results) {
70
+ if ("has_children" in block && block.has_children) {
71
+ const childBlocks = await this.getAllChildBlocks(
72
+ block.id,
73
+ maxDepth,
74
+ currentDepth + 1,
75
+ processed
76
+ );
77
+ response.results.push(...childBlocks.results);
78
+ }
79
+ }
80
+
81
+ response.has_more = false;
82
+ response.next_cursor = null;
83
+
84
+ return response;
85
+ }
86
+
87
+ async embed(user_input: string) {
88
+ const embeddings = new Array<MinimalEmbedding>();
89
+ const urls = this.extractUrls(user_input);
90
+ const results = await this.getPagesFromUrls(urls);
91
+ if (!results) {
92
+ return embeddings;
93
+ }
94
+
95
+ for (const result of results) {
96
+ let { page, blocks } = result;
97
+ const childPages = blocks.results.filter(
98
+ (b) => "has_children" in b && b.has_children
99
+ );
100
+
101
+ console.log(JSON.stringify(results, null, 2));
102
+
103
+ const childBlocks = await Promise.all(
104
+ childPages.map(async (childPage) => {
105
+ const blocks = await this.getAllChildBlocks(childPage.id);
106
+ return { childPage, blocks };
107
+ })
108
+ );
109
+
110
+ for (const child of childBlocks) {
111
+ const title =
112
+ "child_page" in child.childPage && child.childPage.child_page;
113
+ embeddings.push({
114
+ id: child.childPage.id,
115
+ text: JSON.stringify(
116
+ child.blocks.results.map((b) => this.findKeyInObject(b))
117
+ ),
118
+ metadata: {
119
+ ...title,
120
+ },
121
+ });
122
+ }
123
+ }
124
+
125
+ console.log(JSON.stringify(embeddings, null, 2));
126
+ return embeddings;
127
+ }
128
+
129
+ async getPageEmbedding(page: PageObjectResponse) {
130
+ let id = page.id;
131
+ let content = JSON.stringify(page);
132
+
133
+ return { id, content };
134
+ }
135
+
136
+ async getPageFromUrl(url: string) {
137
+ const pageId = url.split("-").pop();
138
+ if (pageId) {
139
+ console.log(`Fetching Notion page ${pageId}`);
140
+ const page = await this.notionClient.pages.retrieve({ page_id: pageId });
141
+ const blocks = await this.getAllChildBlocks(page.id);
142
+ return { page, blocks };
143
+ }
144
+ return null;
145
+ }
146
+
147
+ async getPagesFromUrls(urls: string[]) {
148
+ const pages = await Promise.all(
149
+ urls.map(async (url) => {
150
+ return this.getPageFromUrl(url);
151
+ })
152
+ );
153
+ return pages;
154
+ }
155
+
156
+ async call(userPrompt: string): Promise<string> {
157
+ const urls = this.extractUrls(userPrompt);
158
+ const pages = await this.getPagesFromUrls(urls);
159
+ const pagesDataFiltered = pages.filter((page) => page !== null);
160
+ if (pagesDataFiltered.length === 0) {
161
+ return "NOTION PLUGIN: No pages found";
162
+ }
163
+
164
+ const markdownPages = pagesDataFiltered
165
+ .map((page) => `### Page: ${JSON.stringify(page, null, 2)}\n-`)
166
+ .join("\n\n");
167
+ console.log(markdownPages);
168
+ return `NOTION PLUGIN: The following pages were loaded:\n\n${markdownPages}`;
169
+ }
170
+ }
@@ -0,0 +1,56 @@
1
+ import glob from "glob";
2
+ import { Plugin } from "./types";
3
+ import { VimPlugin } from "./vim";
4
+ import { LanguagePlugin } from "./language";
5
+ import { EmbeddingPlugin } from "./embedding";
6
+ import { GitHubPlugin } from "./github";
7
+ import { AsanaPlugin } from "./asana";
8
+ import { LinearPlugin } from "./linear";
9
+ import { JiraPlugin } from "./jira";
10
+ import { NotionPlugin } from "./notion";
11
+ import { DownloaderPlugin } from "./downloader/plugin";
12
+ import { FigmaPlugin } from "./figma";
13
+ import { UrlPlugin } from "./url";
14
+
15
+ export class PluginService {
16
+ plugins = {
17
+ embeddings: new EmbeddingPlugin(),
18
+ vim: new VimPlugin(),
19
+ github: new GitHubPlugin(),
20
+ asana: new AsanaPlugin(),
21
+ linear: new LinearPlugin(),
22
+ jira: new JiraPlugin(),
23
+ notion: new NotionPlugin(),
24
+ download: new DownloaderPlugin(),
25
+ figma: new FigmaPlugin(),
26
+ language: new LanguagePlugin(this),
27
+ url: new UrlPlugin(),
28
+ } as Record<string, Plugin>;
29
+
30
+ listPlugins() {
31
+ return Object.keys(this.plugins);
32
+ }
33
+
34
+ isPlugin(name: string) {
35
+ return name in this.plugins;
36
+ }
37
+
38
+ registerPlugin(name, plugin: Plugin) {
39
+ this.plugins[name] = plugin;
40
+ }
41
+
42
+ async callMany(plugins: string[], user_input?: string) {
43
+ const calls = plugins.map((p) => this.plugins[p].call(user_input));
44
+ return (await Promise.all(calls)).join("\n\n");
45
+ }
46
+
47
+ async call(kind: string, user_input?: string) {
48
+ return this.plugins[kind].call(user_input);
49
+ }
50
+
51
+ async embed(kind: string, user_input: string) {
52
+ return this.plugins[kind].embed(user_input);
53
+ }
54
+ }
55
+
56
+ export const Plugins = new PluginService();
@@ -0,0 +1,5 @@
1
+ import { Embeddable, MinimalEmbedding } from "../types";
2
+ export interface Plugin {
3
+ call(user_input?: string): Promise<string>;
4
+ embed(user_input?: string): Promise<MinimalEmbedding[]>;
5
+ }
@@ -0,0 +1,63 @@
1
+ import { Plugin } from "./types";
2
+ import { MinimalEmbedding } from "../types";
3
+ import axios from "axios";
4
+ import * as cheerio from "cheerio";
5
+ import loadWebpage from "../agents/tools/loadWebpage";
6
+
7
+ export class UrlPlugin implements Plugin {
8
+ async embed(userPrompt: string): Promise<MinimalEmbedding[]> {
9
+ const urls = this.extractUrls(userPrompt);
10
+ const embeddings = await Promise.all(urls.map(this.fetchAndParseUrl));
11
+ return embeddings.filter((e): e is MinimalEmbedding => e !== null);
12
+ }
13
+
14
+ extractUrls(userPrompt: string): string[] {
15
+ const urlRegex = /(https?:\/\/[^\s]+)/g;
16
+ return userPrompt.match(urlRegex) || [];
17
+ }
18
+
19
+ async fetchAndParseUrl(url: string): Promise<MinimalEmbedding | null> {
20
+ try {
21
+ const text = await loadWebpage(url);
22
+
23
+ console.log(`URL PLUGIN: Fetched content from ${url}:`, text);
24
+
25
+ return {
26
+ id: url + "-url",
27
+ text,
28
+ metadata: { url },
29
+ };
30
+ } catch (error) {
31
+ console.error(`Error fetching or parsing URL ${url}:`, error);
32
+ return null;
33
+ }
34
+ }
35
+
36
+ async call(userPrompt: string): Promise<string> {
37
+ const urls = this.extractUrls(userPrompt);
38
+ if (urls.length === 0) {
39
+ return "URL PLUGIN: No URLs detected.";
40
+ }
41
+
42
+ const results = await Promise.all(urls.map(this.fetchAndParseUrl));
43
+ const validResults = results.filter(
44
+ (r): r is MinimalEmbedding => r !== null
45
+ );
46
+
47
+ if (validResults.length === 0) {
48
+ return "URL PLUGIN: Failed to fetch or parse any URLs.";
49
+ }
50
+
51
+ const formattedResults = validResults
52
+ .map(
53
+ (result) =>
54
+ `URL: ${result.metadata.url}\n\nContent:\n${result.text.substring(
55
+ 0,
56
+ 500
57
+ )}...`
58
+ )
59
+ .join("\n\n---\n\n");
60
+
61
+ return `URL PLUGIN: Successfully fetched and parsed the following URLs:\n\n${formattedResults}`;
62
+ }
63
+ }
@@ -0,0 +1,73 @@
1
+ import glob from "glob";
2
+ import { readFile, fileExists, fileStat } from "../utils";
3
+ import { Plugin } from "./types";
4
+
5
+ export class VimPlugin implements Plugin {
6
+ async embed(userPrompt: string) {
7
+ return [];
8
+ }
9
+
10
+ async getVimFiles() {
11
+ const vimFiles = await glob.sync("./**/*.swp", { dot: true });
12
+ return vimFiles;
13
+ }
14
+
15
+ async getSourcePath(vimPath: string, dotFile = false) {
16
+ const pathParts = vimPath.split("/");
17
+ const fileName = pathParts[pathParts.length - 1];
18
+ const cleanedFileName = fileName.slice(1, fileName.length - 4);
19
+ const sourcePath = pathParts.slice(0, pathParts.length - 1).join("/");
20
+ const finalPath = sourcePath + "/" + cleanedFileName;
21
+ const dotFilePath = sourcePath + "/." + cleanedFileName;
22
+
23
+ const finalFileExists = await fileExists(finalPath);
24
+
25
+ if (finalFileExists) {
26
+ return finalPath;
27
+ }
28
+
29
+ const dotFileExists = await fileExists(dotFilePath);
30
+ if (dotFileExists) {
31
+ return dotFilePath;
32
+ }
33
+
34
+ return finalPath;
35
+ }
36
+
37
+ async getFileContents(swapFile: string) {
38
+ const filePath = await this.getSourcePath(swapFile);
39
+ const exists = await fileExists(filePath);
40
+ if (!exists) {
41
+ return { filePath, content: "FILE DOES NOT EXIST" };
42
+ }
43
+
44
+ const stat = await fileStat(filePath);
45
+ if (stat.isDirectory()) {
46
+ return { filePath, content: "DIRECTORY" };
47
+ }
48
+ if (stat.size > 32000) {
49
+ console.error(
50
+ `VIM PLUGIN: File ${filePath} is too large with size ${stat.size}`
51
+ );
52
+ return { filePath, content: "FILE TOO LARGE" };
53
+ }
54
+
55
+ console.log(`VIM PLUGIN: Reading file ${filePath}`);
56
+ const content = await readFile(filePath, "utf8");
57
+ return { filePath, content };
58
+ }
59
+
60
+ async call() {
61
+ const vimFiles = await this.getVimFiles();
62
+ const fileContents = await Promise.all(
63
+ vimFiles.map((f) => this.getFileContents(f))
64
+ );
65
+ if (fileContents.length === 0) {
66
+ return "VIM PLUGIN: No files open in vim";
67
+ }
68
+ return (
69
+ "VIM PLUGIN: The following files are open in vim: " +
70
+ JSON.stringify(fileContents)
71
+ );
72
+ }
73
+ }
@@ -0,0 +1 @@
1
+ export default "Summarize this code, with a focus on dependencies, types, models, classes, comments, and examples. Include snippets of core concepts if relevant. \n\n {text}";
@@ -0,0 +1 @@
1
+ export default "Summarize this project documentation, with the goal of creating a useful primer for others to understand the project in a technical way. Focus on how the different pieces of the project interact with each other, design patterns, naming conventions, etc. \n\n {text}";
@@ -0,0 +1 @@
1
+ export default `Given this file, create a short summary of what the file contains, and include a list of questions this file would help answer\n\n{text}`;
@@ -0,0 +1,9 @@
1
+ import BasicCodeDocumenter from "./BasicCodeDocumenter";
2
+ import BasicProjectDocumenter from "./BasicProjectDocumenter";
3
+ import BasicEmbeddingExplainer from "./EmbeddingSeachHelper";
4
+
5
+ export const Prompts = [
6
+ { BasicCodeDocumenter },
7
+ { BasicProjectDocumenter },
8
+ { BasicEmbeddingExplainer },
9
+ ];
@@ -0,0 +1,14 @@
1
+ import express from "express";
2
+
3
+ const app = express();
4
+ const port = 4545;
5
+
6
+ app.use((req, res) => {
7
+ const { path, body, query } = req;
8
+ console.log({ path, body, query });
9
+ res.send("Hello World!");
10
+ });
11
+
12
+ app.listen(port, () => {
13
+ console.log(`Server started at http://localhost:${port}`);
14
+ });
@@ -0,0 +1,98 @@
1
+ import { getConfigSync } from "../config";
2
+ import { IAgent } from "../agents/interface";
3
+ import { ConfigAgent } from "../agents/configurable/ConfigAgent";
4
+ import { Events } from "./EventService";
5
+ import { Tools } from "./Tools";
6
+
7
+ export class AgentService {
8
+ private agents: Map<string, IAgent> = new Map();
9
+
10
+ constructor() {
11
+ this.wireUp();
12
+ }
13
+
14
+ public wireUp() {
15
+ Tools.addTool({
16
+ type: "function",
17
+ function: {
18
+ name: "agentCall",
19
+ description: `Allows an agent to ask another agent a question. Useful for getting help from agents that are configured for specific goals.
20
+ ${this.getAgentDescriptions()}`,
21
+ parameters: {
22
+ type: "object",
23
+ positional: true,
24
+ properties: {
25
+ agentName: {
26
+ type: "string",
27
+ description: `The name of the agent to call. Available agents: ${this.listAgents()}`,
28
+ },
29
+ query: {
30
+ type: "string",
31
+ description: `The query to send to the agent`,
32
+ },
33
+ },
34
+ required: ["agentName", "query"],
35
+ },
36
+ },
37
+ });
38
+ Events.on("agents:register", (data) => {
39
+ console.log(`Agent registered: ${data.name}`);
40
+ const { name, agent } = data;
41
+ this.registerAgentByName(name, agent);
42
+ });
43
+
44
+ Events.on("agents:call", (data) => {
45
+ console.log(`Agent called: ${data.name}`);
46
+ const { name, query, resolve, reject } = data;
47
+ this.callAgent(name, query).then(resolve).catch(reject);
48
+ });
49
+ }
50
+
51
+ public registerAgent(agent: IAgent): void {
52
+ this.registerAgentByName(agent.name, agent);
53
+ }
54
+
55
+ public registerAgentByName(name: string, agent: IAgent): void {
56
+ this.agents.set(name, agent);
57
+ }
58
+
59
+ public getAgent(name: string): IAgent {
60
+ const agent = this.agents.get(name);
61
+ if (!agent) {
62
+ throw new Error(
63
+ `Agent ${name} not found. Options are: ${this.listAgents()}`
64
+ );
65
+ }
66
+ return agent;
67
+ }
68
+
69
+ public listAgents(): string[] {
70
+ return Array.from(this.agents.keys());
71
+ }
72
+
73
+ public getAgentDescriptions() {
74
+ return Object.keys(this.agents).map((key) => {
75
+ const agent = this.getAgent(key);
76
+ return `name: ${agent.name} \n description: ${agent.description}`;
77
+ });
78
+ }
79
+
80
+ public loadAgentsFromConfig() {
81
+ const config = getConfigSync();
82
+ const agents = config.agents || [];
83
+
84
+ for (const agent of agents) {
85
+ this.registerAgent(new ConfigAgent(agent));
86
+ }
87
+ }
88
+
89
+ public async callAgent(name: string, query: string): Promise<string> {
90
+ const agent = this.agents.get(name);
91
+ if (!agent) {
92
+ return `Agent ${name} not found. Options are: ${this.listAgents()}`;
93
+ }
94
+ return agent.call(query);
95
+ }
96
+ }
97
+
98
+ export const Agents = new AgentService();