@tyvm/knowhow 0.0.91 → 0.0.93

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 (405) hide show
  1. package/.depcheckrc +0 -1
  2. package/package.json +9 -6
  3. package/scripts/check-isolated-deps.sh +69 -0
  4. package/src/agents/configurable/ConfigAgent.ts +2 -2
  5. package/src/chat/modules/AgentModule.ts +0 -1
  6. package/src/chat/types.ts +1 -1
  7. package/src/clients/gemini.ts +2 -2
  8. package/src/clients/openai.ts +1 -1
  9. package/src/clients/xai.ts +1 -1
  10. package/src/index.ts +7 -19
  11. package/src/services/EmbeddingsService.ts +70 -0
  12. package/src/services/KnowhowClient.ts +1 -1
  13. package/src/services/Mcp.ts +1 -5
  14. package/src/services/S3.ts +2 -70
  15. package/src/services/index.ts +4 -4
  16. package/src/services/modules/index.ts +3 -2
  17. package/src/services/modules/types.ts +3 -0
  18. package/tests/unit/modules/moduleLoading.test.ts +5 -0
  19. package/ts_build/package.json +9 -6
  20. package/ts_build/src/agents/base/base.js.map +1 -1
  21. package/ts_build/src/agents/index.js +20 -10
  22. package/ts_build/src/agents/index.js.map +1 -1
  23. package/ts_build/src/agents/tools/addInternalTools.js +1 -2
  24. package/ts_build/src/agents/tools/addInternalTools.js.map +1 -1
  25. package/ts_build/src/agents/tools/agentCall.js +1 -2
  26. package/ts_build/src/agents/tools/agentCall.js.map +1 -1
  27. package/ts_build/src/agents/tools/aiClient.js +10 -11
  28. package/ts_build/src/agents/tools/aiClient.js.map +1 -1
  29. package/ts_build/src/agents/tools/askHuman.js +1 -2
  30. package/ts_build/src/agents/tools/askHuman.js.map +1 -1
  31. package/ts_build/src/agents/tools/callPlugin.js +1 -2
  32. package/ts_build/src/agents/tools/callPlugin.js.map +1 -1
  33. package/ts_build/src/agents/tools/embeddingSearch.js +1 -2
  34. package/ts_build/src/agents/tools/embeddingSearch.js.map +1 -1
  35. package/ts_build/src/agents/tools/execCommand.d.ts +0 -1
  36. package/ts_build/src/agents/tools/execCommand.js +17 -7
  37. package/ts_build/src/agents/tools/execCommand.js.map +1 -1
  38. package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.js +2 -2
  39. package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.js.map +1 -1
  40. package/ts_build/src/agents/tools/executeScript/examples/quick-test.js +1 -2
  41. package/ts_build/src/agents/tools/executeScript/examples/quick-test.js.map +1 -1
  42. package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js +2 -2
  43. package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js.map +1 -1
  44. package/ts_build/src/agents/tools/executeScript/examples/test-runner.js +19 -9
  45. package/ts_build/src/agents/tools/executeScript/examples/test-runner.js.map +1 -1
  46. package/ts_build/src/agents/tools/executeScript/index.js +1 -2
  47. package/ts_build/src/agents/tools/executeScript/index.js.map +1 -1
  48. package/ts_build/src/agents/tools/fileSearch.js +1 -2
  49. package/ts_build/src/agents/tools/fileSearch.js.map +1 -1
  50. package/ts_build/src/agents/tools/finalAnswer.js +1 -2
  51. package/ts_build/src/agents/tools/finalAnswer.js.map +1 -1
  52. package/ts_build/src/agents/tools/googleSearch.js +2 -2
  53. package/ts_build/src/agents/tools/googleSearch.js.map +1 -1
  54. package/ts_build/src/agents/tools/language/definitions.js.map +1 -1
  55. package/ts_build/src/agents/tools/language/index.js +3 -4
  56. package/ts_build/src/agents/tools/language/index.js.map +1 -1
  57. package/ts_build/src/agents/tools/lazy/disableTools.js +1 -2
  58. package/ts_build/src/agents/tools/lazy/disableTools.js.map +1 -1
  59. package/ts_build/src/agents/tools/lazy/enableTools.js +1 -2
  60. package/ts_build/src/agents/tools/lazy/enableTools.js.map +1 -1
  61. package/ts_build/src/agents/tools/lazy/listAvailableTools.js +1 -2
  62. package/ts_build/src/agents/tools/lazy/listAvailableTools.js.map +1 -1
  63. package/ts_build/src/agents/tools/lintFile.js +1 -2
  64. package/ts_build/src/agents/tools/lintFile.js.map +1 -1
  65. package/ts_build/src/agents/tools/list.js +17 -7
  66. package/ts_build/src/agents/tools/list.js.map +1 -1
  67. package/ts_build/src/agents/tools/loadWebpage.js +1 -2
  68. package/ts_build/src/agents/tools/loadWebpage.js.map +1 -1
  69. package/ts_build/src/agents/tools/mcp/connectMcpServer.js +1 -2
  70. package/ts_build/src/agents/tools/mcp/connectMcpServer.js.map +1 -1
  71. package/ts_build/src/agents/tools/mcp/disconnectMcpServer.js +1 -2
  72. package/ts_build/src/agents/tools/mcp/disconnectMcpServer.js.map +1 -1
  73. package/ts_build/src/agents/tools/mcp/listAvailableMcpServers.js +1 -2
  74. package/ts_build/src/agents/tools/mcp/listAvailableMcpServers.js.map +1 -1
  75. package/ts_build/src/agents/tools/modifyFile.js +18 -9
  76. package/ts_build/src/agents/tools/modifyFile.js.map +1 -1
  77. package/ts_build/src/agents/tools/patch.js +24 -15
  78. package/ts_build/src/agents/tools/patch.js.map +1 -1
  79. package/ts_build/src/agents/tools/readBlocks.js +18 -9
  80. package/ts_build/src/agents/tools/readBlocks.js.map +1 -1
  81. package/ts_build/src/agents/tools/readFile.js +18 -9
  82. package/ts_build/src/agents/tools/readFile.js.map +1 -1
  83. package/ts_build/src/agents/tools/scanFile.js +18 -9
  84. package/ts_build/src/agents/tools/scanFile.js.map +1 -1
  85. package/ts_build/src/agents/tools/startAgentTask.js +19 -9
  86. package/ts_build/src/agents/tools/startAgentTask.js.map +1 -1
  87. package/ts_build/src/agents/tools/stringReplace.js +18 -9
  88. package/ts_build/src/agents/tools/stringReplace.js.map +1 -1
  89. package/ts_build/src/agents/tools/textSearch.js +1 -2
  90. package/ts_build/src/agents/tools/textSearch.js.map +1 -1
  91. package/ts_build/src/agents/tools/visionTool.js +1 -2
  92. package/ts_build/src/agents/tools/visionTool.js.map +1 -1
  93. package/ts_build/src/agents/tools/writeFile.js +19 -10
  94. package/ts_build/src/agents/tools/writeFile.js.map +1 -1
  95. package/ts_build/src/agents/tools/ycmd/client.js +19 -9
  96. package/ts_build/src/agents/tools/ycmd/client.js.map +1 -1
  97. package/ts_build/src/agents/tools/ycmd/detection.js +17 -7
  98. package/ts_build/src/agents/tools/ycmd/detection.js.map +1 -1
  99. package/ts_build/src/agents/tools/ycmd/installer.js +17 -7
  100. package/ts_build/src/agents/tools/ycmd/installer.js.map +1 -1
  101. package/ts_build/src/agents/tools/ycmd/server.js +17 -7
  102. package/ts_build/src/agents/tools/ycmd/server.js.map +1 -1
  103. package/ts_build/src/agents/tools/ycmd/serverManager.js +17 -7
  104. package/ts_build/src/agents/tools/ycmd/serverManager.js.map +1 -1
  105. package/ts_build/src/agents/tools/ycmd/tools/completion.js +1 -2
  106. package/ts_build/src/agents/tools/ycmd/tools/completion.js.map +1 -1
  107. package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js +1 -2
  108. package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js.map +1 -1
  109. package/ts_build/src/agents/tools/ycmd/tools/getLocations.js +19 -10
  110. package/ts_build/src/agents/tools/ycmd/tools/getLocations.js.map +1 -1
  111. package/ts_build/src/agents/tools/ycmd/tools/goto.js +1 -2
  112. package/ts_build/src/agents/tools/ycmd/tools/goto.js.map +1 -1
  113. package/ts_build/src/agents/tools/ycmd/tools/refactor.js +1 -2
  114. package/ts_build/src/agents/tools/ycmd/tools/refactor.js.map +1 -1
  115. package/ts_build/src/agents/tools/ycmd/tools/signature.js +1 -2
  116. package/ts_build/src/agents/tools/ycmd/tools/signature.js.map +1 -1
  117. package/ts_build/src/agents/tools/ycmd/tools/start.js +1 -2
  118. package/ts_build/src/agents/tools/ycmd/tools/start.js.map +1 -1
  119. package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js +21 -12
  120. package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js.map +1 -1
  121. package/ts_build/src/ai.js +25 -15
  122. package/ts_build/src/ai.js.map +1 -1
  123. package/ts_build/src/auth/browserLogin.js +20 -10
  124. package/ts_build/src/auth/browserLogin.js.map +1 -1
  125. package/ts_build/src/auth/spinner.js.map +1 -1
  126. package/ts_build/src/chat/CliChatService.js.map +1 -1
  127. package/ts_build/src/chat/modules/AgentModule.js +17 -7
  128. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  129. package/ts_build/src/chat/modules/AskModule.js.map +1 -1
  130. package/ts_build/src/chat/modules/BaseChatModule.js.map +1 -1
  131. package/ts_build/src/chat/modules/CustomCommandsModule.js.map +1 -1
  132. package/ts_build/src/chat/modules/InternalChatModule.js.map +1 -1
  133. package/ts_build/src/chat/modules/RendererModule.js.map +1 -1
  134. package/ts_build/src/chat/modules/SearchModule.js.map +1 -1
  135. package/ts_build/src/chat/modules/SessionsModule.js +17 -7
  136. package/ts_build/src/chat/modules/SessionsModule.js.map +1 -1
  137. package/ts_build/src/chat/modules/SetupModule.js.map +1 -1
  138. package/ts_build/src/chat/modules/ShellCommandModule.js.map +1 -1
  139. package/ts_build/src/chat/modules/SystemModule.js.map +1 -1
  140. package/ts_build/src/chat/modules/VoiceModule.js.map +1 -1
  141. package/ts_build/src/chat/renderer/CompactRenderer.js.map +1 -1
  142. package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
  143. package/ts_build/src/chat/renderer/FancyRenderer.js.map +1 -1
  144. package/ts_build/src/chat/renderer/loadRenderer.js +26 -18
  145. package/ts_build/src/chat/renderer/loadRenderer.js.map +1 -1
  146. package/ts_build/src/chat/renderer/messagesToRenderEvents.js +1 -2
  147. package/ts_build/src/chat/renderer/messagesToRenderEvents.js.map +1 -1
  148. package/ts_build/src/chat/types.d.ts +1 -1
  149. package/ts_build/src/chat.js +1 -2
  150. package/ts_build/src/chat.js.map +1 -1
  151. package/ts_build/src/cli.js +17 -7
  152. package/ts_build/src/cli.js.map +1 -1
  153. package/ts_build/src/clients/anthropic.d.ts +74 -4
  154. package/ts_build/src/clients/anthropic.js.map +1 -1
  155. package/ts_build/src/clients/contextLimits.js +2 -2
  156. package/ts_build/src/clients/contextLimits.js.map +1 -1
  157. package/ts_build/src/clients/gemini.js +18 -8
  158. package/ts_build/src/clients/gemini.js.map +1 -1
  159. package/ts_build/src/clients/http.js.map +1 -1
  160. package/ts_build/src/clients/index.js.map +1 -1
  161. package/ts_build/src/clients/knowhowMcp.js.map +1 -1
  162. package/ts_build/src/clients/openai.d.ts +199 -1
  163. package/ts_build/src/clients/openai.js +1 -1
  164. package/ts_build/src/clients/openai.js.map +1 -1
  165. package/ts_build/src/clients/pricing/anthropic.d.ts +72 -4
  166. package/ts_build/src/clients/pricing/openai.d.ts +192 -1
  167. package/ts_build/src/clients/pricing/xai.d.ts +36 -7
  168. package/ts_build/src/clients/types.d.ts +0 -2
  169. package/ts_build/src/clients/xai.d.ts +38 -7
  170. package/ts_build/src/clients/xai.js +1 -1
  171. package/ts_build/src/clients/xai.js.map +1 -1
  172. package/ts_build/src/config.js +27 -18
  173. package/ts_build/src/config.js.map +1 -1
  174. package/ts_build/src/conversion.js +21 -12
  175. package/ts_build/src/conversion.js.map +1 -1
  176. package/ts_build/src/dataset/diffs/debug-errors.js.map +1 -1
  177. package/ts_build/src/dataset/diffs/debug.js.map +1 -1
  178. package/ts_build/src/dataset/diffs/generate.js +17 -7
  179. package/ts_build/src/dataset/diffs/generate.js.map +1 -1
  180. package/ts_build/src/dataset/diffs/jsonl.js.map +1 -1
  181. package/ts_build/src/dataset/diffs/test.js.map +1 -1
  182. package/ts_build/src/embeddings.d.ts +1 -1
  183. package/ts_build/src/embeddings.js +33 -23
  184. package/ts_build/src/embeddings.js.map +1 -1
  185. package/ts_build/src/fileSync.js +18 -9
  186. package/ts_build/src/fileSync.js.map +1 -1
  187. package/ts_build/src/hashes.js +22 -13
  188. package/ts_build/src/hashes.js.map +1 -1
  189. package/ts_build/src/index.js +33 -28
  190. package/ts_build/src/index.js.map +1 -1
  191. package/ts_build/src/login.js +3 -4
  192. package/ts_build/src/login.js.map +1 -1
  193. package/ts_build/src/microphone.js +24 -15
  194. package/ts_build/src/microphone.js.map +1 -1
  195. package/ts_build/src/migrations.js +3 -3
  196. package/ts_build/src/migrations.js.map +1 -1
  197. package/ts_build/src/plugins/AgentsMdPlugin.js +17 -7
  198. package/ts_build/src/plugins/AgentsMdPlugin.js.map +1 -1
  199. package/ts_build/src/plugins/GitPlugin.js +17 -7
  200. package/ts_build/src/plugins/GitPlugin.js.map +1 -1
  201. package/ts_build/src/plugins/LinterPlugin.js.map +1 -1
  202. package/ts_build/src/plugins/PluginBase.js.map +1 -1
  203. package/ts_build/src/plugins/SkillsPlugin.js +17 -7
  204. package/ts_build/src/plugins/SkillsPlugin.js.map +1 -1
  205. package/ts_build/src/plugins/embedding.js.map +1 -1
  206. package/ts_build/src/plugins/exec.js.map +1 -1
  207. package/ts_build/src/plugins/language.js.map +1 -1
  208. package/ts_build/src/plugins/plugins.d.ts +1 -1
  209. package/ts_build/src/plugins/plugins.js +18 -9
  210. package/ts_build/src/plugins/plugins.js.map +1 -1
  211. package/ts_build/src/plugins/tmux.js.map +1 -1
  212. package/ts_build/src/plugins/url.js.map +1 -1
  213. package/ts_build/src/plugins/vim.js.map +1 -1
  214. package/ts_build/src/processors/Base64ImageDetector.js +17 -7
  215. package/ts_build/src/processors/Base64ImageDetector.js.map +1 -1
  216. package/ts_build/src/processors/CustomVariables.js.map +1 -1
  217. package/ts_build/src/processors/HarmonyToolProcessor.js.map +1 -1
  218. package/ts_build/src/processors/JsonCompressor.js.map +1 -1
  219. package/ts_build/src/processors/TokenCompressor.js.map +1 -1
  220. package/ts_build/src/processors/ToolResponseCache.js.map +1 -1
  221. package/ts_build/src/processors/XmlToolCallProcessor.js.map +1 -1
  222. package/ts_build/src/processors/tools/grepToolResponse.js +2 -2
  223. package/ts_build/src/processors/tools/grepToolResponse.js.map +1 -1
  224. package/ts_build/src/processors/tools/jqToolResponse.js +19 -9
  225. package/ts_build/src/processors/tools/jqToolResponse.js.map +1 -1
  226. package/ts_build/src/processors/tools/listStoredToolResponses.js +2 -2
  227. package/ts_build/src/processors/tools/listStoredToolResponses.js.map +1 -1
  228. package/ts_build/src/processors/tools/tailToolResponse.js +2 -2
  229. package/ts_build/src/processors/tools/tailToolResponse.js.map +1 -1
  230. package/ts_build/src/services/AgentService.js.map +1 -1
  231. package/ts_build/src/services/AgentSyncFs.js +17 -7
  232. package/ts_build/src/services/AgentSyncFs.js.map +1 -1
  233. package/ts_build/src/services/AgentSyncKnowhowWeb.js.map +1 -1
  234. package/ts_build/src/services/DockerService.js +17 -7
  235. package/ts_build/src/services/DockerService.js.map +1 -1
  236. package/ts_build/src/services/EmbeddingService.d.ts +1 -1
  237. package/ts_build/src/services/EmbeddingService.js +17 -7
  238. package/ts_build/src/services/EmbeddingService.js.map +1 -1
  239. package/ts_build/src/services/EmbeddingsService.d.ts +14 -0
  240. package/ts_build/src/services/EmbeddingsService.js +33 -0
  241. package/ts_build/src/services/EmbeddingsService.js.map +1 -0
  242. package/ts_build/src/services/EventService.d.ts +0 -1
  243. package/ts_build/src/services/EventService.js.map +1 -1
  244. package/ts_build/src/services/KnowhowClient.js +3 -3
  245. package/ts_build/src/services/KnowhowClient.js.map +1 -1
  246. package/ts_build/src/services/LazyToolsService.js.map +1 -1
  247. package/ts_build/src/services/Mcp.d.ts +11 -15
  248. package/ts_build/src/services/Mcp.js +1 -5
  249. package/ts_build/src/services/Mcp.js.map +1 -1
  250. package/ts_build/src/services/McpServer.js.map +1 -1
  251. package/ts_build/src/services/McpWebsocketTransport.js.map +1 -1
  252. package/ts_build/src/services/MediaProcessorService.js +17 -7
  253. package/ts_build/src/services/MediaProcessorService.js.map +1 -1
  254. package/ts_build/src/services/MessageProcessor.js.map +1 -1
  255. package/ts_build/src/services/S3.d.ts +0 -4
  256. package/ts_build/src/services/S3.js +19 -49
  257. package/ts_build/src/services/S3.js.map +1 -1
  258. package/ts_build/src/services/SessionManager.js +17 -7
  259. package/ts_build/src/services/SessionManager.js.map +1 -1
  260. package/ts_build/src/services/SyncedAgentWatcher.js +17 -7
  261. package/ts_build/src/services/SyncedAgentWatcher.js.map +1 -1
  262. package/ts_build/src/services/SyncerService.js.map +1 -1
  263. package/ts_build/src/services/TaskRegistry.js.map +1 -1
  264. package/ts_build/src/services/Tools.js.map +1 -1
  265. package/ts_build/src/services/flags.js.map +1 -1
  266. package/ts_build/src/services/index.d.ts +3 -3
  267. package/ts_build/src/services/index.js +20 -10
  268. package/ts_build/src/services/index.js.map +1 -1
  269. package/ts_build/src/services/modules/index.js +3 -2
  270. package/ts_build/src/services/modules/index.js.map +1 -1
  271. package/ts_build/src/services/modules/types.d.ts +3 -0
  272. package/ts_build/src/services/script-execution/SandboxContext.js.map +1 -1
  273. package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -1
  274. package/ts_build/src/services/script-execution/ScriptPolicy.js.map +1 -1
  275. package/ts_build/src/services/script-execution/ScriptTracer.js.map +1 -1
  276. package/ts_build/src/services/types.js +2 -2
  277. package/ts_build/src/services/types.js.map +1 -1
  278. package/ts_build/src/types.d.ts +1 -6
  279. package/ts_build/src/types.js +3 -3
  280. package/ts_build/src/types.js.map +1 -1
  281. package/ts_build/src/utils/InputQueueManager.js.map +1 -1
  282. package/ts_build/src/utils/http.d.ts +4 -4
  283. package/ts_build/src/utils/http.js.map +1 -1
  284. package/ts_build/src/utils/index.d.ts +1 -4
  285. package/ts_build/src/utils/index.js +27 -17
  286. package/ts_build/src/utils/index.js.map +1 -1
  287. package/ts_build/src/worker.js +18 -9
  288. package/ts_build/src/worker.js.map +1 -1
  289. package/ts_build/src/workerRegistry.js +24 -15
  290. package/ts_build/src/workerRegistry.js.map +1 -1
  291. package/ts_build/src/workers/auth/PasskeySetup.js.map +1 -1
  292. package/ts_build/src/workers/auth/WorkerPasskeyAuth.js.map +1 -1
  293. package/ts_build/src/workers/tools/getChallenge.js +1 -2
  294. package/ts_build/src/workers/tools/getChallenge.js.map +1 -1
  295. package/ts_build/src/workers/tools/listAllowedPorts.js +2 -2
  296. package/ts_build/src/workers/tools/listAllowedPorts.js.map +1 -1
  297. package/ts_build/src/workers/tools/lock.js +1 -2
  298. package/ts_build/src/workers/tools/lock.js.map +1 -1
  299. package/ts_build/src/workers/tools/unlock.js +1 -2
  300. package/ts_build/src/workers/tools/unlock.js.map +1 -1
  301. package/ts_build/tests/XmlToolCallProcessor.test.js.map +1 -1
  302. package/ts_build/tests/clients/AIClient.test.js.map +1 -1
  303. package/ts_build/tests/clients/pricing.test.js.map +1 -1
  304. package/ts_build/tests/compressor/bigstring.test.js.map +1 -1
  305. package/ts_build/tests/compressor/toolResponseCache.test.js +17 -7
  306. package/ts_build/tests/compressor/toolResponseCache.test.js.map +1 -1
  307. package/ts_build/tests/manual/agent-events/run-test.js.map +1 -1
  308. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js +17 -7
  309. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js.map +1 -1
  310. package/ts_build/tests/manual/browser-login/test_cli_integration.js +17 -7
  311. package/ts_build/tests/manual/browser-login/test_cli_integration.js.map +1 -1
  312. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js +17 -7
  313. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js.map +1 -1
  314. package/ts_build/tests/manual/browser-login/test_error_scenarios.js +17 -7
  315. package/ts_build/tests/manual/browser-login/test_error_scenarios.js.map +1 -1
  316. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +17 -7
  317. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +1 -1
  318. package/ts_build/tests/manual/file-edits/patching.test.js +17 -7
  319. package/ts_build/tests/manual/file-edits/patching.test.js.map +1 -1
  320. package/ts_build/tests/manual/modalities/google.modalities.test.js +17 -7
  321. package/ts_build/tests/manual/modalities/google.modalities.test.js.map +1 -1
  322. package/ts_build/tests/manual/modalities/openai.modalities.test.js +17 -7
  323. package/ts_build/tests/manual/modalities/openai.modalities.test.js.map +1 -1
  324. package/ts_build/tests/manual/modalities/streaming.test.js +17 -7
  325. package/ts_build/tests/manual/modalities/streaming.test.js.map +1 -1
  326. package/ts_build/tests/manual/modalities/xai.modalities.test.js +17 -7
  327. package/ts_build/tests/manual/modalities/xai.modalities.test.js.map +1 -1
  328. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +17 -7
  329. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +1 -1
  330. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +17 -7
  331. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +1 -1
  332. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +17 -7
  333. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +1 -1
  334. package/ts_build/tests/manual/ycmd/simple_test.js +17 -7
  335. package/ts_build/tests/manual/ycmd/simple_test.js.map +1 -1
  336. package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +1 -1
  337. package/ts_build/tests/manual/ycmd/test_advanced_features.js +18 -9
  338. package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +1 -1
  339. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +18 -9
  340. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +1 -1
  341. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +17 -7
  342. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +1 -1
  343. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +17 -7
  344. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +1 -1
  345. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +17 -7
  346. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +1 -1
  347. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +17 -7
  348. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +1 -1
  349. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +17 -7
  350. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +1 -1
  351. package/ts_build/tests/manual/ycmd/test_discover_commands.js +18 -9
  352. package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +1 -1
  353. package/ts_build/tests/manual/ycmd/test_endpoints.js +17 -7
  354. package/ts_build/tests/manual/ycmd/test_endpoints.js.map +1 -1
  355. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +17 -7
  356. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +1 -1
  357. package/ts_build/tests/manual/ycmd/test_final_validation.js +17 -7
  358. package/ts_build/tests/manual/ycmd/test_final_validation.js.map +1 -1
  359. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +1 -1
  360. package/ts_build/tests/manual/ycmd/test_server_manager.js.map +1 -1
  361. package/ts_build/tests/manual/ycmd/test_simple_debug.js +17 -7
  362. package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +1 -1
  363. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +17 -7
  364. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +1 -1
  365. package/ts_build/tests/manual/ycmd/test_typescript_simple.js +17 -7
  366. package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +1 -1
  367. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +17 -7
  368. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +1 -1
  369. package/ts_build/tests/manual/ycmd/test_workspace_config.js +17 -7
  370. package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +1 -1
  371. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +17 -7
  372. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +1 -1
  373. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +17 -7
  374. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +1 -1
  375. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +17 -7
  376. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +1 -1
  377. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +19 -9
  378. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +1 -1
  379. package/ts_build/tests/manual/ycmd/test_ycmd_final.js +17 -7
  380. package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +1 -1
  381. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +18 -9
  382. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +1 -1
  383. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +1 -1
  384. package/ts_build/tests/manual/ycmd/working_simple_test.js +17 -7
  385. package/ts_build/tests/manual/ycmd/working_simple_test.js.map +1 -1
  386. package/ts_build/tests/patching/corrupted.test.js.map +1 -1
  387. package/ts_build/tests/patching/imports.test.js +17 -7
  388. package/ts_build/tests/patching/imports.test.js.map +1 -1
  389. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +17 -7
  390. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +1 -1
  391. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +17 -7
  392. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +1 -1
  393. package/ts_build/tests/plugins/language/languagePlugin.test.js +17 -7
  394. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +1 -1
  395. package/ts_build/tests/processors/Base64ImageDetector.test.js +17 -7
  396. package/ts_build/tests/processors/Base64ImageDetector.test.js.map +1 -1
  397. package/ts_build/tests/processors/TokenCompressor.test.js.map +1 -1
  398. package/ts_build/tests/processors/ToolResponseCache.test.js.map +1 -1
  399. package/ts_build/tests/services/Tools.test.js.map +1 -1
  400. package/ts_build/tests/test.spec.js +17 -7
  401. package/ts_build/tests/test.spec.js.map +1 -1
  402. package/ts_build/tests/unit/InputQueueManager.test.js.map +1 -1
  403. package/ts_build/tests/unit/modules/moduleLoading.test.js +5 -0
  404. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +1 -1
  405. package/src/services/GitHub.ts +0 -59
