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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=output.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/output.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,62 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { formatBytes, formatTokens, formatDuration, formatPercentage, formatBar, } from '../../utils/output.js';
3
+ describe('formatBytes', () => {
4
+ it('formats 0 as "0 B"', () => {
5
+ expect(formatBytes(0)).toBe('0 B');
6
+ });
7
+ it('formats 1024 as "1.0 KB"', () => {
8
+ expect(formatBytes(1024)).toBe('1.0 KB');
9
+ });
10
+ it('formats 1048576 as "1.0 MB"', () => {
11
+ expect(formatBytes(1048576)).toBe('1.0 MB');
12
+ });
13
+ });
14
+ describe('formatTokens', () => {
15
+ it('formats 0 as "0"', () => {
16
+ expect(formatTokens(0)).toBe('0');
17
+ });
18
+ it('formats 1500 as "1.5k"', () => {
19
+ expect(formatTokens(1500)).toBe('1.5k');
20
+ });
21
+ it('formats 1000000 as "1.00M"', () => {
22
+ expect(formatTokens(1000000)).toBe('1.00M');
23
+ });
24
+ });
25
+ describe('formatDuration', () => {
26
+ it('formats 0 as "0ms"', () => {
27
+ expect(formatDuration(0)).toBe('0ms');
28
+ });
29
+ it('formats 1500 as "1.5s"', () => {
30
+ expect(formatDuration(1500)).toBe('1.5s');
31
+ });
32
+ it('formats 65000 as "1m 5s"', () => {
33
+ expect(formatDuration(65000)).toBe('1m 5s');
34
+ });
35
+ });
36
+ describe('formatPercentage', () => {
37
+ it('formats 0.5 as "50.0%"', () => {
38
+ expect(formatPercentage(0.5)).toBe('50.0%');
39
+ });
40
+ it('formats 1 as "100.0%"', () => {
41
+ expect(formatPercentage(1)).toBe('100.0%');
42
+ });
43
+ it('formats 0.123 as "12.3%"', () => {
44
+ expect(formatPercentage(0.123)).toBe('12.3%');
45
+ });
46
+ });
47
+ describe('formatBar', () => {
48
+ it('produces a string of the right width with "#" and "." chars', () => {
49
+ const bar = formatBar(50, 100, 20);
50
+ // bar should be "[" + 20 chars of # and . + "]" = 22 total
51
+ expect(bar).toHaveLength(22);
52
+ expect(bar.startsWith('[')).toBe(true);
53
+ expect(bar.endsWith(']')).toBe(true);
54
+ // Inner content should only be '#' and '.'
55
+ const inner = bar.slice(1, -1);
56
+ expect(inner).toMatch(/^[#.]+$/);
57
+ // 50/100 = 50%, so 10 of 20 should be '#'
58
+ const hashes = inner.split('').filter((c) => c === '#').length;
59
+ expect(hashes).toBe(10);
60
+ });
61
+ });
62
+ //# sourceMappingURL=output.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/output.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Simple file-based caching backed by JSON files in the cache directory.
3
+ */
4
+ /**
5
+ * Derive a cache key by hashing one or more string parts.
6
+ * Concatenates all parts with a null separator before hashing.
7
+ */
8
+ export declare function getCacheKey(...parts: string[]): string;
9
+ /**
10
+ * Read a cached value. Returns `null` if the key does not exist or the
11
+ * cached data cannot be deserialized.
12
+ */
13
+ export declare function readCache<T>(key: string): Promise<T | null>;
14
+ /**
15
+ * Write a value to the cache. The value is wrapped in an envelope that
16
+ * records the timestamp for potential TTL support in the future.
17
+ */
18
+ export declare function writeCache<T>(key: string, data: T): Promise<void>;
19
+ /** @deprecated Use getCacheKey instead. */
20
+ export declare const cacheKey: typeof getCacheKey;
21
+ /** @deprecated Use readCache<string> instead. */
22
+ export declare function getCached(key: string): Promise<string | null>;
23
+ /** @deprecated Use writeCache<string> instead. */
24
+ export declare function setCached(key: string, value: string): Promise<void>;
25
+ /**
26
+ * Clear the entire cache directory.
27
+ */
28
+ export declare function clearCache(): Promise<void>;
29
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtD;AAkBD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAajE;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAUvE;AAMD,2CAA2C;AAC3C,eAAO,MAAM,QAAQ,oBAAc,CAAC;AAEpC,iDAAiD;AACjD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEnE;AAED,kDAAkD;AAClD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAUhD"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Simple file-based caching backed by JSON files in the cache directory.
3
+ */
4
+ import { readFile, writeFile, mkdir, rm } from 'node:fs/promises';
5
+ import { join } from 'node:path';
6
+ import { getCacheDir } from './paths.js';
7
+ import { sha256 } from './hashing.js';
8
+ import { fileExists } from './fs.js';
9
+ /**
10
+ * Derive a cache key by hashing one or more string parts.
11
+ * Concatenates all parts with a null separator before hashing.
12
+ */
13
+ export function getCacheKey(...parts) {
14
+ return sha256(parts.join('\0'));
15
+ }
16
+ /**
17
+ * Ensure the cache directory exists.
18
+ */
19
+ async function ensureCacheDir() {
20
+ const dir = getCacheDir();
21
+ await mkdir(dir, { recursive: true });
22
+ return dir;
23
+ }
24
+ /**
25
+ * Resolve the full filesystem path for a given cache key.
26
+ */
27
+ function cachePath(key) {
28
+ return join(getCacheDir(), `${key}.json`);
29
+ }
30
+ /**
31
+ * Read a cached value. Returns `null` if the key does not exist or the
32
+ * cached data cannot be deserialized.
33
+ */
34
+ export async function readCache(key) {
35
+ const path = cachePath(key);
36
+ try {
37
+ if (!(await fileExists(path)))
38
+ return null;
39
+ const raw = await readFile(path, 'utf-8');
40
+ const envelope = JSON.parse(raw);
41
+ return envelope.data;
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * Write a value to the cache. The value is wrapped in an envelope that
49
+ * records the timestamp for potential TTL support in the future.
50
+ */
51
+ export async function writeCache(key, data) {
52
+ await ensureCacheDir();
53
+ const path = cachePath(key);
54
+ const envelope = {
55
+ data,
56
+ timestamp: Date.now(),
57
+ };
58
+ await writeFile(path, JSON.stringify(envelope, null, 2), 'utf-8');
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // Backward-compatible aliases used by older modules (e.g. promptRunner)
62
+ // ---------------------------------------------------------------------------
63
+ /** @deprecated Use getCacheKey instead. */
64
+ export const cacheKey = getCacheKey;
65
+ /** @deprecated Use readCache<string> instead. */
66
+ export async function getCached(key) {
67
+ return readCache(key);
68
+ }
69
+ /** @deprecated Use writeCache<string> instead. */
70
+ export async function setCached(key, value) {
71
+ return writeCache(key, value);
72
+ }
73
+ /**
74
+ * Clear the entire cache directory.
75
+ */
76
+ export async function clearCache() {
77
+ const dir = getCacheDir();
78
+ try {
79
+ if (await fileExists(dir)) {
80
+ await rm(dir, { recursive: true, force: true });
81
+ }
82
+ }
83
+ catch {
84
+ // Best effort -- ignore errors during cleanup
85
+ }
86
+ }
87
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG,KAAe;IAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc;IAC3B,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,GAAW;IAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAE5B,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAE3C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmC,CAAC;QAEnE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAI,GAAW,EAAE,IAAO;IACtD,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAE5B,MAAM,QAAQ,GAAG;QACf,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;IAEF,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAE9E,2CAA2C;AAC3C,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC;AAEpC,iDAAiD;AACjD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,OAAO,SAAS,CAAS,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,KAAa;IACxD,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAE1B,IAAI,CAAC;QACH,IAAI,MAAM,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Configuration loader for codeprobe.
3
+ * Looks for .codeprobe.json or .codeprobe.yaml in the project root.
4
+ */
5
+ import type { CodeprobeConfig } from '../types/config.js';
6
+ /**
7
+ * Load configuration from the project root.
8
+ * Returns a default config if no config file is found.
9
+ */
10
+ export declare function loadConfig(rootPath: string): Promise<CodeprobeConfig>;
11
+ /**
12
+ * Return the default configuration.
13
+ */
14
+ export declare function getDefaultConfig(): CodeprobeConfig;
15
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAiB1D;;;GAGG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAiB3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,eAAe,CAalD"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Configuration loader for codeprobe.
3
+ * Looks for .codeprobe.json or .codeprobe.yaml in the project root.
4
+ */
5
+ import { readFile } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+ import yaml from 'js-yaml';
8
+ import { fileExists } from './fs.js';
9
+ const CONFIG_FILE_NAMES = [
10
+ '.codeprobe.json',
11
+ '.codeprobe.yaml',
12
+ '.codeprobe.yml',
13
+ 'codeprobe.config.json',
14
+ 'codeprobe.config.yaml',
15
+ // Backward compat: also check legacy config file names
16
+ '.claude-test.json',
17
+ '.claude-test.yaml',
18
+ '.claude-test.yml',
19
+ 'claude-test.config.json',
20
+ 'claude-test.config.yaml',
21
+ ];
22
+ /**
23
+ * Load configuration from the project root.
24
+ * Returns a default config if no config file is found.
25
+ */
26
+ export async function loadConfig(rootPath) {
27
+ for (const name of CONFIG_FILE_NAMES) {
28
+ const configPath = join(rootPath, name);
29
+ if (await fileExists(configPath)) {
30
+ try {
31
+ const content = await readFile(configPath, 'utf-8');
32
+ if (name.endsWith('.json')) {
33
+ return JSON.parse(content);
34
+ }
35
+ return yaml.load(content);
36
+ }
37
+ catch {
38
+ // Fall through to default
39
+ }
40
+ }
41
+ }
42
+ return getDefaultConfig();
43
+ }
44
+ /**
45
+ * Return the default configuration.
46
+ */
47
+ export function getDefaultConfig() {
48
+ return {
49
+ defaultModel: 'claude-sonnet-4-20250514',
50
+ defaultContextTarget: '200k',
51
+ ignorePaths: [],
52
+ caching: true,
53
+ contextBudgets: {
54
+ systemPrompt: 0.1,
55
+ coreFiles: 0.5,
56
+ docs: 0.2,
57
+ toolMeta: 0.1,
58
+ },
59
+ };
60
+ }
61
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,iBAAiB,GAAG;IACxB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,uBAAuB;IACvB,uBAAuB;IACvB,uDAAuD;IACvD,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;IAClB,yBAAyB;IACzB,yBAAyB;CAC1B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;gBAChD,CAAC;gBACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,YAAY,EAAE,0BAA0B;QACxC,oBAAoB,EAAE,MAAM;QAC5B,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,IAAI;QACb,cAAc,EAAE;YACd,YAAY,EAAE,GAAG;YACjB,SAAS,EAAE,GAAG;YACd,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,GAAG;SACd;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Custom error classes and a top-level error handler.
3
+ */
4
+ /**
5
+ * Base error for all codeprobe errors. Carries a machine-readable
6
+ * `code` and optional structured `details`.
7
+ */
8
+ export declare class CodeprobeError extends Error {
9
+ readonly code: string;
10
+ readonly details?: Record<string, unknown>;
11
+ constructor(message: string, code: string, details?: Record<string, unknown>);
12
+ }
13
+ /**
14
+ * Raised when a configuration file is missing, malformed, or contains
15
+ * invalid values.
16
+ */
17
+ export declare class ConfigError extends CodeprobeError {
18
+ constructor(message: string, details?: Record<string, unknown>);
19
+ }
20
+ /**
21
+ * Raised when a prompt spec file cannot be parsed or is invalid.
22
+ */
23
+ export declare class PromptParseError extends CodeprobeError {
24
+ constructor(message: string, details?: Record<string, unknown>);
25
+ }
26
+ /**
27
+ * Raised when input data fails schema or constraint validation.
28
+ */
29
+ export declare class ValidationError extends CodeprobeError {
30
+ constructor(message: string, details?: Record<string, unknown>);
31
+ }
32
+ /**
33
+ * Top-level error handler that prints a user-friendly message and
34
+ * exits the process.
35
+ *
36
+ * - Known CodeprobeError instances are printed cleanly.
37
+ * - Unknown errors include a hint to report the bug.
38
+ * - Stack traces are only printed when DEBUG is set.
39
+ */
40
+ export declare function handleError(error: unknown): never;
41
+ /** @deprecated Use CodeprobeError instead. */
42
+ export { CodeprobeError as ClaudeTestError };
43
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAGzC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUpC;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,cAAc;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;gBACtC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,cAAc;gBACrC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAkCjD;AAED,8CAA8C;AAC9C,OAAO,EAAE,cAAc,IAAI,eAAe,EAAE,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Custom error classes and a top-level error handler.
3
+ */
4
+ /**
5
+ * Base error for all codeprobe errors. Carries a machine-readable
6
+ * `code` and optional structured `details`.
7
+ */
8
+ export class CodeprobeError extends Error {
9
+ code;
10
+ details;
11
+ constructor(message, code, details) {
12
+ super(message);
13
+ this.name = 'CodeprobeError';
14
+ this.code = code;
15
+ this.details = details;
16
+ // Maintain proper prototype chain for instanceof checks
17
+ Object.setPrototypeOf(this, new.target.prototype);
18
+ }
19
+ }
20
+ /**
21
+ * Raised when a configuration file is missing, malformed, or contains
22
+ * invalid values.
23
+ */
24
+ export class ConfigError extends CodeprobeError {
25
+ constructor(message, details) {
26
+ super(message, 'CONFIG_ERROR', details);
27
+ this.name = 'ConfigError';
28
+ }
29
+ }
30
+ /**
31
+ * Raised when a prompt spec file cannot be parsed or is invalid.
32
+ */
33
+ export class PromptParseError extends CodeprobeError {
34
+ constructor(message, details) {
35
+ super(message, 'PROMPT_PARSE_ERROR', details);
36
+ this.name = 'PromptParseError';
37
+ }
38
+ }
39
+ /**
40
+ * Raised when input data fails schema or constraint validation.
41
+ */
42
+ export class ValidationError extends CodeprobeError {
43
+ constructor(message, details) {
44
+ super(message, 'VALIDATION_ERROR', details);
45
+ this.name = 'ValidationError';
46
+ }
47
+ }
48
+ /**
49
+ * Top-level error handler that prints a user-friendly message and
50
+ * exits the process.
51
+ *
52
+ * - Known CodeprobeError instances are printed cleanly.
53
+ * - Unknown errors include a hint to report the bug.
54
+ * - Stack traces are only printed when DEBUG is set.
55
+ */
56
+ export function handleError(error) {
57
+ if (error instanceof CodeprobeError) {
58
+ process.stderr.write(`\nError [${error.code}]: ${error.message}\n`);
59
+ if (error.details && Object.keys(error.details).length > 0) {
60
+ process.stderr.write(`Details: ${JSON.stringify(error.details, null, 2)}\n`);
61
+ }
62
+ if (process.env['DEBUG'] && error.stack) {
63
+ process.stderr.write(`\n${error.stack}\n`);
64
+ }
65
+ process.exit(1);
66
+ }
67
+ if (error instanceof Error) {
68
+ process.stderr.write(`\nUnexpected error: ${error.message}\n`);
69
+ if (process.env['DEBUG'] && error.stack) {
70
+ process.stderr.write(`\n${error.stack}\n`);
71
+ }
72
+ else {
73
+ process.stderr.write('Set DEBUG=1 for a full stack trace.\n');
74
+ }
75
+ process.exit(1);
76
+ }
77
+ // Truly unknown throw value
78
+ process.stderr.write(`\nUnexpected error: ${String(error)}\n`);
79
+ process.exit(1);
80
+ }
81
+ /** @deprecated Use CodeprobeError instead. */
82
+ export { CodeprobeError as ClaudeTestError };
83
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAS;IACb,OAAO,CAA2B;IAE3C,YACE,OAAe,EACf,IAAY,EACZ,OAAiC;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,wDAAwD;QACxD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,cAAc;IAC7C,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAClD,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACjD,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QAEpE,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACvD,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QAE/D,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uCAAuC,CACxC,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,4BAA4B;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,8CAA8C;AAC9C,OAAO,EAAE,cAAc,IAAI,eAAe,EAAE,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * File system utilities for codeprobe.
3
+ */
4
+ /**
5
+ * Safely read a text file, returning null on failure.
6
+ */
7
+ export declare function readTextFile(filePath: string): Promise<string | null>;
8
+ /**
9
+ * Check if a file exists and is a file (not a directory).
10
+ */
11
+ export declare function fileExists(filePath: string): Promise<boolean>;
12
+ /**
13
+ * Check if a path is a directory.
14
+ */
15
+ export declare function isDirectory(dirPath: string): Promise<boolean>;
16
+ /**
17
+ * Get file size in bytes, or 0 on error.
18
+ */
19
+ export declare function getFileSize(filePath: string): Promise<number>;
20
+ /**
21
+ * Get the extension of a file, lowercase, including the dot.
22
+ */
23
+ export declare function getExtension(filePath: string): string;
24
+ /**
25
+ * Get relative path from a root.
26
+ */
27
+ export declare function getRelativePath(rootPath: string, filePath: string): string;
28
+ export interface WalkOptions {
29
+ ignoreDirs?: Set<string>;
30
+ ignoreExtensions?: Set<string>;
31
+ }
32
+ export interface WalkEntry {
33
+ path: string;
34
+ relativePath: string;
35
+ isFile: boolean;
36
+ isDirectory: boolean;
37
+ size: number;
38
+ extension: string;
39
+ }
40
+ /**
41
+ * Recursively walk a directory, yielding file entries.
42
+ */
43
+ export declare function walkDirectory(rootPath: string, options?: WalkOptions): Promise<WalkEntry[]>;
44
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAM3E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CAmDtB"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * File system utilities for codeprobe.
3
+ */
4
+ import { readFile, stat, readdir } from 'node:fs/promises';
5
+ import { join, extname, relative } from 'node:path';
6
+ /**
7
+ * Safely read a text file, returning null on failure.
8
+ */
9
+ export async function readTextFile(filePath) {
10
+ try {
11
+ return await readFile(filePath, 'utf-8');
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ /**
18
+ * Check if a file exists and is a file (not a directory).
19
+ */
20
+ export async function fileExists(filePath) {
21
+ try {
22
+ const s = await stat(filePath);
23
+ return s.isFile();
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ /**
30
+ * Check if a path is a directory.
31
+ */
32
+ export async function isDirectory(dirPath) {
33
+ try {
34
+ const s = await stat(dirPath);
35
+ return s.isDirectory();
36
+ }
37
+ catch {
38
+ return false;
39
+ }
40
+ }
41
+ /**
42
+ * Get file size in bytes, or 0 on error.
43
+ */
44
+ export async function getFileSize(filePath) {
45
+ try {
46
+ const s = await stat(filePath);
47
+ return s.size;
48
+ }
49
+ catch {
50
+ return 0;
51
+ }
52
+ }
53
+ /**
54
+ * Get the extension of a file, lowercase, including the dot.
55
+ */
56
+ export function getExtension(filePath) {
57
+ return extname(filePath).toLowerCase();
58
+ }
59
+ /**
60
+ * Get relative path from a root.
61
+ */
62
+ export function getRelativePath(rootPath, filePath) {
63
+ return relative(rootPath, filePath);
64
+ }
65
+ /**
66
+ * Recursively walk a directory, yielding file entries.
67
+ */
68
+ export async function walkDirectory(rootPath, options) {
69
+ const entries = [];
70
+ const ignoreDirs = options?.ignoreDirs ?? new Set();
71
+ async function walk(currentPath) {
72
+ let dirEntries;
73
+ try {
74
+ dirEntries = await readdir(currentPath, { withFileTypes: true });
75
+ }
76
+ catch {
77
+ return;
78
+ }
79
+ for (const entry of dirEntries) {
80
+ const fullPath = join(currentPath, entry.name);
81
+ const relPath = relative(rootPath, fullPath);
82
+ if (entry.isDirectory()) {
83
+ if (ignoreDirs.has(entry.name)) {
84
+ continue;
85
+ }
86
+ entries.push({
87
+ path: fullPath,
88
+ relativePath: relPath,
89
+ isFile: false,
90
+ isDirectory: true,
91
+ size: 0,
92
+ extension: '',
93
+ });
94
+ await walk(fullPath);
95
+ }
96
+ else if (entry.isFile()) {
97
+ let size = 0;
98
+ try {
99
+ const s = await stat(fullPath);
100
+ size = s.size;
101
+ }
102
+ catch {
103
+ // skip files we can't stat
104
+ }
105
+ entries.push({
106
+ path: fullPath,
107
+ relativePath: relPath,
108
+ isFile: true,
109
+ isDirectory: false,
110
+ size,
111
+ extension: extname(entry.name).toLowerCase(),
112
+ });
113
+ }
114
+ }
115
+ }
116
+ await walk(rootPath);
117
+ return entries;
118
+ }
119
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Cryptographic hashing utilities.
3
+ */
4
+ /**
5
+ * Compute a full SHA-256 hex digest of the input string.
6
+ */
7
+ export declare function sha256(input: string): string;
8
+ /**
9
+ * Compute a short (12-character) SHA-256 prefix for use as a
10
+ * compact, collision-resistant identifier.
11
+ */
12
+ export declare function shortHash(input: string): string;
13
+ //# sourceMappingURL=hashing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../../src/utils/hashing.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Cryptographic hashing utilities.
3
+ */
4
+ import { createHash } from 'node:crypto';
5
+ /**
6
+ * Compute a full SHA-256 hex digest of the input string.
7
+ */
8
+ export function sha256(input) {
9
+ return createHash('sha256').update(input).digest('hex');
10
+ }
11
+ /**
12
+ * Compute a short (12-character) SHA-256 prefix for use as a
13
+ * compact, collision-resistant identifier.
14
+ */
15
+ export function shortHash(input) {
16
+ return sha256(input).slice(0, 12);
17
+ }
18
+ //# sourceMappingURL=hashing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashing.js","sourceRoot":"","sources":["../../src/utils/hashing.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC"}