@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,108 @@
1
+ const workspace = process.env.ASANA_WORKSPACE;
2
+ class AsanaTools {
3
+ private client = require("asana").ApiClient.instance;
4
+
5
+ constructor(private accessToken: string) {
6
+ this.client.authentications.token = process.env.ASANA_TOKEN;
7
+ this.client.defaultHeaders = {
8
+ "Asana-Enable": "new_user_task_lists,new_goal_memberships",
9
+ };
10
+ }
11
+
12
+ async createTask(projectId: string, taskName: string, taskNotes: string) {
13
+ if (!workspace) {
14
+ throw new Error("Need to set ENV Variable ASANA Workspace");
15
+ }
16
+
17
+ const task = await this.client.tasks.create({
18
+ workspace,
19
+ projects: [projectId],
20
+ name: taskName,
21
+ notes: taskNotes,
22
+ });
23
+ console.log(`Task created: ${task.permalink_url}`);
24
+ return task;
25
+ }
26
+
27
+ async updateTask(taskId: string, updates: object) {
28
+ const task = await this.client.tasks.updateTask(taskId, updates);
29
+ console.log(`Task updated: ${task.permalink_url}`);
30
+ return task;
31
+ }
32
+
33
+ async searchTasks(searchTerm: string) {
34
+ if (!workspace) {
35
+ throw new Error("Need to set ENV Variable ASANA Workspace");
36
+ }
37
+ searchTerm = searchTerm.toLowerCase();
38
+ const allTasks = await this.client.tasks.findAll({
39
+ opt_expand: "notes",
40
+ workspace,
41
+ });
42
+ const found = allTasks.data.filter(
43
+ (t) =>
44
+ t.notes.toLowerCase().includes(searchTerm) ||
45
+ t.name.toLowerCase().includes(searchTerm)
46
+ );
47
+
48
+ console.log("Found", found.length, "tasks");
49
+ return found;
50
+ }
51
+
52
+ async findTask(taskId: string) {
53
+ const task = await this.client.tasks.findById(taskId);
54
+ console.log(`Task found: ${task.permalink_url}`);
55
+ return task;
56
+ }
57
+
58
+ async getSubtasks(taskId: string) {
59
+ const tasks = await this.client.tasks.subtasks(taskId);
60
+ return tasks.data;
61
+ }
62
+
63
+ async createSubtask(taskId: string, taskName: string, taskNotes = "") {
64
+ const task = await this.client.tasks.addSubtask(taskId, {
65
+ name: taskName,
66
+ notes: taskNotes,
67
+ });
68
+ return task;
69
+ }
70
+
71
+ async myTasks(project?: string) {
72
+ const me = await this.client.users.me();
73
+ const tasks = await this.client.tasks.findAll({
74
+ assignee: Number(me.gid),
75
+ project,
76
+ workspace,
77
+ opt_expand: "completed",
78
+ });
79
+ return tasks.data.filter((t) => !t.completed);
80
+ }
81
+
82
+ async listProjects() {
83
+ if (!workspace) {
84
+ throw new Error("Need to set ENV Variable ASANA Workspace");
85
+ }
86
+ const allData = [];
87
+ let projects = await this.client.projects.findAll({
88
+ workspace,
89
+ archived: false,
90
+ });
91
+ do {
92
+ allData.push(...projects.data);
93
+ projects = await projects.nextPage();
94
+ } while (projects && projects?.data?.length);
95
+
96
+ return allData;
97
+ }
98
+ }
99
+
100
+ const asana = new AsanaTools(process.env.ASANA_TOKEN);
101
+ export const createTask = asana.createTask.bind(asana);
102
+ export const updateTask = asana.updateTask.bind(asana);
103
+ export const searchTasks = asana.searchTasks.bind(asana);
104
+ export const findTask = asana.findTask.bind(asana);
105
+ export const getSubtasks = asana.getSubtasks.bind(asana);
106
+ export const createSubtask = asana.createSubtask.bind(asana);
107
+ export const myTasks = asana.myTasks.bind(asana);
108
+ export const listProjects = asana.listProjects.bind(asana);
@@ -0,0 +1,8 @@
1
+ import Marked from "marked";
2
+ import { ask } from "../../utils";
3
+
4
+ export async function askHuman(question: string) {
5
+ console.log("AI has asked: ");
6
+ console.log(Marked.parse(question), "\n");
7
+ return ask("response: ");
8
+ }
@@ -0,0 +1,4 @@
1
+ import { Plugins } from "../../plugins/plugins";
2
+ export async function callPlugin(pluginName: string, userInput: string) {
3
+ return Plugins.call(pluginName, userInput);
4
+ }
@@ -0,0 +1,5 @@
1
+ // Tool to search for files related to the user's goal
2
+ import { Plugins } from "../../plugins/plugins";
3
+ export async function embeddingSearch(keyword: string): Promise<string> {
4
+ return Plugins.call("embeddings", keyword);
5
+ }
@@ -0,0 +1,26 @@
1
+ import { execAsync } from "../../utils";
2
+
3
+ // Tool to execute a command in the system's command line interface
4
+ export const execCommand = async (command: string): Promise<string> => {
5
+ let output = "";
6
+ console.log("execCommand:", command);
7
+ const { stdout, stderr } = await execAsync(command).catch((e) => e);
8
+ if (stderr) {
9
+ output += stderr + "\n";
10
+ }
11
+ output += stdout;
12
+ console.log(`$ ${command}:\n${output}`);
13
+
14
+ const fullOutput = output.split("\n");
15
+
16
+ const maxLines = 1000;
17
+ const maxCharacters = 40000;
18
+ const shouldTrim = fullOutput.length > maxLines;
19
+ const trimmedOutput = shouldTrim ? fullOutput.slice(0, maxLines) : fullOutput;
20
+
21
+ const trimmedMessage = shouldTrim
22
+ ? ` (${fullOutput.length - maxLines} results trimmed)`
23
+ : "";
24
+
25
+ return trimmedOutput.join("\n").slice(0, maxCharacters) + trimmedMessage;
26
+ };
@@ -0,0 +1,33 @@
1
+ import glob from "glob";
2
+ import { getConfiguredEmbeddings } from "../../embeddings";
3
+ import { execCommand } from "./execCommand";
4
+ import { getIgnorePattern } from "../../config";
5
+ import { toUniqueArray } from "../../utils";
6
+
7
+ export async function fileSearch(searchTerm) {
8
+ const searchTermLower = searchTerm.toLowerCase();
9
+ const pattern = `./**/*${searchTermLower}*`;
10
+ const ignore = await getIgnorePattern();
11
+ console.log({ pattern, ignore });
12
+ const files = await glob.sync(pattern, {
13
+ ignore,
14
+ });
15
+
16
+ if (files.length === 0) {
17
+ const embeddings = await getConfiguredEmbeddings();
18
+ const results = embeddings.filter((embedding) =>
19
+ embedding.id.toLowerCase().includes(searchTermLower)
20
+ );
21
+
22
+ // ids are filepath.txt-part
23
+ const ids = toUniqueArray(
24
+ results.map((r) => {
25
+ const parts = r.id.split("-");
26
+ return parts.slice(0, -1).join("-");
27
+ })
28
+ );
29
+ files.push(...ids);
30
+ }
31
+
32
+ return JSON.stringify(files);
33
+ }
@@ -0,0 +1,4 @@
1
+ // Finalize the AI's task and return the answer to the user
2
+ export function finalAnswer(answer: string): string {
3
+ return answer;
4
+ }
@@ -0,0 +1,89 @@
1
+ export const definitions = [
2
+ {
3
+ type: "function",
4
+ function: {
5
+ name: "getPullRequest",
6
+ description:
7
+ "Fetches a pull request from GitHub using the provided URL. Requires a valid GITHUB_TOKEN.",
8
+ parameters: {
9
+ type: "object",
10
+ positional: true,
11
+ properties: {
12
+ url: {
13
+ type: "string",
14
+ description: "The URL of the pull request to fetch.",
15
+ },
16
+ },
17
+ required: ["url"],
18
+ },
19
+ },
20
+ },
21
+ {
22
+ type: "function",
23
+ function: {
24
+ name: "getPullRequestBuildStatuses",
25
+ description:
26
+ "Fetches the build statuses for a pull request using the provided URL. Requires a valid GITHUB_TOKEN.",
27
+ parameters: {
28
+ type: "object",
29
+ positional: true,
30
+ properties: {
31
+ url: {
32
+ type: "string",
33
+ description:
34
+ "The URL of the pull request to fetch build statuses for.",
35
+ },
36
+ },
37
+ required: ["url"],
38
+ },
39
+ },
40
+ },
41
+ {
42
+ type: "function",
43
+ function: {
44
+ name: "getRunLogs",
45
+ description:
46
+ "Retrieves the run logs for a specified GitHub Actions run ID in the specified repository.",
47
+ parameters: {
48
+ type: "object",
49
+ positional: true,
50
+ properties: {
51
+ runId: {
52
+ type: "number",
53
+ description:
54
+ "The ID of the GitHub Actions run to retrieve logs for.",
55
+ },
56
+ owner: {
57
+ type: "string",
58
+ description: "The owner of the repository containing the run.",
59
+ },
60
+ repo: {
61
+ type: "string",
62
+ description: "The name of the repository containing the run.",
63
+ },
64
+ },
65
+ required: ["runId", "owner", "repo"],
66
+ },
67
+ },
68
+ },
69
+ {
70
+ type: "function",
71
+ function: {
72
+ name: "getPullRequestBuildFailureLogs",
73
+ description:
74
+ "Fetches the build failure logs for a pull request using the provided URL. Specifically focuses on failures.",
75
+ parameters: {
76
+ type: "object",
77
+ positional: true,
78
+ properties: {
79
+ url: {
80
+ type: "string",
81
+ description:
82
+ "The URL of the pull request to fetch failure logs for.",
83
+ },
84
+ },
85
+ required: ["url"],
86
+ },
87
+ },
88
+ },
89
+ ];
@@ -0,0 +1,67 @@
1
+ import { Octokit } from "@octokit/rest";
2
+ import * as fs from "fs";
3
+ import { execCommand } from "../execCommand";
4
+
5
+ const octokit = new Octokit({
6
+ auth: process.env.GITHUB_TOKEN,
7
+ });
8
+
9
+ export async function getPullRequest(url: string) {
10
+ const [owner, repo, _, pullNumber] = url.split("/").slice(-4);
11
+ const pullRequest = await octokit.rest.pulls.get({
12
+ owner,
13
+ repo,
14
+ pull_number: parseInt(pullNumber, 10),
15
+ });
16
+
17
+ return pullRequest;
18
+ }
19
+
20
+ export async function getPullRequestBuildStatuses(url: string) {
21
+ const [owner, repo, _, pullNumber] = url.split("/").slice(-4);
22
+
23
+ const pullRequest = await octokit.rest.pulls.get({
24
+ owner,
25
+ repo,
26
+ pull_number: parseInt(pullNumber, 10),
27
+ });
28
+
29
+ const { data: statuses } = await octokit.rest.checks.listForRef({
30
+ owner,
31
+ repo,
32
+ ref: pullRequest.data.head.sha,
33
+ });
34
+
35
+ return statuses;
36
+ }
37
+
38
+ export async function getRunLogs(runId: number, owner: string, repo: string) {
39
+ const logs = await execCommand(
40
+ `gh run view ${runId} -R ${owner}/${repo} --log`
41
+ );
42
+ return logs;
43
+ }
44
+
45
+ export async function getPullRequestBuildFailureLogs(url: string) {
46
+ const [owner, repo, _, pullNumber] = url.split("/").slice(-4);
47
+ const statuses = await getPullRequestBuildStatuses(url);
48
+ const failures = statuses.check_runs.filter(
49
+ (status) => status.conclusion === "failure"
50
+ );
51
+
52
+ if (failures.length === 0) {
53
+ return "No failures found";
54
+ }
55
+
56
+ const allLogs = [];
57
+ for (const fail of failures) {
58
+ const [runId, __, jobId] = fail.details_url.split("/").slice(-3);
59
+ const logs = await execCommand(
60
+ `gh run view ${runId} -R ${owner}/${repo} --log | grep -E 'FAIL|ERROR' -A 25 -B 25`
61
+ );
62
+ return logs;
63
+ allLogs.push(logs);
64
+ }
65
+
66
+ return allLogs;
67
+ }
@@ -0,0 +1,242 @@
1
+ import axios from "axios";
2
+ import { Tool } from "../../clients/types";
3
+
4
+ interface GoogleSearchParams {
5
+ q: string;
6
+ cx?: string;
7
+ dateRestrict?: string;
8
+ siteSearch?: string;
9
+ siteSearchFilter?: "e" | "i";
10
+ sort?: string;
11
+ start?: number;
12
+ lr?: string;
13
+ num?: number;
14
+ [key: string]: any;
15
+ }
16
+
17
+ // Google Search API Response Types
18
+ interface GoogleSearchUrlTemplate {
19
+ type: string;
20
+ template: string;
21
+ }
22
+
23
+ interface GoogleSearchQuery {
24
+ title: string;
25
+ totalResults: string;
26
+ searchTerms: string;
27
+ count: number;
28
+ startIndex: number;
29
+ startPage: number;
30
+ language: string;
31
+ inputEncoding: string;
32
+ outputEncoding: string;
33
+ safe: string;
34
+ cx: string;
35
+ sort: string;
36
+ filter: string;
37
+ gl: string;
38
+ cr: string;
39
+ googleHost: string;
40
+ disableCnTwTranslation: string;
41
+ hq: string;
42
+ hl: string;
43
+ siteSearch: string;
44
+ siteSearchFilter: string;
45
+ exactTerms: string;
46
+ excludeTerms: string;
47
+ linkSite: string;
48
+ orTerms: string;
49
+ relatedSite: string;
50
+ dateRestrict: string;
51
+ lowRange: string;
52
+ highRange: string;
53
+ fileType: string;
54
+ rights: string;
55
+ searchType: string;
56
+ imgSize: string;
57
+ imgType: string;
58
+ imgColorType: string;
59
+ imgDominantColor: string;
60
+ }
61
+
62
+ interface GoogleSearchQueries {
63
+ previousPage: GoogleSearchQuery[];
64
+ request: GoogleSearchQuery[];
65
+ nextPage: GoogleSearchQuery[];
66
+ }
67
+
68
+ interface GoogleSearchInformation {
69
+ searchTime: number;
70
+ formattedSearchTime: string;
71
+ totalResults: string;
72
+ formattedTotalResults: string;
73
+ }
74
+
75
+ interface GoogleSearchSpelling {
76
+ correctedQuery: string;
77
+ htmlCorrectedQuery: string;
78
+ }
79
+
80
+ export interface GoogleSearchResponse {
81
+ kind: string;
82
+ url: GoogleSearchUrlTemplate;
83
+ queries: GoogleSearchQueries;
84
+ promotions?: any[];
85
+ context?: any;
86
+ searchInformation: GoogleSearchInformation;
87
+ spelling?: GoogleSearchSpelling;
88
+ items?: any[];
89
+ }
90
+
91
+ interface LlmRelevantSearchResult {
92
+ title: string;
93
+ link: string;
94
+ snippet: string;
95
+ source?: string;
96
+ }
97
+
98
+ interface TransformedLlmResponse {
99
+ searchQuery: string;
100
+ totalResults?: string;
101
+ results: LlmRelevantSearchResult[];
102
+ }
103
+
104
+ /**
105
+ * Transforms the Google Custom Search API response to a more LLM-relevant format.
106
+ * It prioritizes plain text fields and extracts essential information.
107
+ *
108
+ * @param apiResponse The original API response from Google Custom Search.
109
+ * @returns An object containing the search query and a list of processed search results.
110
+ */
111
+ function transformGoogleSearchResponseForLLM(
112
+ apiResponse: GoogleSearchResponse
113
+ ) {
114
+ const searchQuery =
115
+ apiResponse.queries?.request?.[0]?.searchTerms || "Unknown query";
116
+ const totalResults = apiResponse.searchInformation?.totalResults;
117
+
118
+ const relevantItems: LlmRelevantSearchResult[] = (
119
+ apiResponse.items || []
120
+ ).map((item) => {
121
+ let bestSnippet = item.snippet || ""; // Default to the item's snippet
122
+
123
+ const metaTags = item.pagemap?.metatags?.[0];
124
+ if (metaTags) {
125
+ const ogDescription = metaTags["og:description"];
126
+ const twitterDescription = metaTags["twitter:description"];
127
+ const genericDescription = metaTags?.description;
128
+
129
+ // Prefer meta descriptions if they are longer or provide more context
130
+ if (ogDescription && ogDescription.length > bestSnippet.length) {
131
+ bestSnippet = ogDescription;
132
+ } else if (
133
+ twitterDescription &&
134
+ twitterDescription.length > bestSnippet.length
135
+ ) {
136
+ bestSnippet = twitterDescription;
137
+ } else if (
138
+ genericDescription &&
139
+ genericDescription.length > bestSnippet.length
140
+ ) {
141
+ bestSnippet = genericDescription;
142
+ }
143
+ }
144
+
145
+ return {
146
+ title: item.title,
147
+ link: item.link,
148
+ snippet: bestSnippet,
149
+ source: item.displayLink,
150
+ };
151
+ });
152
+
153
+ return {
154
+ searchQuery,
155
+ totalResults,
156
+ results: relevantItems,
157
+ };
158
+ }
159
+
160
+ export async function googleSearch(params: GoogleSearchParams) {
161
+ const apiKey = process.env.GOOGLE_SEARCH_API_KEY;
162
+ const cx = process.env.GOOGLE_SEARCH_CX;
163
+ if (!apiKey) {
164
+ throw new Error("GOOGLE_SEARCH_API_KEY environment variable is not set");
165
+ }
166
+ if (!cx) {
167
+ throw new Error("GOOGLE_SEARCH_CX environment variable is not set");
168
+ }
169
+
170
+ const baseUrl = "https://www.googleapis.com/customsearch/v1";
171
+ const url = new URL(baseUrl);
172
+ url.searchParams.append("key", apiKey);
173
+ url.searchParams.append("cx", cx);
174
+
175
+ for (const [key, value] of Object.entries(params)) {
176
+ if (value !== undefined) {
177
+ url.searchParams.append(key, value.toString());
178
+ }
179
+ }
180
+
181
+ try {
182
+ const response = await axios.get<GoogleSearchResponse>(url.toString());
183
+ return transformGoogleSearchResponseForLLM(response.data);
184
+ } catch (error) {
185
+ console.error("Error performing Google search:", error);
186
+ throw error;
187
+ }
188
+ }
189
+
190
+ export const googleSearchDefinition: Tool = {
191
+ type: "function",
192
+ function: {
193
+ name: "googleSearch",
194
+ description: "Perform a Google search using the Custom Search API",
195
+ parameters: {
196
+ type: "object",
197
+ properties: {
198
+ q: {
199
+ type: "string",
200
+ description: "The search query",
201
+ },
202
+ num: {
203
+ type: "number",
204
+ description:
205
+ "The number of search results to return (optional, default is 10, max is 10)",
206
+ },
207
+ start: {
208
+ type: "number",
209
+ description:
210
+ "The index of the first result to return (optional, default is 1)",
211
+ },
212
+ dateRestrict: {
213
+ type: "string",
214
+ description:
215
+ "Restricts results to URLs based on date. Format: [d|w|m|y]NUMBER. Example: 'd10' for past 10 days",
216
+ },
217
+ siteSearch: {
218
+ type: "string",
219
+ description: "Specifies a site to search within",
220
+ },
221
+ siteSearchFilter: {
222
+ type: "string",
223
+ description:
224
+ "Controls whether to include or exclude results from the site specified in siteSearch. 'e' to exclude, 'i' to include",
225
+ },
226
+ sort: {
227
+ type: "string",
228
+ description:
229
+ "The sort expression to apply to the results, e.g., 'date'",
230
+ },
231
+ lr: {
232
+ type: "string",
233
+ description:
234
+ "Restricts the search to documents written in a particular language (e.g., lr=lang_ja)",
235
+ },
236
+ },
237
+ required: ["q"],
238
+ },
239
+ },
240
+ };
241
+
242
+ export default googleSearch;
@@ -0,0 +1,24 @@
1
+ export * from "./addInternalTools";
2
+ export * from "./agentCall";
3
+ export * from "./callPlugin";
4
+ export * from "./embeddingSearch";
5
+ export * from "./execCommand";
6
+ export * from "./finalAnswer";
7
+ export * from "./index";
8
+ export * from "./lintFile";
9
+ export * from "./modifyFile";
10
+ export * from "./patch";
11
+ export * from "./readBlocks";
12
+ export * from "./readFile";
13
+ export * from "./scanFile";
14
+ export * from "./textSearch";
15
+ export * from "./visionTool";
16
+ export * from "./writeFile";
17
+ export * from "./asana";
18
+ export * from "./github";
19
+ export * from "./fileSearch";
20
+ export * from "./language";
21
+ export * from "./askHuman";
22
+ export * from "./aiClient";
23
+ export * from "./googleSearch";
24
+ export * from "./loadWebpage";