@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
@@ -1,230 +0,0 @@
1
- import { LinearClient } from "@linear/sdk";
2
- import { PluginBase, PluginMeta } from "./PluginBase";
3
- import { PluginContext } from "./types";
4
- import { MinimalEmbedding } from "../types";
5
-
6
- export class LinearPlugin extends PluginBase {
7
- static readonly meta: PluginMeta = {
8
- key: "linear",
9
- name: "Linear Plugin",
10
- requires: ["LINEAR_API_KEY"],
11
- };
12
-
13
- meta = LinearPlugin.meta;
14
- linearClient: LinearClient;
15
-
16
- constructor(context: PluginContext) {
17
- super(context);
18
-
19
- if (!this.isEnabled()) return;
20
- this.linearClient = new LinearClient({
21
- apiKey: process.env.LINEAR_API_KEY,
22
- });
23
- }
24
-
25
- async embed(userPrompt: string): Promise<MinimalEmbedding[]> {
26
- const urls = this.extractTaskUrls(userPrompt);
27
- const tasksData = await this.getTasksFromUrls(urls);
28
- const tasksDataFiltered = tasksData.filter((task) => task !== null);
29
-
30
- const tasksEmbeddings = tasksDataFiltered.map((task) => {
31
- return {
32
- id: task.url,
33
- text: this.getTaskString(task),
34
- metadata: {
35
- task: JSON.stringify(task),
36
- },
37
- };
38
- });
39
-
40
- const projectUrls = this.extractProjectUrls(userPrompt);
41
- const projectTasks = await this.getTasksFromProjectUrls(projectUrls);
42
- const projectTasksFiltered = projectTasks.filter((t) => t !== null);
43
-
44
- const projectTaskEmbeddings = projectTasksFiltered
45
- .map((t) => {
46
- return {
47
- id: t.url,
48
- text: this.getTaskString(t),
49
- metadata: {
50
- task: JSON.stringify(t),
51
- },
52
- };
53
- })
54
- .flat();
55
-
56
- const teamUrls = this.extractTeamUrls(userPrompt);
57
- const teamTasks = await this.getTasksFromTeamUrls(teamUrls);
58
- const teamTasksFiltered = teamTasks.filter((t) => t !== null);
59
-
60
- const teamTaskEmbeddings = teamTasksFiltered
61
- .map((t) => {
62
- return {
63
- id: t.url,
64
- text: this.getTaskString(t),
65
- metadata: {
66
- task: JSON.stringify(t),
67
- },
68
- };
69
- })
70
- .flat();
71
-
72
- return tasksEmbeddings
73
- .concat(projectTaskEmbeddings)
74
- .concat(teamTaskEmbeddings);
75
- }
76
-
77
- async getIssueData(issueId: string) {
78
- try {
79
- const issue = await this.linearClient.issue(issueId);
80
- return issue;
81
- } catch (error) {
82
- this.log(`Error fetching Linear issue: ${error}`, "error");
83
- return null;
84
- }
85
- }
86
-
87
- async getTaskFromUrl(url: string) {
88
- const issueId = this.getIdFromUrl(url);
89
- if (issueId) {
90
- this.log(`Fetching Linear issue ${issueId}`);
91
- return await this.getIssueData(issueId);
92
- }
93
- return null;
94
- }
95
-
96
- async getTasksFromUrls(urls: string[]) {
97
- const tasks = await Promise.all(
98
- urls.map(async (url) => {
99
- return this.getTaskFromUrl(url);
100
- })
101
- );
102
- return tasks;
103
- }
104
-
105
- extractTeamUrls(userPrompt: string): string[] {
106
- const urlRegex = /https:\/\/linear\.app\/[^\/]+\/team\/[^\/]+\/[^\/]+/g;
107
- const matches = userPrompt.match(urlRegex);
108
- return matches || [];
109
- }
110
-
111
- getTeamIdFromUrl(url: string): string {
112
- const urlRegex = /https:\/\/linear\.app\/[^\/]+\/team\/([^\/]+)\/[^\/]+/g;
113
- const match = urlRegex.exec(url);
114
- if (match && match[1]) {
115
- return match[1];
116
- }
117
- return null;
118
- }
119
-
120
- extractProjectUrls(userPrompt: string): string[] {
121
- const urlRegex = /https:\/\/linear\.app\/[^\/]+\/project\/[^\/]+\/[^\/]+/g;
122
- const matches = userPrompt.match(urlRegex);
123
- return matches || [];
124
- }
125
-
126
- getProjectIdFromUrl(url: string): string {
127
- const urlRegex =
128
- /https:\/\/linear\.app\/[^\/]+\/project\/([^\/]+)\/[^\/]+/g;
129
- const match = urlRegex.exec(url);
130
- if (match && match[1]) {
131
- const parts = match[1].split("-");
132
- return parts[parts.length - 1];
133
- }
134
- return null;
135
- }
136
-
137
- async getTasksForProject(projectId: string) {
138
- this.log(`Project ID: ${projectId}`);
139
- let tasks = await this.linearClient.issues({
140
- filter: {
141
- project: { slugId: { eq: projectId } },
142
- },
143
- });
144
- let allTasks = tasks.nodes;
145
-
146
- while (tasks.pageInfo.hasNextPage) {
147
- tasks = await tasks.fetchNext();
148
- allTasks = allTasks.concat(tasks.nodes);
149
- }
150
-
151
- return allTasks;
152
- }
153
-
154
- async getTasksFromProjectUrls(urls: string[]) {
155
- const tasks = await Promise.all(
156
- urls.map(async (url) => {
157
- return this.getTasksForProject(this.getProjectIdFromUrl(url));
158
- })
159
- );
160
- return tasks.flat();
161
- }
162
-
163
- async getTasksForTeam(teamId: string) {
164
- this.log(`Team ID: ${teamId}`);
165
- let tasks = await this.linearClient.issues({
166
- filter: {
167
- team: { key: { eq: teamId } },
168
- },
169
- });
170
-
171
- let allTasks = tasks.nodes;
172
-
173
- while (tasks.pageInfo.hasNextPage) {
174
- tasks = await tasks.fetchNext();
175
- allTasks = allTasks.concat(tasks.nodes);
176
- }
177
-
178
- return allTasks;
179
- }
180
-
181
- async getTasksFromTeamUrls(urls: string[]) {
182
- const tasks = await Promise.all(
183
- urls.map(async (url) => {
184
- return this.getTasksForTeam(this.getTeamIdFromUrl(url));
185
- })
186
- );
187
- return tasks.flat();
188
- }
189
-
190
- extractTaskUrls(userPrompt: string): string[] {
191
- const urlRegex = /https:\/\/linear\.app\/[^\/]+\/issue\/[^\/]+\/[^\/]+/g;
192
- const matches = userPrompt.match(urlRegex);
193
- if (!matches) {
194
- return [];
195
- }
196
- return matches;
197
- }
198
-
199
- getIdFromUrl(url: string): string {
200
- const urlRegex = /https:\/\/linear\.app\/[^\/]+\/issue\/([^\/]+)\/[^\/]+/g;
201
- const match = urlRegex.exec(url);
202
- if (match && match[1]) {
203
- return match[1];
204
- }
205
- return null;
206
- }
207
-
208
- getTaskString(task: any): string {
209
- return `Issue: ${task.identifier}\nTitle: ${task.title}\nURL: ${task.url} \nDescription: ${task.description}`;
210
- }
211
-
212
- async call(userPrompt: string): Promise<string> {
213
- const urls = this.extractTaskUrls(userPrompt);
214
- if (!urls) {
215
- return "LINEAR PLUGIN: No issues found";
216
- }
217
-
218
- const issuesData = await this.getTasksFromUrls(urls);
219
- const issuesDataFiltered = issuesData.filter((issue) => issue !== null);
220
-
221
- if (issuesDataFiltered.length === 0) {
222
- return "LINEAR PLUGIN: No issues found";
223
- }
224
-
225
- const markdownIssues = issuesDataFiltered
226
- .map((issue) => this.getTaskString(issue))
227
- .join("\n\n");
228
- return `LINEAR PLUGIN: The following issues were loaded:\n\n${markdownIssues}`;
229
- }
230
- }
@@ -1,179 +0,0 @@
1
- import { Client } from "@notionhq/client";
2
- import { PluginBase, PluginMeta } from "./PluginBase";
3
- import { PluginContext } from "./types";
4
- import { PageObjectResponse } from "@notionhq/client/build/src/api-endpoints";
5
- import { Embeddable, MinimalEmbedding } from "../types";
6
-
7
- export class NotionPlugin extends PluginBase {
8
- static readonly meta: PluginMeta = {
9
- key: "notion",
10
- name: "Notion Plugin",
11
- requires: ["NOTION_TOKEN"]
12
- };
13
-
14
- meta = NotionPlugin.meta;
15
- notionClient: Client;
16
-
17
- constructor(context: PluginContext) {
18
- super(context);
19
-
20
- if (!this.isEnabled()) return;
21
- this.notionClient = new Client({
22
- auth: process.env.NOTION_TOKEN,
23
- });
24
- }
25
-
26
- extractUrls(userPrompt: string): string[] {
27
- const notionUrlRegex = /https:\/\/www\.notion\.so\/[^\s]+/g;
28
- const matches = userPrompt.match(notionUrlRegex);
29
- return matches || [];
30
- }
31
-
32
- getIdFromUrl(url: string): string {
33
- return url.split("-").pop() || "";
34
- }
35
-
36
- findKeyInObject<T>(obj: T, searchKey = "plain_text") {
37
- if (!obj) {
38
- return null;
39
- }
40
- const keys = Object.keys(obj);
41
- for (const key of keys) {
42
- if (key === searchKey) {
43
- return obj[key];
44
- } else if (typeof obj[key] === "object") {
45
- const result = this.findKeyInObject(obj[key], searchKey);
46
- if (result) {
47
- return result;
48
- }
49
- }
50
- }
51
- }
52
- async getAllChildBlocks(
53
- pageId: string,
54
- maxDepth = 1,
55
- currentDepth = 1,
56
- processed = {}
57
- ) {
58
- if (processed[pageId] || currentDepth > maxDepth) {
59
- return { results: [] };
60
- }
61
- this.log(`Fetching all blocks for page ${pageId} at depth ${currentDepth}`);
62
- processed[pageId] = true;
63
- const response = await this.notionClient.blocks.children.list({
64
- block_id: pageId,
65
- });
66
-
67
- let cursor = response.next_cursor;
68
- while (cursor) {
69
- this.log("Fetching more blocks");
70
- const childResponse = await this.notionClient.blocks.children.list({
71
- block_id: pageId,
72
- start_cursor: cursor,
73
- });
74
- response.results.push(...childResponse.results);
75
- cursor = childResponse.next_cursor;
76
- }
77
-
78
- for (const block of response.results) {
79
- if ("has_children" in block && block.has_children) {
80
- const childBlocks = await this.getAllChildBlocks(
81
- block.id,
82
- maxDepth,
83
- currentDepth + 1,
84
- processed
85
- );
86
- response.results.push(...childBlocks.results);
87
- }
88
- }
89
-
90
- response.has_more = false;
91
- response.next_cursor = null;
92
-
93
- return response;
94
- }
95
-
96
- async embed(user_input: string) {
97
- const embeddings = new Array<MinimalEmbedding>();
98
- const urls = this.extractUrls(user_input);
99
- const results = await this.getPagesFromUrls(urls);
100
- if (!results) {
101
- return embeddings;
102
- }
103
-
104
- for (const result of results) {
105
- let { page, blocks } = result;
106
- const childPages = blocks.results.filter(
107
- (b) => "has_children" in b && b.has_children
108
- );
109
-
110
- this.log(JSON.stringify(results, null, 2));
111
-
112
- const childBlocks = await Promise.all(
113
- childPages.map(async (childPage) => {
114
- const blocks = await this.getAllChildBlocks(childPage.id);
115
- return { childPage, blocks };
116
- })
117
- );
118
-
119
- for (const child of childBlocks) {
120
- const title =
121
- "child_page" in child.childPage && child.childPage.child_page;
122
- embeddings.push({
123
- id: child.childPage.id,
124
- text: JSON.stringify(
125
- child.blocks.results.map((b) => this.findKeyInObject(b))
126
- ),
127
- metadata: {
128
- ...title,
129
- },
130
- });
131
- }
132
- }
133
-
134
- this.log(JSON.stringify(embeddings, null, 2));
135
- return embeddings;
136
- }
137
-
138
- async getPageEmbedding(page: PageObjectResponse) {
139
- let id = page.id;
140
- let content = JSON.stringify(page);
141
-
142
- return { id, content };
143
- }
144
-
145
- async getPageFromUrl(url: string) {
146
- const pageId = url.split("-").pop();
147
- if (pageId) {
148
- this.log(`Fetching Notion page ${pageId}`);
149
- const page = await this.notionClient.pages.retrieve({ page_id: pageId });
150
- const blocks = await this.getAllChildBlocks(page.id);
151
- return { page, blocks };
152
- }
153
- return null;
154
- }
155
-
156
- async getPagesFromUrls(urls: string[]) {
157
- const pages = await Promise.all(
158
- urls.map(async (url) => {
159
- return this.getPageFromUrl(url);
160
- })
161
- );
162
- return pages;
163
- }
164
-
165
- async call(userPrompt: string): Promise<string> {
166
- const urls = this.extractUrls(userPrompt);
167
- const pages = await this.getPagesFromUrls(urls);
168
- const pagesDataFiltered = pages.filter((page) => page !== null);
169
- if (pagesDataFiltered.length === 0) {
170
- return "NOTION PLUGIN: No pages found";
171
- }
172
-
173
- const markdownPages = pagesDataFiltered
174
- .map((page) => `### Page: ${JSON.stringify(page, null, 2)}\n-`)
175
- .join("\n\n");
176
- this.log(markdownPages);
177
- return `NOTION PLUGIN: The following pages were loaded:\n\n${markdownPages}`;
178
- }
179
- }