webmcp-cli 1.2.2 → 1.2.3

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 (330) hide show
  1. package/dist/analysis/form-to-tool-mapper.d.ts +61 -0
  2. package/dist/analysis/form-to-tool-mapper.js +360 -0
  3. package/dist/analysis/form-to-tool-mapper.js.map +1 -0
  4. package/dist/analysis/index.d.ts +84 -0
  5. package/dist/analysis/index.js +81 -0
  6. package/dist/analysis/index.js.map +1 -0
  7. package/dist/analysis/missing-tool-analyzer.d.ts +35 -0
  8. package/dist/analysis/missing-tool-analyzer.js +617 -0
  9. package/dist/analysis/missing-tool-analyzer.js.map +1 -0
  10. package/dist/audit/run-multi-page-audit.d.ts +34 -0
  11. package/dist/audit/run-multi-page-audit.js +233 -0
  12. package/dist/audit/run-multi-page-audit.js.map +1 -0
  13. package/dist/cli/commands/potential.d.ts +8 -0
  14. package/dist/cli/commands/potential.js +323 -0
  15. package/dist/cli/commands/potential.js.map +1 -0
  16. package/dist/cli/commands/report.d.ts +12 -0
  17. package/dist/cli/commands/report.js +89 -0
  18. package/dist/cli/commands/report.js.map +1 -0
  19. package/dist/cli/index.js +35 -0
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/config/defaults.d.ts +36 -0
  22. package/dist/config/defaults.js +33 -0
  23. package/dist/config/defaults.js.map +1 -0
  24. package/dist/config/index.d.ts +7 -0
  25. package/dist/config/index.js +7 -0
  26. package/dist/config/index.js.map +1 -0
  27. package/dist/config/loader.d.ts +22 -0
  28. package/dist/config/loader.js +91 -0
  29. package/dist/config/loader.js.map +1 -0
  30. package/dist/config/schema.d.ts +280 -0
  31. package/dist/config/schema.js +42 -0
  32. package/dist/config/schema.js.map +1 -0
  33. package/dist/core/types/audit.d.ts +1 -1
  34. package/dist/core/types/index.d.ts +1 -0
  35. package/dist/core/types/index.js +1 -0
  36. package/dist/core/types/index.js.map +1 -1
  37. package/dist/core/types/recon.d.ts +265 -0
  38. package/dist/core/types/recon.js +5 -0
  39. package/dist/core/types/recon.js.map +1 -0
  40. package/dist/core/types/rule.d.ts +1 -1
  41. package/dist/core/types/rule.js +7 -5
  42. package/dist/core/types/rule.js.map +1 -1
  43. package/dist/crawler/depth-crawler.d.ts +29 -0
  44. package/dist/crawler/depth-crawler.js +212 -0
  45. package/dist/crawler/depth-crawler.js.map +1 -0
  46. package/dist/crawler/index.d.ts +2 -0
  47. package/dist/crawler/index.js +3 -0
  48. package/dist/crawler/index.js.map +1 -0
  49. package/dist/crawler/link-extractor.d.ts +1 -0
  50. package/dist/crawler/link-extractor.js +49 -0
  51. package/dist/crawler/link-extractor.js.map +1 -0
  52. package/dist/generators/index.d.ts +10 -0
  53. package/dist/generators/index.js +8 -0
  54. package/dist/generators/index.js.map +1 -0
  55. package/dist/generators/report-html.d.ts +12 -0
  56. package/dist/generators/report-html.js +470 -0
  57. package/dist/generators/report-html.js.map +1 -0
  58. package/dist/generators/report-json.d.ts +95 -0
  59. package/dist/generators/report-json.js +144 -0
  60. package/dist/generators/report-json.js.map +1 -0
  61. package/dist/generators/report-manager.d.ts +31 -0
  62. package/dist/generators/report-manager.js +208 -0
  63. package/dist/generators/report-manager.js.map +1 -0
  64. package/dist/generators/tool-code-generator.d.ts +31 -0
  65. package/dist/generators/tool-code-generator.js +201 -0
  66. package/dist/generators/tool-code-generator.js.map +1 -0
  67. package/dist/potential/ai-recommender.d.ts +33 -0
  68. package/dist/potential/ai-recommender.js +414 -0
  69. package/dist/potential/ai-recommender.js.map +1 -0
  70. package/dist/potential/analyzer.d.ts +32 -0
  71. package/dist/potential/analyzer.js +383 -0
  72. package/dist/potential/analyzer.js.map +1 -0
  73. package/dist/potential/index.d.ts +3 -0
  74. package/dist/potential/index.js +4 -0
  75. package/dist/potential/index.js.map +1 -0
  76. package/dist/potential/prompts.d.ts +20 -0
  77. package/dist/potential/prompts.js +42 -0
  78. package/dist/potential/prompts.js.map +1 -0
  79. package/dist/potential/types.d.ts +40 -0
  80. package/dist/potential/types.js +2 -0
  81. package/dist/potential/types.js.map +1 -0
  82. package/dist/recon/index.d.ts +20 -0
  83. package/dist/recon/index.js +143 -0
  84. package/dist/recon/index.js.map +1 -0
  85. package/dist/recon/manifest.d.ts +16 -0
  86. package/dist/recon/manifest.js +108 -0
  87. package/dist/recon/manifest.js.map +1 -0
  88. package/dist/recon/meta-extractor.d.ts +11 -0
  89. package/dist/recon/meta-extractor.js +276 -0
  90. package/dist/recon/meta-extractor.js.map +1 -0
  91. package/dist/recon/robots.d.ts +16 -0
  92. package/dist/recon/robots.js +158 -0
  93. package/dist/recon/robots.js.map +1 -0
  94. package/dist/recon/route-discovery.d.ts +25 -0
  95. package/dist/recon/route-discovery.js +303 -0
  96. package/dist/recon/route-discovery.js.map +1 -0
  97. package/dist/recon/sitemap.d.ts +12 -0
  98. package/dist/recon/sitemap.js +177 -0
  99. package/dist/recon/sitemap.js.map +1 -0
  100. package/dist/rules/accessibility/AXE-001.d.ts +9 -0
  101. package/dist/rules/accessibility/AXE-001.js +109 -0
  102. package/dist/rules/accessibility/AXE-001.js.map +1 -0
  103. package/dist/rules/accessibility/AXE-002.d.ts +8 -0
  104. package/dist/rules/accessibility/AXE-002.js +85 -0
  105. package/dist/rules/accessibility/AXE-002.js.map +1 -0
  106. package/dist/rules/accessibility/AXE-003.d.ts +8 -0
  107. package/dist/rules/accessibility/AXE-003.js +94 -0
  108. package/dist/rules/accessibility/AXE-003.js.map +1 -0
  109. package/dist/rules/accessibility/AXE-004.d.ts +8 -0
  110. package/dist/rules/accessibility/AXE-004.js +101 -0
  111. package/dist/rules/accessibility/AXE-004.js.map +1 -0
  112. package/dist/rules/accessibility/AXE-005.d.ts +9 -0
  113. package/dist/rules/accessibility/AXE-005.js +89 -0
  114. package/dist/rules/accessibility/AXE-005.js.map +1 -0
  115. package/dist/rules/best-practices/BP-004.d.ts +9 -0
  116. package/dist/rules/best-practices/BP-004.js +96 -0
  117. package/dist/rules/best-practices/BP-004.js.map +1 -0
  118. package/dist/rules/best-practices/BP-005.d.ts +8 -0
  119. package/dist/rules/best-practices/BP-005.js +94 -0
  120. package/dist/rules/best-practices/BP-005.js.map +1 -0
  121. package/dist/rules/best-practices/BP-006.d.ts +8 -0
  122. package/dist/rules/best-practices/BP-006.js +80 -0
  123. package/dist/rules/best-practices/BP-006.js.map +1 -0
  124. package/dist/rules/best-practices/BP-007.d.ts +8 -0
  125. package/dist/rules/best-practices/BP-007.js +92 -0
  126. package/dist/rules/best-practices/BP-007.js.map +1 -0
  127. package/dist/rules/best-practices/BP-008.d.ts +12 -0
  128. package/dist/rules/best-practices/BP-008.js +86 -0
  129. package/dist/rules/best-practices/BP-008.js.map +1 -0
  130. package/dist/rules/best-practices/BP-009.d.ts +9 -0
  131. package/dist/rules/best-practices/BP-009.js +77 -0
  132. package/dist/rules/best-practices/BP-009.js.map +1 -0
  133. package/dist/rules/best-practices/BP-010.d.ts +8 -0
  134. package/dist/rules/best-practices/BP-010.js +85 -0
  135. package/dist/rules/best-practices/BP-010.js.map +1 -0
  136. package/dist/rules/coverage/COV-002.d.ts +8 -0
  137. package/dist/rules/coverage/COV-002.js +68 -0
  138. package/dist/rules/coverage/COV-002.js.map +1 -0
  139. package/dist/rules/coverage/COV-003.d.ts +8 -0
  140. package/dist/rules/coverage/COV-003.js +68 -0
  141. package/dist/rules/coverage/COV-003.js.map +1 -0
  142. package/dist/rules/coverage/COV-004.d.ts +8 -0
  143. package/dist/rules/coverage/COV-004.js +89 -0
  144. package/dist/rules/coverage/COV-004.js.map +1 -0
  145. package/dist/rules/coverage/COV-005.d.ts +8 -0
  146. package/dist/rules/coverage/COV-005.js +67 -0
  147. package/dist/rules/coverage/COV-005.js.map +1 -0
  148. package/dist/rules/coverage/COV-006.d.ts +9 -0
  149. package/dist/rules/coverage/COV-006.js +76 -0
  150. package/dist/rules/coverage/COV-006.js.map +1 -0
  151. package/dist/rules/coverage/COV-007.d.ts +8 -0
  152. package/dist/rules/coverage/COV-007.js +67 -0
  153. package/dist/rules/coverage/COV-007.js.map +1 -0
  154. package/dist/rules/coverage/COV-008.d.ts +9 -0
  155. package/dist/rules/coverage/COV-008.js +87 -0
  156. package/dist/rules/coverage/COV-008.js.map +1 -0
  157. package/dist/rules/coverage/COV-009.d.ts +8 -0
  158. package/dist/rules/coverage/COV-009.js +73 -0
  159. package/dist/rules/coverage/COV-009.js.map +1 -0
  160. package/dist/rules/coverage/COV-010.d.ts +9 -0
  161. package/dist/rules/coverage/COV-010.js +82 -0
  162. package/dist/rules/coverage/COV-010.js.map +1 -0
  163. package/dist/rules/description/DESC-001.d.ts +9 -0
  164. package/dist/rules/description/DESC-001.js +88 -0
  165. package/dist/rules/description/DESC-001.js.map +1 -0
  166. package/dist/rules/description/DESC-002.d.ts +10 -0
  167. package/dist/rules/description/DESC-002.js +99 -0
  168. package/dist/rules/description/DESC-002.js.map +1 -0
  169. package/dist/rules/description/DESC-006.d.ts +9 -0
  170. package/dist/rules/description/DESC-006.js +78 -0
  171. package/dist/rules/description/DESC-006.js.map +1 -0
  172. package/dist/rules/description/DESC-007.d.ts +9 -0
  173. package/dist/rules/description/DESC-007.js +70 -0
  174. package/dist/rules/description/DESC-007.js.map +1 -0
  175. package/dist/rules/description/DESC-008.d.ts +9 -0
  176. package/dist/rules/description/DESC-008.js +70 -0
  177. package/dist/rules/description/DESC-008.js.map +1 -0
  178. package/dist/rules/description/DESC-009.d.ts +8 -0
  179. package/dist/rules/description/DESC-009.js +55 -0
  180. package/dist/rules/description/DESC-009.js.map +1 -0
  181. package/dist/rules/description/DESC-010.d.ts +9 -0
  182. package/dist/rules/description/DESC-010.js +92 -0
  183. package/dist/rules/description/DESC-010.js.map +1 -0
  184. package/dist/rules/description/DESC-011.d.ts +9 -0
  185. package/dist/rules/description/DESC-011.js +81 -0
  186. package/dist/rules/description/DESC-011.js.map +1 -0
  187. package/dist/rules/description/DESC-012.d.ts +9 -0
  188. package/dist/rules/description/DESC-012.js +98 -0
  189. package/dist/rules/description/DESC-012.js.map +1 -0
  190. package/dist/rules/implementation/IMP-002.d.ts +9 -0
  191. package/dist/rules/implementation/IMP-002.js +59 -0
  192. package/dist/rules/implementation/IMP-002.js.map +1 -0
  193. package/dist/rules/implementation/IMP-006.d.ts +9 -0
  194. package/dist/rules/implementation/IMP-006.js +48 -0
  195. package/dist/rules/implementation/IMP-006.js.map +1 -0
  196. package/dist/rules/implementation/IMP-008.d.ts +9 -0
  197. package/dist/rules/implementation/IMP-008.js +46 -0
  198. package/dist/rules/implementation/IMP-008.js.map +1 -0
  199. package/dist/rules/implementation/IMP-009.d.ts +9 -0
  200. package/dist/rules/implementation/IMP-009.js +48 -0
  201. package/dist/rules/implementation/IMP-009.js.map +1 -0
  202. package/dist/rules/implementation/IMP-010.d.ts +9 -0
  203. package/dist/rules/implementation/IMP-010.js +66 -0
  204. package/dist/rules/implementation/IMP-010.js.map +1 -0
  205. package/dist/rules/implementation/IMP-011.d.ts +9 -0
  206. package/dist/rules/implementation/IMP-011.js +82 -0
  207. package/dist/rules/implementation/IMP-011.js.map +1 -0
  208. package/dist/rules/implementation/IMP-012.d.ts +9 -0
  209. package/dist/rules/implementation/IMP-012.js +88 -0
  210. package/dist/rules/implementation/IMP-012.js.map +1 -0
  211. package/dist/rules/implementation/IMP-014.d.ts +9 -0
  212. package/dist/rules/implementation/IMP-014.js +58 -0
  213. package/dist/rules/implementation/IMP-014.js.map +1 -0
  214. package/dist/rules/implementation/IMP-015.d.ts +9 -0
  215. package/dist/rules/implementation/IMP-015.js +64 -0
  216. package/dist/rules/implementation/IMP-015.js.map +1 -0
  217. package/dist/rules/implementation/IMP-016.d.ts +9 -0
  218. package/dist/rules/implementation/IMP-016.js +52 -0
  219. package/dist/rules/implementation/IMP-016.js.map +1 -0
  220. package/dist/rules/implementation/IMP-017.d.ts +8 -0
  221. package/dist/rules/implementation/IMP-017.js +51 -0
  222. package/dist/rules/implementation/IMP-017.js.map +1 -0
  223. package/dist/rules/implementation/IMP-018.d.ts +8 -0
  224. package/dist/rules/implementation/IMP-018.js +52 -0
  225. package/dist/rules/implementation/IMP-018.js.map +1 -0
  226. package/dist/rules/implementation/IMP-019.d.ts +8 -0
  227. package/dist/rules/implementation/IMP-019.js +53 -0
  228. package/dist/rules/implementation/IMP-019.js.map +1 -0
  229. package/dist/rules/implementation/IMP-020.d.ts +9 -0
  230. package/dist/rules/implementation/IMP-020.js +62 -0
  231. package/dist/rules/implementation/IMP-020.js.map +1 -0
  232. package/dist/rules/implementation/IMP-021.d.ts +8 -0
  233. package/dist/rules/implementation/IMP-021.js +64 -0
  234. package/dist/rules/implementation/IMP-021.js.map +1 -0
  235. package/dist/rules/implementation/IMP-022.d.ts +8 -0
  236. package/dist/rules/implementation/IMP-022.js +70 -0
  237. package/dist/rules/implementation/IMP-022.js.map +1 -0
  238. package/dist/rules/index.d.ts +73 -6
  239. package/dist/rules/index.js +141 -6
  240. package/dist/rules/index.js.map +1 -1
  241. package/dist/rules/schema/SCHEMA-004.d.ts +9 -0
  242. package/dist/rules/schema/SCHEMA-004.js +57 -0
  243. package/dist/rules/schema/SCHEMA-004.js.map +1 -0
  244. package/dist/rules/schema/SCHEMA-005.d.ts +9 -0
  245. package/dist/rules/schema/SCHEMA-005.js +61 -0
  246. package/dist/rules/schema/SCHEMA-005.js.map +1 -0
  247. package/dist/rules/schema/SCHEMA-006.d.ts +10 -0
  248. package/dist/rules/schema/SCHEMA-006.js +85 -0
  249. package/dist/rules/schema/SCHEMA-006.js.map +1 -0
  250. package/dist/rules/schema/SCHEMA-007.d.ts +9 -0
  251. package/dist/rules/schema/SCHEMA-007.js +73 -0
  252. package/dist/rules/schema/SCHEMA-007.js.map +1 -0
  253. package/dist/rules/schema/SCHEMA-008.d.ts +9 -0
  254. package/dist/rules/schema/SCHEMA-008.js +70 -0
  255. package/dist/rules/schema/SCHEMA-008.js.map +1 -0
  256. package/dist/rules/schema/SCHEMA-009.d.ts +10 -0
  257. package/dist/rules/schema/SCHEMA-009.js +80 -0
  258. package/dist/rules/schema/SCHEMA-009.js.map +1 -0
  259. package/dist/rules/schema/SCHEMA-010.d.ts +9 -0
  260. package/dist/rules/schema/SCHEMA-010.js +96 -0
  261. package/dist/rules/schema/SCHEMA-010.js.map +1 -0
  262. package/dist/rules/schema/SCHEMA-012.d.ts +9 -0
  263. package/dist/rules/schema/SCHEMA-012.js +65 -0
  264. package/dist/rules/schema/SCHEMA-012.js.map +1 -0
  265. package/dist/rules/security/SEC-002.d.ts +8 -0
  266. package/dist/rules/security/SEC-002.js +81 -0
  267. package/dist/rules/security/SEC-002.js.map +1 -0
  268. package/dist/rules/security/SEC-003.d.ts +8 -0
  269. package/dist/rules/security/SEC-003.js +85 -0
  270. package/dist/rules/security/SEC-003.js.map +1 -0
  271. package/dist/rules/security/SEC-004.d.ts +9 -0
  272. package/dist/rules/security/SEC-004.js +87 -0
  273. package/dist/rules/security/SEC-004.js.map +1 -0
  274. package/dist/rules/security/SEC-005.d.ts +8 -0
  275. package/dist/rules/security/SEC-005.js +87 -0
  276. package/dist/rules/security/SEC-005.js.map +1 -0
  277. package/dist/rules/security/SEC-006.d.ts +10 -0
  278. package/dist/rules/security/SEC-006.js +108 -0
  279. package/dist/rules/security/SEC-006.js.map +1 -0
  280. package/dist/rules/security/SEC-007.d.ts +9 -0
  281. package/dist/rules/security/SEC-007.js +108 -0
  282. package/dist/rules/security/SEC-007.js.map +1 -0
  283. package/dist/rules/security/SEC-008.d.ts +8 -0
  284. package/dist/rules/security/SEC-008.js +109 -0
  285. package/dist/rules/security/SEC-008.js.map +1 -0
  286. package/dist/rules/security/SEC-009.d.ts +9 -0
  287. package/dist/rules/security/SEC-009.js +93 -0
  288. package/dist/rules/security/SEC-009.js.map +1 -0
  289. package/dist/rules/security/SEC-010.d.ts +8 -0
  290. package/dist/rules/security/SEC-010.js +78 -0
  291. package/dist/rules/security/SEC-010.js.map +1 -0
  292. package/dist/rules/security/SEC-011.d.ts +8 -0
  293. package/dist/rules/security/SEC-011.js +93 -0
  294. package/dist/rules/security/SEC-011.js.map +1 -0
  295. package/dist/rules/security/SEC-012.d.ts +8 -0
  296. package/dist/rules/security/SEC-012.js +79 -0
  297. package/dist/rules/security/SEC-012.js.map +1 -0
  298. package/dist/rules/security/SEC-013.d.ts +9 -0
  299. package/dist/rules/security/SEC-013.js +107 -0
  300. package/dist/rules/security/SEC-013.js.map +1 -0
  301. package/dist/scoring/calculator.js +1 -0
  302. package/dist/scoring/calculator.js.map +1 -1
  303. package/dist/ui/ink/components/AIRecommendationCard.d.ts +11 -0
  304. package/dist/ui/ink/components/AIRecommendationCard.js +23 -0
  305. package/dist/ui/ink/components/AIRecommendationCard.js.map +1 -0
  306. package/dist/ui/ink/components/OpportunityList.d.ts +10 -0
  307. package/dist/ui/ink/components/OpportunityList.js +48 -0
  308. package/dist/ui/ink/components/OpportunityList.js.map +1 -0
  309. package/dist/ui/ink/components/PotentialPageCard.d.ts +13 -0
  310. package/dist/ui/ink/components/PotentialPageCard.js +43 -0
  311. package/dist/ui/ink/components/PotentialPageCard.js.map +1 -0
  312. package/dist/ui/ink/components/PotentialProgress.d.ts +16 -0
  313. package/dist/ui/ink/components/PotentialProgress.js +44 -0
  314. package/dist/ui/ink/components/PotentialProgress.js.map +1 -0
  315. package/dist/ui/ink/components/PotentialSummary.d.ts +10 -0
  316. package/dist/ui/ink/components/PotentialSummary.js +86 -0
  317. package/dist/ui/ink/components/PotentialSummary.js.map +1 -0
  318. package/dist/ui/ink/components/SuggestionCard.d.ts +34 -0
  319. package/dist/ui/ink/components/SuggestionCard.js +36 -0
  320. package/dist/ui/ink/components/SuggestionCard.js.map +1 -0
  321. package/dist/ui/ink/components/views/MultiPageCrawlView.d.ts +21 -0
  322. package/dist/ui/ink/components/views/MultiPageCrawlView.js +55 -0
  323. package/dist/ui/ink/components/views/MultiPageCrawlView.js.map +1 -0
  324. package/dist/ui/ink/components/views/PotentialView.d.ts +18 -0
  325. package/dist/ui/ink/components/views/PotentialView.js +74 -0
  326. package/dist/ui/ink/components/views/PotentialView.js.map +1 -0
  327. package/dist/ui/ink/components/views/ReconView.d.ts +22 -0
  328. package/dist/ui/ink/components/views/ReconView.js +30 -0
  329. package/dist/ui/ink/components/views/ReconView.js.map +1 -0
  330. package/package.json +2 -1
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Report Command
3
+ *
4
+ * Open or manage generated audit reports.
5
+ */
6
+ import chalk from 'chalk';
7
+ import { existsSync, readdirSync, statSync } from 'fs';
8
+ import { join, resolve } from 'path';
9
+ import { exec } from 'child_process';
10
+ /**
11
+ * Find the most recent HTML report in the output directory.
12
+ */
13
+ function findLatestReport(dir) {
14
+ const absDir = resolve(dir);
15
+ if (!existsSync(absDir))
16
+ return null;
17
+ const htmlFile = join(absDir, 'audit-report.html');
18
+ if (existsSync(htmlFile))
19
+ return htmlFile;
20
+ // Check subdirectories for the latest report
21
+ try {
22
+ const entries = readdirSync(absDir, { withFileTypes: true })
23
+ .filter((e) => e.isDirectory())
24
+ .map((e) => ({
25
+ name: e.name,
26
+ path: join(absDir, e.name),
27
+ mtime: statSync(join(absDir, e.name)).mtime.getTime(),
28
+ }))
29
+ .sort((a, b) => b.mtime - a.mtime);
30
+ for (const entry of entries) {
31
+ const candidate = join(entry.path, 'audit-report.html');
32
+ if (existsSync(candidate))
33
+ return candidate;
34
+ }
35
+ }
36
+ catch {
37
+ // Ignore filesystem errors
38
+ }
39
+ return null;
40
+ }
41
+ /**
42
+ * Open a file in the default system application.
43
+ */
44
+ function openInBrowser(filePath) {
45
+ return new Promise((resolve, reject) => {
46
+ const platform = process.platform;
47
+ let cmd;
48
+ if (platform === 'darwin') {
49
+ cmd = `open "${filePath}"`;
50
+ }
51
+ else if (platform === 'win32') {
52
+ cmd = `start "" "${filePath}"`;
53
+ }
54
+ else {
55
+ cmd = `xdg-open "${filePath}"`;
56
+ }
57
+ exec(cmd, (err) => {
58
+ if (err)
59
+ reject(err);
60
+ else
61
+ resolve();
62
+ });
63
+ });
64
+ }
65
+ /**
66
+ * Open the latest HTML report in the default browser.
67
+ */
68
+ export async function runReportOpen(options) {
69
+ const dir = options.dir ?? './agentready-report';
70
+ const reportPath = findLatestReport(dir);
71
+ if (!reportPath) {
72
+ console.error(chalk.red('No report found.') +
73
+ chalk.dim(` Looked in: ${resolve(dir)}`));
74
+ console.log(chalk.dim(' Run ') +
75
+ chalk.cyan('webmcp audit <url>') +
76
+ chalk.dim(' first to generate a report.'));
77
+ return 1;
78
+ }
79
+ console.log(chalk.cyan('Opening report: ') + chalk.white(reportPath));
80
+ try {
81
+ await openInBrowser(reportPath);
82
+ return 0;
83
+ }
84
+ catch (e) {
85
+ console.error(chalk.red(`Failed to open report: ${e instanceof Error ? e.message : e}`));
86
+ return 1;
87
+ }
88
+ }
89
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -71,6 +71,41 @@ export function createProgram() {
71
71
  const { runInteractive } = await import('./commands/interactive.js');
72
72
  await runInteractive(url, options);
73
73
  });
