@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,720 @@
1
+ # Plugins Guide (Knowhow CLI)
2
+
3
+ Knowhow **plugins** are modular “context providers” and helpers that can enrich an agent session with additional information and tooling. Depending on the plugin, it can:
4
+
5
+ - **Expand shorthand terms / hotkeys** into files, snippets, and/or URLs (`language`)
6
+ - **Load live editor/session context** (e.g., open Vim buffers) (`vim`)
7
+ - **Perform semantic retrieval** using embeddings (`embeddings`)
8
+ - **Resolve work-item references** (GitHub, Asana, Jira, Linear) into readable context (`github`, `asana`, `jira`, `linear`)
9
+ - **Load rich external content** (web pages, downloads/transcripts, design docs) (`url`, `download`, `figma`, `notion`)
10
+ - **Add codebase signals** (git diff/log) (`git`)
11
+ - **Run safety/quality tooling** after edits (linting) (`linter`)
12
+ - **Incorporate terminal/session state** (`tmux`)
13
+ - **Load local guidance docs** (`agents-md`, `skills`)
14
+ - **Execute commands for context** (`exec`)
15
+
16
+ Internally, Knowhow maintains a **plugin registry** and can call plugins by their **plugin key** (e.g., `github`, `language`). Plugins can also support **embeddings** via an `embed()`-style capability.
17
+
18
+ ---
19
+
20
+ ## 1) What plugins are (how they provide context)
21
+
22
+ ### 1.1 Plugin “capabilities”
23
+ Most plugins fall into one or more of these roles:
24
+
25
+ - **Context generation (`call`)**
26
+ Reads input (prompt content, URLs, IDs, etc.) and returns text/markdown context.
27
+
28
+ - **Batch processing (`callMany`)**
29
+ Used when multiple values must be resolved at once (e.g., many URLs).
30
+
31
+ - **Embeddings (`embed`)**
32
+ Returns `MinimalEmbedding[]` items so Knowhow can do semantic retrieval over fetched/constructed content.
33
+
34
+ ### 1.2 Common patterns
35
+ - **URL / identifier resolution**
36
+ A plugin detects an identifier in the user prompt and fetches/normalizes it into agent-ready context.
37
+ Examples: GitHub PR/issue, Jira ticket, Linear issue, Notion page.
38
+
39
+ - **Language-term expansion** (`language`)
40
+ A plugin mapping turns configured tokens/hotkeys into:
41
+ - local file contents (`kind: "file"`)
42
+ - literal text snippets (`kind: "text"`)
43
+ - URLs or references (often via `kind: "url"` or a service plugin key like `github`)
44
+
45
+ - **Local environment context**
46
+ - `vim`: injects currently open Vim buffers
47
+ - `git`: injects git diff/log context
48
+ - `tmux`: injects terminal pane/session context
49
+
50
+ - **Post-edit automation**
51
+ - `linter`: runs lint after file edits
52
+ - `exec`: runs commands for context (powerful; see security note)
53
+
54
+ ---
55
+
56
+ ## 2) Enable / disable plugins (`knowhow.json`)
57
+
58
+ Plugins are controlled in `knowhow.json` using:
59
+
60
+ - `plugins.enabled`: array of plugin keys to enable
61
+ - `plugins.disabled`: array of plugin keys to disable
62
+
63
+ ### 2.1 Enable a subset
64
+ ```jsonc
65
+ {
66
+ "plugins": {
67
+ "enabled": ["language", "github", "embeddings", "git", "url", "linter"],
68
+ "disabled": []
69
+ }
70
+ }
71
+ ```
72
+
73
+ ### 2.2 Disable specific plugins
74
+ ```jsonc
75
+ {
76
+ "plugins": {
77
+ "enabled": ["language", "vim", "tmux", "github", "url", "download"],
78
+ "disabled": ["exec", "tmux"]
79
+ }
80
+ }
81
+ ```
82
+
83
+ > **Tip:** Avoid putting the same plugin in both lists. Use one source of truth in your config.
84
+
85
+ ---
86
+
87
+ ## 3) Built-in plugins (keys + config examples)
88
+
89
+ Built-in plugins are identified by these keys:
90
+
91
+ - `language`
92
+ - `vim`
93
+ - `embeddings`
94
+ - `github`
95
+ - `git`
96
+ - `asana`
97
+ - `jira`
98
+ - `linear`
99
+ - `figma`
100
+ - `notion`
101
+ - `download`
102
+ - `url`
103
+ - `linter`
104
+ - `tmux`
105
+ - `agents-md`
106
+ - `exec`
107
+ - `skills`
108
+
109
+ Below are practical configuration examples for each plugin key. Some plugin config fields are implementation-specific; the examples show **typical / commonly used** fields and where you’d place plugin-specific options.
110
+
111
+ ---
112
+
113
+ ### 3.1 `language` — language terms / hotkeys expansion
114
+
115
+ **What it does**
116
+ - Detects configured **language terms / hotkeys**
117
+ - Expands them into context sources like:
118
+ - local files
119
+ - literal snippets
120
+ - plugin-backed resolutions (e.g., `github`)
121
+ - URLs
122
+
123
+ **Typical config shape**
124
+ ```jsonc
125
+ {
126
+ "plugins": {
127
+ "enabled": ["language"]
128
+ },
129
+ "language": {
130
+ "terms": {
131
+ "@spec": {
132
+ "events": ["file:read", "agent:msg"],
133
+ "sources": [
134
+ { "kind": "file", "data": ["./docs/spec.md"] }
135
+ ]
136
+ },
137
+ "@pr": {
138
+ "events": ["agent:msg"],
139
+ "sources": [
140
+ { "kind": "github", "data": ["owner/repo#123"] }
141
+ ]
142
+ }
143
+ },
144
+ "hotkeys": {
145
+ ":runbook": {
146
+ "events": ["agent:msg"],
147
+ "sources": [
148
+ { "kind": "file", "data": ["./RUNBOOKS/security.md"] }
149
+ ]
150
+ }
151
+ }
152
+ }
153
+ }
154
+ ```
155
+
156
+ **Env vars**
157
+ - Usually none.
158
+
159
+ ---
160
+
161
+ ### 3.2 `vim` — loads currently open vim buffers as context
162
+
163
+ **What it does**
164
+ - Reads the contents of **open Vim buffers**
165
+ - Supplies them to the agent as context
166
+
167
+ **Example config**
168
+ ```jsonc
169
+ {
170
+ "plugins": {
171
+ "enabled": ["vim"]
172
+ },
173
+ "vim": {
174
+ "maxBuffers": 10,
175
+ "maxBytesPerBuffer": 200000
176
+ }
177
+ }
178
+ ```
179
+
180
+ **Env vars**
181
+ - Usually none.
182
+
183
+ ---
184
+
185
+ ### 3.3 `embeddings` — semantic search over embeddings
186
+
187
+ **What it does**
188
+ - Provides embedding-based retrieval (semantic search)
189
+ - In the provided embedding-plugin behavior:
190
+ - subscribes to file lifecycle events (e.g., post-edit)
191
+ - may run `knowhow embed` asynchronously in the background after edits
192
+ - returns top results (implementation chooses the final limit)
193
+
194
+ **Example config**
195
+ ```jsonc
196
+ {
197
+ "plugins": {
198
+ "enabled": ["embeddings"]
199
+ },
200
+ "embeddings": {
201
+ "embeddingModel": "text-embedding-3-small",
202
+ "topK": 7,
203
+ "indexDirs": ["./docs", "./src", "./skills"]
204
+ }
205
+ }
206
+ ```
207
+
208
+ **Env vars**
209
+ - Depends on embedding provider/model backend (commonly an OpenAI/compatible API key). Verify the plugin’s `meta.requires` for your build.
210
+
211
+ ---
212
+
213
+ ### 3.4 `github` — resolves GitHub PRs, issues, code
214
+
215
+ **What it does**
216
+ - Resolves GitHub identifiers / URLs found in prompts into context:
217
+ - PRs
218
+ - issues
219
+ - (often) code changes/diffs and structured summaries
220
+
221
+ **Example config**
222
+ ```jsonc
223
+ {
224
+ "plugins": {
225
+ "enabled": ["github"]
226
+ },
227
+ "github": {
228
+ "repos": ["my-org/my-repo", "my-org/another-repo"],
229
+ "includeDiff": true,
230
+ "maxItems": 10
231
+ }
232
+ }
233
+ ```
234
+
235
+ **Env vars**
236
+ - `GITHUB_TOKEN` (commonly required)
237
+
238
+ ---
239
+
240
+ ### 3.5 `git` — git diff/log context
241
+
242
+ **What it does**
243
+ - Adds codebase history context from git:
244
+ - diff outputs
245
+ - commit history / logs
246
+ - related change signals
247
+
248
+ **Example config**
249
+ ```jsonc
250
+ {
251
+ "plugins": {
252
+ "enabled": ["git"]
253
+ },
254
+ "git": {
255
+ "mode": "diff",
256
+ "logDepth": 20,
257
+ "maxChars": 20000
258
+ }
259
+ }
260
+ ```
261
+
262
+ **Env vars**
263
+ - Usually none.
264
+
265
+ ---
266
+
267
+ ### 3.6 `asana` — Asana task context
268
+
269
+ **What it does**
270
+ - Finds Asana task/list URLs in prompts
271
+ - Fetches task details and formats them for the agent
272
+
273
+ **Example config**
274
+ ```jsonc
275
+ {
276
+ "plugins": {
277
+ "enabled": ["asana"]
278
+ },
279
+ "asana": {
280
+ "workspaceId": "1234567890",
281
+ "includeSubtasks": true,
282
+ "maxTasks": 5
283
+ }
284
+ }
285
+ ```
286
+
287
+ **Env vars**
288
+ - `ASANA_TOKEN` (required/expected)
289
+
290
+ ---
291
+
292
+ ### 3.7 `jira` — Jira issue context
293
+
294
+ **What it does**
295
+ - Detects Jira issue keys/URLs
296
+ - Fetches ticket context and formats it for the agent
297
+
298
+ **Example config**
299
+ ```jsonc
300
+ {
301
+ "plugins": {
302
+ "enabled": ["jira"]
303
+ },
304
+ "jira": {
305
+ "site": "https://your-company.atlassian.net",
306
+ "includeComments": true,
307
+ "maxIssues": 5
308
+ }
309
+ }
310
+ ```
311
+
312
+ **Env vars**
313
+ - Commonly one or more of:
314
+ - `JIRA_TOKEN`
315
+ - (sometimes) `JIRA_EMAIL`, `JIRA_BASE_URL`
316
+ - Check your plugin’s `meta.requires` list for exact names.
317
+
318
+ ---
319
+
320
+ ### 3.8 `linear` — Linear issue context
321
+
322
+ **What it does**
323
+ - Resolves Linear issue URLs/keys and fetches issue context
324
+
325
+ **Example config**
326
+ ```jsonc
327
+ {
328
+ "plugins": {
329
+ "enabled": ["linear"]
330
+ },
331
+ "linear": {
332
+ "includeComments": false,
333
+ "maxIssues": 5
334
+ }
335
+ }
336
+ ```
337
+
338
+ **Env vars**
339
+ - `LINEAR_TOKEN` (commonly required)
340
+
341
+ ---
342
+
343
+ ### 3.9 `figma` — Figma design file context
344
+
345
+ **What it does**
346
+ - Accepts Figma file links (often with optional `node-id` targets)
347
+ - Uses Figma API to fetch frame/node images or metadata
348
+ - Can use vision/LLM to describe relevant nodes (implementation-dependent)
349
+
350
+ **Example config**
351
+ ```jsonc
352
+ {
353
+ "plugins": {
354
+ "enabled": ["figma"]
355
+ },
356
+ "figma": {
357
+ "maxNodes": 20
358
+ }
359
+ }
360
+ ```
361
+
362
+ **Env vars**
363
+ - `FIGMA_API_KEY` (or `FIGMA_TOKEN`, depending on your plugin implementation)
364
+ - Verify against the plugin’s `meta.requires`.
365
+
366
+ ---
367
+
368
+ ### 3.10 `notion` — Notion page context
369
+
370
+ **What it does**
371
+ - Extracts Notion URLs from prompts
372
+ - Retrieves page blocks/content and produces context for the agent
373
+ - Often supports recursive traversal up to a configured depth
374
+
375
+ **Example config**
376
+ ```jsonc
377
+ {
378
+ "plugins": {
379
+ "enabled": ["notion"]
380
+ },
381
+ "notion": {
382
+ "maxDepth": 2,
383
+ "maxBlocks": 500
384
+ }
385
+ }
386
+ ```
387
+
388
+ **Env vars**
389
+ - `NOTION_TOKEN` (commonly required)
390
+ - Some implementations may also need database/page identifiers (config-based).
391
+
392
+ ---
393
+
394
+ ### 3.11 `download` — download/transcribe URLs, YouTube videos
395
+
396
+ **What it does**
397
+ - Downloads and/or transcribes content from URLs (including video sources like YouTube)
398
+ - Converts to text context for the agent
399
+ - May use chunking + transcription + optional vision keyframe descriptions (implementation-dependent)
400
+
401
+ **Example config**
402
+ ```jsonc
403
+ {
404
+ "plugins": {
405
+ "enabled": ["download"]
406
+ },
407
+ "download": {
408
+ "outputRoot": ".knowhow/downloads",
409
+ "transcribe": true,
410
+ "transcriptionLanguage": "en",
411
+ "reuseCachedTranscripts": true
412
+ }
413
+ }
414
+ ```
415
+
416
+ **Env vars**
417
+ - Often depends on the transcription/vision provider used by the plugin
418
+ - Commonly an OpenAI/compatible API key, but verify the plugin’s `meta.requires`.
419
+
420
+ ---
421
+
422
+ ### 3.12 `url` — load web pages as context
423
+
424
+ **What it does**
425
+ - Detects URLs in prompts
426
+ - Fetches webpage contents and returns context
427
+ - Can support embedding retrieval from the fetched page text
428
+
429
+ **Example config**
430
+ ```jsonc
431
+ {
432
+ "plugins": {
433
+ "enabled": ["url"]
434
+ },
435
+ "url": {
436
+ "maxUrls": 10,
437
+ "maxCharsPerPage": 120000,
438
+ "followRedirects": true
439
+ }
440
+ }
441
+ ```
442
+
443
+ **Env vars**
444
+ - Usually none.
445
+
446
+ ---
447
+
448
+ ### 3.13 `linter` — runs lint after file edits
449
+
450
+ **What it does**
451
+ - Watches for file lifecycle events after the agent edits files
452
+ - Runs lint commands (by extension or configured command list)
453
+ - Emits lint failures/results into the agent context
454
+
455
+ **Example config**
456
+ ```jsonc
457
+ {
458
+ "plugins": {
459
+ "enabled": ["linter"]
460
+ },
461
+ "linter": {
462
+ "commands": {
463
+ ".ts": "npm run lint --silent -- $1",
464
+ ".js": "npm run lint --silent -- $1",
465
+ ".md": "markdownlint $1"
466
+ },
467
+ "failOnError": false
468
+ }
469
+ }
470
+ ```
471
+
472
+ **Env vars**
473
+ - Usually none.
474
+
475
+ ---
476
+
477
+ ### 3.14 `tmux` — tmux session context
478
+
479
+ **What it does**
480
+ - Detects tmux environment (e.g., using `$TMUX`)
481
+ - Reads session/window/pane context and makes it available to the agent
482
+
483
+ **Example config**
484
+ ```jsonc
485
+ {
486
+ "plugins": {
487
+ "enabled": ["tmux"]
488
+ },
489
+ "tmux": {
490
+ "includePaneHistory": true,
491
+ "maxCharsPerPane": 20000
492
+ }
493
+ }
494
+ ```
495
+
496
+ **Env vars**
497
+ - Usually none (but requires tmux availability in your environment).
498
+
499
+ ---
500
+
501
+ ### 3.15 `agents-md` — loads AGENTS.md files
502
+
503
+ **What it does**
504
+ - Loads repository/directory guidance files (commonly `AGENTS.md`)
505
+ - Intended for agent behavior instructions, conventions, constraints, etc.
506
+
507
+ **Example config**
508
+ ```jsonc
509
+ {
510
+ "plugins": {
511
+ "enabled": ["agents-md"]
512
+ },
513
+ "agents-md": {
514
+ "glob": "**/AGENTS.md",
515
+ "maxFiles": 30
516
+ }
517
+ }
518
+ ```
519
+
520
+ **Env vars**
521
+ - Usually none.
522
+
523
+ ---
524
+
525
+ ### 3.16 `exec` — execute commands for context
526
+
527
+ **What it does**
528
+ - Executes shell commands to generate context
529
+ - In the provided implementation behavior:
530
+ - `callMany(input)` only dispatches when input starts with `!` or `/!`
531
+ - `call(input)` runs the command string and returns stdout/stderr formatted context
532
+ - **Security risk:** can run arbitrary commands.
533
+
534
+ **Example config**
535
+ ```jsonc
536
+ {
537
+ "plugins": {
538
+ "enabled": ["exec"]
539
+ }
540
+ }
541
+ ```
542
+
543
+ **Example usage with `language` trigger**
544
+ ```jsonc
545
+ {
546
+ "plugins": {
547
+ "enabled": ["language", "exec"]
548
+ },
549
+ "language": {
550
+ "terms": {
551
+ "!now": {
552
+ "events": ["agent:msg"],
553
+ "sources": [
554
+ { "kind": "text", "data": "!date" }
555
+ ]
556
+ }
557
+ }
558
+ }
559
+ }
560
+ ```
561
+
562
+ **Env vars**
563
+ - None inherent to the plugin, but your executed commands may depend on your environment.
564
+
565
+ ---
566
+
567
+ ### 3.17 `skills` — loads SKILL.md files from configured directories
568
+
569
+ **What it does (as implemented by the Skills plugin)**
570
+ - Configures an array of directories to scan
571
+ - Recursively finds `SKILL.md`
572
+ - Parses YAML-like frontmatter at the top:
573
+ - `name`
574
+ - `description`
575
+ - If a skill name appears in the user prompt (case-insensitive substring match):
576
+ - returns the matched skill file content
577
+ - If no skill names match:
578
+ - returns a discovery list of available skills and how to reference them
579
+
580
+ **Example config**
581
+ ```jsonc
582
+ {
583
+ "plugins": {
584
+ "enabled": ["skills"]
585
+ },
586
+ "skills": [
587
+ "./skills",
588
+ "./docs/skills"
589
+ ]
590
+ }
591
+ ```
592
+
593
+ **Example `SKILL.md`**
594
+ ```md
595
+ ---
596
+ name: sql-tuning
597
+ description: Optimize SQL queries with indexes and query plans
598
+ ---
599
+
600
+ # sql-tuning
601
+
602
+ When tuning a query:
603
+ 1. Inspect `EXPLAIN`
604
+ 2. Find missing indexes
605
+ 3. Rewrite joins/filters
606
+ ```
607
+
608
+ **Env vars**
609
+ - Usually none.
610
+
611
+ ---
612
+
613
+ ## 4) Custom plugins via `pluginPackages` (npm packages)
614
+
615
+ Knowhow can load **custom plugins** from npm packages listed under `pluginPackages` in `knowhow.json`.
616
+
617
+ ### 4.1 Register a custom plugin package
618
+
619
+ ```jsonc
620
+ {
621
+ "plugins": {
622
+ "enabled": ["my-custom-plugin"]
623
+ },
624
+ "pluginPackages": {
625
+ "my-custom-plugin": "@your-scope/knowhow-my-custom-plugin"
626
+ }
627
+ }
628
+ ```
629
+
630
+ > In this model, the **key** in `pluginPackages` should map to the plugin key you enable in `plugins.enabled`.
631
+
632
+ ### 4.2 What a custom plugin must provide
633
+ A custom plugin package should export a plugin constructor/class that Knowhow can instantiate (typically with a plugin context/service). The plugin instance should include metadata, especially:
634
+
635
+ - `meta.key` (must match the key you enable)
636
+ - `meta.requires` (optional; env vars needed for auth/integration)
637
+
638
+ And implement one or more plugin methods, commonly:
639
+ - `call(input?)`
640
+ - `callMany(input?)`
641
+ - `embed(input)`
642
+
643
+ ### 4.3 Example `knowhow.json` using multiple plugins
644
+ ```jsonc
645
+ {
646
+ "plugins": {
647
+ "enabled": ["language", "my-custom-plugin", "embeddings"],
648
+ "disabled": []
649
+ },
650
+ "pluginPackages": {
651
+ "my-custom-plugin": "@acme/knowhow-my-custom-plugin"
652
+ }
653
+ }
654
+ ```
655
+
656
+ ---
657
+
658
+ ## 5) Required environment variables (per plugin)
659
+
660
+ Knowhow uses each plugin’s metadata (typically `meta.requires`) to decide whether the plugin is enabled. If env vars are missing, the plugin may be skipped.
661
+
662
+ Below are the **expected** environment variables for the standard external-service integrations:
663
+
664
+ | Plugin key | Environment variables (expected) |
665
+ |---|---|
666
+ | `github` | `GITHUB_TOKEN` |
667
+ | `asana` | `ASANA_TOKEN` |
668
+ | `jira` | `JIRA_TOKEN` (or provider-specific equivalents); often also `JIRA_BASE_URL` / `JIRA_EMAIL` depending on setup |
669
+ | `linear` | `LINEAR_TOKEN` |
670
+ | `figma` | `FIGMA_API_KEY` or `FIGMA_TOKEN` (verify exact `meta.requires`) |
671
+ | `notion` | `NOTION_TOKEN` |
672
+ | `embeddings` | depends on embedding provider (commonly an API key like `OPENAI_API_KEY`, but verify in plugin code/config) |
673
+ | `download` | depends on transcription/vision provider (often an API key; verify in plugin code/config) |
674
+ | `language`, `vim`, `git`, `url`, `linter`, `tmux`, `agents-md`, `exec`, `skills` | typically none required for auth (but `exec` depends on your system tools) |
675
+
676
+ ### Example: setting environment variables
677
+ ```bash
678
+ export GITHUB_TOKEN="ghp_xxx"
679
+ export ASANA_TOKEN="asca_xxx"
680
+ export JIRA_TOKEN="xxx"
681
+ export LINEAR_TOKEN="linear_xxx"
682
+ export FIGMA_API_KEY="figma_xxx"
683
+ export NOTION_TOKEN="secret_notion_xxx"
684
+ export OPENAI_API_KEY="sk_xxx"
685
+ ```
686
+
687
+ ---
688
+
689
+ ## Recommended “starter” config
690
+
691
+ A safe, useful baseline that covers local context, issue resolution, and retrieval:
692
+
693
+ ```jsonc
694
+ {
695
+ "plugins": {
696
+ "enabled": [
697
+ "language",
698
+ "skills",
699
+ "agents-md",
700
+ "github",
701
+ "jira",
702
+ "linear",
703
+ "asana",
704
+ "notion",
705
+ "url",
706
+ "embeddings",
707
+ "git",
708
+ "linter"
709
+ ],
710
+ "disabled": ["exec", "download", "vim", "tmux"]
711
+ },
712
+ "pluginPackages": {}
713
+ }
714
+ ```
715
+
716
+ > Enable `exec`/`download` only if you trust prompts and external content sources you’ll process.
717
+
718
+ ---
719
+
720
+ If you paste your repo’s `knowhow.json` schema (or the plugin `meta.requires` and config types for each built-in plugin), I can revise this guide so **every config block uses the exact field names** your Knowhow version supports.