package/.depcheckrc CHANGED
@@ -18,7 +18,6 @@
18
18
  "@types/ws",
19
19
  "@babel/preset-typescript"
20
20
  ],
21
- "skip-missing": true,
22
21
  "ignore-patterns": [
23
22
  "src/dataset/**",
24
23
  "ts_build/**",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tyvm/knowhow",
3
- "version": "0.0.91",
3
+ "version": "0.0.93",
4
4
  "description": "ai cli with plugins and agents",
5
5
  "main": "ts_build/src/index.js",
6
6
  "bin": {
@@ -13,7 +13,8 @@
13
13
  "start": "npm run compile && node --no-node-snapshot ts_build/src/server/index.js",
14
14
  "dataset:diffs:generate": "ts-node src/dataset/diffs/generate.ts",
15
15
  "dataset:diffs:jsonl": "ts-node src/dataset/diffs/jsonl.ts",
16
- "prepublishOnly": "npm run compile",
16
+ "prepublishOnly": "npm run compile && bash scripts/check-isolated-deps.sh",
17
+ "check:isolated": "bash scripts/check-isolated-deps.sh",
17
18
  "lint": "tslint ./src/**/*.ts",
18
19
  "lint:deps": "depcheck --config=.depcheckrc",
19
20
  "lint:all": "npm run lint && npm run lint:deps"
@@ -23,6 +24,7 @@
23
24
  "license": "MIT",
24
25
  "devDependencies": {
25
26
  "@babel/preset-typescript": "^7.23.3",
27
+ "typescript": "^5.0.0",
26
28
  "@types/diff": "^5.2.1",
27
29
  "@types/express": "^4.17.13",
28
30
  "@types/jest": "^29.5.13",
@@ -39,7 +41,6 @@
39
41
  },
40
42
  "dependencies": {
41
43
  "@anthropic-ai/sdk": "^0.39.0",
42
- "@aws-sdk/client-s3": "^3.588.0",
43
44
  "@google/genai": "^0.14.1",
44
45
  "@inquirer/editor": "^4.2.18",
45
46
  "@modelcontextprotocol/sdk": "^1.13.3",
@@ -58,9 +59,8 @@
58
59
  "node-jq": "^6.0.1",
59
60
  "openai": "4.89.1",
60
61
  "pdf-parse": "^1.1.1",
61
- "typescript": "^4.6.3",
62
62
  "ws": "^8.18.1",
63
- "zod": "^3.24.2"
63
+ "zod": "^3.25.0"
64
64
  },
65
65
  "directories": {
66
66
  "test": "tests"
@@ -73,5 +73,8 @@
73
73
  "bugs": {
74
74
  "url": "https://github.com/tyvm-ai/knowhow/issues"
75
75
  },
76
- "homepage": "https://github.com/tyvm-ai/knowhow#readme"
76
+ "homepage": "https://github.com/tyvm-ai/knowhow#readme",
77
+ "optionalDependencies": {
78
+ "esbuild-register": "^3.0.0"
79
+ }
77
80
  }
@@ -0,0 +1,69 @@
1
+ #!/bin/bash
2
+ # check-isolated-deps.sh
3
+ # Verifies that packages/knowhow only imports dependencies it actually declares.
4
+ # Runs tsc in an isolated temp directory with NO parent node_modules available,
5
+ # so any dep resolved from the monorepo root will cause a real compile failure.
6
+ #
7
+ # Usage: bash scripts/check-isolated-deps.sh
8
+ # Also used as the "prepublishOnly" hook to prevent publishing broken packages.
9
+
10
+ set -e
11
+
12
+ PACKAGE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
13
+ MONOREPO_ROOT="$(cd "$PACKAGE_DIR/../.." && pwd)"
14
+ TUNNEL_DIR="$MONOREPO_ROOT/packages/knowhow-tunnel"
15
+
16
+ echo "=== Isolated dependency check for @tyvm/knowhow ==="
17
+ echo "Package dir: $PACKAGE_DIR"
18
+
19
+ # 1. Build knowhow-tunnel so we can pack it
20
+ echo ""
21
+ echo "--- Building knowhow-tunnel ---"
22
+ cd "$TUNNEL_DIR"
23
+ npm run build --silent
24
+
25
+ # Pack and capture just the filename (redirect stderr so npm warnings don't corrupt JSON)
26
+ TUNNEL_TARBALL=$(npm pack --json 2>/dev/null | node -e "process.stdin.resume(); let d=''; process.stdin.on('data',c=>d+=c); process.stdin.on('end',()=>console.log(JSON.parse(d)[0].filename))")
27
+ TUNNEL_TARBALL_PATH="$TUNNEL_DIR/$TUNNEL_TARBALL"
28
+ echo "Packed tunnel: $TUNNEL_TARBALL_PATH"
29
+
30
+ # 2. Create isolated temp directory
31
+ WORK_DIR=$(mktemp -d)
32
+ trap "rm -rf '$WORK_DIR'; rm -f '$TUNNEL_TARBALL_PATH'" EXIT
33
+ echo ""
34
+ echo "--- Creating isolated workspace at $WORK_DIR ---"
35
+
36
+ # 3. Copy package source (excluding node_modules and ts_build)
37
+ rsync -a \
38
+ --exclude='node_modules' \
39
+ --exclude='ts_build' \
40
+ --exclude='.knowhow' \
41
+ --exclude='scripts' \
42
+ "$PACKAGE_DIR/" "$WORK_DIR/"
43
+
44
+ # 4. Copy the tunnel tarball into work dir and rewrite the dependency
45
+ cp "$TUNNEL_TARBALL_PATH" "$WORK_DIR/$TUNNEL_TARBALL"
46
+ cd "$WORK_DIR"
47
+
48
+ # Replace workspace dep reference with local tarball path
49
+ node -e "
50
+ const fs = require('fs');
51
+ const pkg = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
52
+ pkg.dependencies['@tyvm/knowhow-tunnel'] = 'file:./' + process.argv[1];
53
+ fs.writeFileSync('./package.json', JSON.stringify(pkg, null, 2));
54
+ " "$TUNNEL_TARBALL"
55
+
56
+ echo "Updated @tyvm/knowhow-tunnel dep to local tarball"
57
+
58
+ # 5. Install in isolated dir (include devDeps for tsc) — NO parent node_modules accessible
59
+ echo ""
60
+ echo "--- Running npm install (isolated, including devDependencies) ---"
61
+ npm install --ignore-scripts 2>&1 | grep -v "^npm warn deprecated" | grep -v "^$" || true
62
+
63
+ # 6. Run tsc --noEmit from the isolated dir
64
+ echo ""
65
+ echo "--- Running tsc --noEmit (isolated) ---"
66
+ ./node_modules/.bin/tsc --noEmit
67
+
68
+ echo ""
69
+ echo "=== Isolated dependency check PASSED ==="
@@ -1,8 +1,8 @@
1
1
  import { AgentContext, BaseAgent } from "../base/base";
2
2
  import { Message } from "../../clients/types";
3
3
  import { Assistant, Config } from "../../types";
4
- import { EventService, ToolsService } from "src/services";
5
- import { MessageProcessor } from "src/services/MessageProcessor";
4
+ import { EventService, ToolsService } from "../../services";
5
+ import { MessageProcessor } from "../../services/MessageProcessor";
6
6
 
7
7
  export class ConfigAgent extends BaseAgent {
8
8
  name: string;
@@ -37,7 +37,6 @@ import {
37
37
  agents,
38
38
  } from "../../agents";
39
39
  import { ToolCallEvent } from "../../agents/base/base";
40
- import { $Command } from "@aws-sdk/client-s3";
41
40
  import { KnowhowSimpleClient } from "../../services/KnowhowClient";
42
41
 
43
42
  export class AgentModule extends BaseChatModule {
package/src/chat/types.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { ChatInteraction, Config } from "../types";
5
5
  import { BaseAgent } from "../agents/base/base";
6
- import { ToolsService } from "src/services";
6
+ import { ToolsService } from "../services";
7
7
  import { AgentRenderer } from "./renderer/types";
8
8
 
9
9
  export interface ChatContext {
@@ -688,7 +688,7 @@ export class GenericGeminiClient implements GenericClient {
688
688
  const mimeType = audioPart.inlineData.mimeType || "audio/wav";
689
689
 
690
690
  // Gemini returns raw PCM (audio/L16) - convert to WAV format for playability
691
- let audioBuffer = rawBuffer;
691
+ let audioBuffer: Buffer = rawBuffer;
692
692
  if (mimeType.includes("L16") || mimeType.includes("pcm")) {
693
693
  // Parse sample rate from mime type e.g. "audio/L16;codec=pcm;rate=24000"
694
694
  const rateMatch = mimeType.match(/rate=(\d+)/);
@@ -883,7 +883,7 @@ export class GenericGeminiClient implements GenericClient {
883
883
  */
884
884
  async uploadFile(options: FileUploadOptions): Promise<FileUploadResponse> {
885
885
  try {
886
- const blob = new Blob([options.data], { type: options.mimeType });
886
+ const blob = new Blob([new Uint8Array(options.data)], { type: options.mimeType });
887
887
  const uploadedFile = await this.client.files.upload({
888
888
  file: blob,
889
889
  config: {
@@ -398,7 +398,7 @@ export class GenericOpenAiClient implements GenericClient {
398
398
  if (!apiKey) throw new Error("OpenAI API key not set");
399
399
  const formData = new FormData();
400
400
  formData.append("purpose", "assistants");
401
- const blob = new Blob([options.data], { type: options.mimeType || "application/octet-stream" });
401
+ const blob = new Blob([new Uint8Array(options.data)], { type: options.mimeType || "application/octet-stream" });
402
402
  formData.append("file", blob, options.fileName || "upload");
403
403
  const response = await fetch("https://api.openai.com/v1/files", {
404
404
  method: "POST",
@@ -345,7 +345,7 @@ export class GenericXAIClient implements GenericClient {
345
345
 
346
346
  const formData = new FormData();
347
347
  formData.append("purpose", "assistants");
348
- const blob = new Blob([options.data], { type: options.mimeType || "application/octet-stream" });
348
+ const blob = new Blob([new Uint8Array(options.data)], { type: options.mimeType || "application/octet-stream" });
349
349
  formData.append("file", blob, options.fileName || "upload");
350
350
 
351
351
  const response = await fetch("https://api.x.ai/v1/files", {
package/src/index.ts CHANGED
@@ -105,7 +105,7 @@ export async function purge(globPath: string) {
105
105
 
106
106
  export async function upload() {
107
107
  const config = await getConfig();
108
- const { AwsS3, knowhowApiClient } = services();
108
+ const { AwsS3, Embeddings, knowhowApiClient } = services();
109
109
 
110
110
  for (const source of config.embedSources) {
111
111
  const bucketName = source.remote;
@@ -125,16 +125,15 @@ export async function upload() {
125
125
  items,
126
126
  };
127
127
 
128
- if (source.remoteType === "s3") {
128
+ if (Embeddings.hasResolver(source.remoteType) && source.remoteType !== "knowhow") {
129
129
  console.log(
130
130
  "Uploading",
131
131
  source.output,
132
132
  "to",
133
133
  `${bucketName}/${embeddingName}.json`
134
134
  );
135
-
136
- const s3Key = `${embeddingName}.json`;
137
- await AwsS3.uploadFile(source.output, bucketName, s3Key);
135
+ const remoteKey = `${embeddingName}.json`;
136
+ await Embeddings.upload(source.remoteType, source.output, bucketName, remoteKey);
138
137
  } else if (source.remoteType === "knowhow") {
139
138
  if (!source.remoteId) {
140
139
  throw new Error("remoteId is required for knowhow uploads");
@@ -357,7 +356,7 @@ export async function handleSingleOutputGeneration(
357
356
 
358
357
  export async function download() {
359
358
  const config = await getConfig();
360
- const { AwsS3, GitHub, knowhowApiClient } = services();
359
+ const { AwsS3, Embeddings, knowhowApiClient } = services();
361
360
 
362
361
  for (const source of config.embedSources) {
363
362
  const { remote, remoteType } = source;
@@ -375,28 +374,17 @@ export async function download() {
375
374
  const fileName = `${name}.json`;
376
375
  const destinationPath = source.output;
377
376
 
378
- if (remoteType === "s3") {
379
- const bucketName = remote;
377
+ if (Embeddings.hasResolver(remoteType)) {
380
378
  console.log(
381
379
  "Downloading",
382
380
  fileName,
383
381
  `from ${remoteType}`,
384
- bucketName,
385
- "to",
386
- destinationPath
387
- );
388
- await AwsS3.downloadFile(bucketName, fileName, destinationPath);
389
- } else if (remoteType === "github") {
390
- console.log(
391
- "Downloading",
392
- fileName,
393
- "from GitHub repo",
394
382
  remote,
395
383
  "to",
396
384
  destinationPath
397
385
  );
398
386
  const embeddingPath = ".knowhow/embeddings/" + fileName;
399
- await GitHub.downloadFile(remote, embeddingPath, destinationPath);
387
+ await Embeddings.download(remoteType, remote, embeddingPath, destinationPath);
400
388
  } else if (remoteType === "knowhow") {
401
389
  if (!source.remoteId) {
402
390
  throw new Error("remoteId is required for knowhow downloads");
@@ -0,0 +1,70 @@
1
+ type DownloaderFn = (
2
+ remote: string,
3
+ filePath: string,
4
+ destinationPath: string
5
+ ) => Promise<void>;
6
+
7
+ type UploaderFn = (
8
+ localPath: string,
9
+ remote: string,
10
+ remoteKey: string
11
+ ) => Promise<void>;
12
+
13
+ export interface EmbeddingsResolver {
14
+ download: DownloaderFn;
15
+ upload?: UploaderFn;
16
+ }
17
+
18
+ /**
19
+ * EmbeddingsService manages pluggable resolvers for remote embedding sources.
20
+ * Modules can register a resolver for a given remoteType (e.g. "github", "s3")
21
+ * via registerResolver(), and the core upload()/download() functions delegate to it.
22
+ */
23
+ export class EmbeddingsService {
24
+ private resolvers = new Map<string, EmbeddingsResolver>();
25
+
26
+ registerResolver(remoteType: string, resolver: EmbeddingsResolver): void {
27
+ this.resolvers.set(remoteType, resolver);
28
+ }
29
+
30
+ hasResolver(remoteType: string): boolean {
31
+ return this.resolvers.has(remoteType);
32
+ }
33
+
34
+ async download(
35
+ remoteType: string,
36
+ remote: string,
37
+ filePath: string,
38
+ destinationPath: string
39
+ ): Promise<void> {
40
+ const resolver = this.resolvers.get(remoteType);
41
+ if (!resolver) {
42
+ throw new Error(
43
+ `No resolver registered for remoteType: "${remoteType}". ` +
44
+ `Install and configure the appropriate knowhow module (e.g. @tyvm/knowhow-module-github).`
45
+ );
46
+ }
47
+ await resolver.download(remote, filePath, destinationPath);
48
+ }
49
+
50
+ async upload(
51
+ remoteType: string,
52
+ localPath: string,
53
+ remote: string,
54
+ remoteKey: string
55
+ ): Promise<void> {
56
+ const resolver = this.resolvers.get(remoteType);
57
+ if (!resolver) {
58
+ throw new Error(
59
+ `No resolver registered for remoteType: "${remoteType}". ` +
60
+ `Install and configure the appropriate knowhow module (e.g. @tyvm/knowhow-module-s3).`
61
+ );
62
+ }
63
+ if (!resolver.upload) {
64
+ throw new Error(
65
+ `Resolver for remoteType: "${remoteType}" does not support uploads.`
66
+ );
67
+ }
68
+ await resolver.upload(localPath, remote, remoteKey);
69
+ }
70
+ }
@@ -248,7 +248,7 @@ export class KnowhowSimpleClient {
248
248
  if (Buffer.isBuffer(options.file)) {
249
249
  formData.append(
250
250
  "file",
251
- new Blob([options.file]),
251
+ new Blob([new Uint8Array(options.file)]),
252
252
  options.fileName || "audio.mp3"
253
253
  );
254
254
  } else {
@@ -23,11 +23,7 @@ export const knowhowMcpClient = {
23
23
  version: "1.0.0",
24
24
  };
25
25
  export const knowhowConfig = {
26
- capabilities: {
27
- prompts: {},
28
- resources: {},
29
- tools: {},
30
- },
26
+ capabilities: {},
31
27
  };
32
28
 
33
29
  export * from "./McpServer";
@@ -1,86 +1,18 @@
1
- import {
2
- S3Client,
3
- HeadBucketCommand,
4
- CreateBucketCommand,
5
- GetObjectCommand,
6
- PutObjectCommand,
7
- GetObjectCommandInput,
8
- PutObjectCommandInput,
9
- } from "@aws-sdk/client-s3";
10
-
11
1
  import * as fs from "fs";
12
- const fsPromises = fs.promises;
13
- import { createWriteStream } from "fs";
14
- import * as path from "path";
2
+ import { createWriteStream, createReadStream } from "fs";
15
3
  import { pipeline, Readable } from "stream";
16
4
  import * as util from "util";
17
5
 
18
- import { createReadStream } from "fs";
19
6
  const pipelineAsync = util.promisify(pipeline);
20
7
 
21
8
  export class S3Service {
22
- private s3: S3Client;
23
-
24
- constructor() {
25
- this.s3 = new S3Client();
26
- }
27
-
28
- async uploadFile(
29
- filePath: string,
30
- bucketName: string,
31
- key: string
32
- ): Promise<void> {
33
- const fileContent = await fsPromises.readFile(filePath);
34
-
35
- const params = {
36
- Bucket: bucketName,
37
- Key: key,
38
- Body: fileContent,
39
- };
40
-
41
- // create bucket if it doesn't exist
42
- try {
43
- await this.s3.send(new HeadBucketCommand({ Bucket: bucketName }));
44
- } catch (error) {
45
- const statusCode = error.$metadata.httpStatusCode;
46
- if (statusCode === 404) {
47
- await this.s3.send(new CreateBucketCommand({ Bucket: bucketName }));
48
- console.log(`Bucket ${bucketName} created successfully`);
49
- } else {
50
- throw error;
51
- }
52
- }
53
-
54
- await this.s3.send(new PutObjectCommand(params));
55
- console.log(`File uploaded successfully to ${bucketName}/${key}`);
56
- }
57
-
58
- async downloadFile(
59
- bucketName: string,
60
- key: string,
61
- destinationPath: string
62
- ): Promise<void> {
63
- const params = {
64
- Bucket: bucketName,
65
- Key: key,
66
- };
67
- const { Body } = await this.s3.send(new GetObjectCommand(params));
68
- const fileStream = createWriteStream(destinationPath);
69
-
70
- await pipelineAsync(Body as NodeJS.ReadableStream, fileStream);
71
-
72
- console.log(
73
- `File downloaded successfully from ${bucketName}/${key} to ${destinationPath}`
74
- );
75
- }
76
-
77
9
  async uploadToPresignedUrl(
78
10
  presignedUrl: string,
79
11
  filePath: string
80
12
  ): Promise<void> {
81
13
  try {
82
14
  const fileStream = createReadStream(filePath);
83
- const fileStats = await fsPromises.stat(filePath);
15
+ const fileStats = await fs.promises.stat(filePath);
84
16
 
85
17
  const response = await fetch(presignedUrl, {
86
18
  method: "PUT",
@@ -2,7 +2,7 @@ import { AIClient, Clients } from "../clients";
2
2
  import { AgentService } from "./AgentService";
3
3
  import { EventService } from "./EventService";
4
4
  import { FlagsService } from "./flags";
5
- import { GitHubService } from "./GitHub";
5
+ import { EmbeddingsService } from "./EmbeddingsService";
6
6
  import { KnowhowSimpleClient } from "./KnowhowClient";
7
7
  import { McpService } from "./Mcp";
8
8
  import { S3Service } from "./S3";
@@ -18,7 +18,7 @@ import { MediaProcessorService } from "./MediaProcessorService";
18
18
  export * from "./AgentService";
19
19
  export * from "./EventService";
20
20
  export * from "./flags";
21
- export * from "./GitHub";
21
+ export * from "./EmbeddingsService";
22
22
  export * from "./S3";
23
23
  export * from "./Tools";
24
24
  export * from "./LazyToolsService";
@@ -38,8 +38,8 @@ let Singletons = {} as {
38
38
  Tools: ToolsService;
39
39
  Events: EventService;
40
40
  Agents: AgentService;
41
+ Embeddings: EmbeddingsService;
41
42
  Flags: FlagsService;
42
- GitHub: GitHubService;
43
43
  Mcp: McpService;
44
44
  AwsS3: S3Service;
45
45
  Docker: DockerService;
@@ -67,8 +67,8 @@ export const services = (): typeof Singletons => {
67
67
  Clients,
68
68
  Docker: new DockerService(),
69
69
  Events,
70
+ Embeddings: new EmbeddingsService(),
70
71
  Flags: new FlagsService(),
71
- GitHub: new GitHubService(),
72
72
  Mcp: new McpService(),
73
73
  MediaProcessor: new MediaProcessorService(Clients),
74
74
  Plugins,
@@ -10,9 +10,10 @@ export class ModulesService {
10
10
 
11
11
  // If no context provided, fall back to global singletons
12
12
  if (!context) {
13
- const { Clients, Plugins, Agents, Tools, MediaProcessor } = services();
13
+ const { Clients, Plugins, Agents, Tools, Embeddings, MediaProcessor } = services();
14
14
  context = {
15
15
  Agents,
16
+ Embeddings,
16
17
  Plugins,
17
18
  Clients,
18
19
  Tools,
@@ -35,7 +36,7 @@ export class ModulesService {
35
36
 
36
37
  for (const modulePath of allModulePaths) {
37
38
  const importedModule = require(modulePath) as KnowhowModule;
38
- await importedModule.init({ config, cwd: process.cwd() });
39
+ await importedModule.init({ config, cwd: process.cwd(), context });
39
40
 
40
41
  for (const agent of importedModule.agents) {
41
42
  agentService.registerAgent(agent);
@@ -4,6 +4,7 @@ import { Tool } from "../../clients/types";
4
4
  import { Config } from "../../types";
5
5
  import { GenericClient } from "../../clients/types";
6
6
  import { AgentService } from "../AgentService";
7
+ import { EmbeddingsService } from "../EmbeddingsService";
7
8
  import { PluginService } from "../../plugins/plugins";
8
9
  import { AIClient } from "../../clients";
9
10
  import { ToolsService } from "../Tools";
@@ -42,10 +43,12 @@ export type ModuleClient = {
42
43
  export type InitParams = {
43
44
  config: Config;
44
45
  cwd: string;
46
+ context?: ModuleContext;
45
47
  };
46
48
 
47
49
  export interface ModuleContext {
48
50
  Agents: AgentService;
51
+ Embeddings: EmbeddingsService;
49
52
  Plugins: PluginService;
50
53
  Clients: AIClient;
51
54
  Tools: ToolsService;
@@ -47,6 +47,11 @@ function makeContext(overrides?: Partial<ModuleContext>): ModuleContext {
47
47
  addTool: jest.fn(),
48
48
  setFunction: jest.fn(),
49
49
  } as any,
50
+ Embeddings: {
51
+ registerDownloader: jest.fn(),
52
+ hasDownloader: jest.fn(),
53
+ download: jest.fn(),
54
+ } as any,
50
55
  ...overrides,
51
56
  };
52
57
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tyvm/knowhow",
3
- "version": "0.0.91",
3
+ "version": "0.0.93",
4
4
  "description": "ai cli with plugins and agents",
5
5
  "main": "ts_build/src/index.js",
6
6
  "bin": {
@@ -13,7 +13,8 @@
13
13
  "start": "npm run compile && node --no-node-snapshot ts_build/src/server/index.js",
14
14
  "dataset:diffs:generate": "ts-node src/dataset/diffs/generate.ts",
15
15
  "dataset:diffs:jsonl": "ts-node src/dataset/diffs/jsonl.ts",
16
- "prepublishOnly": "npm run compile",
16
+ "prepublishOnly": "npm run compile && bash scripts/check-isolated-deps.sh",
17
+ "check:isolated": "bash scripts/check-isolated-deps.sh",
17
18
  "lint": "tslint ./src/**/*.ts",
18
19
  "lint:deps": "depcheck --config=.depcheckrc",
19
20
  "lint:all": "npm run lint && npm run lint:deps"
@@ -23,6 +24,7 @@
23
24
  "license": "MIT",
24
25
  "devDependencies": {
25
26
  "@babel/preset-typescript": "^7.23.3",
27
+ "typescript": "^5.0.0",
26
28
  "@types/diff": "^5.2.1",
27
29
  "@types/express": "^4.17.13",
28
30
  "@types/jest": "^29.5.13",
@@ -39,7 +41,6 @@
39
41
  },
40
42
  "dependencies": {
41
43
  "@anthropic-ai/sdk": "^0.39.0",
42
- "@aws-sdk/client-s3": "^3.588.0",
43
44
  "@google/genai": "^0.14.1",
44
45
  "@inquirer/editor": "^4.2.18",
45
46
  "@modelcontextprotocol/sdk": "^1.13.3",
@@ -58,9 +59,8 @@
58
59
  "node-jq": "^6.0.1",
59
60
  "openai": "4.89.1",
60
61
  "pdf-parse": "^1.1.1",
61
- "typescript": "^4.6.3",
62
62
  "ws": "^8.18.1",
63
- "zod": "^3.24.2"
63
+ "zod": "^3.25.0"
64
64
  },
65
65
  "directories": {
66
66
  "test": "tests"
@@ -73,5 +73,8 @@
73
73
  "bugs": {
74
74
  "url": "https://github.com/tyvm-ai/knowhow/issues"
75
75
  },
76
- "homepage": "https://github.com/tyvm-ai/knowhow#readme"
76
+ "homepage": "https://github.com/tyvm-ai/knowhow#readme",
77
+ "optionalDependencies": {
78
+ "esbuild-register": "^3.0.0"
79
+ }
77
80
  }