@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,477 @@
1
+ # `knowhow generate` Guide
2
+
3
+ `knowhow generate` is the Knowhow CLI command that turns your input files into generated documentation (and other artifacts) by running an AI prompt over the selected sources and writing the results to your configured outputs.
4
+
5
+ It is driven entirely by your local **`.knowhow/knowhow.json`** config—specifically the **`sources`** array.
6
+
7
+ ---
8
+
9
+ ## What `knowhow generate` does
10
+
11
+ When you run:
12
+
13
+ ```bash
14
+ knowhow generate
15
+ ```
16
+
17
+ the CLI:
18
+
19
+ 1. Loads your Knowhow config from **`.knowhow/knowhow.json`**
20
+ 2. For each entry in **`config.sources`**:
21
+ - Expands `source.input` into a list of matching files
22
+ - Resolves `source.prompt` into an MDX prompt template or prompt string
23
+ - Uses the selected `model`/`agent` to summarize/generate content
24
+ - Writes output to either:
25
+ - a single output file, or
26
+ - multiple output files inside an output directory
27
+ 3. Skips work when inputs and prompt haven’t changed (hash-based caching)
28
+
29
+ ---
30
+
31
+ ## `sources` configuration structure
32
+
33
+ `sources` is an array of objects in `.knowhow/knowhow.json`.
34
+
35
+ At runtime, each source object may be handled in one of two ways:
36
+
37
+ - **File generation mode** (default): when `kind` is `"file"` or missing/empty
38
+ - **Plugin/“special kind” mode**: when `kind` is set and is not `"file"` (see `kind` below)
39
+
40
+ ### Common fields
41
+
42
+ ```jsonc
43
+ {
44
+ "input": "src/**/*.ts",
45
+ "output": ".knowhow/docs/",
46
+ "prompt": "MyPrompt",
47
+ "kind": "file",
48
+ "agent": "Developer",
49
+ "model": "gpt-4o-mini",
50
+ "outputExt": "mdx",
51
+ "outputName": "README"
52
+ }
53
+ ```
54
+
55
+ All fields described below are part of `GenerationSource` usage in the generator.
56
+
57
+ ---
58
+
59
+ ## Field reference
60
+
61
+ ### `input` (required)
62
+ Defines which files to read. Supported formats are:
63
+
64
+ - **Single file**
65
+ ```json
66
+ { "input": "src/index.ts" }
67
+ ```
68
+ - **Glob**
69
+ ```json
70
+ { "input": "src/**/*.ts" }
71
+ ```
72
+ - **Comma-separated list**
73
+ ```json
74
+ { "input": "src/a.ts,src/b.ts,src/c.ts" }
75
+ ```
76
+ Comma-separated values are auto-normalized into brace expansion internally.
77
+ - **Brace expansion**
78
+ ```json
79
+ { "input": "{src/a.ts,src/b.ts}" }
80
+ ```
81
+
82
+ **Normalization behavior (important):**
83
+ - If `input` contains `{`, `*`, or `?`, it is used as-is.
84
+ - If `input` contains commas and no glob/braces, commas are converted into `{a,b,c}`.
85
+ - Otherwise, it’s treated as a glob/pattern directly.
86
+
87
+ ---
88
+
89
+ ### `output` (required)
90
+ Defines where generated content is written.
91
+
92
+ Two output modes exist:
93
+
94
+ #### 1) Directory mode (multi-output)
95
+ If `output` **ends with `/`**, each input file becomes its own output file:
96
+
97
+ ```json
98
+ {
99
+ "input": "src/**/*.ts",
100
+ "output": ".knowhow/docs/",
101
+ "outputExt": "mdx"
102
+ }
103
+ ```
104
+
105
+ - Output file name defaults to the input file’s base name
106
+ - You can override the output name (see `outputName`)
107
+ - You can override the output extension (see `outputExt`)
108
+
109
+ #### 2) Single file mode (single-output)
110
+ If `output` **does not end with `/`**, all matched input files are combined into **one** output file.
111
+
112
+ ```json
113
+ {
114
+ "input": "src/**/*.ts",
115
+ "output": ".knowhow/docs/ALL.md"
116
+ }
117
+ ```
118
+
119
+ ---
120
+
121
+ ### `prompt` (required or optional depending on your desired behavior)
122
+ Controls the AI instruction template.
123
+
124
+ You can supply `prompt` in any of these ways:
125
+
126
+ 1. **Prompt name** (looked up in `promptsDir`)
127
+ ```json
128
+ { "prompt": "BasicCodeDocumenter" }
129
+ ```
130
+ The generator looks for:
131
+ - `<promptsDir>/<promptName>.mdx`
132
+ - Default `promptsDir` is: **`.knowhow/prompts`**
133
+
134
+ 2. **Direct prompt file path**
135
+ ```json
136
+ { "prompt": "prompts/MyPrompt.mdx" }
137
+ ```
138
+ If that file exists, it is read as prompt content.
139
+
140
+ 3. **Inline prompt string**
141
+ ```json
142
+ { "prompt": "Summarize the following file as a short doc for newcomers.\n\n{text}" }
143
+ ```
144
+
145
+ #### `{text}` placeholder requirement
146
+ If the prompt template does **not** include `{text}`, Knowhow automatically appends:
147
+
148
+ ```mdx
149
+ {text}
150
+ ```
151
+
152
+ so the input is included when rendering.
153
+
154
+ ---
155
+
156
+ ### `kind` (optional)
157
+ Controls whether generation is treated as “file generation” or a “special processing kind”.
158
+
159
+ - If `kind` is `"file"` **or missing**, Knowhow performs the normal file summarization flow.
160
+ - Otherwise, Knowhow checks whether `kind` matches a registered plugin:
161
+ - If it is a plugin, the plugin is executed and its returned data is written to `output` (and directory output is rejected for plugin-only output).
162
+ - Then Knowhow still proceeds with file generation for that same source.
163
+
164
+ > In other words: non-`file` kinds can run a plugin and then also run the file-based generation pipeline.
165
+
166
+ ---
167
+
168
+ ### `agent` (optional)
169
+ Selects which agent to use.
170
+
171
+ - Default agent (as noted in your config requirements): **`Developer`**
172
+ - This value is passed through to summarization functions.
173
+
174
+ ---
175
+
176
+ ### `model` (optional)
177
+ Overrides the AI model for this source.
178
+
179
+ - If omitted, the summarization functions will use Knowhow’s configured default model/provider logic (outside the code shown here).
180
+ - If provided, the source-specific `model` is used when calling `summarizeFile` / `summarizeFiles`.
181
+
182
+ ---
183
+
184
+ ### `outputExt` (optional; multi-output mode only)
185
+ Overrides the extension used for generated files when `output` ends with `/`.
186
+
187
+ Default: **`"mdx"`**
188
+
189
+ Example:
190
+
191
+ ```json
192
+ {
193
+ "input": "src/**/*.ts",
194
+ "output": ".knowhow/docs/",
195
+ "outputExt": "md"
196
+ }
197
+ ```
198
+
199
+ ---
200
+
201
+ ### `outputName` (optional; multi-output mode only)
202
+ Overrides the generated output file’s base name (instead of using the input file’s name).
203
+
204
+ Example:
205
+
206
+ ```json
207
+ {
208
+ "input": "src/**/*.ts",
209
+ "output": ".knowhow/docs/",
210
+ "outputName": "REFERENCE",
211
+ "outputExt": "mdx"
212
+ }
213
+ ```
214
+
215
+ Each file would still map into the directory (including nested folders), but each output filename would be `REFERENCE.<outputExt>`.
216
+
217
+ ---
218
+
219
+ ## Prompt resolution (how Knowhow finds your prompt)
220
+
221
+ Knowhow resolves `source.prompt` using the following order (from `loadPrompt()`):
222
+
223
+ 1. **Look in `promptsDir`**
224
+ - Default `promptsDir`: **`.knowhow/prompts`**
225
+ - It checks for:
226
+ `path.join(promptsDir, promptName + ".mdx")`
227
+
228
+ 2. **Try `prompt` as a direct file path**
229
+ - If `fs.existsSync(promptName)` succeeds, it reads that file.
230
+
231
+ 3. **Treat `prompt` itself as the prompt content**
232
+ - If neither file exists, the value is used as an inline prompt string.
233
+
234
+ Finally, it ensures `{text}` exists (appends it if missing).
235
+
236
+ ---
237
+
238
+ ## Input → output mapping (output modes)
239
+
240
+ ### A) Directory output (`output` ends with `/`)
241
+ For each input file:
242
+
243
+ - Knowhow computes a nested output folder based on the prefix before `**`.
244
+
245
+ Given:
246
+
247
+ ```json
248
+ "input": "src/**/*.ts",
249
+ "output": ".knowhow/docs/"
250
+ ```
251
+
252
+ - `inputPath` becomes `"src/"` (everything before the `**`)
253
+ - Each input file’s directory is transformed into an equivalent subfolder under the output directory
254
+
255
+ Then each file is written as:
256
+
257
+ - `output/<nestedFolder>/<outputFileName>.<outputExt>`
258
+
259
+ Where:
260
+ - `outputFileName` = `outputName` if provided, otherwise the input file’s base name
261
+ - `outputExt` defaults to `mdx` unless overridden
262
+
263
+ ---
264
+
265
+ ### B) Single file output (`output` does NOT end with `/`)
266
+ All matched files are combined and written into the one `output` path.
267
+
268
+ ---
269
+
270
+ ## Hashing / caching behavior (skips unchanged files)
271
+
272
+ Knowhow uses a persistent hash file:
273
+
274
+ - **`.knowhow/.hashes.json`**
275
+
276
+ For each generation operation, it computes:
277
+
278
+ - `promptHash` = `md5(promptString)`
279
+ - `fileHash` = `md5(convertToText(file))` (input content)
280
+ - For directory mode, it checks both:
281
+ - the input file, and
282
+ - the output file
283
+
284
+ If `checkNoFilesChanged()` decides nothing has changed, Knowhow prints a “Skipping…” message and does not regenerate.
285
+
286
+ This means:
287
+ - Changing the prompt will invalidate cache for those files
288
+ - Changing input file content will invalidate cache for those files
289
+
290
+ ---
291
+
292
+ ## Writing good prompt templates (`.mdx`)
293
+
294
+ Prompt files are typically stored under:
295
+
296
+ - **`.knowhow/prompts/YourPromptName.mdx`**
297
+
298
+ ### Minimum guidance
299
+
300
+ - Include a **`{text}`** placeholder somewhere in the prompt.
301
+ - If you forget it, Knowhow will append it automatically at the end—but you should still place it where it makes sense.
302
+
303
+ #### Example: basic prompt file
304
+
305
+ **`.knowhow/prompts/BasicCodeDocumenter.mdx`**
306
+ ```mdx
307
+ # Document this file
308
+
309
+ Write a clear developer-focused documentation page.
310
+
311
+ Requirements:
312
+ - 1–2 paragraph summary
313
+ - list of key exported functions/classes
314
+ - notable pitfalls or usage notes
315
+
316
+ Input:
317
+ {text}
318
+ ```
319
+
320
+ Then reference it in `knowhow.json`:
321
+
322
+ ```json
323
+ {
324
+ "input": "src/**/*.ts",
325
+ "output": ".knowhow/docs/",
326
+ "prompt": "BasicCodeDocumenter"
327
+ }
328
+ ```
329
+
330
+ ---
331
+
332
+ ## Practical examples
333
+
334
+ ### 1) Generate docs for every source file (directory mode)
335
+
336
+ ```json
337
+ {
338
+ "sources": [
339
+ {
340
+ "input": "src/**/*.ts",
341
+ "output": ".knowhow/docs/",
342
+ "prompt": "BasicCodeDocumenter",
343
+ "outputExt": "mdx",
344
+ "agent": "Developer"
345
+ }
346
+ ]
347
+ }
348
+ ```
349
+
350
+ Result:
351
+ - `.knowhow/docs/<same-folder-structure-as-src>/<filename>.mdx`
352
+
353
+ ---
354
+
355
+ ### 2) Generate one “project overview” doc from many inputs (single file mode)
356
+
357
+ ```json
358
+ {
359
+ "sources": [
360
+ {
361
+ "input": "src/**/*.ts",
362
+ "output": ".knowhow/docs/OVERVIEW.mdx",
363
+ "prompt": "BasicProjectDocumenter"
364
+ }
365
+ ]
366
+ }
367
+ ```
368
+
369
+ Result:
370
+ - One file: `.knowhow/docs/OVERVIEW.mdx`
371
+
372
+ ---
373
+
374
+ ### 3) Use comma-separated input (combined behavior)
375
+
376
+ Comma-separated inputs are treated as brace-expanded patterns, but functionally they still match multiple files.
377
+
378
+ ```json
379
+ {
380
+ "sources": [
381
+ {
382
+ "input": "src/a.ts,src/b.ts,src/c.ts",
383
+ "output": ".knowhow/docs/SUBSET.mdx",
384
+ "prompt": "BasicCodeDocumenter"
385
+ }
386
+ ]
387
+ }
388
+ ```
389
+
390
+ Because `output` does not end with `/`, all matched inputs are combined into **one** output.
391
+
392
+ ---
393
+
394
+ ### 4) Use brace expansion directly
395
+
396
+ ```json
397
+ {
398
+ "sources": [
399
+ {
400
+ "input": "{src/controllers/*.ts,src/services/*.ts}",
401
+ "output": ".knowhow/docs/",
402
+ "prompt": "BasicCodeDocumenter"
403
+ }
404
+ ]
405
+ }
406
+ ```
407
+
408
+ Directory mode: each input file becomes its own output file.
409
+
410
+ ---
411
+
412
+ ### 5) Inline prompt (no prompt file)
413
+
414
+ ```json
415
+ {
416
+ "sources": [
417
+ {
418
+ "input": "src/index.ts",
419
+ "output": ".knowhow/docs/index.mdx",
420
+ "prompt": "Explain what this module does in plain English.\n\n{text}"
421
+ }
422
+ ]
423
+ }
424
+ ```
425
+
426
+ ---
427
+
428
+ ## Pipeline example: generate → embed
429
+
430
+ A common workflow is:
431
+
432
+ 1. **Generate documentation files**
433
+ 2. **Embed the generated docs** for search/RAG
434
+
435
+ Your config already supports embedding in a separate `embedSources` array. A typical setup:
436
+
437
+ ```jsonc
438
+ {
439
+ "sources": [
440
+ {
441
+ "input": "src/**/*.ts",
442
+ "output": ".knowhow/docs/",
443
+ "prompt": "BasicCodeDocumenter"
444
+ }
445
+ ],
446
+ "embedSources": [
447
+ {
448
+ "input": ".knowhow/docs/**/*.mdx",
449
+ "output": ".knowhow/embeddings/docs.json",
450
+ "prompt": "BasicEmbeddingExplainer",
451
+ "chunkSize": 2000
452
+ }
453
+ ]
454
+ }
455
+ ```
456
+
457
+ Then run:
458
+
459
+ ```bash
460
+ knowhow generate
461
+ knowhow embed
462
+ ```
463
+
464
+ ---
465
+
466
+ ## Running for specific sources
467
+
468
+ There is **no built-in CLI flag** in the shown `knowhow generate` command to select only one `sources[]` entry.
469
+
470
+ To target a specific source you typically have two options:
471
+
472
+ - **Temporarily edit** `.knowhow/knowhow.json` to comment out other `sources`
473
+ - **Create a separate config** and adjust your workflow (the current CLI wiring shown does not expose a `--config` argument for `generate`)
474
+
475
+ ---
476
+
477
+ If you want, paste your current `.knowhow/knowhow.json` `sources` array and tell me whether you want **single-file** or **directory-per-input** outputs—I can help you rewrite it for the behavior you want.