codeprobe 0.1.0

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 (355) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +406 -0
  3. package/dist/cli.d.ts +7 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +104 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/ab.d.ts +7 -0
  8. package/dist/commands/ab.d.ts.map +1 -0
  9. package/dist/commands/ab.js +230 -0
  10. package/dist/commands/ab.js.map +1 -0
  11. package/dist/commands/agents.d.ts +10 -0
  12. package/dist/commands/agents.d.ts.map +1 -0
  13. package/dist/commands/agents.js +326 -0
  14. package/dist/commands/agents.js.map +1 -0
  15. package/dist/commands/autotest.d.ts +10 -0
  16. package/dist/commands/autotest.d.ts.map +1 -0
  17. package/dist/commands/autotest.js +408 -0
  18. package/dist/commands/autotest.js.map +1 -0
  19. package/dist/commands/benchmark.d.ts +6 -0
  20. package/dist/commands/benchmark.d.ts.map +1 -0
  21. package/dist/commands/benchmark.js +215 -0
  22. package/dist/commands/benchmark.js.map +1 -0
  23. package/dist/commands/check.d.ts +10 -0
  24. package/dist/commands/check.d.ts.map +1 -0
  25. package/dist/commands/check.js +333 -0
  26. package/dist/commands/check.js.map +1 -0
  27. package/dist/commands/context.d.ts +16 -0
  28. package/dist/commands/context.d.ts.map +1 -0
  29. package/dist/commands/context.js +219 -0
  30. package/dist/commands/context.js.map +1 -0
  31. package/dist/commands/cost.d.ts +9 -0
  32. package/dist/commands/cost.d.ts.map +1 -0
  33. package/dist/commands/cost.js +142 -0
  34. package/dist/commands/cost.js.map +1 -0
  35. package/dist/commands/dashboard.d.ts +10 -0
  36. package/dist/commands/dashboard.d.ts.map +1 -0
  37. package/dist/commands/dashboard.js +462 -0
  38. package/dist/commands/dashboard.js.map +1 -0
  39. package/dist/commands/diff.d.ts +6 -0
  40. package/dist/commands/diff.d.ts.map +1 -0
  41. package/dist/commands/diff.js +118 -0
  42. package/dist/commands/diff.js.map +1 -0
  43. package/dist/commands/doctor.d.ts +12 -0
  44. package/dist/commands/doctor.d.ts.map +1 -0
  45. package/dist/commands/doctor.js +203 -0
  46. package/dist/commands/doctor.js.map +1 -0
  47. package/dist/commands/explain.d.ts +7 -0
  48. package/dist/commands/explain.d.ts.map +1 -0
  49. package/dist/commands/explain.js +164 -0
  50. package/dist/commands/explain.js.map +1 -0
  51. package/dist/commands/flaky.d.ts +10 -0
  52. package/dist/commands/flaky.d.ts.map +1 -0
  53. package/dist/commands/flaky.js +141 -0
  54. package/dist/commands/flaky.js.map +1 -0
  55. package/dist/commands/generateClaudeMd.d.ts +11 -0
  56. package/dist/commands/generateClaudeMd.d.ts.map +1 -0
  57. package/dist/commands/generateClaudeMd.js +278 -0
  58. package/dist/commands/generateClaudeMd.js.map +1 -0
  59. package/dist/commands/generateRules.d.ts +11 -0
  60. package/dist/commands/generateRules.d.ts.map +1 -0
  61. package/dist/commands/generateRules.js +413 -0
  62. package/dist/commands/generateRules.js.map +1 -0
  63. package/dist/commands/heatmap.d.ts +7 -0
  64. package/dist/commands/heatmap.d.ts.map +1 -0
  65. package/dist/commands/heatmap.js +117 -0
  66. package/dist/commands/heatmap.js.map +1 -0
  67. package/dist/commands/history.d.ts +13 -0
  68. package/dist/commands/history.d.ts.map +1 -0
  69. package/dist/commands/history.js +113 -0
  70. package/dist/commands/history.js.map +1 -0
  71. package/dist/commands/hooks.d.ts +9 -0
  72. package/dist/commands/hooks.d.ts.map +1 -0
  73. package/dist/commands/hooks.js +199 -0
  74. package/dist/commands/hooks.js.map +1 -0
  75. package/dist/commands/improve.d.ts +7 -0
  76. package/dist/commands/improve.d.ts.map +1 -0
  77. package/dist/commands/improve.js +192 -0
  78. package/dist/commands/improve.js.map +1 -0
  79. package/dist/commands/init.d.ts +9 -0
  80. package/dist/commands/init.d.ts.map +1 -0
  81. package/dist/commands/init.js +270 -0
  82. package/dist/commands/init.js.map +1 -0
  83. package/dist/commands/installHook.d.ts +9 -0
  84. package/dist/commands/installHook.d.ts.map +1 -0
  85. package/dist/commands/installHook.js +78 -0
  86. package/dist/commands/installHook.js.map +1 -0
  87. package/dist/commands/lint.d.ts +6 -0
  88. package/dist/commands/lint.d.ts.map +1 -0
  89. package/dist/commands/lint.js +237 -0
  90. package/dist/commands/lint.js.map +1 -0
  91. package/dist/commands/map.d.ts +9 -0
  92. package/dist/commands/map.d.ts.map +1 -0
  93. package/dist/commands/map.js +114 -0
  94. package/dist/commands/map.js.map +1 -0
  95. package/dist/commands/mcp.d.ts +6 -0
  96. package/dist/commands/mcp.d.ts.map +1 -0
  97. package/dist/commands/mcp.js +151 -0
  98. package/dist/commands/mcp.js.map +1 -0
  99. package/dist/commands/models.d.ts +9 -0
  100. package/dist/commands/models.d.ts.map +1 -0
  101. package/dist/commands/models.js +89 -0
  102. package/dist/commands/models.js.map +1 -0
  103. package/dist/commands/pack.d.ts +10 -0
  104. package/dist/commands/pack.d.ts.map +1 -0
  105. package/dist/commands/pack.js +248 -0
  106. package/dist/commands/pack.js.map +1 -0
  107. package/dist/commands/recommend.d.ts +10 -0
  108. package/dist/commands/recommend.d.ts.map +1 -0
  109. package/dist/commands/recommend.js +472 -0
  110. package/dist/commands/recommend.js.map +1 -0
  111. package/dist/commands/regression.d.ts +10 -0
  112. package/dist/commands/regression.d.ts.map +1 -0
  113. package/dist/commands/regression.js +212 -0
  114. package/dist/commands/regression.js.map +1 -0
  115. package/dist/commands/repl.d.ts +9 -0
  116. package/dist/commands/repl.d.ts.map +1 -0
  117. package/dist/commands/repl.js +245 -0
  118. package/dist/commands/repl.js.map +1 -0
  119. package/dist/commands/scan.d.ts +10 -0
  120. package/dist/commands/scan.d.ts.map +1 -0
  121. package/dist/commands/scan.js +352 -0
  122. package/dist/commands/scan.js.map +1 -0
  123. package/dist/commands/score.d.ts +10 -0
  124. package/dist/commands/score.d.ts.map +1 -0
  125. package/dist/commands/score.js +192 -0
  126. package/dist/commands/score.js.map +1 -0
  127. package/dist/commands/security.d.ts +10 -0
  128. package/dist/commands/security.d.ts.map +1 -0
  129. package/dist/commands/security.js +211 -0
  130. package/dist/commands/security.js.map +1 -0
  131. package/dist/commands/simulate.d.ts +7 -0
  132. package/dist/commands/simulate.d.ts.map +1 -0
  133. package/dist/commands/simulate.js +149 -0
  134. package/dist/commands/simulate.js.map +1 -0
  135. package/dist/commands/summary.d.ts +9 -0
  136. package/dist/commands/summary.d.ts.map +1 -0
  137. package/dist/commands/summary.js +271 -0
  138. package/dist/commands/summary.js.map +1 -0
  139. package/dist/commands/test.d.ts +9 -0
  140. package/dist/commands/test.d.ts.map +1 -0
  141. package/dist/commands/test.js +219 -0
  142. package/dist/commands/test.js.map +1 -0
  143. package/dist/commands/ui.d.ts +8 -0
  144. package/dist/commands/ui.d.ts.map +1 -0
  145. package/dist/commands/ui.js +222 -0
  146. package/dist/commands/ui.js.map +1 -0
  147. package/dist/commands/validate.d.ts +7 -0
  148. package/dist/commands/validate.d.ts.map +1 -0
  149. package/dist/commands/validate.js +254 -0
  150. package/dist/commands/validate.js.map +1 -0
  151. package/dist/commands/workflow.d.ts +39 -0
  152. package/dist/commands/workflow.d.ts.map +1 -0
  153. package/dist/commands/workflow.js +309 -0
  154. package/dist/commands/workflow.js.map +1 -0
  155. package/dist/core/__tests__/contextAnalyzer.test.d.ts +2 -0
  156. package/dist/core/__tests__/contextAnalyzer.test.d.ts.map +1 -0
  157. package/dist/core/__tests__/contextAnalyzer.test.js +48 -0
  158. package/dist/core/__tests__/contextAnalyzer.test.js.map +1 -0
  159. package/dist/core/__tests__/promptLinter.test.d.ts +2 -0
  160. package/dist/core/__tests__/promptLinter.test.d.ts.map +1 -0
  161. package/dist/core/__tests__/promptLinter.test.js +74 -0
  162. package/dist/core/__tests__/promptLinter.test.js.map +1 -0
  163. package/dist/core/__tests__/promptRunner.test.d.ts +2 -0
  164. package/dist/core/__tests__/promptRunner.test.d.ts.map +1 -0
  165. package/dist/core/__tests__/promptRunner.test.js +84 -0
  166. package/dist/core/__tests__/promptRunner.test.js.map +1 -0
  167. package/dist/core/__tests__/securityScanner.test.d.ts +2 -0
  168. package/dist/core/__tests__/securityScanner.test.d.ts.map +1 -0
  169. package/dist/core/__tests__/securityScanner.test.js +39 -0
  170. package/dist/core/__tests__/securityScanner.test.js.map +1 -0
  171. package/dist/core/agentTracer.d.ts +21 -0
  172. package/dist/core/agentTracer.d.ts.map +1 -0
  173. package/dist/core/agentTracer.js +355 -0
  174. package/dist/core/agentTracer.js.map +1 -0
  175. package/dist/core/anthropicClient.d.ts +26 -0
  176. package/dist/core/anthropicClient.d.ts.map +1 -0
  177. package/dist/core/anthropicClient.js +62 -0
  178. package/dist/core/anthropicClient.js.map +1 -0
  179. package/dist/core/benchmarkRunner.d.ts +25 -0
  180. package/dist/core/benchmarkRunner.d.ts.map +1 -0
  181. package/dist/core/benchmarkRunner.js +182 -0
  182. package/dist/core/benchmarkRunner.js.map +1 -0
  183. package/dist/core/contextAnalyzer.d.ts +19 -0
  184. package/dist/core/contextAnalyzer.d.ts.map +1 -0
  185. package/dist/core/contextAnalyzer.js +221 -0
  186. package/dist/core/contextAnalyzer.js.map +1 -0
  187. package/dist/core/contextPacker.d.ts +26 -0
  188. package/dist/core/contextPacker.d.ts.map +1 -0
  189. package/dist/core/contextPacker.js +358 -0
  190. package/dist/core/contextPacker.js.map +1 -0
  191. package/dist/core/datasetRunner.d.ts +10 -0
  192. package/dist/core/datasetRunner.d.ts.map +1 -0
  193. package/dist/core/datasetRunner.js +130 -0
  194. package/dist/core/datasetRunner.js.map +1 -0
  195. package/dist/core/doctorRunner.d.ts +24 -0
  196. package/dist/core/doctorRunner.d.ts.map +1 -0
  197. package/dist/core/doctorRunner.js +278 -0
  198. package/dist/core/doctorRunner.js.map +1 -0
  199. package/dist/core/hookScanner.d.ts +24 -0
  200. package/dist/core/hookScanner.d.ts.map +1 -0
  201. package/dist/core/hookScanner.js +226 -0
  202. package/dist/core/hookScanner.js.map +1 -0
  203. package/dist/core/mcpScanner.d.ts +22 -0
  204. package/dist/core/mcpScanner.d.ts.map +1 -0
  205. package/dist/core/mcpScanner.js +290 -0
  206. package/dist/core/mcpScanner.js.map +1 -0
  207. package/dist/core/modelRegistry.d.ts +35 -0
  208. package/dist/core/modelRegistry.d.ts.map +1 -0
  209. package/dist/core/modelRegistry.js +97 -0
  210. package/dist/core/modelRegistry.js.map +1 -0
  211. package/dist/core/promptDiff.d.ts +25 -0
  212. package/dist/core/promptDiff.d.ts.map +1 -0
  213. package/dist/core/promptDiff.js +130 -0
  214. package/dist/core/promptDiff.js.map +1 -0
  215. package/dist/core/promptExplainer.d.ts +17 -0
  216. package/dist/core/promptExplainer.d.ts.map +1 -0
  217. package/dist/core/promptExplainer.js +334 -0
  218. package/dist/core/promptExplainer.js.map +1 -0
  219. package/dist/core/promptImprover.d.ts +19 -0
  220. package/dist/core/promptImprover.d.ts.map +1 -0
  221. package/dist/core/promptImprover.js +260 -0
  222. package/dist/core/promptImprover.js.map +1 -0
  223. package/dist/core/promptLinter.d.ts +24 -0
  224. package/dist/core/promptLinter.d.ts.map +1 -0
  225. package/dist/core/promptLinter.js +319 -0
  226. package/dist/core/promptLinter.js.map +1 -0
  227. package/dist/core/promptRunner.d.ts +31 -0
  228. package/dist/core/promptRunner.d.ts.map +1 -0
  229. package/dist/core/promptRunner.js +427 -0
  230. package/dist/core/promptRunner.js.map +1 -0
  231. package/dist/core/providers/anthropic.d.ts +10 -0
  232. package/dist/core/providers/anthropic.d.ts.map +1 -0
  233. package/dist/core/providers/anthropic.js +26 -0
  234. package/dist/core/providers/anthropic.js.map +1 -0
  235. package/dist/core/providers/base.d.ts +22 -0
  236. package/dist/core/providers/base.d.ts.map +1 -0
  237. package/dist/core/providers/base.js +2 -0
  238. package/dist/core/providers/base.js.map +1 -0
  239. package/dist/core/providers/factory.d.ts +7 -0
  240. package/dist/core/providers/factory.d.ts.map +1 -0
  241. package/dist/core/providers/factory.js +42 -0
  242. package/dist/core/providers/factory.js.map +1 -0
  243. package/dist/core/providers/google.d.ts +10 -0
  244. package/dist/core/providers/google.d.ts.map +1 -0
  245. package/dist/core/providers/google.js +47 -0
  246. package/dist/core/providers/google.js.map +1 -0
  247. package/dist/core/providers/openai.d.ts +19 -0
  248. package/dist/core/providers/openai.d.ts.map +1 -0
  249. package/dist/core/providers/openai.js +54 -0
  250. package/dist/core/providers/openai.js.map +1 -0
  251. package/dist/core/regressionRunner.d.ts +11 -0
  252. package/dist/core/regressionRunner.d.ts.map +1 -0
  253. package/dist/core/regressionRunner.js +116 -0
  254. package/dist/core/regressionRunner.js.map +1 -0
  255. package/dist/core/repositorySimulator.d.ts +17 -0
  256. package/dist/core/repositorySimulator.d.ts.map +1 -0
  257. package/dist/core/repositorySimulator.js +104 -0
  258. package/dist/core/repositorySimulator.js.map +1 -0
  259. package/dist/core/scorer.d.ts +30 -0
  260. package/dist/core/scorer.d.ts.map +1 -0
  261. package/dist/core/scorer.js +317 -0
  262. package/dist/core/scorer.js.map +1 -0
  263. package/dist/core/securityScanner.d.ts +23 -0
  264. package/dist/core/securityScanner.d.ts.map +1 -0
  265. package/dist/core/securityScanner.js +216 -0
  266. package/dist/core/securityScanner.js.map +1 -0
  267. package/dist/core/skillValidator.d.ts +41 -0
  268. package/dist/core/skillValidator.d.ts.map +1 -0
  269. package/dist/core/skillValidator.js +235 -0
  270. package/dist/core/skillValidator.js.map +1 -0
  271. package/dist/core/testHistory.d.ts +44 -0
  272. package/dist/core/testHistory.d.ts.map +1 -0
  273. package/dist/core/testHistory.js +91 -0
  274. package/dist/core/testHistory.js.map +1 -0
  275. package/dist/tokenizers/claudeTokenizer.d.ts +26 -0
  276. package/dist/tokenizers/claudeTokenizer.d.ts.map +1 -0
  277. package/dist/tokenizers/claudeTokenizer.js +83 -0
  278. package/dist/tokenizers/claudeTokenizer.js.map +1 -0
  279. package/dist/types/agent.d.ts +26 -0
  280. package/dist/types/agent.d.ts.map +1 -0
  281. package/dist/types/agent.js +5 -0
  282. package/dist/types/agent.js.map +1 -0
  283. package/dist/types/config.d.ts +30 -0
  284. package/dist/types/config.d.ts.map +1 -0
  285. package/dist/types/config.js +5 -0
  286. package/dist/types/config.js.map +1 -0
  287. package/dist/types/context.d.ts +77 -0
  288. package/dist/types/context.d.ts.map +1 -0
  289. package/dist/types/context.js +5 -0
  290. package/dist/types/context.js.map +1 -0
  291. package/dist/types/dataset.d.ts +26 -0
  292. package/dist/types/dataset.d.ts.map +1 -0
  293. package/dist/types/dataset.js +5 -0
  294. package/dist/types/dataset.js.map +1 -0
  295. package/dist/types/diagnostics.d.ts +31 -0
  296. package/dist/types/diagnostics.d.ts.map +1 -0
  297. package/dist/types/diagnostics.js +5 -0
  298. package/dist/types/diagnostics.js.map +1 -0
  299. package/dist/types/prompt.d.ts +53 -0
  300. package/dist/types/prompt.d.ts.map +1 -0
  301. package/dist/types/prompt.js +5 -0
  302. package/dist/types/prompt.js.map +1 -0
  303. package/dist/types/results.d.ts +42 -0
  304. package/dist/types/results.d.ts.map +1 -0
  305. package/dist/types/results.js +5 -0
  306. package/dist/types/results.js.map +1 -0
  307. package/dist/ui/dashboard.d.ts +57 -0
  308. package/dist/ui/dashboard.d.ts.map +1 -0
  309. package/dist/ui/dashboard.js +644 -0
  310. package/dist/ui/dashboard.js.map +1 -0
  311. package/dist/utils/__tests__/hashing.test.d.ts +2 -0
  312. package/dist/utils/__tests__/hashing.test.d.ts.map +1 -0
  313. package/dist/utils/__tests__/hashing.test.js +28 -0
  314. package/dist/utils/__tests__/hashing.test.js.map +1 -0
  315. package/dist/utils/__tests__/output.test.d.ts +2 -0
  316. package/dist/utils/__tests__/output.test.d.ts.map +1 -0
  317. package/dist/utils/__tests__/output.test.js +62 -0
  318. package/dist/utils/__tests__/output.test.js.map +1 -0
  319. package/dist/utils/cache.d.ts +29 -0
  320. package/dist/utils/cache.d.ts.map +1 -0
  321. package/dist/utils/cache.js +87 -0
  322. package/dist/utils/cache.js.map +1 -0
  323. package/dist/utils/config.d.ts +15 -0
  324. package/dist/utils/config.d.ts.map +1 -0
  325. package/dist/utils/config.js +61 -0
  326. package/dist/utils/config.js.map +1 -0
  327. package/dist/utils/errors.d.ts +43 -0
  328. package/dist/utils/errors.d.ts.map +1 -0
  329. package/dist/utils/errors.js +83 -0
  330. package/dist/utils/errors.js.map +1 -0
  331. package/dist/utils/fs.d.ts +44 -0
  332. package/dist/utils/fs.d.ts.map +1 -0
  333. package/dist/utils/fs.js +119 -0
  334. package/dist/utils/fs.js.map +1 -0
  335. package/dist/utils/hashing.d.ts +13 -0
  336. package/dist/utils/hashing.d.ts.map +1 -0
  337. package/dist/utils/hashing.js +18 -0
  338. package/dist/utils/hashing.js.map +1 -0
  339. package/dist/utils/logger.d.ts +32 -0
  340. package/dist/utils/logger.d.ts.map +1 -0
  341. package/dist/utils/logger.js +76 -0
  342. package/dist/utils/logger.js.map +1 -0
  343. package/dist/utils/output.d.ts +34 -0
  344. package/dist/utils/output.d.ts.map +1 -0
  345. package/dist/utils/output.js +99 -0
  346. package/dist/utils/output.js.map +1 -0
  347. package/dist/utils/paths.d.ts +33 -0
  348. package/dist/utils/paths.d.ts.map +1 -0
  349. package/dist/utils/paths.js +51 -0
  350. package/dist/utils/paths.js.map +1 -0
  351. package/dist/utils/spinner.d.ts +23 -0
  352. package/dist/utils/spinner.d.ts.map +1 -0
  353. package/dist/utils/spinner.js +79 -0
  354. package/dist/utils/spinner.js.map +1 -0
  355. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/core/providers/google.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,WAAW;QACf,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAwB;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1C,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC1C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC7B,CAAC,CAAC,CAAC;QAEJ,MAAM,IAAI,GAA4B;YACpC,QAAQ;YACR,gBAAgB,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,EAAE;SACjE,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,iBAAiB,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QACjE,CAAC;QAED,MAAM,GAAG,GAAG,2DAA2D,OAAO,CAAC,KAAK,wBAAwB,MAAM,EAAE,CAAC;QACrH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAoE,CAAC;QAC7F,MAAM,aAAa,GAAG,IAAI,CAAC,aAGd,CAAC;QAEd,OAAO;YACL,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;YACzD,WAAW,EAAE,aAAa,EAAE,gBAAgB,IAAI,CAAC;YACjD,YAAY,EAAE,aAAa,EAAE,oBAAoB,IAAI,CAAC;YACtD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,MAAM;SACnB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * OpenAI-compatible provider — works with OpenAI, DeepSeek, Qwen,
