@tyvm/knowhow 0.0.89 → 0.0.91

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 (344) hide show
  1. package/.depcheckrc +31 -0
  2. package/CONFIG.md +52 -0
  3. package/README.md +344 -29
  4. package/WORKER.md +169 -334
  5. package/autodoc/chat-guide.md +540 -0
  6. package/autodoc/cli-reference.md +765 -0
  7. package/autodoc/config-reference.md +541 -0
  8. package/autodoc/embeddings-guide.md +566 -0
  9. package/autodoc/generate-guide.md +477 -0
  10. package/autodoc/language-plugin-guide.md +443 -0
  11. package/autodoc/modules-guide.md +352 -0
  12. package/autodoc/plugins-guide.md +720 -0
  13. package/autodoc/quickstart-guide.md +129 -0
  14. package/autodoc/skills-guide.md +468 -0
  15. package/autodoc/worker-guide.md +526 -0
  16. package/bin/knowhow.js +1 -1
  17. package/package.json +4 -32
  18. package/src/agents/tools/executeScript/index.ts +5 -0
  19. package/src/agents/tools/googleSearch.ts +2 -2
  20. package/src/agents/tools/index.ts +0 -3
  21. package/src/agents/tools/list.ts +0 -147
  22. package/src/agents/tools/loadWebpage.ts +3 -113
  23. package/src/ai.ts +33 -2
  24. package/src/auth/browserLogin.ts +10 -13
  25. package/src/cli.ts +63 -3
  26. package/src/clients/gemini.ts +96 -25
  27. package/src/clients/http.ts +7 -11
  28. package/src/clients/pricing/google.ts +122 -26
  29. package/src/config.ts +28 -4
  30. package/src/conversion.ts +24 -54
  31. package/src/index.ts +30 -3
  32. package/src/login.ts +5 -6
  33. package/src/plugins/language.ts +0 -4
  34. package/src/plugins/plugins.ts +0 -14
  35. package/src/plugins/url.ts +31 -12
  36. package/src/processors/TokenCompressor.ts +2 -2
  37. package/src/processors/ToolResponseCache.ts +3 -3
  38. package/src/processors/tools/grepToolResponse.ts +9 -4
  39. package/src/processors/tools/jqToolResponse.ts +11 -6
  40. package/src/processors/tools/listStoredToolResponses.ts +1 -1
  41. package/src/processors/tools/tailToolResponse.ts +9 -4
  42. package/src/services/GitHub.ts +2 -2
  43. package/src/services/KnowhowClient.ts +34 -34
  44. package/src/{plugins/downloader/downloader.ts → services/MediaProcessorService.ts} +109 -267
  45. package/src/services/S3.ts +16 -16
  46. package/src/services/index.ts +4 -4
  47. package/src/services/modules/index.ts +10 -2
  48. package/src/services/modules/types.ts +5 -2
  49. package/src/services/script-execution/ScriptExecutor.ts +29 -10
  50. package/src/services/script-execution/ScriptPolicy.ts +6 -2
  51. package/src/types.ts +1 -0
  52. package/src/utils/http.ts +127 -0
  53. package/src/workers/auth/PasskeySetup.ts +7 -11
  54. package/tests/clients/AIClient.test.ts +24 -21
  55. package/tests/manual/file-edits/figma.test.ts +3 -70
  56. package/tests/plugins/language/languagePlugin-content-triggers.test.ts +2 -0
  57. package/tests/plugins/language/languagePlugin.test.ts +2 -0
  58. package/tests/processors/ToolResponseCache.test.ts +2 -2
  59. package/tests/test.spec.ts +0 -14
  60. package/tests/unit/modules/moduleLoading.test.ts +7 -4
  61. package/tests/unit/plugins/pluginLoading.test.ts +6 -6
  62. package/ts_build/package.json +4 -32
  63. package/ts_build/src/agents/tools/ast/astAppendNode.d.ts +1 -1
  64. package/ts_build/src/agents/tools/ast/astAppendNode.js +2 -90
  65. package/ts_build/src/agents/tools/ast/astAppendNode.js.map +1 -1
  66. package/ts_build/src/agents/tools/ast/astDeleteNode.d.ts +1 -1
  67. package/ts_build/src/agents/tools/ast/astDeleteNode.js +2 -88
  68. package/ts_build/src/agents/tools/ast/astDeleteNode.js.map +1 -1
  69. package/ts_build/src/agents/tools/ast/astEditNode.d.ts +1 -1
  70. package/ts_build/src/agents/tools/ast/astEditNode.js +2 -90
  71. package/ts_build/src/agents/tools/ast/astEditNode.js.map +1 -1
  72. package/ts_build/src/agents/tools/ast/astGetPathForLine.d.ts +1 -1
  73. package/ts_build/src/agents/tools/ast/astGetPathForLine.js +2 -72
  74. package/ts_build/src/agents/tools/ast/astGetPathForLine.js.map +1 -1
  75. package/ts_build/src/agents/tools/ast/astListPaths.d.ts +1 -1
  76. package/ts_build/src/agents/tools/ast/astListPaths.js +2 -72
  77. package/ts_build/src/agents/tools/ast/astListPaths.js.map +1 -1
  78. package/ts_build/src/agents/tools/executeScript/index.d.ts +3 -2
  79. package/ts_build/src/agents/tools/executeScript/index.js +4 -1
  80. package/ts_build/src/agents/tools/executeScript/index.js.map +1 -1
  81. package/ts_build/src/agents/tools/googleSearch.js +2 -2
  82. package/ts_build/src/agents/tools/googleSearch.js.map +1 -1
  83. package/ts_build/src/agents/tools/index.d.ts +0 -3
  84. package/ts_build/src/agents/tools/index.js +0 -3
  85. package/ts_build/src/agents/tools/index.js.map +1 -1
  86. package/ts_build/src/agents/tools/list.js +0 -138
  87. package/ts_build/src/agents/tools/list.js.map +1 -1
  88. package/ts_build/src/agents/tools/loadWebpage.js +1 -89
  89. package/ts_build/src/agents/tools/loadWebpage.js.map +1 -1
  90. package/ts_build/src/agents/tools/textSearch.d.ts +1 -1
  91. package/ts_build/src/ai.js +18 -1
  92. package/ts_build/src/ai.js.map +1 -1
  93. package/ts_build/src/auth/browserLogin.js +7 -7
  94. package/ts_build/src/auth/browserLogin.js.map +1 -1
  95. package/ts_build/src/cli.d.ts +1 -1
  96. package/ts_build/src/cli.js +47 -1
  97. package/ts_build/src/cli.js.map +1 -1
  98. package/ts_build/src/clients/gemini.d.ts +1 -73
  99. package/ts_build/src/clients/gemini.js +57 -19
  100. package/ts_build/src/clients/gemini.js.map +1 -1
  101. package/ts_build/src/clients/http.js +5 -9
  102. package/ts_build/src/clients/http.js.map +1 -1
  103. package/ts_build/src/clients/pricing/google.d.ts +17 -73
  104. package/ts_build/src/clients/pricing/google.js +47 -10
  105. package/ts_build/src/clients/pricing/google.js.map +1 -1
  106. package/ts_build/src/config.js +17 -2
  107. package/ts_build/src/config.js.map +1 -1
  108. package/ts_build/src/conversion.d.ts +1 -4
  109. package/ts_build/src/conversion.js +12 -27
  110. package/ts_build/src/conversion.js.map +1 -1
  111. package/ts_build/src/index.d.ts +4 -0
  112. package/ts_build/src/index.js +19 -3
  113. package/ts_build/src/index.js.map +1 -1
  114. package/ts_build/src/login.js +5 -4
  115. package/ts_build/src/login.js.map +1 -1
  116. package/ts_build/src/plugins/downloader/downloader.js +3 -3
  117. package/ts_build/src/plugins/downloader/downloader.js.map +1 -1
  118. package/ts_build/src/plugins/language.js.map +1 -1
  119. package/ts_build/src/plugins/plugins.js +0 -14
  120. package/ts_build/src/plugins/plugins.js.map +1 -1
  121. package/ts_build/src/plugins/tree-sitter/editor.d.ts +3 -32
  122. package/ts_build/src/plugins/tree-sitter/editor.js +6 -208
  123. package/ts_build/src/plugins/tree-sitter/editor.js.map +1 -1
  124. package/ts_build/src/plugins/tree-sitter/parser.d.ts +19 -54
  125. package/ts_build/src/plugins/tree-sitter/parser.js +19 -293
  126. package/ts_build/src/plugins/tree-sitter/parser.js.map +1 -1
  127. package/ts_build/src/plugins/tree-sitter/simple-paths.d.ts +2 -15
  128. package/ts_build/src/plugins/tree-sitter/simple-paths.js +2 -324
  129. package/ts_build/src/plugins/tree-sitter/simple-paths.js.map +1 -1
  130. package/ts_build/src/plugins/url.js +27 -8
  131. package/ts_build/src/plugins/url.js.map +1 -1
  132. package/ts_build/src/processors/TokenCompressor.js +2 -2
  133. package/ts_build/src/processors/TokenCompressor.js.map +1 -1
  134. package/ts_build/src/processors/ToolResponseCache.js +3 -3
  135. package/ts_build/src/processors/ToolResponseCache.js.map +1 -1
  136. package/ts_build/src/processors/tools/grepToolResponse.d.ts +3 -1
  137. package/ts_build/src/processors/tools/grepToolResponse.js +8 -2
  138. package/ts_build/src/processors/tools/grepToolResponse.js.map +1 -1
  139. package/ts_build/src/processors/tools/jqToolResponse.d.ts +3 -1
  140. package/ts_build/src/processors/tools/jqToolResponse.js +10 -4
  141. package/ts_build/src/processors/tools/jqToolResponse.js.map +1 -1
  142. package/ts_build/src/processors/tools/listStoredToolResponses.js +1 -1
  143. package/ts_build/src/processors/tools/listStoredToolResponses.js.map +1 -1
  144. package/ts_build/src/processors/tools/tailToolResponse.d.ts +3 -1
  145. package/ts_build/src/processors/tools/tailToolResponse.js +8 -2
  146. package/ts_build/src/processors/tools/tailToolResponse.js.map +1 -1
  147. package/ts_build/src/services/GitHub.js +2 -2
  148. package/ts_build/src/services/GitHub.js.map +1 -1
  149. package/ts_build/src/services/KnowhowClient.d.ts +29 -29
  150. package/ts_build/src/services/KnowhowClient.js +33 -33
  151. package/ts_build/src/services/KnowhowClient.js.map +1 -1
  152. package/ts_build/src/services/MediaProcessorService.d.ts +22 -0
  153. package/ts_build/src/services/MediaProcessorService.js +215 -0
  154. package/ts_build/src/services/MediaProcessorService.js.map +1 -0
  155. package/ts_build/src/services/S3.js +12 -18
  156. package/ts_build/src/services/S3.js.map +1 -1
  157. package/ts_build/src/services/index.d.ts +3 -2
  158. package/ts_build/src/services/index.js +3 -3
  159. package/ts_build/src/services/index.js.map +1 -1
  160. package/ts_build/src/services/modules/index.js +10 -2
  161. package/ts_build/src/services/modules/index.js.map +1 -1
  162. package/ts_build/src/services/modules/types.d.ts +5 -2
  163. package/ts_build/src/services/script-execution/ScriptExecutor.js +22 -7
  164. package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -1
  165. package/ts_build/src/services/script-execution/ScriptPolicy.d.ts +1 -1
  166. package/ts_build/src/services/script-execution/ScriptPolicy.js +4 -2
  167. package/ts_build/src/services/script-execution/ScriptPolicy.js.map +1 -1
  168. package/ts_build/src/types.d.ts +1 -0
  169. package/ts_build/src/types.js +1 -0
  170. package/ts_build/src/types.js.map +1 -1
  171. package/ts_build/src/utils/http.d.ts +27 -0
  172. package/ts_build/src/utils/http.js +98 -0
  173. package/ts_build/src/utils/http.js.map +1 -0
  174. package/ts_build/src/workers/auth/PasskeySetup.js +6 -7
  175. package/ts_build/src/workers/auth/PasskeySetup.js.map +1 -1
  176. package/ts_build/tests/clients/AIClient.test.js +11 -14
  177. package/ts_build/tests/clients/AIClient.test.js.map +1 -1
  178. package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -1
  179. package/ts_build/tests/manual/file-edits/figma.test.js +1 -46
  180. package/ts_build/tests/manual/file-edits/figma.test.js.map +1 -1
  181. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +2 -0
  182. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +1 -1
  183. package/ts_build/tests/plugins/language/languagePlugin.test.js +2 -0
  184. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +1 -1
  185. package/ts_build/tests/processors/ToolResponseCache.test.js +2 -2
  186. package/ts_build/tests/processors/ToolResponseCache.test.js.map +1 -1
  187. package/ts_build/tests/test.spec.js +0 -14
  188. package/ts_build/tests/test.spec.js.map +1 -1
  189. package/ts_build/tests/tree-sitter/tree-sitter.test.d.ts +0 -1
  190. package/ts_build/tests/tree-sitter/tree-sitter.test.js +2 -183
  191. package/ts_build/tests/tree-sitter/tree-sitter.test.js.map +1 -1
  192. package/ts_build/tests/unit/modules/moduleLoading.test.js +6 -4
  193. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +1 -1
  194. package/ts_build/tests/unit/plugins/pluginLoading.test.js +4 -4
  195. package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +1 -1
  196. package/autodoc/chat.mdx +0 -20
  197. package/autodoc/cli.mdx +0 -11
  198. package/autodoc/plugins/asana.mdx +0 -47
  199. package/autodoc/plugins/downloader/downloader.mdx +0 -38
  200. package/autodoc/plugins/downloader/plugin.mdx +0 -37
  201. package/autodoc/plugins/downloader/types.mdx +0 -42
  202. package/autodoc/plugins/embedding.mdx +0 -41
  203. package/autodoc/plugins/figma.mdx +0 -45
  204. package/autodoc/plugins/github.mdx +0 -40
  205. package/autodoc/plugins/jira.mdx +0 -46
  206. package/autodoc/plugins/language.mdx +0 -37
  207. package/autodoc/plugins/linear.mdx +0 -35
  208. package/autodoc/plugins/notion.mdx +0 -38
  209. package/autodoc/plugins/plugins.mdx +0 -59
  210. package/autodoc/plugins/types.mdx +0 -51
  211. package/autodoc/plugins/vim.mdx +0 -39
  212. package/autodoc/tools/addInternalTools.mdx +0 -1
  213. package/autodoc/tools/agentCall.mdx +0 -1
  214. package/autodoc/tools/asana/definitions.mdx +0 -10
  215. package/autodoc/tools/asana/index.mdx +0 -12
  216. package/autodoc/tools/askHuman.mdx +0 -1
  217. package/autodoc/tools/callPlugin.mdx +0 -1
  218. package/autodoc/tools/embeddingSearch.mdx +0 -1
  219. package/autodoc/tools/execCommand.mdx +0 -1
  220. package/autodoc/tools/fileSearch.mdx +0 -1
  221. package/autodoc/tools/finalAnswer.mdx +0 -1
  222. package/autodoc/tools/github/definitions.mdx +0 -6
  223. package/autodoc/tools/github/index.mdx +0 -8
  224. package/autodoc/tools/index.mdx +0 -14
  225. package/autodoc/tools/lintFile.mdx +0 -7
  226. package/autodoc/tools/list.mdx +0 -16
  227. package/autodoc/tools/modifyFile.mdx +0 -7
  228. package/autodoc/tools/patch.mdx +0 -9
  229. package/autodoc/tools/readBlocks.mdx +0 -1
  230. package/autodoc/tools/readFile.mdx +0 -1
  231. package/autodoc/tools/scanFile.mdx +0 -1
  232. package/autodoc/tools/textSearch.mdx +0 -6
  233. package/autodoc/tools/types/fileblock.mdx +0 -1
  234. package/autodoc/tools/visionTool.mdx +0 -1
  235. package/autodoc/tools/writeFile.mdx +0 -1
  236. package/benchmarks/.dockerignore +0 -7
  237. package/benchmarks/README.md +0 -166
  238. package/benchmarks/docker/Dockerfile +0 -68
  239. package/benchmarks/example-config.yml +0 -27
  240. package/benchmarks/jest.config.js +0 -13
  241. package/benchmarks/package-lock.json +0 -4297
  242. package/benchmarks/package.json +0 -39
  243. package/benchmarks/results/27b0a06/2025-09-27/xai/xai-grok-code-fast-1.json +0 -2909
  244. package/benchmarks/results/4057aed/2025-08-14/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -1671
  245. package/benchmarks/results/4542435/2025-08-05/lms/lms-openai-gpt-oss-20b.json +0 -2814
  246. package/benchmarks/results/4542435/2025-08-05/lms/lms-qwen-qwen3-30b-a3b-2507.json +0 -2014
  247. package/benchmarks/results/4fb9125/2025-08-07/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3121
  248. package/benchmarks/results/5766aee/2025-08-02/lms-qwen/qwen3-coder-30b.json +0 -98
  249. package/benchmarks/results/6d73808/2025-08-07/openai/openai-gpt-5.json +0 -3256
  250. package/benchmarks/results/77bf0a6/2025-08-02/lms-qwen/qwen3-30b-a3b-2507.json +0 -4298
  251. package/benchmarks/results/8c0d445/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3031
  252. package/benchmarks/results/8c0d445/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +0 -2990
  253. package/benchmarks/results/ac6b2ab/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3256
  254. package/benchmarks/results/ac6b2ab/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +0 -3007
  255. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +0 -3256
  256. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-mini-2025-04-14.json +0 -3036
  257. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-nano-2025-04-14.json +0 -3280
  258. package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-30b-a3b-2507.json +0 -1920
  259. package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-coder-30b.json +0 -3281
  260. package/benchmarks/results/b502ed9/2025-08-03/lms-qwen/qwen3-coder-30b.json +0 -2896
  261. package/benchmarks/results/d1a8129/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +0 -3011
  262. package/benchmarks/results/e60471c/2025-08-03/lms/qwen3-30b-a3b-2507.json +0 -3003
  263. package/benchmarks/scripts/build-and-run.sh +0 -47
  264. package/benchmarks/scripts/clone-exercism.sh +0 -92
  265. package/benchmarks/scripts/validate.sh +0 -48
  266. package/benchmarks/src/__tests__/runner.test.ts +0 -27
  267. package/benchmarks/src/cli.ts +0 -90
  268. package/benchmarks/src/evaluators/EvaluatorRegistry.ts +0 -64
  269. package/benchmarks/src/evaluators/JavaScriptEvaluator.ts +0 -183
  270. package/benchmarks/src/evaluators/index.ts +0 -3
  271. package/benchmarks/src/evaluators/types.ts +0 -22
  272. package/benchmarks/src/index.ts +0 -3
  273. package/benchmarks/src/providers.ts +0 -13
  274. package/benchmarks/src/runner.ts +0 -824
  275. package/benchmarks/src/types.ts +0 -63
  276. package/benchmarks/tsconfig.json +0 -19
  277. package/leaderboard/README.md +0 -148
  278. package/leaderboard/app/api/benchmark-data/route.ts +0 -131
  279. package/leaderboard/app/api/benchmark-detail/route.ts +0 -172
  280. package/leaderboard/app/details/[model]/[provider]/[language]/page.tsx +0 -501
  281. package/leaderboard/app/exercise/[model]/[provider]/[language]/[exercise]/page.tsx +0 -375
  282. package/leaderboard/app/globals.css +0 -27
  283. package/leaderboard/app/layout.tsx +0 -21
  284. package/leaderboard/app/page.tsx +0 -170
  285. package/leaderboard/components/LeaderboardTable.tsx +0 -168
  286. package/leaderboard/components/PerformanceChart.tsx +0 -109
  287. package/leaderboard/next-env.d.ts +0 -5
  288. package/leaderboard/next.config.js +0 -4
  289. package/leaderboard/package-lock.json +0 -6363
  290. package/leaderboard/package.json +0 -28
  291. package/leaderboard/postcss.config.js +0 -6
  292. package/leaderboard/tailwind.config.js +0 -17
  293. package/leaderboard/tsconfig.json +0 -28
  294. package/leaderboard/types/benchmark.ts +0 -67
  295. package/leaderboard/utils/dataProcessor.ts +0 -33
  296. package/src/agents/tools/asana/definitions.ts +0 -199
  297. package/src/agents/tools/asana/index.ts +0 -108
  298. package/src/agents/tools/ast/astAppendNode.ts +0 -90
  299. package/src/agents/tools/ast/astDeleteNode.ts +0 -88
  300. package/src/agents/tools/ast/astEditNode.ts +0 -95
  301. package/src/agents/tools/ast/astGetPathForLine.ts +0 -73
  302. package/src/agents/tools/ast/astListPaths.ts +0 -66
  303. package/src/agents/tools/ast/index.ts +0 -7
  304. package/src/agents/tools/github/definitions.ts +0 -89
  305. package/src/agents/tools/github/index.ts +0 -67
  306. package/src/chat-old.ts +0 -446
  307. package/src/plugins/asana.ts +0 -146
  308. package/src/plugins/downloader/plugin.ts +0 -103
  309. package/src/plugins/downloader/types.ts +0 -92
  310. package/src/plugins/figma.ts +0 -158
  311. package/src/plugins/github.ts +0 -219
  312. package/src/plugins/jira.ts +0 -115
  313. package/src/plugins/linear.ts +0 -230
  314. package/src/plugins/notion.ts +0 -179
  315. package/src/plugins/tree-sitter/editor.ts +0 -369
  316. package/src/plugins/tree-sitter/lang-packs/index.ts +0 -23
  317. package/src/plugins/tree-sitter/lang-packs/java.ts +0 -59
  318. package/src/plugins/tree-sitter/lang-packs/javascript.ts +0 -57
  319. package/src/plugins/tree-sitter/lang-packs/python.ts +0 -45
  320. package/src/plugins/tree-sitter/lang-packs/types.ts +0 -79
  321. package/src/plugins/tree-sitter/lang-packs/typescript.ts +0 -49
  322. package/src/plugins/tree-sitter/parser.ts +0 -470
  323. package/src/plugins/tree-sitter/simple-paths.ts +0 -467
  324. package/test-comprehensive.ts +0 -31
  325. package/tests/tree-sitter/editor.test.ts +0 -113
  326. package/tests/tree-sitter/invalid.test.ts +0 -299
  327. package/tests/tree-sitter/paths/common-edits.test.ts +0 -564
  328. package/tests/tree-sitter/paths/debug-exact-position.test.ts +0 -44
  329. package/tests/tree-sitter/paths/debug-line-indexing.test.ts +0 -49
  330. package/tests/tree-sitter/paths/debug-paths.test.ts +0 -90
  331. package/tests/tree-sitter/paths/paths.test.ts +0 -170
  332. package/tests/tree-sitter/paths/simple-paths.test.ts +0 -367
  333. package/tests/tree-sitter/sample-after.ts +0 -48
  334. package/tests/tree-sitter/sample-before.ts +0 -25
  335. package/tests/tree-sitter/test-files/completely-broken.ts +0 -7
  336. package/tests/tree-sitter/test-files/duplicate-braces.ts +0 -39
  337. package/tests/tree-sitter/test-files/invalid-nesting.ts +0 -39
  338. package/tests/tree-sitter/test-files/malformed-signature.ts +0 -39
  339. package/tests/tree-sitter/test-files/mismatched-parens.ts +0 -39
  340. package/tests/tree-sitter/test-files/missing-semicolon.ts +0 -39
  341. package/tests/tree-sitter/test-files/partially-broken.ts +0 -20
  342. package/tests/tree-sitter/test-files/specific-errors.ts +0 -14
  343. package/tests/tree-sitter/test-files/unclosed-string.ts +0 -39
  344. package/tests/tree-sitter/tree-sitter.test.ts +0 -251
