@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,375 +0,0 @@
1
- "use client";
2
-
3
- import { useState, useEffect } from "react";
4
- import { useParams, useRouter } from "next/navigation";
5
- import { BenchmarkResults, ExerciseResult } from "@/types/benchmark";
6
- import { formatCurrency, formatTime } from "@/utils/dataProcessor";
7
-
8
- export default function ExerciseDetailPage() {
9
- const params = useParams();
10
- const router = useRouter();
11
- const [benchmarkData, setBenchmarkData] = useState<BenchmarkResults | null>(
12
- null
13
- );
14
- const [exerciseData, setExerciseData] = useState<ExerciseResult | null>(null);
15
- const [loading, setLoading] = useState(true);
16
- const [error, setError] = useState<string | null>(null);
17
-
18
- const model = decodeURIComponent(params.model as string);
19
- const provider = decodeURIComponent(params.provider as string);
20
- const language = decodeURIComponent(params.language as string);
21
- const exerciseName = decodeURIComponent(params.exercise as string);
22
-
23
- useEffect(() => {
24
- async function fetchExerciseData() {
25
- try {
26
- // First fetch the benchmark data
27
- const response = await fetch(
28
- `/api/benchmark-detail?model=${encodeURIComponent(
29
- model
30
- )}&provider=${encodeURIComponent(
31
- provider
32
- )}&language=${encodeURIComponent(language)}`
33
- );
34
- if (!response.ok) {
35
- throw new Error("Failed to fetch benchmark details");
36
- }
37
- const data = await response.json();
38
- setBenchmarkData(data.latest);
39
-
40
- // Find the specific exercise
41
- const exercise = data.latest.exercises.find(
42
- (ex: ExerciseResult) => ex.exerciseName === exerciseName
43
- );
44
-
45
- if (!exercise) {
46
- throw new Error(`Exercise "${exerciseName}" not found`);
47
- }
48
-
49
- setExerciseData(exercise);
50
- } catch (err) {
51
- setError(err instanceof Error ? err.message : "An error occurred");
52
- } finally {
53
- setLoading(false);
54
- }
55
- }
56
-
57
- fetchExerciseData();
58
- }, [model, provider, language, exerciseName]);
59
-
60
- const getStatusBadge = (passed: boolean) => {
61
- const baseClasses = "px-2 py-1 text-xs font-medium rounded-full";
62
- return passed
63
- ? `${baseClasses} bg-green-100 text-green-800`
64
- : `${baseClasses} bg-red-100 text-red-800`;
65
- };
66
-
67
- const getStatusIcon = (passed: boolean) => {
68
- return passed ? "✅" : "❌";
69
- };
70
-
71
- if (loading) {
72
- return (
73
- <div className="min-h-screen bg-gray-50 flex items-center justify-center">
74
- <div className="text-center">
75
- <div className="animate-spin rounded-full h-32 w-32 border-b-2 border-blue-500 mx-auto"></div>
76
- <p className="mt-4 text-gray-600">Loading exercise details...</p>
77
- </div>
78
- </div>
79
- );
80
- }
81
-
82
- if (error || !exerciseData || !benchmarkData) {
83
- return (
84
- <div className="min-h-screen bg-gray-50 flex items-center justify-center">
85
- <div className="text-center">
86
- <div className="text-red-500 text-6xl mb-4">⚠️</div>
87
- <h3 className="text-lg font-medium text-gray-900 mb-2">
88
- Error Loading Exercise Details
89
- </h3>
90
- <p className="text-gray-500 mb-4">
91
- {error || "Exercise data not found"}
92
- </p>
93
- <button
94
- onClick={() => router.back()}
95
- className="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-md"
96
- >
97
- Go Back
98
- </button>
99
- </div>
100
- </div>
101
- );
102
- }
103
-
104
- return (
105
- <div className="min-h-screen bg-gray-50">
106
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
107
- {/* Header */}
108
- <div className="mb-8">
109
- <button
110
- onClick={() =>
111
- router.push(
112
- `/details/${encodeURIComponent(model)}/${encodeURIComponent(
113
- provider
114
- )}/${encodeURIComponent(language)}`
115
- )
116
- }
117
- className="mb-4 text-blue-600 hover:text-blue-800 flex items-center"
118
- >
119
- ← Back to Benchmark Details
120
- </button>
121
- <h1 className="text-3xl font-bold text-gray-900">
122
- Exercise: {exerciseName}
123
- </h1>
124
- <p className="mt-2 text-gray-600">
125
- Model: {model} • Provider: {provider} • Language: {language}
126
- </p>
127
- </div>
128
-
129
- {/* Exercise Summary */}
130
- <div className="grid grid-cols-1 md:grid-cols-4 gap-6 mb-8">
131
- <div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
132
- <div className="flex items-center">
133
- <div className="flex-shrink-0">
134
- <div
135
- className={`w-8 h-8 rounded-md flex items-center justify-center ${
136
- exerciseData.testResult?.success
137
- ? "bg-green-500"
138
- : "bg-red-500"
139
- }`}
140
- >
141
- <span className="text-white font-bold">
142
- {exerciseData.testResult?.success ? "✓" : "✗"}
143
- </span>
144
- </div>
145
- </div>
146
- <div className="ml-4">
147
- <p className="text-sm font-medium text-gray-500">
148
- Overall Status
149
- </p>
150
- <p className="text-2xl font-semibold text-gray-900">
151
- {exerciseData.testResult?.success ? "Pass" : "Fail"}
152
- </p>
153
- </div>
154
- </div>
155
- </div>
156
-
157
- <div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
158
- <div className="flex items-center">
159
- <div className="flex-shrink-0">
160
- <div className="w-8 h-8 bg-blue-500 rounded-md flex items-center justify-center">
161
- <span className="text-white font-bold">T</span>
162
- </div>
163
- </div>
164
- <div className="ml-4">
165
- <p className="text-sm font-medium text-gray-500">
166
- Tests Passed
167
- </p>
168
- <p className="text-2xl font-semibold text-gray-900">
169
- {exerciseData.testResult?.passed || 0} /{" "}
170
- {exerciseData.testResult?.total || 0}
171
- </p>
172
- </div>
173
- </div>
174
- </div>
175
-
176
- <div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
177
- <div className="flex items-center">
178
- <div className="flex-shrink-0">
179
- <div className="w-8 h-8 bg-purple-500 rounded-md flex items-center justify-center">
180
- <span className="text-white font-bold">$</span>
181
- </div>
182
- </div>
183
- <div className="ml-4">
184
- <p className="text-sm font-medium text-gray-500">Cost</p>
185
- <p className="text-2xl font-semibold text-gray-900">
186
- {formatCurrency(exerciseData.cost)}
187
- </p>
188
- </div>
189
- </div>
190
- </div>
191
-
192
- <div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
193
- <div className="flex items-center">
194
- <div className="flex-shrink-0">
195
- <div className="w-8 h-8 bg-orange-500 rounded-md flex items-center justify-center">
196
- <span className="text-white font-bold">⏱</span>
197
- </div>
198
- </div>
199
- <div className="ml-4">
200
- <p className="text-sm font-medium text-gray-500">Duration</p>
201
- <p className="text-2xl font-semibold text-gray-900">
202
- {formatTime(exerciseData.timeElapsed || 0)}
203
- </p>
204
- </div>
205
- </div>
206
- </div>
207
- </div>
208
-
209
- {/* Test Results Section */}
210
- <div className="bg-white rounded-lg shadow-sm border border-gray-200 mb-8">
211
- <div className="px-6 py-4 border-b border-gray-200">
212
- <h2 className="text-lg font-semibold text-gray-900">
213
- Test Results
214
- </h2>
215
- </div>
216
- <div className="p-6">
217
- {exerciseData.testResult ? (
218
- <div className="space-y-6">
219
- {/* Test Summary */}
220
- <div className="grid grid-cols-2 md:grid-cols-4 gap-4">
221
- <div className="bg-green-50 border border-green-200 rounded-lg p-4">
222
- <div className="text-center">
223
- <div className="text-2xl font-bold text-green-600">
224
- {exerciseData.testResult.passed || 0}
225
- </div>
226
- <div className="text-sm text-green-700">Tests Passed</div>
227
- </div>
228
- </div>
229
- <div className="bg-red-50 border border-red-200 rounded-lg p-4">
230
- <div className="text-center">
231
- <div className="text-2xl font-bold text-red-600">
232
- {exerciseData.testResult.failed || 0}
233
- </div>
234
- <div className="text-sm text-red-700">Tests Failed</div>
235
- </div>
236
- </div>
237
- <div className="bg-yellow-50 border border-yellow-200 rounded-lg p-4">
238
- <div className="text-center">
239
- <div className="text-2xl font-bold text-yellow-600">
240
- {exerciseData.testResult.skipped || 0}
241
- </div>
242
- <div className="text-sm text-yellow-700">
243
- Tests Skipped
244
- </div>
245
- </div>
246
- </div>
247
- <div className="bg-blue-50 border border-blue-200 rounded-lg p-4">
248
- <div className="text-center">
249
- <div className="text-2xl font-bold text-blue-600">
250
- {exerciseData.testResult.total || 0}
251
- </div>
252
- <div className="text-sm text-blue-700">Total Tests</div>
253
- </div>
254
- </div>
255
- </div>
256
-
257
- {/* Output */}
258
- {exerciseData.testResult.output && (
259
- <div className="border border-gray-200 rounded-lg">
260
- <div className="px-4 py-3 bg-gray-50 border-b border-gray-200 rounded-t-lg">
261
- <h3 className="text-sm font-medium text-gray-900">
262
- Test Output
263
- </h3>
264
- </div>
265
- <div className="p-4">
266
- <pre className="text-sm text-gray-800 whitespace-pre-wrap font-mono bg-gray-50 p-4 rounded border overflow-x-auto">
267
- {(() => {
268
- try {
269
- const r = JSON.stringify(
270
- typeof exerciseData.testResult.output === "string"
271
- ? JSON.parse(exerciseData.testResult.output)
272
- : exerciseData.testResult.output,
273
- null,
274
- 2
275
- );
276
- return r;
277
- } catch (e) {
278
- return exerciseData.testResult.output;
279
- }
280
- })()}
281
- </pre>
282
- </div>
283
- </div>
284
- )}
285
-
286
- {/* Test Status Summary */}
287
- <div className="bg-gray-50 border border-gray-200 rounded-lg p-4">
288
- <div className="flex items-center justify-between">
289
- <div>
290
- <h3 className="text-lg font-medium text-gray-900">
291
- Overall Test Result
292
- </h3>
293
- <p className="text-sm text-gray-600">
294
- {exerciseData.testResult.success
295
- ? "All tests completed successfully"
296
- : "Some tests failed or encountered errors"}
297
- </p>
298
- </div>
299
- <div
300
- className={`px-4 py-2 rounded-full text-sm font-medium ${
301
- exerciseData.testResult.success
302
- ? "bg-green-100 text-green-800"
303
- : "bg-red-100 text-red-800"
304
- }`}
305
- >
306
- {exerciseData.testResult.success ? "PASSED" : "FAILED"}
307
- </div>
308
- </div>
309
- </div>
310
- </div>
311
- ) : (
312
- <div className="text-center py-8">
313
- <div className="text-gray-400 text-4xl mb-4">📋</div>
314
- <p className="text-gray-500">
315
- No detailed test results available
316
- </p>
317
- </div>
318
- )}
319
- </div>
320
- </div>
321
-
322
- {/* Exercise Metadata */}
323
- <div className="bg-white rounded-lg shadow-sm border border-gray-200">
324
- <div className="px-6 py-4 border-b border-gray-200">
325
- <h2 className="text-lg font-semibold text-gray-900">
326
- Exercise Information
327
- </h2>
328
- </div>
329
- <div className="p-6">
330
- <dl className="grid grid-cols-1 gap-x-4 gap-y-4 sm:grid-cols-2">
331
- <div>
332
- <dt className="text-sm font-medium text-gray-500">
333
- Exercise Name
334
- </dt>
335
- <dd className="mt-1 text-sm text-gray-900">
336
- {exerciseData.exerciseName}
337
- </dd>
338
- </div>
339
- <div>
340
- <dt className="text-sm font-medium text-gray-500">Cost</dt>
341
- <dd className="mt-1 text-sm text-gray-900">
342
- {formatCurrency(exerciseData.cost)}
343
- </dd>
344
- </div>
345
- <div>
346
- <dt className="text-sm font-medium text-gray-500">Duration</dt>
347
- <dd className="mt-1 text-sm text-gray-900">
348
- {formatTime(exerciseData.timeElapsed || 0)}
349
- </dd>
350
- </div>
351
- <div>
352
- <dt className="text-sm font-medium text-gray-500">
353
- Success Rate
354
- </dt>
355
- <dd className="mt-1 text-sm text-gray-900">
356
- {exerciseData.testResult && exerciseData.testResult.total > 0
357
- ? `${(
358
- ((exerciseData.testResult.passed || 0) /
359
- exerciseData.testResult.total) *
360
- 100
361
- ).toFixed(1)}%`
362
- : exerciseData.testResult?.success
363
- ? "100.0%"
364
- : exerciseData.testResult?.success === false
365
- ? "0.0%"
366
- : "N/A"}
367
- </dd>
368
- </div>
369
- </dl>
370
- </div>
371
- </div>
372
- </div>
373
- </div>
374
- );
375
- }
@@ -1,27 +0,0 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
- :root {
6
- --background: #ffffff;
7
- --foreground: #171717;
8
- }
9
-
10
- @media (prefers-color-scheme: dark) {
11
- :root {
12
- --background: #0a0a0a;
13
- --foreground: #ededed;
14
- }
15
- }
16
-
17
- body {
18
- color: var(--foreground);
19
- background: var(--background);
20
- font-family: Arial, Helvetica, sans-serif;
21
- }
22
-
23
- @layer utilities {
24
- .text-balance {
25
- text-wrap: balance;
26
- }
27
- }
@@ -1,21 +0,0 @@
1
- import type { Metadata } from 'next'
2
- import './globals.css'
3
-
4
- export const metadata: Metadata = {
5
- title: 'Benchmark Results Leaderboard',
6
- description: 'Exercise results and model performance tracking',
7
- }
8
-
9
- export default function RootLayout({
10
- children,
11
- }: {
12
- children: React.ReactNode
13
- }) {
14
- return (
15
- <html lang="en">
16
- <body className="antialiased">
17
- {children}
18
- </body>
19
- </html>
20
- )
21
- }
@@ -1,170 +0,0 @@
1
- 'use client';
2
-
3
- import { useState, useEffect } from 'react';
4
- import { loadLeaderboardData } from '@/utils/dataProcessor';
5
- import LeaderboardTable from '@/components/LeaderboardTable';
6
- import PerformanceChart from '@/components/PerformanceChart';
7
- import { LeaderboardEntry } from '@/types/benchmark';
8
-
9
- export default function Home() {
10
- const [leaderboardEntries, setLeaderboardEntries] = useState<LeaderboardEntry[]>([]);
11
- const [selectedLanguage, setSelectedLanguage] = useState<string>('all');
12
- const [loading, setLoading] = useState(true);
13
-
14
- useEffect(() => {
15
- async function fetchData() {
16
- const data = await loadLeaderboardData();
17
- setLeaderboardEntries(data);
18
- setLoading(false);
19
- }
20
- fetchData();
21
- }, []);
22
-
23
- // Extract unique languages for dropdown
24
- const availableLanguages = Array.from(new Set(leaderboardEntries.map(entry => entry.language))).sort();
25
-
26
- // Filter entries by selected language
27
- const filteredEntries = selectedLanguage === 'all'
28
- ? leaderboardEntries
29
- : leaderboardEntries.filter(entry => entry.language === selectedLanguage);
30
-
31
- // Update statistics to use filtered data
32
- const totalModels = filteredEntries.length;
33
- const totalExercises = filteredEntries.reduce((sum, entry) => sum + entry.totalExercises, 0);
34
- const averageSuccessRate = filteredEntries.length > 0
35
- ? filteredEntries.reduce((sum, entry) => sum + entry.successRate, 0) / filteredEntries.length
36
- : 0;
37
-
38
- const handleLanguageChange = (language: string) => {
39
- setSelectedLanguage(language);
40
- };
41
-
42
- if (loading) {
43
- return (
44
- <div className="min-h-screen bg-gray-50 flex items-center justify-center">
45
- <div className="text-center">
46
- <div className="animate-spin rounded-full h-32 w-32 border-b-2 border-blue-500 mx-auto"></div>
47
- <p className="mt-4 text-gray-600">Loading benchmark results...</p>
48
- </div>
49
- </div>
50
- );
51
- }
52
-
53
- return (
54
- <div className="min-h-screen bg-gray-50">
55
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
56
- {/* Header */}
57
- <div className="mb-8">
58
- <h1 className="text-3xl font-bold text-gray-900">Benchmark Results Leaderboard</h1>
59
- <p className="mt-2 text-gray-600">
60
- Track and compare model performance across coding exercises
61
- </p>
62
-
63
- {/* Language Filter Dropdown */}
64
- {availableLanguages.length > 1 && (
65
- <div className="mt-4">
66
- <label htmlFor="language-select" className="block text-sm font-medium text-gray-700 mb-2">
67
- Filter by Language:
68
- </label>
69
- <select
70
- id="language-select"
71
- value={selectedLanguage}
72
- onChange={(e) => handleLanguageChange(e.target.value)}
73
- className="block w-48 px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm"
74
- >
75
- <option value="all">All Languages</option>
76
- {availableLanguages.map((language) => (
77
- <option key={language} value={language}>
78
- {language.charAt(0).toUpperCase() + language.slice(1)}
79
- </option>
80
- ))}
81
- </select>
82
- </div>
83
- )}
84
- </div>
85
-
86
- {/* Summary Stats */}
87
- <div className="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8">
88
- <div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
89
- <div className="flex items-center">
90
- <div className="flex-shrink-0">
91
- <div className="w-8 h-8 bg-blue-500 rounded-md flex items-center justify-center">
92
- <span className="text-white font-bold">M</span>
93
- </div>
94
- </div>
95
- <div className="ml-4">
96
- <p className="text-sm font-medium text-gray-500">Total Models</p>
97
- <p className="text-2xl font-semibold text-gray-900">{totalModels}</p>
98
- </div>
99
- </div>
100
- </div>
101
-
102
- <div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
103
- <div className="flex items-center">
104
- <div className="flex-shrink-0">
105
- <div className="w-8 h-8 bg-green-500 rounded-md flex items-center justify-center">
106
- <span className="text-white font-bold">E</span>
107
- </div>
108
- </div>
109
- <div className="ml-4">
110
- <p className="text-sm font-medium text-gray-500">Total Exercises</p>
111
- <p className="text-2xl font-semibold text-gray-900">{totalExercises}</p>
112
- </div>
113
- </div>
114
- </div>
115
-
116
- <div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
117
- <div className="flex items-center">
118
- <div className="flex-shrink-0">
119
- <div className="w-8 h-8 bg-yellow-500 rounded-md flex items-center justify-center">
120
- <span className="text-white font-bold">%</span>
121
- </div>
122
- </div>
123
- <div className="ml-4">
124
- <p className="text-sm font-medium text-gray-500">Average Success Rate</p>
125
- <p className="text-2xl font-semibold text-gray-900">{averageSuccessRate.toFixed(1)}%</p>
126
- </div>
127
- </div>
128
- </div>
129
- </div>
130
-
131
- {/* Charts */}
132
- {filteredEntries.length > 0 && (
133
- <div className="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-8">
134
- <PerformanceChart entries={filteredEntries} chartType="success-rate" selectedLanguage={selectedLanguage} />
135
- <PerformanceChart entries={filteredEntries} chartType="cost-vs-performance" selectedLanguage={selectedLanguage} />
136
- </div>
137
- )}
138
-
139
- {/* Leaderboard Table */}
140
- <div className="bg-white rounded-lg shadow-sm border border-gray-200">
141
- <div className="px-6 py-4 border-b border-gray-200">
142
- <h2 className="text-xl font-semibold text-gray-900">Leaderboard</h2>
143
- <p className="mt-1 text-sm text-gray-500">
144
- Compare model performance across all benchmark runs
145
- </p>
146
- </div>
147
- <div className="p-6">
148
- {filteredEntries.length > 0 ? (
149
- <LeaderboardTable entries={filteredEntries} showLanguageColumn={selectedLanguage === 'all'} />
150
- ) : (
151
- <div className="text-center py-12">
152
- <div className="text-gray-400 text-6xl mb-4">📊</div>
153
- <h3 className="text-lg font-medium text-gray-900 mb-2">No benchmark results found</h3>
154
- <p className="text-gray-500">
155
- Run some benchmarks to see results here. Results should be placed in the
156
- <code className="bg-gray-100 px-2 py-1 rounded text-sm mx-1">benchmarks/results</code> directory.
157
- </p>
158
- </div>
159
- )}
160
- </div>
161
- </div>
162
-
163
- {/* Footer */}
164
- <div className="mt-8 text-center text-sm text-gray-500">
165
- <p>Last updated: {new Date().toLocaleString()}</p>
166
- </div>
167
- </div>
168
- </div>
169
- );
170
- }