74
+ // ═══════════════════════════════════════════════════════
75
+ // COMMAND: report
76
+ // ═══════════════════════════════════════════════════════
77
+ const reportCmd = program
78
+ .command('report')
79
+ .description('Manage generated audit reports');
80
+ reportCmd
81
+ .command('open')
82
+ .description('Open the latest HTML report in your browser')
83
+ .option('-d, --dir <path>', 'Report output directory', './agentready-report')
84
+ .action(async (options) => {
85
+ const { runReportOpen } = await import('./commands/report.js');
86
+ const exitCode = await runReportOpen(options);
87
+ if (exitCode !== 0) {
88
+ process.exitCode = exitCode;
89
+ }
90
+ });
91
+ // ═══════════════════════════════════════════════════════
92
+ // COMMAND: potential
93
+ // ═══════════════════════════════════════════════════════
94
+ program
95
+ .command('potential')
96
+ .description('Find WebMCP integration opportunities on a website')
97
+ .argument('<url>', 'The URL to analyze')
98
+ .option('--max-pages <n>', 'Max pages to crawl', '30')
99
+ .option('-t, --timeout <ms>', 'Per-page timeout', '15000')
100
+ .option('--no-ai', 'Skip AI recommendations')
101
+ .option('--output <path>', 'Save report to JSON file')
102
+ .option('--json', 'Output raw JSON instead of TUI')
103
+ .action(async (url, options) => {
104
+ const { runPotential } = await import('./commands/potential.js');
105
+ const exitCode = await runPotential(url, options);
106
+ if (exitCode !== 0)
107
+ process.exitCode = exitCode;
108
+ });
74
109
  return program;