@@ -0,0 +1,566 @@
1
+ # Embeddings Guide (Knowhow CLI)
2
+
3
+ Embeddings are the backbone of Knowhow’s semantic search. Instead of searching for exact words, Knowhow converts *text chunks* into **vectors** (arrays of numbers) that represent meaning. Later, when you ask a question, Knowhow embeds the question and finds the most similar vectors across your docs/code/other sources.
4
+
5
+ This guide explains how to generate, configure, store, and use embeddings in Knowhow.
6
+
7
+ ---
8
+
9
+ ## 1) What embeddings are
10
+
11
+ An **embedding** is a numeric vector representing a piece of text.
12
+
13
+ When Knowhow runs embedding generation:
14
+
15
+ - It **chunks** your content into pieces (default ~2000 characters per chunk).
16
+ - For each chunk, it may optionally **summarize/transform** the text with a prompt.
17
+ - It then calls the configured embedding model to create a vector.
18
+ - It saves an entry shaped like:
19
+
20
+ ```json
21
+ {
22
+ "id": "chunk-id",
23
+ "text": "chunk content (possibly summarized)",
24
+ "vector": [0.0123, -0.0045, ...],
25
+ "metadata": {
26
+ "...": "source-specific metadata"
27
+ }
28
+ }
29
+ ```
30
+
31
+ ### Chunk IDs (how Knowhow identifies chunks)
32
+ - If `chunkSize` is set, Knowhow typically uses:
33
+ - `id-index` (e.g. `path/to/file.ts-3`)
34
+ - If `chunkSize` is not set, it may keep the original `id`.
35
+
36
+ Knowhow also prunes old chunk embeddings that no longer match the current input (to keep embeddings in sync).
37
+
38
+ ---
39
+
40
+ ## 2) `knowhow embed` (generate embeddings)
41
+
42
+ Run the embedding generation step:
43
+
44
+ ```bash
45
+ knowhow embed
46
+ ```
47
+
48
+ Knowhow will:
49
+
50
+ 1. Load `.knowhow/knowhow.json`
51
+ 2. For each entry in `embedSources`, embed content into the configured `.json` output file(s)
52
+ 3. Save updated embeddings locally under paths like:
53
+ - `.knowhow/embeddings/docs.json`
54
+ - `.knowhow/embeddings/code.json`
55
+
56
+ > In code, the embedding step iterates `config.embedSources` and calls `embedSource(...)` for each configured source.
57
+
58
+ ---
59
+
60
+ ## 3) `embedSources` config (what to embed)
61
+
62
+ In `.knowhow/knowhow.json`, embeddings are configured under:
63
+
64
+ ```json
65
+ {
66
+ "embedSources": [ ... ]
67
+ }
68
+ ```
69
+
70
+ Each entry supports these fields (from the config types and embedding logic):
71
+
72
+ ### `input` (required)
73
+ **Glob pattern** or a direct input string (depending on `kind`).
74
+
75
+ - If `kind` is `"file"` (default), Knowhow globs the filesystem:
76
+ - `input: ".knowhow/docs/**/*.mdx"`
77
+ - For non-`file` kinds, Knowhow may treat `input` as a single input value.
78
+
79
+ ### `output` (required)
80
+ Path where the generated embeddings JSON file is saved.
81
+
82
+ Example:
83
+ - `.knowhow/embeddings/docs.json`
84
+
85
+ Knowhow writes the file as a JSON array:
86
+ - Sorted by `id`
87
+ - Each element includes `id`, `text`, `vector`, `metadata`
88
+
89
+ ### `chunkSize` (optional)
90
+ How many **characters per chunk**.
91
+
92
+ - Default in the template config is `2000`
93
+ - If provided, chunk IDs include `-index`
94
+
95
+ ### `minLength` (optional)
96
+ Skip chunks shorter than this number of characters.
97
+
98
+ Implementation detail:
99
+ ```ts
100
+ const tooShort = minLength && textOfChunk.length < minLength;
101
+ ```
102
+
103
+ ### `prompt` (optional)
104
+ If set, Knowhow transforms each chunk *before* embedding by summarizing it with a prompt.
105
+
106
+ - The prompt is loaded via `summarizeTexts([textOfChunk], prompt)`
107
+ - Metadata stores extra text when a prompt is used:
108
+ - `metadata.text` is set to the original chunking output (see code path)
109
+
110
+ This is especially useful to:
111
+ - compress long chunks
112
+ - standardize content for better retrieval
113
+ - emphasize relevant information
114
+
115
+ ### `kind` (optional)
116
+ Controls how the input is interpreted.
117
+
118
+ - If omitted: defaults to `"file"`
119
+ - Supported patterns:
120
+ - `"file"`: embed content from files on disk (converted to text)
121
+ - `"text"`: embed a provided text string
122
+ - Other kinds: typically handled by embeddings plugins (see “Special input kinds” below)
123
+
124
+ ---
125
+
126
+ ### `embedSources` example: embed docs (MDX) with chunking + prompt
127
+
128
+ ```json
129
+ {
130
+ "embeddingModel": "text-embedding-ada-002",
131
+ "embedSources": [
132
+ {
133
+ "kind": "file",
134
+ "input": ".knowhow/docs/**/*.mdx",
135
+ "output": ".knowhow/embeddings/docs.json",
136
+ "prompt": "BasicEmbeddingExplainer",
137
+ "chunkSize": 2000
138
+ }
139
+ ]
140
+ }
141
+ ```
142
+
143
+ ---
144
+
145
+ ### `embedSources` example: embed TypeScript source files
146
+
147
+ ```json
148
+ {
149
+ "embedSources": [
150
+ {
151
+ "kind": "file",
152
+ "input": "src/**/*.ts",
153
+ "output": ".knowhow/embeddings/code.json",
154
+ "chunkSize": 2000,
155
+ "minLength": 200
156
+ }
157
+ ]
158
+ }
159
+ ```
160
+
161
+ ---
162
+
163
+ ### `embedSources` example: embed a literal text string
164
+
165
+ ```json
166
+ {
167
+ "embedSources": [
168
+ {
169
+ "kind": "text",
170
+ "input": "This is a short paragraph I want searchable.",
171
+ "output": ".knowhow/embeddings/notes.json",
172
+ "chunkSize": 0,
173
+ "minLength": 1
174
+ }
175
+ ]
176
+ }
177
+ ```
178
+
179
+ > With `kind: "text"`, Knowhow treats `input` as the content to embed (it hashes it to generate an ID).
180
+
181
+ ---
182
+
183
+ ## 4) Embedding models (`embeddingModel`)
184
+
185
+ Knowhow uses `embeddingModel` from config to request vectors from the embedding provider.
186
+
187
+ Default (from the template config):
188
+ - `text-embedding-ada-002`
189
+
190
+ Supported models in the codebase:
191
+
192
+ ### OpenAI embedding models
193
+ - `text-embedding-ada-002` (`EmbeddingAda2`)
194
+ - `text-embedding-3-small` (`EmbeddingSmall3`)
195
+ - `text-embedding-3-large` (`EmbeddingLarge3`)
196
+
197
+ ### Google embedding models
198
+ - `gemini-embedding-exp` (`Gemini_Embedding`)
199
+ - `gemini-embedding-001` (`Gemini_Embedding_001`)
200
+
201
+ Example config:
202
+
203
+ ```json
204
+ {
205
+ "embeddingModel": "text-embedding-3-small",
206
+ "embedSources": [
207
+ {
208
+ "input": "docs/**/*.md",
209
+ "output": ".knowhow/embeddings/docs.json",
210
+ "chunkSize": 2000
211
+ }
212
+ ]
213
+ }
214
+ ```
215
+
216
+ ---
217
+
218
+ ## 5) Remote storage options (upload/download embeddings)
219
+
220
+ Knowhow can store the generated embeddings JSON remotely using `remote` and `remoteType` in each `embedSources` entry.
221
+
222
+ ### A) Upload to S3: `remoteType: "s3"`
223
+ **Config**
224
+ - `remote`: S3 bucket name
225
+ - `output`: local path to the `.json` embeddings file to upload
226
+
227
+ Upload behavior (from `knowhow upload`):
228
+ - uploads `source.output` to `${bucket}/${embeddingName}.json` (where `embeddingName` is derived from the local filename)
229
+
230
+ Example:
231
+
232
+ ```json
233
+ {
234
+ "embedSources": [
235
+ {
236
+ "input": ".knowhow/docs/**/*.mdx",
237
+ "output": ".knowhow/embeddings/docs.json",
238
+ "remoteType": "s3",
239
+ "remote": "my-knowhow-embeddings",
240
+ "chunkSize": 2000
241
+ }
242
+ ]
243
+ }
244
+ ```
245
+
246
+ Download behavior (from `knowhow download`):
247
+ - downloads `${name}.json` from the bucket into `source.output`
248
+
249
+ ---
250
+
251
+ ### B) Upload via GitHub (git LFS): `remoteType: "github"`
252
+ The downloader supports `remoteType: "github"` (implemented in `knowhow download`).
253
+
254
+ From `knowhow download`:
255
+ - downloads `".knowhow/embeddings/<fileName>.json"` from a configured GitHub remote into `destinationPath`
256
+
257
+ Example:
258
+
259
+ ```json
260
+ {
261
+ "embedSources": [
262
+ {
263
+ "input": "src/**/*.ts",
264
+ "output": ".knowhow/embeddings/code.json",
265
+ "remoteType": "github",
266
+ "remote": "github-owner/github-repo"
267
+ }
268
+ ]
269
+ }
270
+ ```
271
+
272
+ > Note: in the provided `knowhow upload` implementation, S3 and Knowhow-cloud uploads are explicit; GitHub/LFS upload behavior may be handled by other integrations in your setup.
273
+
274
+ ---
275
+
276
+ ### C) Upload to Knowhow Cloud KB: `remoteType: "knowhow"`
277
+ This is the integration path for storing embeddings into Knowhow’s hosted knowledge base.
278
+
279
+ From `knowhow upload`:
280
+ - requires `remoteId`
281
+ - uses a presigned upload URL
282
+ - then syncs embedding metadata back to the backend DB
283
+
284
+ Example:
285
+
286
+ ```json
287
+ {
288
+ "embedSources": [
289
+ {
290
+ "input": ".knowhow/docs/**/*.mdx",
291
+ "output": ".knowhow/embeddings/docs.json",
292
+ "remoteType": "knowhow",
293
+ "remoteId": "kb_1234567890abcdef"
294
+ }
295
+ ]
296
+ }
297
+ ```
298
+
299
+ ---
300
+
301
+ ## 6) `knowhow upload` (upload embeddings to remote)
302
+
303
+ Command:
304
+
305
+ ```bash
306
+ knowhow upload
307
+ ```
308
+
309
+ For each `embedSources` entry:
310
+
311
+ - if `remoteType` is missing → it skips that source
312
+ - if `remoteType === "s3"` → uploads via S3Service
313
+ - if `remoteType === "knowhow"` → uploads via Knowhow presigned URLs and syncs metadata
314
+
315
+ Example: upload both docs and code embeddings
316
+
317
+ ```json
318
+ {
319
+ "embedSources": [
320
+ {
321
+ "input": ".knowhow/docs/**/*.mdx",
322
+ "output": ".knowhow/embeddings/docs.json",
323
+ "remoteType": "s3",
324
+ "remote": "my-knowhow-embeddings"
325
+ },
326
+ {
327
+ "input": "src/**/*.ts",
328
+ "output": ".knowhow/embeddings/code.json",
329
+ "remoteType": "knowhow",
330
+ "remoteId": "kb_1234567890abcdef"
331
+ }
332
+ ]
333
+ }
334
+ ```
335
+
336
+ Run:
337
+
338
+ ```bash
339
+ knowhow upload
340
+ ```
341
+
342
+ ---
343
+
344
+ ## 7) `knowhow download` (download embeddings from remote)
345
+
346
+ Command:
347
+
348
+ ```bash
349
+ knowhow download
350
+ ```
351
+
352
+ It will read each configured `embedSources[].remoteType` and download the corresponding embeddings JSON into `embedSources[].output`.
353
+
354
+ Supported remote types in the provided code:
355
+ - `s3`
356
+ - `github`
357
+ - `knowhow` (requires `remoteId`)
358
+
359
+ Example:
360
+
361
+ ```json
362
+ {
363
+ "embedSources": [
364
+ {
365
+ "output": ".knowhow/embeddings/docs.json",
366
+ "remoteType": "s3",
367
+ "remote": "my-knowhow-embeddings"
368
+ }
369
+ ]
370
+ }
371
+ ```
372
+
373
+ Run:
374
+
375
+ ```bash
376
+ knowhow download
377
+ ```
378
+
379
+ ---
380
+
381
+ ## 8) Uploading to knowhow.tyvm.ai (Cloud KB)
382
+
383
+ To upload embeddings to the Knowhow cloud knowledge base:
384
+
385
+ ### Step 1: Get a KB ID
386
+ You need the `KB ID` (stored as `remoteId`) from **knowhow.tyvm.ai**.
387
+
388
+ ### Step 2: Configure your local `embedSources`
389
+ Set:
390
+
391
+ - `remoteType: "knowhow"`
392
+ - `remoteId: "<your KB ID>"`
393
+
394
+ Example:
395
+
396
+ ```json
397
+ {
398
+ "embedSources": [
399
+ {
400
+ "input": ".knowhow/docs/**/*.mdx",
401
+ "output": ".knowhow/embeddings/docs.json",
402
+ "remoteType": "knowhow",
403
+ "remoteId": "kb_1234567890abcdef",
404
+ "chunkSize": 2000
405
+ }
406
+ ]
407
+ }
408
+ ```
409
+
410
+ ### Step 3: Generate + upload
411
+ 1) Generate embeddings:
412
+
413
+ ```bash
414
+ knowhow embed
415
+ ```
416
+
417
+ 2) Upload them:
418
+
419
+ ```bash
420
+ knowhow upload
421
+ ```
422
+
423
+ Knowhow Cloud upload also syncs metadata back (glob, output path, chunk size, remoteType).
424
+
425
+ ---
426
+
427
+ ## 9) Using embeddings in chat
428
+
429
+ Knowhow’s chat tooling includes an **embeddings plugin** (enabled by default in the template config). The plugin:
430
+
431
+ - embeds the user query
432
+ - computes similarity between the query vector and stored embedding vectors
433
+ - automatically selects the most relevant chunks
434
+ - injects them into the model context as supporting material
435
+
436
+ So, once your embeddings are generated and (optionally) uploaded/downloaded, you typically don’t manually reference the embedding files—**semantic retrieval happens automatically** by the chat/embeddings integration.
437
+
438
+ ---
439
+
440
+ ## 10) Special input kinds (YouTube, Asana, web pages, etc.)
441
+
442
+ `embedSources[].kind` can be more than `"file"`/`"text"`. The embedding pipeline checks:
443
+
444
+ - if `Plugins.isPlugin(kind)` is true → it delegates embedding to that plugin:
445
+ ```ts
446
+ return Plugins.embed(kind, input);
447
+ ```
448
+
449
+ Your default config template enables many plugins (including `asana`, `github`, `download`, `url`, etc.), which commonly correspond to special `kind` values.
450
+
451
+ ### Pattern for plugin-based kinds
452
+ Use:
453
+
454
+ - `kind`: plugin name
455
+ - `input`: plugin-specific selector or identifier
456
+ - `output`: local embeddings JSON file
457
+ - optional: `prompt`, `chunkSize`, `minLength`
458
+
459
+ #### Example: embed Asana tasks (plugin-based kind)
460
+ ```json
461
+ {
462
+ "embedSources": [
463
+ {
464
+ "kind": "asana",
465
+ "input": "workspace-or-project-id-or-filter",
466
+ "output": ".knowhow/embeddings/asana.json",
467
+ "chunkSize": 2000
468
+ }
469
+ ]
470
+ }
471
+ ```
472
+
473
+ #### Example: embed web pages (URL plugin)
474
+ ```json
475
+ {
476
+ "embedSources": [
477
+ {
478
+ "kind": "url",
479
+ "input": "https://example.com/docs/index.html",
480
+ "output": ".knowhow/embeddings/web.json",
481
+ "chunkSize": 2000
482
+ }
483
+ ]
484
+ }
485
+ ```
486
+
487
+ #### Example: embed YouTube videos
488
+ ```json
489
+ {
490
+ "embedSources": [
491
+ {
492
+ "kind": "youtube",
493
+ "input": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
494
+ "output": ".knowhow/embeddings/youtube.json",
495
+ "chunkSize": 2000,
496
+ "prompt": "BasicEmbeddingExplainer"
497
+ }
498
+ ]
499
+ }
500
+ ```
501
+
502
+ #### Example: embed GitHub content (plugin-based kind)
503
+ ```json
504
+ {
505
+ "embedSources": [
506
+ {
507
+ "kind": "github",
508
+ "input": "owner/repo",
509
+ "output": ".knowhow/embeddings/github.json",
510
+ "chunkSize": 2000
511
+ }
512
+ ]
513
+ }
514
+ ```
515
+
516
+ > If a `kind` doesn’t correspond to an enabled embedding plugin, Knowhow may not know how to fetch/convert that input. Ensure the plugin is installed/enabled in your Knowhow setup.
517
+
518
+ ---
519
+
520
+ ## Practical recipes
521
+
522
+ ### 1) Embed docs + upload to S3
523
+ ```json
524
+ {
525
+ "embeddingModel": "text-embedding-3-small",
526
+ "embedSources": [
527
+ {
528
+ "input": ".knowhow/docs/**/*.mdx",
529
+ "output": ".knowhow/embeddings/docs.json",
530
+ "prompt": "BasicEmbeddingExplainer",
531
+ "chunkSize": 2000,
532
+ "remoteType": "s3",
533
+ "remote": "my-knowhow-embeddings"
534
+ }
535
+ ]
536
+ }
537
+ ```
538
+
539
+ ```bash
540
+ knowhow embed
541
+ knowhow upload
542
+ ```
543
+
544
+ ### 2) Embed code + upload to Knowhow cloud KB
545
+ ```json
546
+ {
547
+ "embedSources": [
548
+ {
549
+ "input": "src/**/*.ts",
550
+ "output": ".knowhow/embeddings/code.json",
551
+ "chunkSize": 2000,
552
+ "remoteType": "knowhow",
553
+ "remoteId": "kb_1234567890abcdef"
554
+ }
555
+ ]
556
+ }
557
+ ```
558
+
559
+ ```bash
560
+ knowhow embed
561
+ knowhow upload
562
+ ```
563
+
564
+ ---
565
+
566
+ If you share your current `.knowhow/knowhow.json`, I can tailor an embeddings configuration (chunking, prompts, and remote storage) to your exact project structure and retrieval goals.