3
+ * Mistral, and any OpenAI-compatible API endpoint.
4
+ *
5
+ * Uses fetch() directly (built into Node 18+) so no SDK dependency is needed.
6
+ */
7
+ import type { ProviderClient, ProviderRequest, ProviderResponse } from './base.js';
8
+ export interface OpenAIProviderOptions {
9
+ baseURL?: string;
10
+ apiKeyEnv?: string;
11
+ }
12
+ export declare class OpenAIProvider implements ProviderClient {
13
+ private baseURL;
14
+ private apiKeyEnv;
15
+ constructor(options?: OpenAIProviderOptions);
16
+ isAvailable(): Promise<boolean>;
17
+ call(request: ProviderRequest): Promise<ProviderResponse>;
18
+ }
19
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/core/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEnF,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAe,YAAW,cAAc;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,CAAC,EAAE,qBAAqB;IAKrC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAyChE"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * OpenAI-compatible provider — works with OpenAI, DeepSeek, Qwen,
3
+ * Mistral, and any OpenAI-compatible API endpoint.
4
+ *
5
+ * Uses fetch() directly (built into Node 18+) so no SDK dependency is needed.
6
+ */
7
+ export class OpenAIProvider {
8
+ baseURL;
9
+ apiKeyEnv;
10
+ constructor(options) {
11
+ this.baseURL = options?.baseURL ?? 'https://api.openai.com/v1';
12
+ this.apiKeyEnv = options?.apiKeyEnv ?? 'OPENAI_API_KEY';
13
+ }
14
+ async isAvailable() {
15
+ return !!process.env[this.apiKeyEnv];
16
+ }
17
+ async call(request) {
18
+ const apiKey = process.env[this.apiKeyEnv];
19
+ if (!apiKey) {
20
+ throw new Error(`${this.apiKeyEnv} is required`);
21
+ }
22
+ const body = {
23
+ model: request.model,
24
+ messages: [
25
+ ...(request.system ? [{ role: 'system', content: request.system }] : []),
26
+ ...request.messages,
27
+ ],
28
+ max_tokens: request.maxTokens ?? 1024,
29
+ };
30
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
31
+ method: 'POST',
32
+ headers: {
33
+ 'Content-Type': 'application/json',
34
+ 'Authorization': `Bearer ${apiKey}`,
35
+ },
36
+ body: JSON.stringify(body),
37
+ });
38
+ if (!response.ok) {
39
+ const error = await response.text();
40
+ throw new Error(`API error (${response.status}): ${error}`);
41
+ }
42
+ const data = await response.json();
43
+ const choices = data.choices;
44
+ const usage = data.usage;
45
+ return {
46
+ content: choices[0]?.message?.content ?? '',
47
+ inputTokens: usage?.prompt_tokens ?? 0,
48
+ outputTokens: usage?.completion_tokens ?? 0,
49
+ model: request.model,
50
+ stopReason: 'stop',
51
+ };
52
+ }
53
+ }
54
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/core/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,OAAO,cAAc;IACjB,OAAO,CAAS;IAChB,SAAS,CAAS;IAE1B,YAAY,OAA+B;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,2BAA2B,CAAC;QAC/D,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,gBAAgB,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAwB;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,cAAc,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE;gBACR,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,OAAO,CAAC,QAAQ;aACpB;YACD,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;SACtC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,MAAM,EAAE;aACpC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAkD,CAAC;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAyE,CAAC;QAE7F,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE;YAC3C,WAAW,EAAE,KAAK,EAAE,aAAa,IAAI,CAAC;YACtC,YAAY,EAAE,KAAK,EAAE,iBAAiB,IAAI,CAAC;YAC3C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,MAAM;SACnB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Regression test runner — discovers and runs all prompt spec files in a directory.
3
+ */
4
+ import type { RunSummary } from '../types/results.js';
5
+ import type { RunOptions } from './promptRunner.js';
6
+ /**
7
+ * Run regression tests across all prompt spec files found in the given directory.
8
+ * Returns an aggregate summary of all test results.
9
+ */
10
+ export declare function runRegressionTests(promptDir: string, options: RunOptions): Promise<RunSummary>;
11
+ //# sourceMappingURL=regressionRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regressionRunner.d.ts","sourceRoot":"","sources":["../../src/core/regressionRunner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAqCpD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,UAAU,CAAC,CA+ErB"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Regression test runner — discovers and runs all prompt spec files in a directory.
3
+ */
4
+ import { resolve, extname } from 'node:path';
5
+ import { readdir, stat } from 'node:fs/promises';
6
+ import { runPromptTests } from './promptRunner.js';
7
+ import { logger } from '../utils/logger.js';
8
+ /**
9
+ * Recursively discover all .yaml and .yml files in a directory.
10
+ */
11
+ async function discoverSpecFiles(dirPath) {
12
+ const files = [];
13
+ async function walk(currentPath) {
14
+ let entries;
15
+ try {
16
+ entries = await readdir(currentPath, { withFileTypes: true });
17
+ }
18
+ catch {
19
+ return;
20
+ }
21
+ for (const entry of entries) {
22
+ const fullPath = resolve(currentPath, entry.name);
23
+ if (entry.isDirectory()) {
24
+ // Skip hidden directories and common non-spec directories
25
+ if (!entry.name.startsWith('.') && entry.name !== 'node_modules') {
26
+ await walk(fullPath);
27
+ }
28
+ }
29
+ else if (entry.isFile()) {
30
+ const ext = extname(entry.name).toLowerCase();
31
+ if (ext === '.yaml' || ext === '.yml') {
32
+ files.push(fullPath);
33
+ }
34
+ }
35
+ }
36
+ }
37
+ await walk(dirPath);
38
+ return files.sort();
39
+ }
40
+ /**
41
+ * Run regression tests across all prompt spec files found in the given directory.
42
+ * Returns an aggregate summary of all test results.
43
+ */
44
+ export async function runRegressionTests(promptDir, options) {
45
+ const absoluteDir = resolve(promptDir);
46
+ // Verify the directory exists
47
+ try {
48
+ const dirStat = await stat(absoluteDir);
49
+ if (!dirStat.isDirectory()) {
50
+ throw new Error(`"${absoluteDir}" is not a directory`);
51
+ }
52
+ }
53
+ catch (err) {
54
+ if (err instanceof Error && err.message.includes('is not a directory')) {
55
+ throw err;
56
+ }
57
+ throw new Error(`Directory not found: "${absoluteDir}"`);
58
+ }
59
+ const specFiles = await discoverSpecFiles(absoluteDir);
60
+ if (specFiles.length === 0) {
61
+ logger.warn(`No .yaml/.yml spec files found in "${absoluteDir}"`);
62
+ return {
63
+ totalTests: 0,
64
+ passed: 0,
65
+ failed: 0,
66
+ skipped: 0,
67
+ duration: 0,
68
+ cached: 0,
69
+ };
70
+ }
71
+ logger.info(`Found ${specFiles.length} spec file(s) in "${absoluteDir}"`);
72
+ const startTime = Date.now();
73
+ let totalTests = 0;
74
+ let passed = 0;
75
+ let failed = 0;
76
+ let skipped = 0;
77
+ let cached = 0;
78
+ for (const specFile of specFiles) {
79
+ try {
80
+ const results = await runPromptTests(specFile, options);
81
+ for (const result of results) {
82
+ totalTests++;
83
+ if (result.cached) {
84
+ cached++;
85
+ }
86
+ if (result.error) {
87
+ skipped++;
88
+ }
89
+ else if (result.passed) {
90
+ passed++;
91
+ }
92
+ else {
93
+ failed++;
94
+ }
95
+ }
96
+ }
97
+ catch (err) {
98
+ const errorMsg = err instanceof Error ? err.message : String(err);
99
+ logger.error(`Failed to process spec file "${specFile}": ${errorMsg}`);
100
+ skipped++;
101
+ totalTests++;
102
+ }
103
+ }
104
+ const duration = Date.now() - startTime;
105
+ const summary = {
106
+ totalTests,
107
+ passed,
108
+ failed,
109
+ skipped,
110
+ duration,
111
+ cached,
112
+ };
113
+ logger.info(`Regression run complete: ${passed}/${totalTests} passed, ${failed} failed, ${skipped} skipped (${duration}ms)`);
114
+ return summary;
115
+ }
116
+ //# sourceMappingURL=regressionRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regressionRunner.js","sourceRoot":"","sources":["../../src/core/regressionRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Repository simulator — estimates how a repository's context fits
3
+ * into Claude's context windows, accounting for reserved budgets
4
+ * and providing actionable recommendations.
5
+ */
6
+ import type { SimulationResult } from '../types/context.js';
7
+ import type { CodeprobeConfig } from '../types/config.js';
8
+ /**
9
+ * Simulate how a repository fits within Claude's context windows.
10
+ *
11
+ * Runs contextAnalyzer internally, then compares the total estimated tokens
12
+ * against 200k and 1M targets with a 15% reserved budget for system prompt,
13
+ * tool definitions, and other meta content. Generates human-readable
14
+ * recommendations.
15
+ */
16
+ export declare function simulateContext(rootPath: string, config?: CodeprobeConfig): Promise<SimulationResult>;
17
+ //# sourceMappingURL=repositorySimulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySimulator.d.ts","sourceRoot":"","sources":["../../src/core/repositorySimulator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAoB1D;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA2C3B"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Repository simulator — estimates how a repository's context fits
3
+ * into Claude's context windows, accounting for reserved budgets
4
+ * and providing actionable recommendations.
5
+ */
6
+ import { resolve } from 'node:path';
7
+ import { analyzeContext } from './contextAnalyzer.js';
8
+ import { logger } from '../utils/logger.js';
9
+ // ---------------------------------------------------------------------------
10
+ // Constants
11
+ // ---------------------------------------------------------------------------
12
+ /** Fraction of the context window reserved for system prompt, tools, etc. */
13
+ const RESERVED_BUDGET_FRACTION = 0.15;
14
+ const SIMULATION_TARGETS = [
15
+ { size: 200_000, label: '200k' },
16
+ { size: 1_000_000, label: '1M' },
17
+ ];
18
+ // ---------------------------------------------------------------------------
19
+ // Public API
20
+ // ---------------------------------------------------------------------------
21
+ /**
22
+ * Simulate how a repository fits within Claude's context windows.
23
+ *
24
+ * Runs contextAnalyzer internally, then compares the total estimated tokens
25
+ * against 200k and 1M targets with a 15% reserved budget for system prompt,
26
+ * tool definitions, and other meta content. Generates human-readable
27
+ * recommendations.
28
+ */
29
+ export async function simulateContext(rootPath, config) {
30
+ const absoluteRoot = resolve(rootPath);
31
+ logger.debug(`Simulating context for: ${absoluteRoot}`);
32
+ const analysis = await analyzeContext(absoluteRoot, config);
33
+ const totalTokens = analysis.estimatedTokens;
34
+ // Build simulation targets
35
+ const targets = SIMULATION_TARGETS.map((target) => {
36
+ const reservedBudget = Math.round(target.size * RESERVED_BUDGET_FRACTION);
37
+ const availableTokens = target.size - reservedBudget;
38
+ const fits = totalTokens <= availableTokens;
39
+ const utilization = availableTokens > 0 ? totalTokens / availableTokens : 0;
40
+ const headroom = availableTokens > 0 ? 1 - utilization : 0;
41
+ return {
42
+ windowSize: target.size,
43
+ windowLabel: target.label,
44
+ fits,
45
+ utilization: Math.min(utilization, 1),
46
+ headroom: Math.max(headroom, 0),
47
+ reservedBudget,
48
+ };
49
+ });
50
+ // Generate recommendations
51
+ const recommendations = generateRecommendations(totalTokens, targets, analysis);
52
+ logger.debug(`Simulation complete: ${totalTokens} tokens, ${recommendations.length} recommendation(s)`);
53
+ return {
54
+ rootPath: absoluteRoot,
55
+ totalTokens,
56
+ targets,
57
+ recommendations,
58
+ };
59
+ }
60
+ function generateRecommendations(totalTokens, targets, analysis) {
61
+ const recommendations = [];
62
+ for (const target of targets) {
63
+ const available = target.windowSize - target.reservedBudget;
64
+ if (target.fits) {
65
+ const headroomPct = Math.round(target.headroom * 100);
66
+ recommendations.push(`Repository fits in ${target.windowLabel} window with ${headroomPct}% headroom (${totalTokens.toLocaleString()} / ${available.toLocaleString()} available tokens).`);
67
+ }
68
+ else {
69
+ const overflow = totalTokens - available;
70
+ recommendations.push(`Repository exceeds ${target.windowLabel} window by ${overflow.toLocaleString()} tokens. Reduction needed.`);
71
+ }
72
+ }
73
+ // If the repo doesn't fit in 200k but fits in 1M, suggest strategies
74
+ const fits200k = targets.find((t) => t.windowLabel === '200k')?.fits ?? false;
75
+ const fits1M = targets.find((t) => t.windowLabel === '1M')?.fits ?? false;
76
+ if (!fits200k && fits1M) {
77
+ recommendations.push('Consider using the 1M context model, or trim lower-priority files to fit in 200k.');
78
+ }
79
+ if (!fits200k) {
80
+ // Suggest trimming test files
81
+ const testExtensions = analysis.extensionBreakdown.filter((e) => e.extension === '.test.ts' ||
82
+ e.extension === '.spec.ts' ||
83
+ e.extension === '.test.js' ||
84
+ e.extension === '.spec.js');
85
+ if (testExtensions.length > 0) {
86
+ const testTokens = testExtensions.reduce((sum, e) => sum + e.estimatedTokens, 0);
87
+ if (testTokens > 0) {
88
+ recommendations.push(`Consider excluding test files to save ~${testTokens.toLocaleString()} tokens.`);
89
+ }
90
+ }
91
+ // Suggest trimming large files
92
+ if (analysis.largestFiles.length > 0) {
93
+ const top3 = analysis.largestFiles.slice(0, 3);
94
+ const top3Tokens = top3.reduce((sum, f) => sum + f.estimatedTokens, 0);
95
+ const fileNames = top3.map((f) => f.path).join(', ');
96
+ recommendations.push(`The 3 largest files (${fileNames}) account for ~${top3Tokens.toLocaleString()} tokens. Consider summarizing or excluding them.`);
97
+ }
98
+ }
99
+ if (!fits200k && !fits1M) {
100
+ recommendations.push('Repository is too large for any standard context window. Use context packing (codeprobe pack) to select the most relevant files.');
101
+ }
102
+ return recommendations;
103
+ }
104
+ //# sourceMappingURL=repositorySimulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySimulator.js","sourceRoot":"","sources":["../../src/core/repositorySimulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Scoring engine that evaluates prompt outputs on multiple criteria
3
+ * and produces a 0-100 score with an A-F grade.
4
+ *
5
+ * All scoring is heuristic — no API calls are made.
6
+ */
7
+ import type { PromptSpec, PromptTest } from '../types/prompt.js';
8
+ export interface CriterionScore {
9
+ name: string;
10
+ score: number;
11
+ weight: number;
12
+ details: string;
13
+ }
14
+ export interface ScoreResult {
15
+ overall: number;
16
+ criteria: CriterionScore[];
17
+ grade: string;
18
+ }
19
+ /**
20
+ * Score a prompt output on multiple criteria and produce a 0-100 score.
21
+ *
22
+ * Criteria and weights:
23
+ * 1. Assertion pass rate (0.40)
24
+ * 2. Length appropriateness (0.15)
25
+ * 3. Format compliance (0.15)
26
+ * 4. Relevance (0.15)
27
+ * 5. Completeness (0.15)
28
+ */
29
+ export declare function scoreOutput(output: string, spec: PromptSpec, test: PromptTest): ScoreResult;
30
+ //# sourceMappingURL=scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../../src/core/scorer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAOjE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAkUD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,WAAW,CAmB3F"}