75
110
  }
76
111
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Default Configuration Values
3
+ *
4
+ * Sensible defaults for all configuration options.
5
+ * These match the specification in extra-context.md.
6
+ */
7
+ export declare const defaultConfig: {
8
+ readonly crawl: {
9
+ readonly maxPages: 20;
10
+ readonly maxDepth: 4;
11
+ readonly timeout: 30000;
12
+ readonly respectRobotsTxt: true;
13
+ };
14
+ readonly rules: {
15
+ readonly disabled: string[];
16
+ readonly overrides: Record<string, {
17
+ severity?: string;
18
+ maxScore?: number;
19
+ }>;
20
+ };
21
+ readonly scoring: {
22
+ readonly weights: {
23
+ readonly implementation: 0.25;
24
+ readonly coverage: 0.2;
25
+ readonly security: 0.2;
26
+ readonly bestPractices: 0.15;
27
+ readonly promptHandling: 0.2;
28
+ };
29
+ };
30
+ readonly output: {
31
+ readonly directory: "./agentready-report";
32
+ readonly formats: string[];
33
+ readonly includeScreenshots: true;
34
+ };
35
+ };
36
+ export type DefaultConfig = typeof defaultConfig;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Default Configuration Values
3
+ *
4
+ * Sensible defaults for all configuration options.
5
+ * These match the specification in extra-context.md.
6
+ */
7
+ export const defaultConfig = {
8
+ crawl: {
9
+ maxPages: 20,
10
+ maxDepth: 4,
11
+ timeout: 30000,
12
+ respectRobotsTxt: true,
13
+ },
14
+ rules: {
15
+ disabled: [],
16
+ overrides: {},
17
+ },
18
+ scoring: {
19
+ weights: {
20
+ implementation: 0.25,
21
+ coverage: 0.20,
22
+ security: 0.20,
23
+ bestPractices: 0.15,
24
+ promptHandling: 0.20,
25
+ },
26
+ },
27
+ output: {
28
+ directory: './agentready-report',
29
+ formats: ['html', 'json'],
30
+ includeScreenshots: true,
31
+ },
32
+ };
33
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE;QACL,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE,IAAI;KACvB;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,EAAc;QACxB,SAAS,EAAE,EAA8D;KAC1E;IACD,OAAO,EAAE;QACP,OAAO,EAAE;YACP,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;YACd,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI;SACrB;KACF;IACD,MAAM,EAAE;QACN,SAAS,EAAE,qBAAqB;QAChC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAa;QACrC,kBAAkB,EAAE,IAAI;KACzB;CACO,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Configuration Module
3
+ */
4
+ export { loadConfig, loadConfigFromFile } from './loader.js';
5
+ export { configSchema } from './schema.js';
6
+ export type { Config, CrawlConfig, RulesConfig, ScoringConfig, OutputConfig } from './schema.js';
7
+ export { defaultConfig } from './defaults.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Configuration Module
3
+ */
4
+ export { loadConfig, loadConfigFromFile } from './loader.js';
5
+ export { configSchema } from './schema.js';
6
+ export { defaultConfig } from './defaults.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Configuration Loader
3
+ *
4
+ * Uses cosmiconfig to discover and load configuration from:
5
+ * - .agentreadyrc.json
6
+ * - .agentreadyrc.yml
7
+ * - agentready.config.js
8
+ * - package.json "agentready" field
9
+ */
10
+ import type { Config } from './schema.js';
11
+ /**
12
+ * Load configuration from the filesystem and merge with overrides.
13
+ *
14
+ * @param overrides - Partial config to merge on top of loaded config
15
+ * @param searchFrom - Directory to start searching from (defaults to cwd)
16
+ * @returns Validated and merged configuration
17
+ */
18
+ export declare function loadConfig(overrides?: Partial<Config>, searchFrom?: string): Promise<Config>;
19
+ /**
20
+ * Load configuration from a specific file path.
21
+ */
22
+ export declare function loadConfigFromFile(filePath: string): Promise<Config>;
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Configuration Loader
3
+ *
4
+ * Uses cosmiconfig to discover and load configuration from:
5
+ * - .agentreadyrc.json
6
+ * - .agentreadyrc.yml
7
+ * - agentready.config.js
8
+ * - package.json "agentready" field
9
+ */
10
+ import { cosmiconfig } from 'cosmiconfig';
11
+ import { configSchema } from './schema.js';
12
+ const MODULE_NAME = 'agentready';
13
+ const explorer = cosmiconfig(MODULE_NAME, {
14
+ searchPlaces: [
15
+ `.${MODULE_NAME}rc.json`,
16
+ `.${MODULE_NAME}rc.yml`,
17
+ `.${MODULE_NAME}rc.yaml`,
18
+ `${MODULE_NAME}.config.js`,
19
+ `${MODULE_NAME}.config.mjs`,
20
+ `package.json`,
21
+ ],
22
+ });
23
+ /**
24
+ * Load configuration from the filesystem and merge with overrides.
25
+ *
26
+ * @param overrides - Partial config to merge on top of loaded config
27
+ * @param searchFrom - Directory to start searching from (defaults to cwd)
28
+ * @returns Validated and merged configuration
29
+ */
30
+ export async function loadConfig(overrides, searchFrom) {
31
+ let fileConfig = {};
32
+ try {
33
+ const result = await explorer.search(searchFrom);
34
+ if (result && !result.isEmpty) {
35
+ fileConfig = result.config;
36
+ }
37
+ }
38
+ catch {
39
+ // If config file is invalid or missing, use defaults
40
+ }
41
+ // Merge file config with overrides (overrides take precedence)
42
+ const merged = deepMerge(fileConfig, overrides ?? {});
43
+ // Validate and apply defaults via Zod
44
+ const parsed = configSchema.safeParse(merged);
45
+ if (!parsed.success) {
46
+ const errors = parsed.error.issues
47
+ .map((issue) => ` ${issue.path.join('.')}: ${issue.message}`)
48
+ .join('\n');
49
+ throw new Error(`Invalid configuration:\n${errors}`);
50
+ }
51
+ return parsed.data;
52
+ }
53
+ /**
54
+ * Load configuration from a specific file path.
55
+ */
56
+ export async function loadConfigFromFile(filePath) {
57
+ const result = await explorer.load(filePath);
58
+ if (!result || result.isEmpty) {
59
+ return configSchema.parse({});
60
+ }
61
+ const parsed = configSchema.safeParse(result.config);
62
+ if (!parsed.success) {
63
+ const errors = parsed.error.issues
64
+ .map((issue) => ` ${issue.path.join('.')}: ${issue.message}`)
65
+ .join('\n');
66
+ throw new Error(`Invalid configuration in ${filePath}:\n${errors}`);
67
+ }
68
+ return parsed.data;
69
+ }
70
+ /**
71
+ * Deep merge two objects. Source values override target values.
72
+ */
73
+ function deepMerge(target, source) {
74
+ const result = { ...target };
75
+ for (const key of Object.keys(source)) {
76
+ const sourceVal = source[key];
77
+ const targetVal = result[key];
78
+ if (isPlainObject(sourceVal) &&
79
+ isPlainObject(targetVal)) {
80
+ result[key] = deepMerge(targetVal, sourceVal);
81
+ }
82
+ else if (sourceVal !== undefined) {
83
+ result[key] = sourceVal;
84
+ }
85
+ }
86
+ return result;
87
+ }
88
+ function isPlainObject(value) {
89
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
90
+ }
91
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Configuration Schema
3
+ *
4
+ * Zod schema for validating configuration files.
5
+ */
6
+ import { z } from 'zod';
7
+ export declare const crawlSchema: z.ZodObject<{
8
+ maxPages: z.ZodDefault<z.ZodNumber>;
9
+ maxDepth: z.ZodDefault<z.ZodNumber>;
10
+ timeout: z.ZodDefault<z.ZodNumber>;
11
+ respectRobotsTxt: z.ZodDefault<z.ZodBoolean>;
12
+ }, "strict", z.ZodTypeAny, {
13
+ timeout: number;
14
+ maxPages: number;
15
+ maxDepth: number;
16
+ respectRobotsTxt: boolean;
17
+ }, {
18
+ timeout?: number | undefined;
19
+ maxPages?: number | undefined;
20
+ maxDepth?: number | undefined;
21
+ respectRobotsTxt?: boolean | undefined;
22
+ }>;
23
+ export declare const ruleOverrideSchema: z.ZodObject<{
24
+ severity: z.ZodOptional<z.ZodEnum<["critical", "warning", "info"]>>;
25
+ maxScore: z.ZodOptional<z.ZodNumber>;
26
+ }, "strip", z.ZodTypeAny, {
27
+ severity?: "critical" | "warning" | "info" | undefined;
28
+ maxScore?: number | undefined;
29
+ }, {
30
+ severity?: "critical" | "warning" | "info" | undefined;
31
+ maxScore?: number | undefined;
32
+ }>;
33
+ export declare const rulesSchema: z.ZodObject<{
34
+ disabled: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
35
+ overrides: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
36
+ severity: z.ZodOptional<z.ZodEnum<["critical", "warning", "info"]>>;
37
+ maxScore: z.ZodOptional<z.ZodNumber>;
38
+ }, "strip", z.ZodTypeAny, {
39
+ severity?: "critical" | "warning" | "info" | undefined;
40
+ maxScore?: number | undefined;
41
+ }, {
42
+ severity?: "critical" | "warning" | "info" | undefined;
43
+ maxScore?: number | undefined;
44
+ }>>>;
45
+ }, "strict", z.ZodTypeAny, {
46
+ disabled: string[];
47
+ overrides: Record<string, {
48
+ severity?: "critical" | "warning" | "info" | undefined;
49
+ maxScore?: number | undefined;
50
+ }>;
51
+ }, {
52
+ disabled?: string[] | undefined;
53
+ overrides?: Record<string, {
54
+ severity?: "critical" | "warning" | "info" | undefined;
55
+ maxScore?: number | undefined;
56
+ }> | undefined;
57
+ }>;
58
+ export declare const scoringWeightsSchema: z.ZodObject<{
59
+ implementation: z.ZodDefault<z.ZodNumber>;
60
+ coverage: z.ZodDefault<z.ZodNumber>;
61
+ security: z.ZodDefault<z.ZodNumber>;
62
+ bestPractices: z.ZodDefault<z.ZodNumber>;
63
+ promptHandling: z.ZodDefault<z.ZodNumber>;
64
+ }, "strict", z.ZodTypeAny, {
65
+ implementation: number;
66
+ security: number;
67
+ coverage: number;
68
+ bestPractices: number;
69
+ promptHandling: number;
70
+ }, {
71
+ implementation?: number | undefined;
72
+ security?: number | undefined;
73
+ coverage?: number | undefined;
74
+ bestPractices?: number | undefined;
75
+ promptHandling?: number | undefined;
76
+ }>;
77
+ export declare const scoringSchema: z.ZodObject<{
78
+ weights: z.ZodDefault<z.ZodObject<{
79
+ implementation: z.ZodDefault<z.ZodNumber>;
80
+ coverage: z.ZodDefault<z.ZodNumber>;
81
+ security: z.ZodDefault<z.ZodNumber>;
82
+ bestPractices: z.ZodDefault<z.ZodNumber>;
83
+ promptHandling: z.ZodDefault<z.ZodNumber>;
84
+ }, "strict", z.ZodTypeAny, {
85
+ implementation: number;
86
+ security: number;
87
+ coverage: number;
88
+ bestPractices: number;
89
+ promptHandling: number;
90
+ }, {
91
+ implementation?: number | undefined;
92
+ security?: number | undefined;
93
+ coverage?: number | undefined;
94
+ bestPractices?: number | undefined;
95
+ promptHandling?: number | undefined;
96
+ }>>;
97
+ }, "strict", z.ZodTypeAny, {
98
+ weights: {
99
+ implementation: number;
100
+ security: number;
101
+ coverage: number;
102
+ bestPractices: number;
103
+ promptHandling: number;
104
+ };
105
+ }, {
106
+ weights?: {
107
+ implementation?: number | undefined;
108
+ security?: number | undefined;
109
+ coverage?: number | undefined;
110
+ bestPractices?: number | undefined;
111
+ promptHandling?: number | undefined;
112
+ } | undefined;
113
+ }>;
114
+ export declare const outputSchema: z.ZodObject<{
115
+ directory: z.ZodDefault<z.ZodString>;
116
+ formats: z.ZodDefault<z.ZodArray<z.ZodEnum<["html", "json", "markdown"]>, "many">>;
117
+ includeScreenshots: z.ZodDefault<z.ZodBoolean>;
118
+ }, "strict", z.ZodTypeAny, {
119
+ directory: string;
120
+ formats: ("html" | "json" | "markdown")[];
121
+ includeScreenshots: boolean;
122
+ }, {
123
+ directory?: string | undefined;
124
+ formats?: ("html" | "json" | "markdown")[] | undefined;
125
+ includeScreenshots?: boolean | undefined;
126
+ }>;
127
+ export declare const configSchema: z.ZodObject<{
128
+ crawl: z.ZodDefault<z.ZodObject<{
129
+ maxPages: z.ZodDefault<z.ZodNumber>;
130
+ maxDepth: z.ZodDefault<z.ZodNumber>;
131
+ timeout: z.ZodDefault<z.ZodNumber>;
132
+ respectRobotsTxt: z.ZodDefault<z.ZodBoolean>;
133
+ }, "strict", z.ZodTypeAny, {
134
+ timeout: number;
135
+ maxPages: number;
136
+ maxDepth: number;
137
+ respectRobotsTxt: boolean;
138
+ }, {
139
+ timeout?: number | undefined;
140
+ maxPages?: number | undefined;
141
+ maxDepth?: number | undefined;
142
+ respectRobotsTxt?: boolean | undefined;
143
+ }>>;
144
+ rules: z.ZodDefault<z.ZodObject<{
145
+ disabled: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
146
+ overrides: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
147
+ severity: z.ZodOptional<z.ZodEnum<["critical", "warning", "info"]>>;
148
+ maxScore: z.ZodOptional<z.ZodNumber>;
149
+ }, "strip", z.ZodTypeAny, {
150
+ severity?: "critical" | "warning" | "info" | undefined;
151
+ maxScore?: number | undefined;
152
+ }, {
153
+ severity?: "critical" | "warning" | "info" | undefined;
154
+ maxScore?: number | undefined;
155
+ }>>>;
156
+ }, "strict", z.ZodTypeAny, {
157
+ disabled: string[];
158
+ overrides: Record<string, {
159
+ severity?: "critical" | "warning" | "info" | undefined;
160
+ maxScore?: number | undefined;
161
+ }>;
162
+ }, {
163
+ disabled?: string[] | undefined;
164
+ overrides?: Record<string, {
165
+ severity?: "critical" | "warning" | "info" | undefined;
166
+ maxScore?: number | undefined;
167
+ }> | undefined;
168
+ }>>;
169
+ scoring: z.ZodDefault<z.ZodObject<{
170
+ weights: z.ZodDefault<z.ZodObject<{
171
+ implementation: z.ZodDefault<z.ZodNumber>;
172
+ coverage: z.ZodDefault<z.ZodNumber>;
173
+ security: z.ZodDefault<z.ZodNumber>;
174
+ bestPractices: z.ZodDefault<z.ZodNumber>;
175
+ promptHandling: z.ZodDefault<z.ZodNumber>;
176
+ }, "strict", z.ZodTypeAny, {
177
+ implementation: number;
178
+ security: number;
179
+ coverage: number;
180
+ bestPractices: number;
181
+ promptHandling: number;
182
+ }, {
183
+ implementation?: number | undefined;
184
+ security?: number | undefined;
185
+ coverage?: number | undefined;
186
+ bestPractices?: number | undefined;
187
+ promptHandling?: number | undefined;
188
+ }>>;
189
+ }, "strict", z.ZodTypeAny, {
190
+ weights: {
191
+ implementation: number;
192
+ security: number;
193
+ coverage: number;
194
+ bestPractices: number;
195
+ promptHandling: number;
196
+ };
197
+ }, {
198
+ weights?: {
199
+ implementation?: number | undefined;
200
+ security?: number | undefined;
201
+ coverage?: number | undefined;
202
+ bestPractices?: number | undefined;
203
+ promptHandling?: number | undefined;
204
+ } | undefined;
205
+ }>>;
206
+ output: z.ZodDefault<z.ZodObject<{
207
+ directory: z.ZodDefault<z.ZodString>;
208
+ formats: z.ZodDefault<z.ZodArray<z.ZodEnum<["html", "json", "markdown"]>, "many">>;
209
+ includeScreenshots: z.ZodDefault<z.ZodBoolean>;
210
+ }, "strict", z.ZodTypeAny, {
211
+ directory: string;
212
+ formats: ("html" | "json" | "markdown")[];
213
+ includeScreenshots: boolean;
214
+ }, {
215
+ directory?: string | undefined;
216
+ formats?: ("html" | "json" | "markdown")[] | undefined;
217
+ includeScreenshots?: boolean | undefined;
218
+ }>>;
219
+ }, "strict", z.ZodTypeAny, {
220
+ scoring: {
221
+ weights: {
222
+ implementation: number;
223
+ security: number;
224
+ coverage: number;
225
+ bestPractices: number;
226
+ promptHandling: number;
227
+ };
228
+ };
229
+ output: {
230
+ directory: string;
231
+ formats: ("html" | "json" | "markdown")[];
232
+ includeScreenshots: boolean;
233
+ };
234
+ crawl: {
235
+ timeout: number;
236
+ maxPages: number;
237
+ maxDepth: number;
238
+ respectRobotsTxt: boolean;
239
+ };
240
+ rules: {
241
+ disabled: string[];
242
+ overrides: Record<string, {
243
+ severity?: "critical" | "warning" | "info" | undefined;
244
+ maxScore?: number | undefined;
245
+ }>;
246
+ };
247
+ }, {
248
+ scoring?: {
249
+ weights?: {
250
+ implementation?: number | undefined;
251
+ security?: number | undefined;
252
+ coverage?: number | undefined;
253
+ bestPractices?: number | undefined;
254
+ promptHandling?: number | undefined;
255
+ } | undefined;
256
+ } | undefined;
257
+ output?: {
258
+ directory?: string | undefined;
259
+ formats?: ("html" | "json" | "markdown")[] | undefined;
260
+ includeScreenshots?: boolean | undefined;
261
+ } | undefined;
262
+ crawl?: {
263
+ timeout?: number | undefined;
264
+ maxPages?: number | undefined;
265
+ maxDepth?: number | undefined;
266
+ respectRobotsTxt?: boolean | undefined;
267
+ } | undefined;
268
+ rules?: {
269
+ disabled?: string[] | undefined;
270
+ overrides?: Record<string, {
271
+ severity?: "critical" | "warning" | "info" | undefined;
272
+ maxScore?: number | undefined;
273
+ }> | undefined;
274
+ } | undefined;
275
+ }>;
276
+ export type Config = z.infer<typeof configSchema>;
277
+ export type CrawlConfig = z.infer<typeof crawlSchema>;
278
+ export type RulesConfig = z.infer<typeof rulesSchema>;
279
+ export type ScoringConfig = z.infer<typeof scoringSchema>;
280
+ export type OutputConfig = z.infer<typeof outputSchema>;