webmcp-cli 1.0.0 → 1.2.1

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 (347) hide show
  1. package/dist/agent/features/agent-simulator.d.ts +67 -0
  2. package/dist/agent/features/agent-simulator.js +368 -0
  3. package/dist/agent/features/agent-simulator.js.map +1 -0
  4. package/dist/agent/features/index.d.ts +8 -0
  5. package/dist/agent/features/index.js +9 -0
  6. package/dist/agent/features/index.js.map +1 -0
  7. package/dist/agent/features/simulation-judge.d.ts +78 -0
  8. package/dist/agent/features/simulation-judge.js +276 -0
  9. package/dist/agent/features/simulation-judge.js.map +1 -0
  10. package/dist/agent/features/test-case-generator.d.ts +35 -0
  11. package/dist/agent/features/test-case-generator.js +257 -0
  12. package/dist/agent/features/test-case-generator.js.map +1 -0
  13. package/dist/agent/index.d.ts +7 -0
  14. package/dist/agent/index.js +10 -0
  15. package/dist/agent/index.js.map +1 -0
  16. package/dist/agent/llm-client.d.ts +76 -0
  17. package/dist/agent/llm-client.js +198 -0
  18. package/dist/agent/llm-client.js.map +1 -0
  19. package/dist/audit/run-single-page-audit.d.ts +41 -0
  20. package/dist/audit/run-single-page-audit.js +103 -0
  21. package/dist/audit/run-single-page-audit.js.map +1 -0
  22. package/dist/bin/webmcp.d.ts +5 -0
  23. package/dist/bin/webmcp.js +14 -0
  24. package/dist/bin/webmcp.js.map +1 -0
  25. package/dist/browser/audit-runner.d.ts +30 -0
  26. package/dist/browser/audit-runner.js +77 -0
  27. package/dist/browser/audit-runner.js.map +1 -0
  28. package/dist/browser/index.d.ts +6 -0
  29. package/dist/browser/index.js +7 -0
  30. package/dist/browser/index.js.map +1 -0
  31. package/dist/browser/interceptor.d.ts +68 -0
  32. package/dist/browser/interceptor.js +257 -0
  33. package/dist/browser/interceptor.js.map +1 -0
  34. package/dist/browser/playwright.d.ts +98 -0
  35. package/dist/browser/playwright.js +158 -0
  36. package/dist/browser/playwright.js.map +1 -0
  37. package/dist/cli/commands/audit.d.ts +12 -0
  38. package/dist/cli/commands/audit.js +349 -0
  39. package/dist/cli/commands/audit.js.map +1 -0
  40. package/dist/cli/commands/interactive.d.ts +10 -0
  41. package/dist/cli/commands/interactive.js +34 -0
  42. package/dist/cli/commands/interactive.js.map +1 -0
  43. package/dist/cli/index.d.ts +17 -0
  44. package/dist/cli/index.js +84 -0
  45. package/dist/cli/index.js.map +1 -0
  46. package/dist/cli/options/parse-audit-options.d.ts +12 -0
  47. package/dist/cli/options/parse-audit-options.js +64 -0
  48. package/dist/cli/options/parse-audit-options.js.map +1 -0
  49. package/dist/core/constants.d.ts +102 -0
  50. package/dist/core/constants.js +214 -0
  51. package/dist/core/constants.js.map +1 -0
  52. package/dist/core/types/audit.d.ts +260 -0
  53. package/dist/core/types/audit.js +5 -0
  54. package/dist/core/types/audit.js.map +1 -0
  55. package/dist/core/types/index.d.ts +6 -0
  56. package/dist/core/types/index.js +7 -0
  57. package/dist/core/types/index.js.map +1 -0
  58. package/dist/core/types/rule.d.ts +190 -0
  59. package/dist/core/types/rule.js +26 -0
  60. package/dist/core/types/rule.js.map +1 -0
  61. package/dist/core/types/tool.d.ts +312 -0
  62. package/dist/core/types/tool.js +6 -0
  63. package/dist/core/types/tool.js.map +1 -0
  64. package/dist/detection/declarative.d.ts +27 -0
  65. package/dist/detection/declarative.js +343 -0
  66. package/dist/detection/declarative.js.map +1 -0
  67. package/dist/detection/imperative.d.ts +38 -0
  68. package/dist/detection/imperative.js +99 -0
  69. package/dist/detection/imperative.js.map +1 -0
  70. package/dist/detection/index.d.ts +5 -0
  71. package/dist/detection/index.js +6 -0
  72. package/dist/detection/index.js.map +1 -0
  73. package/dist/index.d.ts +12 -0
  74. package/dist/index.js +19 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/llm/advice-service.d.ts +38 -0
  77. package/dist/llm/advice-service.js +243 -0
  78. package/dist/llm/advice-service.js.map +1 -0
  79. package/dist/llm/evaluator.d.ts +89 -0
  80. package/dist/llm/evaluator.js +274 -0
  81. package/dist/llm/evaluator.js.map +1 -0
  82. package/dist/llm/index.d.ts +11 -0
  83. package/dist/llm/index.js +15 -0
  84. package/dist/llm/index.js.map +1 -0
  85. package/dist/llm/json-response.d.ts +12 -0
  86. package/dist/llm/json-response.js +67 -0
  87. package/dist/llm/json-response.js.map +1 -0
  88. package/dist/llm/providers/mock.d.ts +29 -0
  89. package/dist/llm/providers/mock.js +324 -0
  90. package/dist/llm/providers/mock.js.map +1 -0
  91. package/dist/llm/providers/openrouter.d.ts +53 -0
  92. package/dist/llm/providers/openrouter.js +321 -0
  93. package/dist/llm/providers/openrouter.js.map +1 -0
  94. package/dist/llm/request-cache.d.ts +28 -0
  95. package/dist/llm/request-cache.js +99 -0
  96. package/dist/llm/request-cache.js.map +1 -0
  97. package/dist/llm/types.d.ts +233 -0
  98. package/dist/llm/types.js +7 -0
  99. package/dist/llm/types.js.map +1 -0
  100. package/dist/rules/best-practices/BP-001.d.ts +11 -0
  101. package/dist/rules/best-practices/BP-001.js +56 -0
  102. package/dist/rules/best-practices/BP-001.js.map +1 -0
  103. package/dist/rules/best-practices/BP-002.d.ts +11 -0
  104. package/dist/rules/best-practices/BP-002.js +63 -0
  105. package/dist/rules/best-practices/BP-002.js.map +1 -0
  106. package/dist/rules/best-practices/BP-003.d.ts +11 -0
  107. package/dist/rules/best-practices/BP-003.js +68 -0
  108. package/dist/rules/best-practices/BP-003.js.map +1 -0
  109. package/dist/rules/coverage/COV-001.d.ts +8 -0
  110. package/dist/rules/coverage/COV-001.js +51 -0
  111. package/dist/rules/coverage/COV-001.js.map +1 -0
  112. package/dist/rules/description/DESC-003.d.ts +13 -0
  113. package/dist/rules/description/DESC-003.js +96 -0
  114. package/dist/rules/description/DESC-003.js.map +1 -0
  115. package/dist/rules/description/DESC-004.d.ts +8 -0
  116. package/dist/rules/description/DESC-004.js +61 -0
  117. package/dist/rules/description/DESC-004.js.map +1 -0
  118. package/dist/rules/description/DESC-005.d.ts +12 -0
  119. package/dist/rules/description/DESC-005.js +70 -0
  120. package/dist/rules/description/DESC-005.js.map +1 -0
  121. package/dist/rules/description/index.d.ts +4 -0
  122. package/dist/rules/description/index.js +5 -0
  123. package/dist/rules/description/index.js.map +1 -0
  124. package/dist/rules/implementation/IMP-001.d.ts +10 -0
  125. package/dist/rules/implementation/IMP-001.js +36 -0
  126. package/dist/rules/implementation/IMP-001.js.map +1 -0
  127. package/dist/rules/implementation/IMP-003.d.ts +9 -0
  128. package/dist/rules/implementation/IMP-003.js +45 -0
  129. package/dist/rules/implementation/IMP-003.js.map +1 -0
  130. package/dist/rules/implementation/IMP-004.d.ts +9 -0
  131. package/dist/rules/implementation/IMP-004.js +48 -0
  132. package/dist/rules/implementation/IMP-004.js.map +1 -0
  133. package/dist/rules/implementation/IMP-005.d.ts +9 -0
  134. package/dist/rules/implementation/IMP-005.js +54 -0
  135. package/dist/rules/implementation/IMP-005.js.map +1 -0
  136. package/dist/rules/implementation/IMP-007.d.ts +8 -0
  137. package/dist/rules/implementation/IMP-007.js +79 -0
  138. package/dist/rules/implementation/IMP-007.js.map +1 -0
  139. package/dist/rules/implementation/IMP-013.d.ts +9 -0
  140. package/dist/rules/implementation/IMP-013.js +55 -0
  141. package/dist/rules/implementation/IMP-013.js.map +1 -0
  142. package/dist/rules/implementation/index.d.ts +9 -0
  143. package/dist/rules/implementation/index.js +10 -0
  144. package/dist/rules/implementation/index.js.map +1 -0
  145. package/dist/rules/index.d.ts +51 -0
  146. package/dist/rules/index.js +100 -0
  147. package/dist/rules/index.js.map +1 -0
  148. package/dist/rules/llm/LLM-001.d.ts +14 -0
  149. package/dist/rules/llm/LLM-001.js +78 -0
  150. package/dist/rules/llm/LLM-001.js.map +1 -0
  151. package/dist/rules/llm/LLM-002.d.ts +14 -0
  152. package/dist/rules/llm/LLM-002.js +77 -0
  153. package/dist/rules/llm/LLM-002.js.map +1 -0
  154. package/dist/rules/llm/LLM-003.d.ts +16 -0
  155. package/dist/rules/llm/LLM-003.js +82 -0
  156. package/dist/rules/llm/LLM-003.js.map +1 -0
  157. package/dist/rules/llm/LLM-004.d.ts +14 -0
  158. package/dist/rules/llm/LLM-004.js +87 -0
  159. package/dist/rules/llm/LLM-004.js.map +1 -0
  160. package/dist/rules/llm/LLM-005.d.ts +16 -0
  161. package/dist/rules/llm/LLM-005.js +105 -0
  162. package/dist/rules/llm/LLM-005.js.map +1 -0
  163. package/dist/rules/llm/index.d.ts +10 -0
  164. package/dist/rules/llm/index.js +11 -0
  165. package/dist/rules/llm/index.js.map +1 -0
  166. package/dist/rules/runner.d.ts +54 -0
  167. package/dist/rules/runner.js +138 -0
  168. package/dist/rules/runner.js.map +1 -0
  169. package/dist/rules/schema/SCHEMA-001.d.ts +9 -0
  170. package/dist/rules/schema/SCHEMA-001.js +57 -0
  171. package/dist/rules/schema/SCHEMA-001.js.map +1 -0
  172. package/dist/rules/schema/SCHEMA-002.d.ts +9 -0
  173. package/dist/rules/schema/SCHEMA-002.js +59 -0
  174. package/dist/rules/schema/SCHEMA-002.js.map +1 -0
  175. package/dist/rules/schema/SCHEMA-003.d.ts +10 -0
  176. package/dist/rules/schema/SCHEMA-003.js +66 -0
  177. package/dist/rules/schema/SCHEMA-003.js.map +1 -0
  178. package/dist/rules/schema/SCHEMA-011.d.ts +10 -0
  179. package/dist/rules/schema/SCHEMA-011.js +62 -0
  180. package/dist/rules/schema/SCHEMA-011.js.map +1 -0
  181. package/dist/rules/security/SEC-001.d.ts +12 -0
  182. package/dist/rules/security/SEC-001.js +66 -0
  183. package/dist/rules/security/SEC-001.js.map +1 -0
  184. package/dist/rules/utils/keywords.d.ts +35 -0
  185. package/dist/rules/utils/keywords.js +100 -0
  186. package/dist/rules/utils/keywords.js.map +1 -0
  187. package/dist/scoring/calculator.d.ts +27 -0
  188. package/dist/scoring/calculator.js +194 -0
  189. package/dist/scoring/calculator.js.map +1 -0
  190. package/dist/scoring/grades.d.ts +34 -0
  191. package/dist/scoring/grades.js +167 -0
  192. package/dist/scoring/grades.js.map +1 -0
  193. package/dist/scoring/index.d.ts +5 -0
  194. package/dist/scoring/index.js +6 -0
  195. package/dist/scoring/index.js.map +1 -0
  196. package/dist/ui/banner.d.ts +21 -0
  197. package/dist/ui/banner.js +60 -0
  198. package/dist/ui/banner.js.map +1 -0
  199. package/dist/ui/design-tokens.d.ts +23 -0
  200. package/dist/ui/design-tokens.js +58 -0
  201. package/dist/ui/design-tokens.js.map +1 -0
  202. package/dist/ui/findings.d.ts +23 -0
  203. package/dist/ui/findings.js +190 -0
  204. package/dist/ui/findings.js.map +1 -0
  205. package/dist/ui/index.d.ts +9 -0
  206. package/dist/ui/index.js +10 -0
  207. package/dist/ui/index.js.map +1 -0
  208. package/dist/ui/ink/App.d.ts +14 -0
  209. package/dist/ui/ink/App.js +113 -0
  210. package/dist/ui/ink/App.js.map +1 -0
  211. package/dist/ui/ink/FullScreenLayout.d.ts +16 -0
  212. package/dist/ui/ink/FullScreenLayout.js +29 -0
  213. package/dist/ui/ink/FullScreenLayout.js.map +1 -0
  214. package/dist/ui/ink/InteractiveApp.d.ts +28 -0
  215. package/dist/ui/ink/InteractiveApp.js +229 -0
  216. package/dist/ui/ink/InteractiveApp.js.map +1 -0
  217. package/dist/ui/ink/RealAuditApp.d.ts +19 -0
  218. package/dist/ui/ink/RealAuditApp.js +170 -0
  219. package/dist/ui/ink/RealAuditApp.js.map +1 -0
  220. package/dist/ui/ink/components/AnimatedProgressBar.d.ts +20 -0
  221. package/dist/ui/ink/components/AnimatedProgressBar.js +46 -0
  222. package/dist/ui/ink/components/AnimatedProgressBar.js.map +1 -0
  223. package/dist/ui/ink/components/AsciiLogo.d.ts +12 -0
  224. package/dist/ui/ink/components/AsciiLogo.js +35 -0
  225. package/dist/ui/ink/components/AsciiLogo.js.map +1 -0
  226. package/dist/ui/ink/components/CategoryBars.d.ts +18 -0
  227. package/dist/ui/ink/components/CategoryBars.js +18 -0
  228. package/dist/ui/ink/components/CategoryBars.js.map +1 -0
  229. package/dist/ui/ink/components/FindingsTable.d.ts +18 -0
  230. package/dist/ui/ink/components/FindingsTable.js +19 -0
  231. package/dist/ui/ink/components/FindingsTable.js.map +1 -0
  232. package/dist/ui/ink/components/Footer.d.ts +15 -0
  233. package/dist/ui/ink/components/Footer.js +20 -0
  234. package/dist/ui/ink/components/Footer.js.map +1 -0
  235. package/dist/ui/ink/components/Header.d.ts +11 -0
  236. package/dist/ui/ink/components/Header.js +12 -0
  237. package/dist/ui/ink/components/Header.js.map +1 -0
  238. package/dist/ui/ink/components/LinkList.d.ts +17 -0
  239. package/dist/ui/ink/components/LinkList.js +44 -0
  240. package/dist/ui/ink/components/LinkList.js.map +1 -0
  241. package/dist/ui/ink/components/Navigation.d.ts +26 -0
  242. package/dist/ui/ink/components/Navigation.js +62 -0
  243. package/dist/ui/ink/components/Navigation.js.map +1 -0
  244. package/dist/ui/ink/components/ProgressBar.d.ts +15 -0
  245. package/dist/ui/ink/components/ProgressBar.js +14 -0
  246. package/dist/ui/ink/components/ProgressBar.js.map +1 -0
  247. package/dist/ui/ink/components/ScoreCard.d.ts +30 -0
  248. package/dist/ui/ink/components/ScoreCard.js +26 -0
  249. package/dist/ui/ink/components/ScoreCard.js.map +1 -0
  250. package/dist/ui/ink/components/SimulationResults.d.ts +33 -0
  251. package/dist/ui/ink/components/SimulationResults.js +23 -0
  252. package/dist/ui/ink/components/SimulationResults.js.map +1 -0
  253. package/dist/ui/ink/components/Spinner.d.ts +11 -0
  254. package/dist/ui/ink/components/Spinner.js +12 -0
  255. package/dist/ui/ink/components/Spinner.js.map +1 -0
  256. package/dist/ui/ink/components/ToolCard.d.ts +23 -0
  257. package/dist/ui/ink/components/ToolCard.js +20 -0
  258. package/dist/ui/ink/components/ToolCard.js.map +1 -0
  259. package/dist/ui/ink/components/shared/Badge.d.ts +21 -0
  260. package/dist/ui/ink/components/shared/Badge.js +39 -0
  261. package/dist/ui/ink/components/shared/Badge.js.map +1 -0
  262. package/dist/ui/ink/components/shared/Card.d.ts +18 -0
  263. package/dist/ui/ink/components/shared/Card.js +11 -0
  264. package/dist/ui/ink/components/shared/Card.js.map +1 -0
  265. package/dist/ui/ink/components/shared/HelpOverlay.d.ts +10 -0
  266. package/dist/ui/ink/components/shared/HelpOverlay.js +28 -0
  267. package/dist/ui/ink/components/shared/HelpOverlay.js.map +1 -0
  268. package/dist/ui/ink/components/shared/LoadingWithTimeout.d.ts +11 -0
  269. package/dist/ui/ink/components/shared/LoadingWithTimeout.js +21 -0
  270. package/dist/ui/ink/components/shared/LoadingWithTimeout.js.map +1 -0
  271. package/dist/ui/ink/components/shared/Menu.d.ts +23 -0
  272. package/dist/ui/ink/components/shared/Menu.js +43 -0
  273. package/dist/ui/ink/components/shared/Menu.js.map +1 -0
  274. package/dist/ui/ink/components/shared/Table.d.ts +23 -0
  275. package/dist/ui/ink/components/shared/Table.js +40 -0
  276. package/dist/ui/ink/components/shared/Table.js.map +1 -0
  277. package/dist/ui/ink/components/views/CrawlingView.d.ts +12 -0
  278. package/dist/ui/ink/components/views/CrawlingView.js +34 -0
  279. package/dist/ui/ink/components/views/CrawlingView.js.map +1 -0
  280. package/dist/ui/ink/components/views/DashboardView.d.ts +21 -0
  281. package/dist/ui/ink/components/views/DashboardView.js +51 -0
  282. package/dist/ui/ink/components/views/DashboardView.js.map +1 -0
  283. package/dist/ui/ink/components/views/FindingDetailView.d.ts +16 -0
  284. package/dist/ui/ink/components/views/FindingDetailView.js +34 -0
  285. package/dist/ui/ink/components/views/FindingDetailView.js.map +1 -0
  286. package/dist/ui/ink/components/views/FindingsView.d.ts +16 -0
  287. package/dist/ui/ink/components/views/FindingsView.js +79 -0
  288. package/dist/ui/ink/components/views/FindingsView.js.map +1 -0
  289. package/dist/ui/ink/components/views/OnboardingView.d.ts +12 -0
  290. package/dist/ui/ink/components/views/OnboardingView.js +40 -0
  291. package/dist/ui/ink/components/views/OnboardingView.js.map +1 -0
  292. package/dist/ui/ink/components/views/SimulationView.d.ts +17 -0
  293. package/dist/ui/ink/components/views/SimulationView.js +53 -0
  294. package/dist/ui/ink/components/views/SimulationView.js.map +1 -0
  295. package/dist/ui/ink/components/views/TestCaseDetailView.d.ts +11 -0
  296. package/dist/ui/ink/components/views/TestCaseDetailView.js +53 -0
  297. package/dist/ui/ink/components/views/TestCaseDetailView.js.map +1 -0
  298. package/dist/ui/ink/components/views/ToolDetailView.d.ts +15 -0
  299. package/dist/ui/ink/components/views/ToolDetailView.js +25 -0
  300. package/dist/ui/ink/components/views/ToolDetailView.js.map +1 -0
  301. package/dist/ui/ink/components/views/ToolsView.d.ts +15 -0
  302. package/dist/ui/ink/components/views/ToolsView.js +43 -0
  303. package/dist/ui/ink/components/views/ToolsView.js.map +1 -0
  304. package/dist/ui/ink/demo.d.ts +6 -0
  305. package/dist/ui/ink/demo.js +254 -0
  306. package/dist/ui/ink/demo.js.map +1 -0
  307. package/dist/ui/ink/hooks/useAnimation.d.ts +29 -0
  308. package/dist/ui/ink/hooks/useAnimation.js +89 -0
  309. package/dist/ui/ink/hooks/useAnimation.js.map +1 -0
  310. package/dist/ui/ink/hooks/useAudit.d.ts +69 -0
  311. package/dist/ui/ink/hooks/useAudit.js +99 -0
  312. package/dist/ui/ink/hooks/useAudit.js.map +1 -0
  313. package/dist/ui/ink/hooks/useCrawlAnimation.d.ts +19 -0
  314. package/dist/ui/ink/hooks/useCrawlAnimation.js +204 -0
  315. package/dist/ui/ink/hooks/useCrawlAnimation.js.map +1 -0
  316. package/dist/ui/ink/hooks/useKeyboardNav.d.ts +23 -0
  317. package/dist/ui/ink/hooks/useKeyboardNav.js +81 -0
  318. package/dist/ui/ink/hooks/useKeyboardNav.js.map +1 -0
  319. package/dist/ui/ink/hooks/useNavigation.d.ts +16 -0
  320. package/dist/ui/ink/hooks/useNavigation.js +42 -0
  321. package/dist/ui/ink/hooks/useNavigation.js.map +1 -0
  322. package/dist/ui/ink/hooks/useTerminalSize.d.ts +10 -0
  323. package/dist/ui/ink/hooks/useTerminalSize.js +29 -0
  324. package/dist/ui/ink/hooks/useTerminalSize.js.map +1 -0
  325. package/dist/ui/ink/index.d.ts +43 -0
  326. package/dist/ui/ink/index.js +50 -0
  327. package/dist/ui/ink/index.js.map +1 -0
  328. package/dist/ui/ink/render.d.ts +24 -0
  329. package/dist/ui/ink/render.js +14 -0
  330. package/dist/ui/ink/render.js.map +1 -0
  331. package/dist/ui/ink/theme.d.ts +37 -0
  332. package/dist/ui/ink/theme.js +38 -0
  333. package/dist/ui/ink/theme.js.map +1 -0
  334. package/dist/ui/ink/types.d.ts +77 -0
  335. package/dist/ui/ink/types.js +5 -0
  336. package/dist/ui/ink/types.js.map +1 -0
  337. package/dist/ui/score-display.d.ts +16 -0
  338. package/dist/ui/score-display.js +201 -0
  339. package/dist/ui/score-display.js.map +1 -0
  340. package/dist/ui/spinner.d.ts +45 -0
  341. package/dist/ui/spinner.js +112 -0
  342. package/dist/ui/spinner.js.map +1 -0
  343. package/dist/ui/utils.d.ts +13 -0
  344. package/dist/ui/utils.js +25 -0
  345. package/dist/ui/utils.js.map +1 -0
  346. package/package.json +61 -9
  347. package/index.js +0 -105
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Demo Script for Interactive TUI with Onboarding Flow
3
+ *
4
+ * Run with: npx tsx src/ui/ink/demo.tsx
5
+ */
6
+ import { render } from 'ink';
7
+ import { createElement, useState, useEffect, useCallback } from 'react';
8
+ import { InteractiveApp } from './InteractiveApp.js';
9
+ import { OnboardingView } from './components/views/OnboardingView.js';
10
+ import { CrawlingView } from './components/views/CrawlingView.js';
11
+ const VERSION = '0.1.0';
12
+ const demoConfig = {
13
+ maxPages: 5,
14
+ maxDepth: 2,
15
+ timeout: 30000,
16
+ outputDir: './reports',
17
+ format: 'both',
18
+ visible: false,
19
+ noSimulation: false,
20
+ ci: false,
21
+ minScore: 70,
22
+ promptsPerTool: 3,
23
+ maxRounds: 3,
24
+ maxCost: 1.0,
25
+ };
26
+ // Mock data for demo
27
+ const mockScore = {
28
+ total: 78,
29
+ grade: 'B',
30
+ categories: [
31
+ { id: 'implementation', name: 'Implementation', score: 40, maxScore: 45, percentage: 89 },
32
+ { id: 'description', name: 'Description', score: 25, maxScore: 35, percentage: 71 },
33
+ { id: 'schema', name: 'Schema', score: 13, maxScore: 20, percentage: 65 },
34
+ ],
35
+ issueCount: { critical: 1, warning: 3, info: 2 },
36
+ };
37
+ const mockTools = [
38
+ {
39
+ name: 'search-flights',
40
+ description: 'Search for available flights between two airports on a specific date',
41
+ source: 'imperative',
42
+ pageUrl: 'https://travel-demo.bandarra.me/',
43
+ inputSchema: {
44
+ type: 'object',
45
+ properties: {
46
+ origin: { type: 'string', description: 'Origin airport code (e.g., JFK)' },
47
+ destination: { type: 'string', description: 'Destination airport code' },
48
+ date: { type: 'string', description: 'Travel date in YYYY-MM-DD format' },
49
+ passengers: { type: 'number', description: 'Number of passengers' },
50
+ },
51
+ required: ['origin', 'destination', 'date'],
52
+ },
53
+ },
54
+ {
55
+ name: 'book-flight',
56
+ description: 'Book a selected flight for passengers',
57
+ source: 'imperative',
58
+ pageUrl: 'https://travel-demo.bandarra.me/',
59
+ inputSchema: {
60
+ type: 'object',
61
+ properties: {
62
+ flightId: { type: 'string', description: 'Flight ID to book' },
63
+ passengers: { type: 'array', description: 'List of passenger details' },
64
+ },
65
+ required: ['flightId', 'passengers'],
66
+ },
67
+ },
68
+ {
69
+ name: 'check-availability',
70
+ description: 'Check seat availability for a flight',
71
+ source: 'declarative',
72
+ pageUrl: 'https://travel-demo.bandarra.me/availability',
73
+ inputSchema: {
74
+ type: 'object',
75
+ properties: {
76
+ flightId: { type: 'string' },
77
+ },
78
+ },
79
+ },
80
+ ];
81
+ const mockFindings = [
82
+ {
83
+ ruleId: 'description-too-short',
84
+ severity: 'critical',
85
+ message: 'Tool description should be at least 20 characters for AI agents to understand usage',
86
+ tool: 'check-availability',
87
+ scoreImpact: 10,
88
+ fix: 'Add a detailed description that explains when and how the tool should be used.',
89
+ },
90
+ {
91
+ ruleId: 'schema-missing-descriptions',
92
+ severity: 'warning',
93
+ message: 'Input schema parameters should include descriptions',
94
+ tool: 'check-availability',
95
+ scoreImpact: 5,
96
+ fix: 'Add a description property to each parameter in the inputSchema.',
97
+ },
98
+ {
99
+ ruleId: 'tool-name-format',
100
+ severity: 'warning',
101
+ message: 'Tool name should use kebab-case format',
102
+ tool: 'searchFlights',
103
+ scoreImpact: 3,
104
+ fix: 'Rename the tool to use kebab-case: search-flights',
105
+ },
106
+ {
107
+ ruleId: 'schema-type-validation',
108
+ severity: 'warning',
109
+ message: 'Schema should specify format for date strings',
110
+ tool: 'search-flights',
111
+ scoreImpact: 2,
112
+ fix: 'Add format: "date" to the date parameter schema.',
113
+ },
114
+ {
115
+ ruleId: 'recommended-examples',
116
+ severity: 'info',
117
+ message: 'Consider adding example values for complex parameters',
118
+ scoreImpact: 1,
119
+ },
120
+ {
121
+ ruleId: 'security-input-validation',
122
+ severity: 'info',
123
+ message: 'Consider adding input validation constraints',
124
+ scoreImpact: 1,
125
+ },
126
+ ];
127
+ const mockSimulationResults = [
128
+ {
129
+ id: 'test-1',
130
+ prompt: 'Find a flight from New York to Los Angeles tomorrow',
131
+ toolName: 'search-flights',
132
+ success: true,
133
+ score: 95,
134
+ rounds: 2,
135
+ trace: [
136
+ { type: 'agent', content: 'I need to search for flights from JFK to LAX' },
137
+ { type: 'tool', content: 'Calling search-flights with origin=JFK, destination=LAX, date=2025-02-10' },
138
+ { type: 'result', content: 'Found 5 available flights' },
139
+ ],
140
+ },
141
+ {
142
+ id: 'test-2',
143
+ prompt: 'Book flight AA123 for 2 passengers',
144
+ toolName: 'book-flight',
145
+ success: true,
146
+ score: 88,
147
+ rounds: 3,
148
+ trace: [
149
+ { type: 'agent', content: 'I will book flight AA123 for 2 passengers' },
150
+ { type: 'tool', content: 'Calling book-flight with flightId=AA123' },
151
+ { type: 'result', content: 'Booking confirmed' },
152
+ ],
153
+ },
154
+ {
155
+ id: 'test-3',
156
+ prompt: 'Check if flight BA456 has seats available',
157
+ toolName: 'check-availability',
158
+ success: false,
159
+ score: 45,
160
+ rounds: 4,
161
+ trace: [
162
+ { type: 'agent', content: 'I need to check availability for flight BA456' },
163
+ { type: 'tool', content: 'Calling check-availability with flightId=BA456' },
164
+ { type: 'result', content: 'Error: Missing required parameter' },
165
+ ],
166
+ },
167
+ ];
168
+ function DemoApp() {
169
+ const [phase, setPhase] = useState('onboarding');
170
+ const [url, setUrl] = useState('');
171
+ const [isLoading, setIsLoading] = useState(false);
172
+ const [loadingMessage, setLoadingMessage] = useState('');
173
+ const [score, setScore] = useState(null);
174
+ const [tools, setTools] = useState([]);
175
+ const [findings, setFindings] = useState([]);
176
+ const [simResults, setSimResults] = useState([]);
177
+ // Handle URL submission from onboarding
178
+ const handleUrlSubmit = useCallback((submittedUrl) => {
179
+ setUrl(submittedUrl);
180
+ setPhase('crawling');
181
+ }, []);
182
+ // Handle crawling completion
183
+ const handleCrawlComplete = useCallback(() => {
184
+ // Short delay before transitioning to interactive view
185
+ setTimeout(() => {
186
+ setPhase('interactive');
187
+ // Start loading the actual data
188
+ setIsLoading(true);
189
+ runLoadingSimulation();
190
+ }, 500);
191
+ }, []);
192
+ // Simulate loading phases for the interactive view
193
+ const runLoadingSimulation = () => {
194
+ const phases = [
195
+ { message: 'Processing tool schemas...', delay: 400, action: () => setTools(mockTools) },
196
+ { message: 'Running audit rules...', delay: 500, action: () => setFindings(mockFindings) },
197
+ { message: 'Running simulation...', delay: 600, action: () => setSimResults(mockSimulationResults) },
198
+ { message: 'Calculating score...', delay: 400, action: () => setScore(mockScore) },
199
+ ];
200
+ let currentPhase = 0;
201
+ const runPhase = () => {
202
+ if (currentPhase < phases.length) {
203
+ const p = phases[currentPhase];
204
+ if (p) {
205
+ setLoadingMessage(p.message);
206
+ setTimeout(() => {
207
+ p.action?.();
208
+ currentPhase++;
209
+ runPhase();
210
+ }, p.delay);
211
+ }
212
+ }
213
+ else {
214
+ setIsLoading(false);
215
+ }
216
+ };
217
+ runPhase();
218
+ };
219
+ // Render based on current phase
220
+ switch (phase) {
221
+ case 'onboarding':
222
+ return createElement(OnboardingView, {
223
+ onSubmit: handleUrlSubmit,
224
+ defaultUrl: 'travel-demo.bandarra.me',
225
+ version: VERSION,
226
+ });
227
+ case 'crawling':
228
+ return createElement(CrawlingView, {
229
+ url,
230
+ version: VERSION,
231
+ onComplete: handleCrawlComplete,
232
+ });
233
+ case 'interactive':
234
+ return createElement(InteractiveApp, {
235
+ url,
236
+ version: VERSION,
237
+ config: demoConfig,
238
+ score,
239
+ tools,
240
+ findings,
241
+ simulationResults: simResults,
242
+ simulationCost: 0.0234,
243
+ isLoading,
244
+ loadingMessage,
245
+ });
246
+ default:
247
+ return null;
248
+ }
249
+ }
250
+ const { waitUntilExit } = render(createElement(DemoApp));
251
+ waitUntilExit().then(() => {
252
+ process.exit(0);
253
+ });
254
+ //# sourceMappingURL=demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.js","sourceRoot":"","sources":["../../../src/ui/ink/demo.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * useAnimation Hook
3
+ *
4
+ * Provides animated score reveal and other animations
5
+ */
6
+ interface UseAnimatedScoreOptions {
7
+ targetScore: number;
8
+ duration?: number;
9
+ easing?: 'linear' | 'easeOut' | 'easeInOut';
10
+ }
11
+ export declare function useAnimatedScore({ targetScore, duration, easing, }: UseAnimatedScoreOptions): {
12
+ currentScore: number;
13
+ isAnimating: boolean;
14
+ };
15
+ interface UsePulseOptions {
16
+ interval?: number;
17
+ enabled?: boolean;
18
+ }
19
+ export declare function usePulse({ interval, enabled }?: UsePulseOptions): boolean;
20
+ interface UseTypewriterOptions {
21
+ text: string;
22
+ speed?: number;
23
+ enabled?: boolean;
24
+ }
25
+ export declare function useTypewriter({ text, speed, enabled }: UseTypewriterOptions): {
26
+ displayText: string;
27
+ isComplete: boolean;
28
+ };
29
+ export {};
@@ -0,0 +1,89 @@
1
+ /**
2
+ * useAnimation Hook
3
+ *
4
+ * Provides animated score reveal and other animations
5
+ */
6
+ import { useState, useEffect } from 'react';
7
+ export function useAnimatedScore({ targetScore, duration = 1500, easing = 'easeOut', }) {
8
+ const [currentScore, setCurrentScore] = useState(0);
9
+ const [isAnimating, setIsAnimating] = useState(false);
10
+ useEffect(() => {
11
+ if (targetScore === 0) {
12
+ setCurrentScore(0);
13
+ return;
14
+ }
15
+ setIsAnimating(true);
16
+ const startTime = Date.now();
17
+ const startScore = currentScore;
18
+ const scoreDiff = targetScore - startScore;
19
+ const easingFn = (t) => {
20
+ switch (easing) {
21
+ case 'linear':
22
+ return t;
23
+ case 'easeOut':
24
+ return 1 - Math.pow(1 - t, 3);
25
+ case 'easeInOut':
26
+ return t < 0.5
27
+ ? 4 * t * t * t
28
+ : 1 - Math.pow(-2 * t + 2, 3) / 2;
29
+ default:
30
+ return t;
31
+ }
32
+ };
33
+ // Use setInterval for Node.js compatibility (no requestAnimationFrame)
34
+ const interval = setInterval(() => {
35
+ const elapsed = Date.now() - startTime;
36
+ const progress = Math.min(elapsed / duration, 1);
37
+ const easedProgress = easingFn(progress);
38
+ const newScore = Math.round(startScore + scoreDiff * easedProgress);
39
+ setCurrentScore(newScore);
40
+ if (progress >= 1) {
41
+ setIsAnimating(false);
42
+ clearInterval(interval);
43
+ }
44
+ }, 16); // ~60fps
45
+ return () => clearInterval(interval);
46
+ }, [targetScore, duration, easing]);
47
+ return { currentScore, isAnimating };
48
+ }
49
+ export function usePulse({ interval = 500, enabled = true } = {}) {
50
+ const [pulse, setPulse] = useState(false);
51
+ useEffect(() => {
52
+ if (!enabled) {
53
+ setPulse(false);
54
+ return;
55
+ }
56
+ const timer = setInterval(() => {
57
+ setPulse(p => !p);
58
+ }, interval);
59
+ return () => clearInterval(timer);
60
+ }, [interval, enabled]);
61
+ return pulse;
62
+ }
63
+ export function useTypewriter({ text, speed = 30, enabled = true }) {
64
+ const [displayText, setDisplayText] = useState('');
65
+ const [isComplete, setIsComplete] = useState(false);
66
+ useEffect(() => {
67
+ if (!enabled) {
68
+ setDisplayText(text);
69
+ setIsComplete(true);
70
+ return;
71
+ }
72
+ setDisplayText('');
73
+ setIsComplete(false);
74
+ let index = 0;
75
+ const timer = setInterval(() => {
76
+ if (index < text.length) {
77
+ setDisplayText(text.substring(0, index + 1));
78
+ index++;
79
+ }
80
+ else {
81
+ setIsComplete(true);
82
+ clearInterval(timer);
83
+ }
84
+ }, speed);
85
+ return () => clearInterval(timer);
86
+ }, [text, speed, enabled]);
87
+ return { displayText, isComplete };
88
+ }
89
+ //# sourceMappingURL=useAnimation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnimation.js","sourceRoot":"","sources":["../../../../src/ui/ink/hooks/useAnimation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * useAudit Hook
3
+ *
4
+ * Manages audit state and progress for Ink UI
5
+ */
6
+ import type { DetectedTool, UnregisteredForm } from '../../../core/types/tool.js';
7
+ import type { Finding } from '../../../core/types/rule.js';
8
+ import type { ScoreSummary } from '../../../core/types/audit.js';
9
+ export type AuditPhase = 'init' | 'browser' | 'crawling' | 'detecting' | 'analyzing' | 'simulation' | 'complete' | 'error';
10
+ export interface AuditState {
11
+ phase: AuditPhase;
12
+ phaseMessage: string;
13
+ progress: {
14
+ current: number;
15
+ total: number;
16
+ label: string;
17
+ };
18
+ pages: Array<{
19
+ url: string;
20
+ title: string;
21
+ hasWebMCP: boolean;
22
+ }>;
23
+ tools: DetectedTool[];
24
+ opportunities: UnregisteredForm[];
25
+ findings: Finding[];
26
+ score: ScoreSummary | null;
27
+ simulation: {
28
+ running: boolean;
29
+ results: unknown[] | null;
30
+ judgment: unknown | null;
31
+ cost: number;
32
+ };
33
+ error: string | null;
34
+ startTime: number;
35
+ duration: number;
36
+ }
37
+ export interface AuditCallbacks {
38
+ onPhaseChange?: (phase: AuditPhase, message: string) => void;
39
+ onProgress?: (current: number, total: number, label: string) => void;
40
+ onPageCrawled?: (page: {
41
+ url: string;
42
+ title: string;
43
+ hasWebMCP: boolean;
44
+ }) => void;
45
+ onToolDetected?: (tool: DetectedTool) => void;
46
+ onFindingAdded?: (finding: Finding) => void;
47
+ onScoreCalculated?: (score: ScoreSummary) => void;
48
+ onComplete?: (state: AuditState) => void;
49
+ onError?: (error: string) => void;
50
+ }
51
+ export declare function useAudit(callbacks?: AuditCallbacks): {
52
+ state: AuditState;
53
+ setPhase: (phase: AuditPhase, message: string) => void;
54
+ setProgress: (current: number, total: number, label: string) => void;
55
+ addPage: (page: {
56
+ url: string;
57
+ title: string;
58
+ hasWebMCP: boolean;
59
+ }) => void;
60
+ setTools: (tools: DetectedTool[]) => void;
61
+ setOpportunities: (opportunities: UnregisteredForm[]) => void;
62
+ addFinding: (finding: Finding) => void;
63
+ setFindings: (findings: Finding[]) => void;
64
+ setScore: (score: ScoreSummary) => void;
65
+ setSimulation: (simulation: Partial<AuditState["simulation"]>) => void;
66
+ setError: (error: string) => void;
67
+ complete: () => void;
68
+ reset: () => void;
69
+ };
@@ -0,0 +1,99 @@
1
+ /**
2
+ * useAudit Hook
3
+ *
4
+ * Manages audit state and progress for Ink UI
5
+ */
6
+ import { useState, useEffect, useCallback } from 'react';
7
+ const initialState = {
8
+ phase: 'init',
9
+ phaseMessage: 'Initializing...',
10
+ progress: { current: 0, total: 0, label: '' },
11
+ pages: [],
12
+ tools: [],
13
+ opportunities: [],
14
+ findings: [],
15
+ score: null,
16
+ simulation: { running: false, results: null, judgment: null, cost: 0 },
17
+ error: null,
18
+ startTime: Date.now(),
19
+ duration: 0,
20
+ };
21
+ export function useAudit(callbacks) {
22
+ const [state, setState] = useState(initialState);
23
+ const setPhase = useCallback((phase, message) => {
24
+ setState(s => ({ ...s, phase, phaseMessage: message }));
25
+ callbacks?.onPhaseChange?.(phase, message);
26
+ }, [callbacks]);
27
+ const setProgress = useCallback((current, total, label) => {
28
+ setState(s => ({ ...s, progress: { current, total, label } }));
29
+ callbacks?.onProgress?.(current, total, label);
30
+ }, [callbacks]);
31
+ const addPage = useCallback((page) => {
32
+ setState(s => ({ ...s, pages: [...s.pages, page] }));
33
+ callbacks?.onPageCrawled?.(page);
34
+ }, [callbacks]);
35
+ const setTools = useCallback((tools) => {
36
+ setState(s => ({ ...s, tools }));
37
+ tools.forEach(t => callbacks?.onToolDetected?.(t));
38
+ }, [callbacks]);
39
+ const setOpportunities = useCallback((opportunities) => {
40
+ setState(s => ({ ...s, opportunities }));
41
+ }, []);
42
+ const addFinding = useCallback((finding) => {
43
+ setState(s => ({ ...s, findings: [...s.findings, finding] }));
44
+ callbacks?.onFindingAdded?.(finding);
45
+ }, [callbacks]);
46
+ const setFindings = useCallback((findings) => {
47
+ setState(s => ({ ...s, findings }));
48
+ }, []);
49
+ const setScore = useCallback((score) => {
50
+ setState(s => ({ ...s, score }));
51
+ callbacks?.onScoreCalculated?.(score);
52
+ }, [callbacks]);
53
+ const setSimulation = useCallback((simulation) => {
54
+ setState(s => ({ ...s, simulation: { ...s.simulation, ...simulation } }));
55
+ }, []);
56
+ const setError = useCallback((error) => {
57
+ setState(s => ({ ...s, phase: 'error', error }));
58
+ callbacks?.onError?.(error);
59
+ }, [callbacks]);
60
+ const complete = useCallback(() => {
61
+ setState(s => {
62
+ const newState = {
63
+ ...s,
64
+ phase: 'complete',
65
+ duration: Date.now() - s.startTime,
66
+ };
67
+ callbacks?.onComplete?.(newState);
68
+ return newState;
69
+ });
70
+ }, [callbacks]);
71
+ const reset = useCallback(() => {
72
+ setState({ ...initialState, startTime: Date.now() });
73
+ }, []);
74
+ // Update duration periodically
75
+ useEffect(() => {
76
+ if (state.phase !== 'complete' && state.phase !== 'error') {
77
+ const interval = setInterval(() => {
78
+ setState(s => ({ ...s, duration: Date.now() - s.startTime }));
79
+ }, 100);
80
+ return () => clearInterval(interval);
81
+ }
82
+ }, [state.phase]);
83
+ return {
84
+ state,
85
+ setPhase,
86
+ setProgress,
87
+ addPage,
88
+ setTools,
89
+ setOpportunities,
90
+ addFinding,
91
+ setFindings,
92
+ setScore,
93
+ setSimulation,
94
+ setError,
95
+ complete,
96
+ reset,
97
+ };
98
+ }
99
+ //# sourceMappingURL=useAudit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAudit.js","sourceRoot":"","sources":["../../../../src/ui/ink/hooks/useAudit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * useCrawlAnimation Hook
3
+ *
4
+ * Manages crawl simulation state, timing, and rotating messages
5
+ */
6
+ import type { CrawlState } from '../types.js';
7
+ interface UseCrawlAnimationOptions {
8
+ url: string;
9
+ minDuration?: number;
10
+ onComplete?: () => void;
11
+ }
12
+ interface UseCrawlAnimationResult {
13
+ state: CrawlState;
14
+ isComplete: boolean;
15
+ start: () => void;
16
+ reset: () => void;
17
+ }
18
+ export declare function useCrawlAnimation({ url, minDuration, onComplete, }: UseCrawlAnimationOptions): UseCrawlAnimationResult;
19
+ export {};