@tyvm/knowhow 0.0.32 → 0.0.34

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 (508) hide show
  1. package/autodoc/plugins/downloader/downloader.mdx +2 -2
  2. package/benchmarks/.dockerignore +7 -0
  3. package/benchmarks/README.md +166 -0
  4. package/benchmarks/docker/Dockerfile +68 -0
  5. package/benchmarks/example-config.yml +27 -0
  6. package/benchmarks/jest.config.js +13 -0
  7. package/benchmarks/package-lock.json +4297 -0
  8. package/benchmarks/package.json +39 -0
  9. package/benchmarks/results/4542435/2025-08-05/lms/lms-openai-gpt-oss-20b.json +2814 -0
  10. package/benchmarks/results/4542435/2025-08-05/lms/lms-qwen-qwen3-30b-a3b-2507.json +2014 -0
  11. package/benchmarks/results/4fb9125/2025-08-07/anthropic/anthropic-claude-sonnet-4-20250514.json +3121 -0
  12. package/benchmarks/results/5766aee/2025-08-02/lms-qwen/qwen3-coder-30b.json +98 -0
  13. package/benchmarks/results/6d73808/2025-08-07/openai/openai-gpt-5.json +3256 -0
  14. package/benchmarks/results/77bf0a6/2025-08-02/lms-qwen/qwen3-30b-a3b-2507.json +4298 -0
  15. package/benchmarks/results/8c0d445/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +3031 -0
  16. package/benchmarks/results/8c0d445/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +2990 -0
  17. package/benchmarks/results/ac6b2ab/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +3256 -0
  18. package/benchmarks/results/ac6b2ab/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +3007 -0
  19. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +3256 -0
  20. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-mini-2025-04-14.json +3036 -0
  21. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-nano-2025-04-14.json +3280 -0
  22. package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-30b-a3b-2507.json +1920 -0
  23. package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-coder-30b.json +3281 -0
  24. package/benchmarks/results/b502ed9/2025-08-03/lms-qwen/qwen3-coder-30b.json +2896 -0
  25. package/benchmarks/results/d1a8129/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +3011 -0
  26. package/benchmarks/results/e60471c/2025-08-03/lms/qwen3-30b-a3b-2507.json +3003 -0
  27. package/benchmarks/scripts/build-and-run.sh +47 -0
  28. package/benchmarks/scripts/clone-exercism.sh +92 -0
  29. package/benchmarks/scripts/validate.sh +48 -0
  30. package/benchmarks/src/__tests__/runner.test.ts +27 -0
  31. package/benchmarks/src/cli.ts +90 -0
  32. package/benchmarks/src/evaluators/EvaluatorRegistry.ts +64 -0
  33. package/benchmarks/src/evaluators/JavaScriptEvaluator.ts +183 -0
  34. package/benchmarks/src/evaluators/index.ts +3 -0
  35. package/benchmarks/src/evaluators/types.ts +22 -0
  36. package/benchmarks/src/index.ts +3 -0
  37. package/benchmarks/src/providers.ts +13 -0
  38. package/benchmarks/src/runner.ts +824 -0
  39. package/benchmarks/src/types.ts +63 -0
  40. package/benchmarks/tsconfig.json +19 -0
  41. package/jest.config.js +2 -1
  42. package/leaderboard/README.md +148 -0
  43. package/leaderboard/app/api/benchmark-data/route.ts +131 -0
  44. package/leaderboard/app/api/benchmark-detail/route.ts +172 -0
  45. package/leaderboard/app/details/[model]/[provider]/[language]/page.tsx +501 -0
  46. package/leaderboard/app/exercise/[model]/[provider]/[language]/[exercise]/page.tsx +375 -0
  47. package/leaderboard/app/globals.css +27 -0
  48. package/leaderboard/app/layout.tsx +21 -0
  49. package/leaderboard/app/page.tsx +170 -0
  50. package/leaderboard/components/LeaderboardTable.tsx +168 -0
  51. package/leaderboard/components/PerformanceChart.tsx +109 -0
  52. package/leaderboard/next-env.d.ts +5 -0
  53. package/leaderboard/next.config.js +4 -0
  54. package/leaderboard/package-lock.json +6363 -0
  55. package/leaderboard/package.json +28 -0
  56. package/leaderboard/postcss.config.js +6 -0
  57. package/leaderboard/tailwind.config.js +17 -0
  58. package/leaderboard/tsconfig.json +28 -0
  59. package/leaderboard/types/benchmark.ts +67 -0
  60. package/leaderboard/utils/dataProcessor.ts +33 -0
  61. package/package.json +2 -1
  62. package/src/agents/base/base.ts +147 -21
  63. package/src/agents/base/prompt.ts +28 -0
  64. package/src/agents/index.ts +3 -0
  65. package/src/agents/patcher/patcher.ts +6 -4
  66. package/src/agents/setup/setup.ts +56 -0
  67. package/src/agents/tools/agentCall.ts +6 -2
  68. package/src/agents/tools/aiClient.ts +74 -8
  69. package/src/agents/tools/execCommand.ts +13 -14
  70. package/src/agents/tools/executeScript/README.md +16 -0
  71. package/src/agents/tools/index.ts +2 -0
  72. package/src/agents/tools/list.ts +73 -16
  73. package/src/agents/tools/startAgentTask.ts +109 -0
  74. package/src/agents/tools/textSearch.ts +1 -1
  75. package/src/agents/tools/visionTool.ts +31 -2
  76. package/src/agents/tools/ycmd/client.ts +608 -0
  77. package/src/agents/tools/ycmd/definitions.ts +294 -0
  78. package/src/agents/tools/ycmd/detection.ts +211 -0
  79. package/src/agents/tools/ycmd/index.ts +11 -0
  80. package/src/agents/tools/ycmd/installer.ts +251 -0
  81. package/src/agents/tools/ycmd/server.ts +535 -0
  82. package/src/agents/tools/ycmd/serverManager.ts +316 -0
  83. package/src/agents/tools/ycmd/tools/completion.ts +113 -0
  84. package/src/agents/tools/ycmd/tools/diagnostics.ts +155 -0
  85. package/src/agents/tools/ycmd/tools/getLocations.ts +173 -0
  86. package/src/agents/tools/ycmd/tools/goto.ts +169 -0
  87. package/src/agents/tools/ycmd/tools/refactor.ts +204 -0
  88. package/src/agents/tools/ycmd/tools/signature.ts +174 -0
  89. package/src/agents/tools/ycmd/tools/start.ts +95 -0
  90. package/src/agents/tools/ycmd/utils/pathUtils.ts +59 -0
  91. package/src/ai.ts +15 -0
  92. package/src/chat/CliChatService.ts +277 -0
  93. package/src/chat/modules/AgentModule.ts +980 -0
  94. package/src/chat/modules/AskModule.ts +98 -0
  95. package/src/chat/modules/BaseChatModule.ts +66 -0
  96. package/src/chat/modules/InternalChatModule.ts +174 -0
  97. package/src/chat/modules/SearchModule.ts +166 -0
  98. package/src/chat/modules/SetupModule.ts +185 -0
  99. package/src/chat/modules/SystemModule.ts +120 -0
  100. package/src/chat/modules/VoiceModule.ts +70 -0
  101. package/src/chat/modules/index.js +5 -0
  102. package/src/chat/types.ts +97 -0
  103. package/src/chat.ts +9 -1
  104. package/src/chat2.ts +62 -0
  105. package/src/cli.ts +264 -35
  106. package/src/clients/anthropic.ts +14 -7
  107. package/src/clients/gemini.ts +15 -7
  108. package/src/clients/http.ts +17 -7
  109. package/src/clients/index.ts +117 -4
  110. package/src/clients/knowhow.ts +7 -2
  111. package/src/clients/knowhowMcp.ts +118 -0
  112. package/src/clients/openai.ts +32 -8
  113. package/src/clients/types.ts +1 -0
  114. package/src/clients/xai.ts +17 -5
  115. package/src/config.ts +30 -5
  116. package/src/conversion.ts +4 -1
  117. package/src/embeddings.ts +79 -23
  118. package/src/login.ts +26 -9
  119. package/src/microphone.ts +0 -1
  120. package/src/plugins/downloader/downloader.ts +72 -24
  121. package/src/plugins/downloader/plugin.ts +3 -1
  122. package/src/plugins/plugins.ts +3 -0
  123. package/src/processors/CustomVariables.ts +425 -0
  124. package/src/processors/HarmonyToolProcessor.ts +264 -0
  125. package/src/processors/XmlToolCallProcessor.ts +533 -0
  126. package/src/processors/index.ts +3 -0
  127. package/src/prompts/KnowhowConfigExamples.ts +376 -0
  128. package/src/services/KnowhowClient.ts +49 -3
  129. package/src/services/Mcp.ts +42 -3
  130. package/src/services/McpServer.ts +14 -4
  131. package/src/services/McpWebsocketTransport.ts +21 -7
  132. package/src/services/MessageProcessor.ts +10 -5
  133. package/src/services/index.ts +5 -0
  134. package/src/services/script-execution/ScriptExecutor.ts +34 -1
  135. package/src/services/types.ts +17 -14
  136. package/src/types.ts +17 -0
  137. package/src/utils/index.ts +138 -0
  138. package/tests/XmlToolCallProcessor.test.ts +468 -0
  139. package/tests/manual/ycmd/debug_diagnostics_test.ts +127 -0
  140. package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +26 -0
  141. package/tests/manual/ycmd/fixtures/file_change_test.ts +17 -0
  142. package/tests/manual/ycmd/minimal_advanced_test.ts +108 -0
  143. package/tests/manual/ycmd/simple_diagnostics_test.ts +61 -0
  144. package/tests/manual/ycmd/simple_test.ts +74 -0
  145. package/tests/manual/ycmd/test-typescript-sample.ts +34 -0
  146. package/tests/manual/ycmd/test_advanced_features.ts +407 -0
  147. package/tests/manual/ycmd/test_advanced_with_tools.ts +320 -0
  148. package/tests/manual/ycmd/test_comprehensive_typescript.ts +179 -0
  149. package/tests/manual/ycmd/test_diagnostics_file_changes.ts +249 -0
  150. package/tests/manual/ycmd/test_diagnostics_fix.ts +99 -0
  151. package/tests/manual/ycmd/test_diagnostics_simple.ts +100 -0
  152. package/tests/manual/ycmd/test_diagnostics_timing.ts +120 -0
  153. package/tests/manual/ycmd/test_discover_commands.ts +310 -0
  154. package/tests/manual/ycmd/test_endpoints.ts +115 -0
  155. package/tests/manual/ycmd/test_final_comprehensive.ts +218 -0
  156. package/tests/manual/ycmd/test_final_validation.ts +150 -0
  157. package/tests/manual/ycmd/test_implementation.js +42 -0
  158. package/tests/manual/ycmd/test_individual_ycmd_tool.ts +39 -0
  159. package/tests/manual/ycmd/test_server_manager.ts +52 -0
  160. package/tests/manual/ycmd/test_simple_debug.ts +86 -0
  161. package/tests/manual/ycmd/test_tsserver_workflow.js +83 -0
  162. package/tests/manual/ycmd/test_tsserver_workflow.ts +122 -0
  163. package/tests/manual/ycmd/test_typescript_simple.ts +48 -0
  164. package/tests/manual/ycmd/test_typescript_ycmd.ts +105 -0
  165. package/tests/manual/ycmd/test_workspace_config.ts +90 -0
  166. package/tests/manual/ycmd/test_ycmd_auto_start.ts +137 -0
  167. package/tests/manual/ycmd/test_ycmd_comprehensive.ts +73 -0
  168. package/tests/manual/ycmd/test_ycmd_connection.py +10 -0
  169. package/tests/manual/ycmd/test_ycmd_direct.ts +142 -0
  170. package/tests/manual/ycmd/test_ycmd_experiment.ts +48 -0
  171. package/tests/manual/ycmd/test_ycmd_final.ts +200 -0
  172. package/tests/manual/ycmd/test_ycmd_fixed.py +18 -0
  173. package/tests/manual/ycmd/test_ycmd_integration.ts +112 -0
  174. package/tests/manual/ycmd/test_ycmd_simple.ts +45 -0
  175. package/tests/manual/ycmd/test_ycmd_usage.py +27 -0
  176. package/tests/manual/ycmd/working_simple_test.ts +134 -0
  177. package/ts_build/src/agents/base/base.d.ts +14 -1
  178. package/ts_build/src/agents/base/base.js +91 -17
  179. package/ts_build/src/agents/base/base.js.map +1 -1
  180. package/ts_build/src/agents/base/prompt.d.ts +1 -1
  181. package/ts_build/src/agents/base/prompt.js +28 -0
  182. package/ts_build/src/agents/base/prompt.js.map +1 -1
  183. package/ts_build/src/agents/index.d.ts +2 -0
  184. package/ts_build/src/agents/index.js +2 -0
  185. package/ts_build/src/agents/index.js.map +1 -1
  186. package/ts_build/src/agents/patcher/patcher.js +6 -3
  187. package/ts_build/src/agents/patcher/patcher.js.map +1 -1
  188. package/ts_build/src/agents/setup/setup.d.ts +8 -0
  189. package/ts_build/src/agents/setup/setup.js +59 -0
  190. package/ts_build/src/agents/setup/setup.js.map +1 -0
  191. package/ts_build/src/agents/tools/agentCall.js +5 -2
  192. package/ts_build/src/agents/tools/agentCall.js.map +1 -1
  193. package/ts_build/src/agents/tools/aiClient.d.ts +6 -5
  194. package/ts_build/src/agents/tools/aiClient.js +37 -6
  195. package/ts_build/src/agents/tools/aiClient.js.map +1 -1
  196. package/ts_build/src/agents/tools/execCommand.d.ts +2 -2
  197. package/ts_build/src/agents/tools/execCommand.js +5 -6
  198. package/ts_build/src/agents/tools/execCommand.js.map +1 -1
  199. package/ts_build/src/agents/tools/executeScript/index.d.ts +1 -1
  200. package/ts_build/src/agents/tools/index.d.ts +2 -0
  201. package/ts_build/src/agents/tools/index.js +2 -0
  202. package/ts_build/src/agents/tools/index.js.map +1 -1
  203. package/ts_build/src/agents/tools/list.js +66 -16
  204. package/ts_build/src/agents/tools/list.js.map +1 -1
  205. package/ts_build/src/agents/tools/startAgentTask.d.ts +13 -0
  206. package/ts_build/src/agents/tools/startAgentTask.js +74 -0
  207. package/ts_build/src/agents/tools/startAgentTask.js.map +1 -0
  208. package/ts_build/src/agents/tools/startChatTask.d.ts +13 -0
  209. package/ts_build/src/agents/tools/startChatTask.js +73 -0
  210. package/ts_build/src/agents/tools/startChatTask.js.map +1 -0
  211. package/ts_build/src/agents/tools/textSearch.js +1 -1
  212. package/ts_build/src/agents/tools/textSearch.js.map +1 -1
  213. package/ts_build/src/agents/tools/visionTool.d.ts +1 -1
  214. package/ts_build/src/agents/tools/visionTool.js +23 -3
  215. package/ts_build/src/agents/tools/visionTool.js.map +1 -1
  216. package/ts_build/src/agents/tools/ycmd/client.d.ts +93 -0
  217. package/ts_build/src/agents/tools/ycmd/client.js +355 -0
  218. package/ts_build/src/agents/tools/ycmd/client.js.map +1 -0
  219. package/ts_build/src/agents/tools/ycmd/definitions.d.ts +345 -0
  220. package/ts_build/src/agents/tools/ycmd/definitions.js +298 -0
  221. package/ts_build/src/agents/tools/ycmd/definitions.js.map +1 -0
  222. package/ts_build/src/agents/tools/ycmd/detection.d.ts +11 -0
  223. package/ts_build/src/agents/tools/ycmd/detection.js +175 -0
  224. package/ts_build/src/agents/tools/ycmd/detection.js.map +1 -0
  225. package/ts_build/src/agents/tools/ycmd/index.d.ts +8 -0
  226. package/ts_build/src/agents/tools/ycmd/index.js +20 -0
  227. package/ts_build/src/agents/tools/ycmd/index.js.map +1 -0
  228. package/ts_build/src/agents/tools/ycmd/installer.d.ts +19 -0
  229. package/ts_build/src/agents/tools/ycmd/installer.js +196 -0
  230. package/ts_build/src/agents/tools/ycmd/installer.js.map +1 -0
  231. package/ts_build/src/agents/tools/ycmd/server.d.ts +35 -0
  232. package/ts_build/src/agents/tools/ycmd/server.js +363 -0
  233. package/ts_build/src/agents/tools/ycmd/server.js.map +1 -0
  234. package/ts_build/src/agents/tools/ycmd/serverManager.d.ts +39 -0
  235. package/ts_build/src/agents/tools/ycmd/serverManager.js +210 -0
  236. package/ts_build/src/agents/tools/ycmd/serverManager.js.map +1 -0
  237. package/ts_build/src/agents/tools/ycmd/tools/completion.d.ts +22 -0
  238. package/ts_build/src/agents/tools/ycmd/tools/completion.js +72 -0
  239. package/ts_build/src/agents/tools/ycmd/tools/completion.js.map +1 -0
  240. package/ts_build/src/agents/tools/ycmd/tools/diagnostics.d.ts +42 -0
  241. package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js +88 -0
  242. package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js.map +1 -0
  243. package/ts_build/src/agents/tools/ycmd/tools/getLocations.d.ts +22 -0
  244. package/ts_build/src/agents/tools/ycmd/tools/getLocations.js +142 -0
  245. package/ts_build/src/agents/tools/ycmd/tools/getLocations.js.map +1 -0
  246. package/ts_build/src/agents/tools/ycmd/tools/goto.d.ts +20 -0
  247. package/ts_build/src/agents/tools/ycmd/tools/goto.js +101 -0
  248. package/ts_build/src/agents/tools/ycmd/tools/goto.js.map +1 -0
  249. package/ts_build/src/agents/tools/ycmd/tools/refactor.d.ts +32 -0
  250. package/ts_build/src/agents/tools/ycmd/tools/refactor.js +123 -0
  251. package/ts_build/src/agents/tools/ycmd/tools/refactor.js.map +1 -0
  252. package/ts_build/src/agents/tools/ycmd/tools/signature.d.ts +25 -0
  253. package/ts_build/src/agents/tools/ycmd/tools/signature.js +110 -0
  254. package/ts_build/src/agents/tools/ycmd/tools/signature.js.map +1 -0
  255. package/ts_build/src/agents/tools/ycmd/tools/start.d.ts +17 -0
  256. package/ts_build/src/agents/tools/ycmd/tools/start.js +65 -0
  257. package/ts_build/src/agents/tools/ycmd/tools/start.js.map +1 -0
  258. package/ts_build/src/agents/tools/ycmd/utils/pathUtils.d.ts +4 -0
  259. package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js +67 -0
  260. package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js.map +1 -0
  261. package/ts_build/src/ai.d.ts +1 -0
  262. package/ts_build/src/ai.js +40 -1
  263. package/ts_build/src/ai.js.map +1 -1
  264. package/ts_build/src/chat/ChatCommandHandler.d.ts +36 -0
  265. package/ts_build/src/chat/ChatCommandHandler.js +268 -0
  266. package/ts_build/src/chat/ChatCommandHandler.js.map +1 -0
  267. package/ts_build/src/chat/ChatInputManager.d.ts +22 -0
  268. package/ts_build/src/chat/ChatInputManager.js +85 -0
  269. package/ts_build/src/chat/ChatInputManager.js.map +1 -0
  270. package/ts_build/src/chat/ChatManager.d.ts +49 -0
  271. package/ts_build/src/chat/ChatManager.js +271 -0
  272. package/ts_build/src/chat/ChatManager.js.map +1 -0
  273. package/ts_build/src/chat/ChatSession.d.ts +32 -0
  274. package/ts_build/src/chat/ChatSession.js +3 -0
  275. package/ts_build/src/chat/ChatSession.js.map +1 -0
  276. package/ts_build/src/chat/ChatSessionManager.d.ts +19 -0
  277. package/ts_build/src/chat/ChatSessionManager.js +188 -0
  278. package/ts_build/src/chat/ChatSessionManager.js.map +1 -0
  279. package/ts_build/src/chat/ChatStateManager.d.ts +58 -0
  280. package/ts_build/src/chat/ChatStateManager.js +156 -0
  281. package/ts_build/src/chat/ChatStateManager.js.map +1 -0
  282. package/ts_build/src/chat/CliChatService.d.ts +35 -0
  283. package/ts_build/src/chat/CliChatService.js +201 -0
  284. package/ts_build/src/chat/CliChatService.js.map +1 -0
  285. package/ts_build/src/chat/InterruptibleInput.d.ts +20 -0
  286. package/ts_build/src/chat/InterruptibleInput.js +109 -0
  287. package/ts_build/src/chat/InterruptibleInput.js.map +1 -0
  288. package/ts_build/src/chat/interfaces/ChatModule.d.ts +6 -0
  289. package/ts_build/src/chat/interfaces/ChatModule.js +3 -0
  290. package/ts_build/src/chat/interfaces/ChatModule.js.map +1 -0
  291. package/ts_build/src/chat/modules/AgentModule.d.ts +56 -0
  292. package/ts_build/src/chat/modules/AgentModule.js +705 -0
  293. package/ts_build/src/chat/modules/AgentModule.js.map +1 -0
  294. package/ts_build/src/chat/modules/AskModule.d.ts +10 -0
  295. package/ts_build/src/chat/modules/AskModule.js +63 -0
  296. package/ts_build/src/chat/modules/AskModule.js.map +1 -0
  297. package/ts_build/src/chat/modules/BaseChatModule.d.ts +14 -0
  298. package/ts_build/src/chat/modules/BaseChatModule.js +32 -0
  299. package/ts_build/src/chat/modules/BaseChatModule.js.map +1 -0
  300. package/ts_build/src/chat/modules/InternalChatModule.d.ts +24 -0
  301. package/ts_build/src/chat/modules/InternalChatModule.js +127 -0
  302. package/ts_build/src/chat/modules/InternalChatModule.js.map +1 -0
  303. package/ts_build/src/chat/modules/SearchModule.d.ts +12 -0
  304. package/ts_build/src/chat/modules/SearchModule.js +119 -0
  305. package/ts_build/src/chat/modules/SearchModule.js.map +1 -0
  306. package/ts_build/src/chat/modules/SetupModule.d.ts +15 -0
  307. package/ts_build/src/chat/modules/SetupModule.js +147 -0
  308. package/ts_build/src/chat/modules/SetupModule.js.map +1 -0
  309. package/ts_build/src/chat/modules/SystemModule.d.ts +14 -0
  310. package/ts_build/src/chat/modules/SystemModule.js +90 -0
  311. package/ts_build/src/chat/modules/SystemModule.js.map +1 -0
  312. package/ts_build/src/chat/modules/VoiceModule.d.ts +11 -0
  313. package/ts_build/src/chat/modules/VoiceModule.js +57 -0
  314. package/ts_build/src/chat/modules/VoiceModule.js.map +1 -0
  315. package/ts_build/src/chat/types.d.ts +83 -0
  316. package/ts_build/src/chat/types.js +3 -0
  317. package/ts_build/src/chat/types.js.map +1 -0
  318. package/ts_build/src/chat.js +7 -1
  319. package/ts_build/src/chat.js.map +1 -1
  320. package/ts_build/src/chat2.d.ts +3 -0
  321. package/ts_build/src/chat2.js +47 -0
  322. package/ts_build/src/chat2.js.map +1 -0
  323. package/ts_build/src/cli.js +218 -37
  324. package/ts_build/src/cli.js.map +1 -1
  325. package/ts_build/src/clients/anthropic.d.ts +5 -2
  326. package/ts_build/src/clients/anthropic.js +12 -7
  327. package/ts_build/src/clients/anthropic.js.map +1 -1
  328. package/ts_build/src/clients/gemini.d.ts +6 -3
  329. package/ts_build/src/clients/gemini.js +13 -7
  330. package/ts_build/src/clients/gemini.js.map +1 -1
  331. package/ts_build/src/clients/http.d.ts +1 -0
  332. package/ts_build/src/clients/http.js +12 -5
  333. package/ts_build/src/clients/http.js.map +1 -1
  334. package/ts_build/src/clients/index.d.ts +10 -0
  335. package/ts_build/src/clients/index.js +74 -4
  336. package/ts_build/src/clients/index.js.map +1 -1
  337. package/ts_build/src/clients/knowhow.d.ts +3 -1
  338. package/ts_build/src/clients/knowhow.js +8 -2
  339. package/ts_build/src/clients/knowhow.js.map +1 -1
  340. package/ts_build/src/clients/knowhowMcp.d.ts +20 -0
  341. package/ts_build/src/clients/knowhowMcp.js +86 -0
  342. package/ts_build/src/clients/knowhowMcp.js.map +1 -0
  343. package/ts_build/src/clients/openai.d.ts +5 -2
  344. package/ts_build/src/clients/openai.js +29 -8
  345. package/ts_build/src/clients/openai.js.map +1 -1
  346. package/ts_build/src/clients/types.d.ts +1 -0
  347. package/ts_build/src/clients/xai.d.ts +5 -2
  348. package/ts_build/src/clients/xai.js +15 -5
  349. package/ts_build/src/clients/xai.js.map +1 -1
  350. package/ts_build/src/config.js +24 -3
  351. package/ts_build/src/config.js.map +1 -1
  352. package/ts_build/src/conversion.js +6 -4
  353. package/ts_build/src/conversion.js.map +1 -1
  354. package/ts_build/src/embeddings.d.ts +2 -1
  355. package/ts_build/src/embeddings.js +62 -17
  356. package/ts_build/src/embeddings.js.map +1 -1
  357. package/ts_build/src/login.d.ts +1 -1
  358. package/ts_build/src/login.js +21 -7
  359. package/ts_build/src/login.js.map +1 -1
  360. package/ts_build/src/microphone.js.map +1 -1
  361. package/ts_build/src/plugins/downloader/downloader.d.ts +4 -5
  362. package/ts_build/src/plugins/downloader/downloader.js +55 -26
  363. package/ts_build/src/plugins/downloader/downloader.js.map +1 -1
  364. package/ts_build/src/plugins/downloader/plugin.js +5 -3
  365. package/ts_build/src/plugins/downloader/plugin.js.map +1 -1
  366. package/ts_build/src/plugins/plugins.js +3 -0
  367. package/ts_build/src/plugins/plugins.js.map +1 -1
  368. package/ts_build/src/processors/CustomVariables.d.ts +32 -0
  369. package/ts_build/src/processors/CustomVariables.js +297 -0
  370. package/ts_build/src/processors/CustomVariables.js.map +1 -0
  371. package/ts_build/src/processors/HarmonyToolProcessor.d.ts +15 -0
  372. package/ts_build/src/processors/HarmonyToolProcessor.js +154 -0
  373. package/ts_build/src/processors/HarmonyToolProcessor.js.map +1 -0
  374. package/ts_build/src/processors/XmlToolCallProcessor.d.ts +14 -0
  375. package/ts_build/src/processors/XmlToolCallProcessor.js +357 -0
  376. package/ts_build/src/processors/XmlToolCallProcessor.js.map +1 -0
  377. package/ts_build/src/processors/index.d.ts +3 -0
  378. package/ts_build/src/processors/index.js +7 -1
  379. package/ts_build/src/processors/index.js.map +1 -1
  380. package/ts_build/src/prompts/KnowhowConfigExamples.d.ts +2 -0
  381. package/ts_build/src/prompts/KnowhowConfigExamples.js +379 -0
  382. package/ts_build/src/prompts/KnowhowConfigExamples.js.map +1 -0
  383. package/ts_build/src/services/KnowhowClient.d.ts +22 -0
  384. package/ts_build/src/services/KnowhowClient.js +14 -2
  385. package/ts_build/src/services/KnowhowClient.js.map +1 -1
  386. package/ts_build/src/services/Mcp.d.ts +1 -0
  387. package/ts_build/src/services/Mcp.js +20 -3
  388. package/ts_build/src/services/Mcp.js.map +1 -1
  389. package/ts_build/src/services/McpServer.d.ts +1 -1
  390. package/ts_build/src/services/McpServer.js +8 -4
  391. package/ts_build/src/services/McpServer.js.map +1 -1
  392. package/ts_build/src/services/McpWebsocketTransport.js +17 -7
  393. package/ts_build/src/services/McpWebsocketTransport.js.map +1 -1
  394. package/ts_build/src/services/MessageProcessor.d.ts +1 -1
  395. package/ts_build/src/services/MessageProcessor.js +4 -4
  396. package/ts_build/src/services/MessageProcessor.js.map +1 -1
  397. package/ts_build/src/services/index.d.ts +2 -0
  398. package/ts_build/src/services/index.js +4 -0
  399. package/ts_build/src/services/index.js.map +1 -1
  400. package/ts_build/src/services/script-execution/ScriptExecutor.d.ts +1 -0
  401. package/ts_build/src/services/script-execution/ScriptExecutor.js +23 -0
  402. package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -1
  403. package/ts_build/src/services/types.d.ts +2 -6
  404. package/ts_build/src/services/types.js +4 -4
  405. package/ts_build/src/services/types.js.map +1 -1
  406. package/ts_build/src/types.d.ts +11 -0
  407. package/ts_build/src/types.js +8 -0
  408. package/ts_build/src/types.js.map +1 -1
  409. package/ts_build/src/utils/index.d.ts +2 -0
  410. package/ts_build/src/utils/index.js +102 -1
  411. package/ts_build/src/utils/index.js.map +1 -1
  412. package/ts_build/tests/XmlToolCallProcessor.test.d.ts +1 -0
  413. package/ts_build/tests/XmlToolCallProcessor.test.js +376 -0
  414. package/ts_build/tests/XmlToolCallProcessor.test.js.map +1 -0
  415. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +1 -0
  416. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +114 -0
  417. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +1 -0
  418. package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +2 -0
  419. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +104 -0
  420. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +1 -0
  421. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +1 -0
  422. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +74 -0
  423. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +1 -0
  424. package/ts_build/tests/manual/ycmd/simple_test.d.ts +2 -0
  425. package/ts_build/tests/manual/ycmd/simple_test.js +82 -0
  426. package/ts_build/tests/manual/ycmd/simple_test.js.map +1 -0
  427. package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +14 -0
  428. package/ts_build/tests/manual/ycmd/test-typescript-sample.js +20 -0
  429. package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +1 -0
  430. package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +2 -0
  431. package/ts_build/tests/manual/ycmd/test_advanced_features.js +297 -0
  432. package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +1 -0
  433. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +3 -0
  434. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +262 -0
  435. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +1 -0
  436. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +2 -0
  437. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +186 -0
  438. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +1 -0
  439. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +1 -0
  440. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +174 -0
  441. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +1 -0
  442. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +2 -0
  443. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +106 -0
  444. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +1 -0
  445. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +1 -0
  446. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +104 -0
  447. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +1 -0
  448. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +1 -0
  449. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +119 -0
  450. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +1 -0
  451. package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +2 -0
  452. package/ts_build/tests/manual/ycmd/test_discover_commands.js +243 -0
  453. package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +1 -0
  454. package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +2 -0
  455. package/ts_build/tests/manual/ycmd/test_endpoints.js +120 -0
  456. package/ts_build/tests/manual/ycmd/test_endpoints.js.map +1 -0
  457. package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +2 -0
  458. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +221 -0
  459. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +1 -0
  460. package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +2 -0
  461. package/ts_build/tests/manual/ycmd/test_final_validation.js +160 -0
  462. package/ts_build/tests/manual/ycmd/test_final_validation.js.map +1 -0
  463. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +2 -0
  464. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +37 -0
  465. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +1 -0
  466. package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +1 -0
  467. package/ts_build/tests/manual/ycmd/test_server_manager.js +38 -0
  468. package/ts_build/tests/manual/ycmd/test_server_manager.js.map +1 -0
  469. package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +2 -0
  470. package/ts_build/tests/manual/ycmd/test_simple_debug.js +99 -0
  471. package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +1 -0
  472. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +1 -0
  473. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +128 -0
  474. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +1 -0
  475. package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +1 -0
  476. package/ts_build/tests/manual/ycmd/test_typescript_simple.js +66 -0
  477. package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +1 -0
  478. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +1 -0
  479. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +105 -0
  480. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +1 -0
  481. package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +1 -0
  482. package/ts_build/tests/manual/ycmd/test_workspace_config.js +89 -0
  483. package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +1 -0
  484. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +2 -0
  485. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +130 -0
  486. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +1 -0
  487. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +1 -0
  488. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +83 -0
  489. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +1 -0
  490. package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +2 -0
  491. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +149 -0
  492. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +1 -0
  493. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +15 -0
  494. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +58 -0
  495. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +1 -0
  496. package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +2 -0
  497. package/ts_build/tests/manual/ycmd/test_ycmd_final.js +195 -0
  498. package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +1 -0
  499. package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +3 -0
  500. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +110 -0
  501. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +1 -0
  502. package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +2 -0
  503. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +36 -0
  504. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +1 -0
  505. package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +2 -0
  506. package/ts_build/tests/manual/ycmd/working_simple_test.js +134 -0
  507. package/ts_build/tests/manual/ycmd/working_simple_test.js.map +1 -0
  508. package/tsconfig.json +3 -1
@@ -1,4 +1,4 @@
1
- import { Clients } from "../../clients";
1
+ import { ToolsService } from "../../services/Tools";
2
2
  import {
3
3
  GenericClient,
4
4
  CompletionOptions,
@@ -6,31 +6,97 @@ import {
6
6
  EmbeddingOptions,
7
7
  EmbeddingResponse,
8
8
  } from "../../clients/types";
9
+ import { services } from "../../services";
9
10
 
10
11
  export function createAiCompletion(
12
+ this: ToolsService,
11
13
  provider: string,
12
14
  options: CompletionOptions
13
15
  ): Promise<CompletionResponse> {
14
- return Clients.createCompletion(provider, options);
16
+ // Get context from bound ToolsService
17
+ const toolService = (
18
+ this instanceof ToolsService ? this : services().Tools
19
+ ) as ToolsService;
20
+
21
+ const toolContext = toolService.getContext();
22
+ const { Clients: contextClients } = toolContext;
23
+
24
+ if (!contextClients) {
25
+ throw new Error("Clients not available in tool context");
26
+ }
27
+
28
+ return contextClients.createCompletion(provider, options);
15
29
  }
16
30
 
17
31
  export function createEmbedding(
32
+ this: ToolsService,
18
33
  provider: string,
19
34
  options: EmbeddingOptions
20
35
  ): Promise<EmbeddingResponse> {
21
- return Clients.createEmbedding(provider, options);
36
+ // Get context from bound ToolsService
37
+ const toolService = (
38
+ this instanceof ToolsService ? this : services().Tools
39
+ ) as ToolsService;
40
+
41
+ const toolContext = toolService.getContext();
42
+ const { Clients: contextClients } = toolContext;
43
+
44
+ if (!contextClients) {
45
+ throw new Error("Clients not available in tool context");
46
+ }
47
+
48
+ return contextClients.createEmbedding(provider, options);
22
49
  }
23
50
 
24
51
  export async function listModelsForProvider(
52
+ this: ToolsService,
25
53
  provider: string
26
54
  ): Promise<string[]> {
27
- return Clients.getRegisteredModels(provider);
55
+ // Get context from bound ToolsService
56
+ const toolService = (
57
+ this instanceof ToolsService ? this : services().Tools
58
+ ) as ToolsService;
59
+
60
+ const toolContext = toolService.getContext();
61
+ const { Clients: contextClients } = toolContext;
62
+
63
+ if (!contextClients) {
64
+ throw new Error("Clients not available in tool context");
65
+ }
66
+
67
+ return contextClients.getRegisteredModels(provider);
28
68
  }
29
69
 
30
- export async function listAllModels(): Promise<Record<string, string[]>> {
31
- return Clients.listAllModels();
70
+ export async function listAllModels(
71
+ this: ToolsService
72
+ ): Promise<Record<string, string[]>> {
73
+ // Get context from bound ToolsService
74
+ const toolService = (
75
+ this instanceof ToolsService ? this : services().Tools
76
+ ) as ToolsService;
77
+
78
+ const toolContext = toolService.getContext();
79
+ const { Clients: contextClients } = toolContext;
80
+
81
+ if (!contextClients) {
82
+ throw new Error("Clients not available in tool context");
83
+ }
84
+
85
+ return contextClients.listAllModels();
32
86
  }
33
87
 
34
- export async function listAllProviders(): Promise<string[]> {
35
- return Clients.listAllProviders();
88
+ export async function listAllProviders(this: ToolsService): Promise<string[]> {
89
+ // Get context from bound ToolsService
90
+ const toolService = (
91
+ this instanceof ToolsService ? this : services().Tools
92
+ ) as ToolsService;
93
+
94
+ const toolContext = toolService.getContext();
95
+ const { Clients: contextClients } = toolContext;
96
+
97
+ if (!contextClients) {
98
+ throw new Error("Clients not available in tool context");
99
+ }
100
+
101
+ return contextClients.listAllProviders();
36
102
  }
@@ -4,9 +4,9 @@ import { promisify } from "util";
4
4
  const execAsync = promisify(exec);
5
5
 
6
6
  export interface ExecCommandOptions {
7
- timeout?: number; // Timeout in milliseconds
8
- killOnTimeout?: boolean; // Whether to kill the command on timeout (default: false)
9
- waitForCompletion?: boolean; // Whether to wait for full completion (default: true)
7
+ timeout?: number; // Timeout in milliseconds (default: 5000)
8
+ continueInBackground?: boolean; // Whether to let command continue in background on timeout (default: false)
9
+ waitForCompletion?: boolean; // Whether to wait for full completion regardless of timeout (default: false)
10
10
  }
11
11
 
12
12
  // Enhanced exec function with timeout support
@@ -19,13 +19,10 @@ const execWithTimeout = async (
19
19
  timedOut: boolean;
20
20
  killed: boolean;
21
21
  }> => {
22
- const { timeout, killOnTimeout = false } = options;
22
+ const { timeout = 5000, continueInBackground = false, waitForCompletion = false } = options;
23
23
 
24
- // If no timeout is specified, default to waiting for completion
25
- const { waitForCompletion = !timeout } = options;
26
-
27
- if (!timeout || waitForCompletion) {
28
- // Default behavior - wait for completion
24
+ // If waitForCompletion is explicitly true, ignore timeout and wait indefinitely
25
+ if (waitForCompletion === true) {
29
26
  try {
30
27
  const result = await execAsync(command);
31
28
  return { ...result, timedOut: false, killed: false };
@@ -39,7 +36,7 @@ const execWithTimeout = async (
39
36
  }
40
37
  }
41
38
 
42
- // Timeout behavior
39
+ // Timeout behavior when waitForCompletion is false
43
40
  return new Promise((resolve) => {
44
41
  const childProcess = exec(command, (error, stdout, stderr) => {
45
42
  if (error && !error.killed) {
@@ -60,7 +57,8 @@ const execWithTimeout = async (
60
57
  });
61
58
 
62
59
  const timeoutId = setTimeout(() => {
63
- if (killOnTimeout) {
60
+ if (!continueInBackground) {
61
+ // Kill the process if continueInBackground is false (default behavior)
64
62
  childProcess.kill("SIGTERM");
65
63
  // Force kill after additional 5 seconds if still running
66
64
  setTimeout(() => {
@@ -75,6 +73,7 @@ const execWithTimeout = async (
75
73
  killed: true,
76
74
  });
77
75
  } else {
76
+ // Let command continue in background
78
77
  resolve({
79
78
  stdout: "",
80
79
  stderr: `Command timed out after ${timeout}ms but is still running in background`,
@@ -95,7 +94,7 @@ const execWithTimeout = async (
95
94
  export const execCommand = async (
96
95
  command: string,
97
96
  timeout?: number,
98
- killOnTimeout?: boolean,
97
+ continueInBackground?: boolean,
99
98
  waitForCompletion?: boolean
100
99
  ): Promise<string> => {
101
100
  let output = "";
@@ -103,7 +102,7 @@ export const execCommand = async (
103
102
 
104
103
  const { stdout, stderr, timedOut, killed } = await execWithTimeout(command, {
105
104
  timeout,
106
- killOnTimeout,
105
+ continueInBackground,
107
106
  waitForCompletion,
108
107
  });
109
108
 
@@ -133,4 +132,4 @@ export const execCommand = async (
133
132
  : "";
134
133
 
135
134
  return trimmedOutput.join("\n").slice(0, maxCharacters) + trimmedMessage;
136
- };
135
+ };
@@ -2,6 +2,22 @@
2
2
 
3
3
  The `executeScript` tool provides secure, isolated execution of TypeScript scripts with access to the Knowhow platform's tools and AI capabilities.
4
4
 
5
+ ## Requirements
6
+
7
+ ### Node.js Version and Configuration
8
+
9
+ **Important**: For Node.js 20.x and later, the `--no-node-snapshot` flag is required due to isolated-vm compatibility requirements.
10
+
11
+ ```bash
12
+ # Required for Node.js 20+
13
+ node --no-node-snapshot your-app.js
14
+
15
+ # Or set in package.json scripts
16
+ "scripts": {
17
+ "start": "node --no-node-snapshot dist/index.js"
18
+ }
19
+ ```
20
+
5
21
  ## Features
6
22
 
7
23
  - **Secure Sandbox**: Scripts run in isolated-vm with no access to Node.js APIs
@@ -24,3 +24,5 @@ export * from "./googleSearch";
24
24
  export * from "./loadWebpage";
25
25
  export * from "./stringReplace";
26
26
  export * from "./executeScript";
27
+ export * from "./startAgentTask";
28
+ export * from "./ycmd";
@@ -5,9 +5,11 @@ import { Plugins } from "../../plugins/plugins";
5
5
  const pluginNames = Plugins.listPlugins().join(", ");
6
6
  import * as github from "./github/definitions";
7
7
  import * as asana from "./asana/definitions";
8
+ import * as ycmd from "./ycmd/definitions";
8
9
  import * as language from "./language/definitions";
9
10
  import { googleSearchDefinition } from "./googleSearch";
10
11
  import { executeScriptDefinition } from "./executeScript/definition";
12
+ import { startAgentTaskDefinition } from "./startAgentTask";
11
13
 
12
14
  export const includedTools = [
13
15
  {
@@ -51,17 +53,17 @@ export const includedTools = [
51
53
  timeout: {
52
54
  type: "number",
53
55
  description:
54
- "Timeout in milliseconds (optional). If not provided, waits indefinitely.",
56
+ "Timeout in milliseconds (optional). If not provided, defaults to 5000ms.",
55
57
  },
56
- killOnTimeout: {
58
+ continueInBackground: {
57
59
  type: "boolean",
58
60
  description:
59
- "Whether to kill the command when timeout is reached (default: false). If false, command continues running in background.",
61
+ "Whether to let command continue in background on timeout (default: false). If false, command is killed on timeout.",
60
62
  },
61
63
  waitForCompletion: {
62
64
  type: "boolean",
63
65
  description:
64
- "Whether to wait for full completion regardless of timeout (default: true). Overrides timeout behavior.",
66
+ "Whether to wait for full completion regardless of timeout (default: false). When true, overrides timeout behavior.",
65
67
  },
66
68
  },
67
69
  required: ["command"],
@@ -141,6 +143,16 @@ export const includedTools = [
141
143
  type: "string",
142
144
  description: "The prompt related to the image",
143
145
  },
146
+ provider: {
147
+ type: "string",
148
+ description: "The AI provider to use (default: 'openai')",
149
+ default: "openai",
150
+ },
151
+ model: {
152
+ type: "string",
153
+ description: "The model to use (default: 'gpt-4o')",
154
+ default: "gpt-4o",
155
+ },
144
156
  },
145
157
  required: ["imageUrl", "question"],
146
158
  },
@@ -366,7 +378,7 @@ export const includedTools = [
366
378
  type: "function",
367
379
  function: {
368
380
  name: "createAiCompletion",
369
- description: "Create a completion using the knowhow ai client",
381
+ description: "Create a completion using the knowhow AI client",
370
382
  parameters: {
371
383
  type: "object",
372
384
  positional: true,
@@ -374,39 +386,82 @@ export const includedTools = [
374
386
  provider: {
375
387
  type: "string",
376
388
  description:
377
- "The AI provider to use (e.g., 'openai', 'anthropic'). Use listAllModels to figure out which provider to use if you don't know",
389
+ "The AI provider to use (e.g., 'openai', 'anthropic'). Use listAllModels to discover providers.",
378
390
  },
391
+
379
392
  options: {
380
393
  type: "object",
381
- description: "The completion options",
394
+ description: "Provider-specific completion options",
382
395
  properties: {
383
- model: { type: "string", description: "The model to use" },
396
+ model: {
397
+ type: "string",
398
+ description: "The model to use",
399
+ },
400
+
384
401
  messages: {
385
402
  type: "array",
386
- description: "The messages for the completion",
387
- items: {
388
- type: "object",
389
- properties: {
390
- role: { type: "string" },
391
- content: { type: "string" },
392
- },
393
- },
403
+ description: "The chat history for the completion",
404
+ items: { $ref: "#/definitions/message" },
405
+ minItems: 1,
394
406
  },
407
+
395
408
  max_tokens: {
396
409
  type: "number",
397
410
  description: "Maximum number of tokens to generate",
398
411
  },
412
+
413
+ tools: {
414
+ type: "array",
415
+ description: "Tool definitions the model may call",
416
+ items: { $ref: "#/definitions/tool" },
417
+ },
399
418
  },
400
419
  required: ["model", "messages"],
401
420
  },
402
421
  },
403
422
  required: ["provider"],
404
423
  },
424
+
405
425
  returns: {
406
426
  type: "object",
407
427
  description: "The completion response from the AI provider",
408
428
  },
409
429
  },
430
+
431
+ definitions: {
432
+ message: {
433
+ type: "object",
434
+ properties: {
435
+ role: {
436
+ type: "string",
437
+ enum: ["system", "user", "assistant", "tool"],
438
+ },
439
+ content: { type: "string" },
440
+ },
441
+ required: ["role", "content"],
442
+ },
443
+
444
+ tool: {
445
+ type: "object",
446
+ properties: {
447
+ type: {
448
+ type: "string",
449
+ enum: ["function"],
450
+ },
451
+ function: {
452
+ type: "object",
453
+ properties: {
454
+ name: { type: "string" },
455
+ description: { type: "string" },
456
+ parameters: { type: "object" },
457
+ returns: { type: "object" },
458
+ },
459
+ required: ["name", "description", "parameters"],
460
+ },
461
+ },
462
+ required: ["type", "function"],
463
+ },
464
+ },
410
465
  },
411
466
 
412
467
  {
@@ -555,7 +610,9 @@ export const includedTools = [
555
610
  },
556
611
  executeScriptDefinition,
557
612
  googleSearchDefinition,
613
+ startAgentTaskDefinition,
558
614
  ...asana.definitions,
615
+ ...ycmd.definitions,
559
616
  ...github.definitions,
560
617
  ...language.definitions,
561
618
  ] as Tool[];
@@ -0,0 +1,109 @@
1
+ import { Tool } from "../../clients/types";
2
+ import { execCommand } from "./execCommand";
3
+
4
+ interface StartAgentTaskParams {
5
+ messageId: string;
6
+ prompt: string;
7
+ provider?: string;
8
+ model?: string;
9
+ agentName?: string;
10
+ maxTimeLimit?: number;
11
+ maxSpendLimit?: number;
12
+ }
13
+
14
+ /**
15
+ * Creates a chat task in Knowhow based on a message ID and prompt.
16
+ * This allows external agents to start tasks that can receive real-time updates.
17
+ */
18
+ export async function startAgentTask(params: StartAgentTaskParams) {
19
+ const {
20
+ messageId,
21
+ prompt,
22
+ provider,
23
+ model,
24
+ agentName,
25
+ maxTimeLimit,
26
+ maxSpendLimit,
27
+ } = params;
28
+
29
+ if (!messageId) {
30
+ throw new Error("messageId is required to create a chat task");
31
+ }
32
+
33
+ if (!prompt) {
34
+ throw new Error("prompt is required to create a chat task");
35
+ }
36
+
37
+ const escapedPrompt = prompt.replace(/"/g, '\\"');
38
+
39
+ // Build the command with all optional parameters
40
+ let command = `knowhow agent --input "${escapedPrompt}" --message-id ${messageId}`;
41
+
42
+ if (provider) {
43
+ command += ` --provider ${provider}`;
44
+ }
45
+
46
+ if (model) {
47
+ command += ` --model "${model}"`;
48
+ }
49
+
50
+ if (agentName) {
51
+ command += ` --agent-name "${agentName}"`;
52
+ }
53
+
54
+ if (maxTimeLimit !== undefined) {
55
+ command += ` --max-time-limit ${maxTimeLimit}`;
56
+ }
57
+
58
+ if (maxSpendLimit !== undefined) {
59
+ command += ` --max-spend-limit ${maxSpendLimit}`;
60
+ }
61
+
62
+ return execCommand(command, 60000, true);
63
+ }
64
+
65
+ export const startAgentTaskDefinition: Tool = {
66
+ type: "function",
67
+ function: {
68
+ name: "startAgentTask",
69
+ description:
70
+ "Create a new chat task in Knowhow based on a message ID and prompt. This allows worker agents to start tasks and update knowhow's backend with all CLI agent options",
71
+ parameters: {
72
+ type: "object",
73
+ properties: {
74
+ messageId: {
75
+ type: "string",
76
+ description:
77
+ "The ID of the message in Knowhow to associate with this task",
78
+ },
79
+ prompt: {
80
+ type: "string",
81
+ description: "The prompt or description for the task to be created",
82
+ },
83
+ provider: {
84
+ type: "string",
85
+ description:
86
+ "AI provider (openai, anthropic, google, xai). Default: openai",
87
+ },
88
+ model: {
89
+ type: "string",
90
+ description: "Specific model for the provider",
91
+ },
92
+ agentName: {
93
+ type: "string",
94
+ description: "Which agent to use. Default: Patcher",
95
+ },
96
+ maxTimeLimit: {
97
+ type: "number",
98
+ description: "Time limit for agent execution in minutes. Default: 30",
99
+ },
100
+ maxSpendLimit: {
101
+ type: "number",
102
+ description: "Cost limit for agent execution in dollars. Default: 10",
103
+ },
104
+ },
105
+ required: ["messageId", "prompt"],
106
+ },
107
+ },
108
+ };
109
+
@@ -3,7 +3,7 @@ import { execCommand } from "./execCommand";
3
3
 
4
4
  export async function textSearch(searchTerm) {
5
5
  try {
6
- const command = `ag -m 3 "${searchTerm}"`;
6
+ const command = `ag -m 3 -Q "${searchTerm}"`;
7
7
  const output = await execCommand(command);
8
8
  return output;
9
9
  } catch (err) {
@@ -1,6 +1,35 @@
1
+ import { services, ToolsService } from "../../services";
1
2
  import { askGptVision } from "../../ai";
3
+ import { Models } from "../../types";
2
4
 
3
- export async function visionTool(imageUrl: string, question: string) {
4
- const response = await askGptVision(imageUrl, question);
5
+ export async function visionTool(
6
+ imageUrl: string,
7
+ question: string,
8
+ provider = "openai",
9
+ model = Models.openai.GPT_4o
10
+ ) {
11
+ const toolService =
12
+ this instanceof ToolsService ? (this as ToolsService) : services().Tools;
13
+
14
+ const { Clients } = toolService.getContext();
15
+
16
+ const response = await Clients.createCompletion(provider, {
17
+ model,
18
+ max_tokens: 2500,
19
+ messages: [
20
+ {
21
+ role: "user",
22
+ content: [
23
+ { type: "text", text: question },
24
+ {
25
+ type: "image_url",
26
+ image_url: {
27
+ url: imageUrl,
28
+ },
29
+ },
30
+ ],
31
+ },
32
+ ],
33
+ });
5
34
  return response.choices[0].message.content;
6
35
  }