@descryy/mcp 0.11.5 → 0.11.7

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 (445) hide show
  1. package/dist/action-handshake.d.ts +38 -0
  2. package/dist/action-handshake.d.ts.map +1 -0
  3. package/dist/action-handshake.js +127 -0
  4. package/dist/action-handshake.js.map +1 -0
  5. package/dist/bin/descry-mcp.d.ts +7 -0
  6. package/dist/bin/descry-mcp.d.ts.map +1 -0
  7. package/dist/bin/descry-mcp.js +73 -0
  8. package/dist/bin/descry-mcp.js.map +1 -0
  9. package/dist/browser/auth.d.ts +84 -0
  10. package/dist/browser/auth.d.ts.map +1 -0
  11. package/dist/browser/auth.js +233 -0
  12. package/dist/browser/auth.js.map +1 -0
  13. package/dist/browser/capability-probe.d.ts +109 -0
  14. package/dist/browser/capability-probe.d.ts.map +1 -0
  15. package/dist/browser/capability-probe.js +201 -0
  16. package/dist/browser/capability-probe.js.map +1 -0
  17. package/dist/browser/driver.d.ts +591 -0
  18. package/dist/browser/driver.d.ts.map +1 -0
  19. package/dist/browser/driver.js +116 -0
  20. package/dist/browser/driver.js.map +1 -0
  21. package/dist/browser/evidence.d.ts +28 -0
  22. package/dist/browser/evidence.d.ts.map +1 -0
  23. package/dist/browser/evidence.js +82 -0
  24. package/dist/browser/evidence.js.map +1 -0
  25. package/dist/browser/fake-driver.d.ts +116 -0
  26. package/dist/browser/fake-driver.d.ts.map +1 -0
  27. package/dist/browser/fake-driver.js +416 -0
  28. package/dist/browser/fake-driver.js.map +1 -0
  29. package/dist/browser/fault-attribution.d.ts +178 -0
  30. package/dist/browser/fault-attribution.d.ts.map +1 -0
  31. package/dist/browser/fault-attribution.js +266 -0
  32. package/dist/browser/fault-attribution.js.map +1 -0
  33. package/dist/browser/graph-write.d.ts +45 -0
  34. package/dist/browser/graph-write.d.ts.map +1 -0
  35. package/dist/browser/graph-write.js +103 -0
  36. package/dist/browser/graph-write.js.map +1 -0
  37. package/dist/browser/identity-graph-write.d.ts +55 -0
  38. package/dist/browser/identity-graph-write.d.ts.map +1 -0
  39. package/dist/browser/identity-graph-write.js +45 -0
  40. package/dist/browser/identity-graph-write.js.map +1 -0
  41. package/dist/browser/page-probe.d.ts +81 -0
  42. package/dist/browser/page-probe.d.ts.map +1 -0
  43. package/dist/browser/page-probe.js +202 -0
  44. package/dist/browser/page-probe.js.map +1 -0
  45. package/dist/browser/playwright-driver.d.ts +115 -0
  46. package/dist/browser/playwright-driver.d.ts.map +1 -0
  47. package/dist/browser/playwright-driver.js +1545 -0
  48. package/dist/browser/playwright-driver.js.map +1 -0
  49. package/dist/browser/provider.d.ts +26 -0
  50. package/dist/browser/provider.d.ts.map +1 -0
  51. package/dist/browser/provider.js +14 -0
  52. package/dist/browser/provider.js.map +1 -0
  53. package/dist/browser/reach-recording-session.d.ts +44 -0
  54. package/dist/browser/reach-recording-session.d.ts.map +1 -0
  55. package/dist/browser/reach-recording-session.js +151 -0
  56. package/dist/browser/reach-recording-session.js.map +1 -0
  57. package/dist/browser/reachability.d.ts +168 -0
  58. package/dist/browser/reachability.d.ts.map +1 -0
  59. package/dist/browser/reachability.js +294 -0
  60. package/dist/browser/reachability.js.map +1 -0
  61. package/dist/browser/registry.d.ts +126 -0
  62. package/dist/browser/registry.d.ts.map +1 -0
  63. package/dist/browser/registry.js +177 -0
  64. package/dist/browser/registry.js.map +1 -0
  65. package/dist/browser/scenario-provenance.d.ts +23 -0
  66. package/dist/browser/scenario-provenance.d.ts.map +1 -0
  67. package/dist/browser/scenario-provenance.js +73 -0
  68. package/dist/browser/scenario-provenance.js.map +1 -0
  69. package/dist/browser/scenario-resolve.d.ts +28 -0
  70. package/dist/browser/scenario-resolve.d.ts.map +1 -0
  71. package/dist/browser/scenario-resolve.js +96 -0
  72. package/dist/browser/scenario-resolve.js.map +1 -0
  73. package/dist/browser/scenario-runner.d.ts +72 -0
  74. package/dist/browser/scenario-runner.d.ts.map +1 -0
  75. package/dist/browser/scenario-runner.js +353 -0
  76. package/dist/browser/scenario-runner.js.map +1 -0
  77. package/dist/browser/stack-parser.d.ts +19 -0
  78. package/dist/browser/stack-parser.d.ts.map +1 -0
  79. package/dist/browser/stack-parser.js +85 -0
  80. package/dist/browser/stack-parser.js.map +1 -0
  81. package/dist/browser/tool-support.d.ts +71 -0
  82. package/dist/browser/tool-support.d.ts.map +1 -0
  83. package/dist/browser/tool-support.js +216 -0
  84. package/dist/browser/tool-support.js.map +1 -0
  85. package/dist/browser/url-scheme.d.ts +14 -0
  86. package/dist/browser/url-scheme.d.ts.map +1 -0
  87. package/dist/browser/url-scheme.js +38 -0
  88. package/dist/browser/url-scheme.js.map +1 -0
  89. package/dist/browser/wait-target.d.ts +37 -0
  90. package/dist/browser/wait-target.d.ts.map +1 -0
  91. package/dist/browser/wait-target.js +54 -0
  92. package/dist/browser/wait-target.js.map +1 -0
  93. package/dist/cancellation.d.ts +20 -0
  94. package/dist/cancellation.d.ts.map +1 -0
  95. package/dist/cancellation.js +41 -0
  96. package/dist/cancellation.js.map +1 -0
  97. package/dist/capped.d.ts +39 -0
  98. package/dist/capped.d.ts.map +1 -0
  99. package/dist/capped.js +43 -0
  100. package/dist/capped.js.map +1 -0
  101. package/dist/credential-store.d.ts +22 -0
  102. package/dist/credential-store.d.ts.map +1 -0
  103. package/dist/credential-store.js +33 -0
  104. package/dist/credential-store.js.map +1 -0
  105. package/dist/disclosure-ledger.d.ts +14 -0
  106. package/dist/disclosure-ledger.d.ts.map +1 -0
  107. package/dist/disclosure-ledger.js +18 -0
  108. package/dist/disclosure-ledger.js.map +1 -0
  109. package/dist/evidence/observed-route-evidence.d.ts +25 -0
  110. package/dist/evidence/observed-route-evidence.d.ts.map +1 -0
  111. package/dist/evidence/observed-route-evidence.js +76 -0
  112. package/dist/evidence/observed-route-evidence.js.map +1 -0
  113. package/dist/heap.d.ts +61 -0
  114. package/dist/heap.d.ts.map +1 -0
  115. package/dist/heap.js +82 -0
  116. package/dist/heap.js.map +1 -0
  117. package/dist/heartbeat.d.ts +46 -0
  118. package/dist/heartbeat.d.ts.map +1 -0
  119. package/dist/heartbeat.js +66 -0
  120. package/dist/heartbeat.js.map +1 -0
  121. package/dist/index.d.ts +32 -0
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +19 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/module-trust.d.ts +37 -0
  126. package/dist/module-trust.d.ts.map +1 -0
  127. package/dist/module-trust.js +77 -0
  128. package/dist/module-trust.js.map +1 -0
  129. package/dist/path-confinement.d.ts +31 -0
  130. package/dist/path-confinement.d.ts.map +1 -0
  131. package/dist/path-confinement.js +44 -0
  132. package/dist/path-confinement.js.map +1 -0
  133. package/dist/planner/predict-then-propose.d.ts +134 -0
  134. package/dist/planner/predict-then-propose.d.ts.map +1 -0
  135. package/dist/planner/predict-then-propose.js +138 -0
  136. package/dist/planner/predict-then-propose.js.map +1 -0
  137. package/dist/planner/propose-journey.d.ts +75 -0
  138. package/dist/planner/propose-journey.d.ts.map +1 -0
  139. package/dist/planner/propose-journey.js +96 -0
  140. package/dist/planner/propose-journey.js.map +1 -0
  141. package/dist/protocol.d.ts +57 -0
  142. package/dist/protocol.d.ts.map +1 -0
  143. package/dist/protocol.js +90 -0
  144. package/dist/protocol.js.map +1 -0
  145. package/dist/ready-checks.d.ts +12 -0
  146. package/dist/ready-checks.d.ts.map +1 -0
  147. package/dist/ready-checks.js +43 -0
  148. package/dist/ready-checks.js.map +1 -0
  149. package/dist/registry.d.ts +103 -0
  150. package/dist/registry.d.ts.map +1 -0
  151. package/dist/registry.js +327 -0
  152. package/dist/registry.js.map +1 -0
  153. package/dist/render.d.ts +623 -0
  154. package/dist/render.d.ts.map +1 -0
  155. package/dist/render.js +968 -0
  156. package/dist/render.js.map +1 -0
  157. package/dist/runtime-registry.d.ts +22 -0
  158. package/dist/runtime-registry.d.ts.map +1 -0
  159. package/dist/runtime-registry.js +142 -0
  160. package/dist/runtime-registry.js.map +1 -0
  161. package/dist/sandbox-defaults.d.ts +41 -0
  162. package/dist/sandbox-defaults.d.ts.map +1 -0
  163. package/dist/sandbox-defaults.js +14 -0
  164. package/dist/sandbox-defaults.js.map +1 -0
  165. package/dist/scenarios/browser-run-plan-projection.d.ts +161 -0
  166. package/dist/scenarios/browser-run-plan-projection.d.ts.map +1 -0
  167. package/dist/scenarios/browser-run-plan-projection.js +264 -0
  168. package/dist/scenarios/browser-run-plan-projection.js.map +1 -0
  169. package/dist/scenarios/credential-ref.d.ts +102 -0
  170. package/dist/scenarios/credential-ref.d.ts.map +1 -0
  171. package/dist/scenarios/credential-ref.js +148 -0
  172. package/dist/scenarios/credential-ref.js.map +1 -0
  173. package/dist/scenarios/index.d.ts +7 -0
  174. package/dist/scenarios/index.d.ts.map +1 -0
  175. package/dist/scenarios/index.js +7 -0
  176. package/dist/scenarios/index.js.map +1 -0
  177. package/dist/scenarios/parse.d.ts +18 -0
  178. package/dist/scenarios/parse.d.ts.map +1 -0
  179. package/dist/scenarios/parse.js +212 -0
  180. package/dist/scenarios/parse.js.map +1 -0
  181. package/dist/scenarios/scenario.d.ts +93 -0
  182. package/dist/scenarios/scenario.d.ts.map +1 -0
  183. package/dist/scenarios/scenario.js +27 -0
  184. package/dist/scenarios/scenario.js.map +1 -0
  185. package/dist/scenarios/secret-ref.d.ts +86 -0
  186. package/dist/scenarios/secret-ref.d.ts.map +1 -0
  187. package/dist/scenarios/secret-ref.js +125 -0
  188. package/dist/scenarios/secret-ref.js.map +1 -0
  189. package/dist/scenarios/storage.d.ts +21 -0
  190. package/dist/scenarios/storage.d.ts.map +1 -0
  191. package/dist/scenarios/storage.js +103 -0
  192. package/dist/scenarios/storage.js.map +1 -0
  193. package/dist/server.d.ts +61 -0
  194. package/dist/server.d.ts.map +1 -0
  195. package/dist/server.js +642 -0
  196. package/dist/server.js.map +1 -0
  197. package/dist/session.d.ts +356 -0
  198. package/dist/session.d.ts.map +1 -0
  199. package/dist/session.js +779 -0
  200. package/dist/session.js.map +1 -0
  201. package/dist/tools/alias-kit.d.ts +29 -0
  202. package/dist/tools/alias-kit.d.ts.map +1 -0
  203. package/dist/tools/alias-kit.js +21 -0
  204. package/dist/tools/alias-kit.js.map +1 -0
  205. package/dist/tools/aliases.d.ts +42 -0
  206. package/dist/tools/aliases.d.ts.map +1 -0
  207. package/dist/tools/aliases.js +52 -0
  208. package/dist/tools/aliases.js.map +1 -0
  209. package/dist/tools/analyze-workspace.d.ts +52 -0
  210. package/dist/tools/analyze-workspace.d.ts.map +1 -0
  211. package/dist/tools/analyze-workspace.js +207 -0
  212. package/dist/tools/analyze-workspace.js.map +1 -0
  213. package/dist/tools/analyze.d.ts +163 -0
  214. package/dist/tools/analyze.d.ts.map +1 -0
  215. package/dist/tools/analyze.js +724 -0
  216. package/dist/tools/analyze.js.map +1 -0
  217. package/dist/tools/browser-click.d.ts +18 -0
  218. package/dist/tools/browser-click.d.ts.map +1 -0
  219. package/dist/tools/browser-click.js +110 -0
  220. package/dist/tools/browser-click.js.map +1 -0
  221. package/dist/tools/browser-close-session.d.ts +39 -0
  222. package/dist/tools/browser-close-session.d.ts.map +1 -0
  223. package/dist/tools/browser-close-session.js +120 -0
  224. package/dist/tools/browser-close-session.js.map +1 -0
  225. package/dist/tools/browser-fill.d.ts +18 -0
  226. package/dist/tools/browser-fill.d.ts.map +1 -0
  227. package/dist/tools/browser-fill.js +117 -0
  228. package/dist/tools/browser-fill.js.map +1 -0
  229. package/dist/tools/browser-navigate.d.ts +15 -0
  230. package/dist/tools/browser-navigate.d.ts.map +1 -0
  231. package/dist/tools/browser-navigate.js +106 -0
  232. package/dist/tools/browser-navigate.js.map +1 -0
  233. package/dist/tools/browser-read.d.ts +33 -0
  234. package/dist/tools/browser-read.d.ts.map +1 -0
  235. package/dist/tools/browser-read.js +105 -0
  236. package/dist/tools/browser-read.js.map +1 -0
  237. package/dist/tools/browser-run-scenario.d.ts +28 -0
  238. package/dist/tools/browser-run-scenario.d.ts.map +1 -0
  239. package/dist/tools/browser-run-scenario.js +238 -0
  240. package/dist/tools/browser-run-scenario.js.map +1 -0
  241. package/dist/tools/browser-save-scenario.d.ts +19 -0
  242. package/dist/tools/browser-save-scenario.d.ts.map +1 -0
  243. package/dist/tools/browser-save-scenario.js +447 -0
  244. package/dist/tools/browser-save-scenario.js.map +1 -0
  245. package/dist/tools/browser-select.d.ts +20 -0
  246. package/dist/tools/browser-select.d.ts.map +1 -0
  247. package/dist/tools/browser-select.js +120 -0
  248. package/dist/tools/browser-select.js.map +1 -0
  249. package/dist/tools/browser-snapshot.d.ts +46 -0
  250. package/dist/tools/browser-snapshot.d.ts.map +1 -0
  251. package/dist/tools/browser-snapshot.js +127 -0
  252. package/dist/tools/browser-snapshot.js.map +1 -0
  253. package/dist/tools/browser-start-session.d.ts +24 -0
  254. package/dist/tools/browser-start-session.d.ts.map +1 -0
  255. package/dist/tools/browser-start-session.js +653 -0
  256. package/dist/tools/browser-start-session.js.map +1 -0
  257. package/dist/tools/browser-submit.d.ts +18 -0
  258. package/dist/tools/browser-submit.d.ts.map +1 -0
  259. package/dist/tools/browser-submit.js +106 -0
  260. package/dist/tools/browser-submit.js.map +1 -0
  261. package/dist/tools/browser-type.d.ts +18 -0
  262. package/dist/tools/browser-type.d.ts.map +1 -0
  263. package/dist/tools/browser-type.js +115 -0
  264. package/dist/tools/browser-type.js.map +1 -0
  265. package/dist/tools/browser-wait-for.d.ts +45 -0
  266. package/dist/tools/browser-wait-for.d.ts.map +1 -0
  267. package/dist/tools/browser-wait-for.js +164 -0
  268. package/dist/tools/browser-wait-for.js.map +1 -0
  269. package/dist/tools/browser.d.ts +69 -0
  270. package/dist/tools/browser.d.ts.map +1 -0
  271. package/dist/tools/browser.js +326 -0
  272. package/dist/tools/browser.js.map +1 -0
  273. package/dist/tools/chain.d.ts +41 -0
  274. package/dist/tools/chain.d.ts.map +1 -0
  275. package/dist/tools/chain.js +101 -0
  276. package/dist/tools/chain.js.map +1 -0
  277. package/dist/tools/change-scope.d.ts +25 -0
  278. package/dist/tools/change-scope.d.ts.map +1 -0
  279. package/dist/tools/change-scope.js +103 -0
  280. package/dist/tools/change-scope.js.map +1 -0
  281. package/dist/tools/code-context.d.ts +83 -0
  282. package/dist/tools/code-context.d.ts.map +1 -0
  283. package/dist/tools/code-context.js +432 -0
  284. package/dist/tools/code-context.js.map +1 -0
  285. package/dist/tools/contracts.d.ts +74 -0
  286. package/dist/tools/contracts.d.ts.map +1 -0
  287. package/dist/tools/contracts.js +214 -0
  288. package/dist/tools/contracts.js.map +1 -0
  289. package/dist/tools/cross-pr.d.ts +178 -0
  290. package/dist/tools/cross-pr.d.ts.map +1 -0
  291. package/dist/tools/cross-pr.js +362 -0
  292. package/dist/tools/cross-pr.js.map +1 -0
  293. package/dist/tools/disclosure.d.ts +75 -0
  294. package/dist/tools/disclosure.d.ts.map +1 -0
  295. package/dist/tools/disclosure.js +325 -0
  296. package/dist/tools/disclosure.js.map +1 -0
  297. package/dist/tools/draw-conclusion.d.ts +55 -0
  298. package/dist/tools/draw-conclusion.d.ts.map +1 -0
  299. package/dist/tools/draw-conclusion.js +243 -0
  300. package/dist/tools/draw-conclusion.js.map +1 -0
  301. package/dist/tools/git-context.d.ts +39 -0
  302. package/dist/tools/git-context.d.ts.map +1 -0
  303. package/dist/tools/git-context.js +374 -0
  304. package/dist/tools/git-context.js.map +1 -0
  305. package/dist/tools/git-diff.d.ts +45 -0
  306. package/dist/tools/git-diff.d.ts.map +1 -0
  307. package/dist/tools/git-diff.js +338 -0
  308. package/dist/tools/git-diff.js.map +1 -0
  309. package/dist/tools/git-history.d.ts +16 -0
  310. package/dist/tools/git-history.d.ts.map +1 -0
  311. package/dist/tools/git-history.js +106 -0
  312. package/dist/tools/git-history.js.map +1 -0
  313. package/dist/tools/history.d.ts +34 -0
  314. package/dist/tools/history.d.ts.map +1 -0
  315. package/dist/tools/history.js +121 -0
  316. package/dist/tools/history.js.map +1 -0
  317. package/dist/tools/impact.d.ts +46 -0
  318. package/dist/tools/impact.d.ts.map +1 -0
  319. package/dist/tools/impact.js +225 -0
  320. package/dist/tools/impact.js.map +1 -0
  321. package/dist/tools/index.d.ts +59 -0
  322. package/dist/tools/index.d.ts.map +1 -0
  323. package/dist/tools/index.js +70 -0
  324. package/dist/tools/index.js.map +1 -0
  325. package/dist/tools/kit.d.ts +165 -0
  326. package/dist/tools/kit.d.ts.map +1 -0
  327. package/dist/tools/kit.js +153 -0
  328. package/dist/tools/kit.js.map +1 -0
  329. package/dist/tools/link-workspace.d.ts +24 -0
  330. package/dist/tools/link-workspace.d.ts.map +1 -0
  331. package/dist/tools/link-workspace.js +131 -0
  332. package/dist/tools/link-workspace.js.map +1 -0
  333. package/dist/tools/lookup.d.ts +19 -0
  334. package/dist/tools/lookup.d.ts.map +1 -0
  335. package/dist/tools/lookup.js +63 -0
  336. package/dist/tools/lookup.js.map +1 -0
  337. package/dist/tools/mark-incident.d.ts +28 -0
  338. package/dist/tools/mark-incident.d.ts.map +1 -0
  339. package/dist/tools/mark-incident.js +171 -0
  340. package/dist/tools/mark-incident.js.map +1 -0
  341. package/dist/tools/merged-browser.d.ts +11 -0
  342. package/dist/tools/merged-browser.d.ts.map +1 -0
  343. package/dist/tools/merged-browser.js +20 -0
  344. package/dist/tools/merged-browser.js.map +1 -0
  345. package/dist/tools/merged-context.d.ts +11 -0
  346. package/dist/tools/merged-context.d.ts.map +1 -0
  347. package/dist/tools/merged-context.js +21 -0
  348. package/dist/tools/merged-context.js.map +1 -0
  349. package/dist/tools/merged-observe.d.ts +13 -0
  350. package/dist/tools/merged-observe.d.ts.map +1 -0
  351. package/dist/tools/merged-observe.js +21 -0
  352. package/dist/tools/merged-observe.js.map +1 -0
  353. package/dist/tools/merged-workspace.d.ts +14 -0
  354. package/dist/tools/merged-workspace.d.ts.map +1 -0
  355. package/dist/tools/merged-workspace.js +21 -0
  356. package/dist/tools/merged-workspace.js.map +1 -0
  357. package/dist/tools/observe-runtime.d.ts +262 -0
  358. package/dist/tools/observe-runtime.d.ts.map +1 -0
  359. package/dist/tools/observe-runtime.js +1966 -0
  360. package/dist/tools/observe-runtime.js.map +1 -0
  361. package/dist/tools/observe-tests.d.ts +57 -0
  362. package/dist/tools/observe-tests.d.ts.map +1 -0
  363. package/dist/tools/observe-tests.js +391 -0
  364. package/dist/tools/observe-tests.js.map +1 -0
  365. package/dist/tools/observe.d.ts +28 -0
  366. package/dist/tools/observe.d.ts.map +1 -0
  367. package/dist/tools/observe.js +291 -0
  368. package/dist/tools/observe.js.map +1 -0
  369. package/dist/tools/pr-analysis.d.ts +189 -0
  370. package/dist/tools/pr-analysis.d.ts.map +1 -0
  371. package/dist/tools/pr-analysis.js +365 -0
  372. package/dist/tools/pr-analysis.js.map +1 -0
  373. package/dist/tools/pre-push.d.ts +168 -0
  374. package/dist/tools/pre-push.d.ts.map +1 -0
  375. package/dist/tools/pre-push.js +416 -0
  376. package/dist/tools/pre-push.js.map +1 -0
  377. package/dist/tools/predict-reach.d.ts +57 -0
  378. package/dist/tools/predict-reach.d.ts.map +1 -0
  379. package/dist/tools/predict-reach.js +183 -0
  380. package/dist/tools/predict-reach.js.map +1 -0
  381. package/dist/tools/propagation.d.ts +37 -0
  382. package/dist/tools/propagation.d.ts.map +1 -0
  383. package/dist/tools/propagation.js +162 -0
  384. package/dist/tools/propagation.js.map +1 -0
  385. package/dist/tools/propose-journey.d.ts +16 -0
  386. package/dist/tools/propose-journey.d.ts.map +1 -0
  387. package/dist/tools/propose-journey.js +132 -0
  388. package/dist/tools/propose-journey.js.map +1 -0
  389. package/dist/tools/prove-reach.d.ts +74 -0
  390. package/dist/tools/prove-reach.d.ts.map +1 -0
  391. package/dist/tools/prove-reach.js +274 -0
  392. package/dist/tools/prove-reach.js.map +1 -0
  393. package/dist/tools/questions.d.ts +30 -0
  394. package/dist/tools/questions.d.ts.map +1 -0
  395. package/dist/tools/questions.js +230 -0
  396. package/dist/tools/questions.js.map +1 -0
  397. package/dist/tools/refusal-fetch.d.ts +35 -0
  398. package/dist/tools/refusal-fetch.d.ts.map +1 -0
  399. package/dist/tools/refusal-fetch.js +123 -0
  400. package/dist/tools/refusal-fetch.js.map +1 -0
  401. package/dist/tools/runtime-incident.d.ts +33 -0
  402. package/dist/tools/runtime-incident.d.ts.map +1 -0
  403. package/dist/tools/runtime-incident.js +67 -0
  404. package/dist/tools/runtime-incident.js.map +1 -0
  405. package/dist/tools/runtime-journey-drive.d.ts +102 -0
  406. package/dist/tools/runtime-journey-drive.d.ts.map +1 -0
  407. package/dist/tools/runtime-journey-drive.js +247 -0
  408. package/dist/tools/runtime-journey-drive.js.map +1 -0
  409. package/dist/tools/scope.d.ts +45 -0
  410. package/dist/tools/scope.d.ts.map +1 -0
  411. package/dist/tools/scope.js +217 -0
  412. package/dist/tools/scope.js.map +1 -0
  413. package/dist/tools/similar-incidents.d.ts +43 -0
  414. package/dist/tools/similar-incidents.d.ts.map +1 -0
  415. package/dist/tools/similar-incidents.js +190 -0
  416. package/dist/tools/similar-incidents.js.map +1 -0
  417. package/dist/tools/validate.d.ts +133 -0
  418. package/dist/tools/validate.d.ts.map +1 -0
  419. package/dist/tools/validate.js +488 -0
  420. package/dist/tools/validate.js.map +1 -0
  421. package/dist/tools/verb.d.ts +46 -0
  422. package/dist/tools/verb.d.ts.map +1 -0
  423. package/dist/tools/verb.js +78 -0
  424. package/dist/tools/verb.js.map +1 -0
  425. package/dist/tools/verification-status.d.ts +38 -0
  426. package/dist/tools/verification-status.d.ts.map +1 -0
  427. package/dist/tools/verification-status.js +203 -0
  428. package/dist/tools/verification-status.js.map +1 -0
  429. package/dist/tools/verify-claim.d.ts +29 -0
  430. package/dist/tools/verify-claim.d.ts.map +1 -0
  431. package/dist/tools/verify-claim.js +218 -0
  432. package/dist/tools/verify-claim.js.map +1 -0
  433. package/dist/tools/workspace.d.ts +28 -0
  434. package/dist/tools/workspace.d.ts.map +1 -0
  435. package/dist/tools/workspace.js +94 -0
  436. package/dist/tools/workspace.js.map +1 -0
  437. package/dist/transport.d.ts +32 -0
  438. package/dist/transport.d.ts.map +1 -0
  439. package/dist/transport.js +85 -0
  440. package/dist/transport.js.map +1 -0
  441. package/dist/workspace-index.d.ts +164 -0
  442. package/dist/workspace-index.d.ts.map +1 -0
  443. package/dist/workspace-index.js +381 -0
  444. package/dist/workspace-index.js.map +1 -0
  445. package/package.json +5 -5
@@ -0,0 +1,106 @@
1
+ /** `browser_navigate` moves an open session to another page. Cross-origin navigate refuses —
2
+ * never re-prompts — since navigation is the one place a session's consent could otherwise widen
3
+ * into a general-purpose browser. `class: "stateful-read"`: it changes what later calls see, but
4
+ * the developer's approval was already stated at `browser_start_session`. */
5
+ import { browserAnswer, emptyEvidence, observeAndCorrelate, reachNotes, useSession, withinConsent } from "../browser/tool-support.js";
6
+ import { NO_GRAPH_WRITE } from "../browser/graph-write.js";
7
+ import { CANCELLED_STATE, cancellationHeadline, cancellationNotes } from "../cancellation.js";
8
+ import { requiredString } from "./kit.js";
9
+ import { fitSnapshot, NO_REACH } from "./browser-snapshot.js";
10
+ const SCHEMA = {
11
+ type: "object",
12
+ properties: {
13
+ sessionId: {
14
+ type: "string",
15
+ description: "REQUIRED. The id returned by browser_start_session. Sessions belong to this connection and do not survive a reconnect.",
16
+ },
17
+ url: {
18
+ type: "string",
19
+ description: "REQUIRED. Where to navigate. Must be on the same origin the session was started against — a URL " +
20
+ "on any other origin is refused rather than confirmed again, because consent was granted for one " +
21
+ "application, not for the browser generally.",
22
+ },
23
+ },
24
+ required: ["sessionId", "url"],
25
+ additionalProperties: false,
26
+ };
27
+ function blank(url, evidence) {
28
+ return { sessionId: "", url, title: "", elements: [], totalElements: 0, reach: NO_REACH, evidence, graph: NO_GRAPH_WRITE };
29
+ }
30
+ /** Exported so `browser-read.ts` can dispatch the "navigate" verb to this exact body — the merge
31
+ * reuses this function rather than reimplementing it (mcp-surface-consolidation.md). */
32
+ export async function run(args, ctx) {
33
+ const sessionId = requiredString(args, "sessionId");
34
+ const url = requiredString(args, "url");
35
+ // Checked before the session is touched: the caller said stop, so nothing happens. The session
36
+ // itself stays open — it belongs to browser_start_session's consent, not to this call.
37
+ if (ctx.signal.aborted) {
38
+ return browserAnswer({
39
+ ctx,
40
+ state: CANCELLED_STATE,
41
+ headline: cancellationHeadline("the browser did not move"),
42
+ notes: cancellationNotes("The page is where it was.", "The browser session is still open and can still be used."),
43
+ data: blank(url, emptyEvidence()),
44
+ });
45
+ }
46
+ const found = await useSession(ctx.session.browserSessions(), sessionId);
47
+ if (!found.ok) {
48
+ return browserAnswer({
49
+ ctx,
50
+ state: found.dead.state,
51
+ headline: found.dead.headline,
52
+ notes: found.dead.notes,
53
+ data: blank(url, found.dead.evidence),
54
+ });
55
+ }
56
+ const { entry } = found;
57
+ if (!withinConsent(entry, url)) {
58
+ return browserAnswer({
59
+ ctx,
60
+ state: "refused",
61
+ headline: `${url} is outside this session's consented origin.`,
62
+ notes: [
63
+ `This session was started against ${entry.consentedOrigin} and consent is bound to that origin. ` +
64
+ `Navigating to ${url} would take the browser somewhere the developer did not approve, so it is ` +
65
+ "refused rather than confirmed again — asking a second time here is how a gate becomes a habit. " +
66
+ "Start a new session if you genuinely mean to drive that origin.",
67
+ ],
68
+ data: blank(url, emptyEvidence()),
69
+ });
70
+ }
71
+ ctx.progress(`Navigating to ${url}`);
72
+ await entry.page.navigate(url);
73
+ const snapshot = await entry.page.snapshot();
74
+ const observed = await observeAndCorrelate(ctx, entry);
75
+ const evidence = observed.evidence;
76
+ const data = {
77
+ sessionId: entry.sessionId,
78
+ url: snapshot.url,
79
+ title: snapshot.title,
80
+ elements: snapshot.elements,
81
+ totalElements: snapshot.totalElements,
82
+ reach: { frames: snapshot.frames, shadow: snapshot.shadow, hidden: snapshot.hidden, reveal: snapshot.reveal },
83
+ evidence,
84
+ graph: observed.graph,
85
+ };
86
+ return browserAnswer({
87
+ ctx,
88
+ headline: `${snapshot.url} — ${snapshot.title || "untitled"} (${snapshot.totalElements} elements).`,
89
+ notes: [...observed.notes, ...reachNotes(snapshot)],
90
+ data,
91
+ fitToBudget: (budgetBytes) => fitSnapshot(data, budgetBytes),
92
+ });
93
+ }
94
+ export const browserNavigateTool = {
95
+ name: "browser_navigate",
96
+ title: "Navigate an open browser session",
97
+ description: "Move an open browser session to another page on the same application, and return what is there plus " +
98
+ "anything the page produced on the way — console errors and failed requests, raw and untriaged. " +
99
+ "Refuses to leave the origin the session was started against.",
100
+ class: "stateful-read",
101
+ tier: "evidence",
102
+ version: "1.0.0",
103
+ inputSchema: SCHEMA,
104
+ run,
105
+ };
106
+ //# sourceMappingURL=browser-navigate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-navigate.js","sourceRoot":"","sources":["../../src/tools/browser-navigate.ts"],"names":[],"mappings":"AAAA;;;8EAG8E;AAG9E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACtI,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAyC,MAAM,UAAU,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAwB,MAAM,uBAAuB,CAAC;AAMpF,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,wHAAwH;SACtI;QACD,GAAG,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,kGAAkG;gBAClG,kGAAkG;gBAClG,6CAA6C;SAChD;KACF;IACD,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC;IAC9B,oBAAoB,EAAE,KAAK;CACnB,CAAC;AAEX,SAAS,KAAK,CAAC,GAAW,EAAE,QAA+B;IACzD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;AAC7H,CAAC;AAED;yFACyF;AACzF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAA6B,EAAE,GAAgB;IACvE,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAExC,+FAA+F;IAC/F,uFAAuF;IACvF,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,aAAa,CAAsB;YACxC,GAAG;YACH,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,oBAAoB,CAAC,0BAA0B,CAAC;YAC1D,KAAK,EAAE,iBAAiB,CAAC,2BAA2B,EAAE,0DAA0D,CAAC;YACjH,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,SAAS,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,aAAa,CAAsB;YACxC,GAAG;YACH,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;YACvB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;YAC7B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;YACvB,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;SACtC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAsB;YACxC,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,GAAG,GAAG,8CAA8C;YAC9D,KAAK,EAAE;gBACL,oCAAoC,KAAK,CAAC,eAAe,wCAAwC;oBAC/F,iBAAiB,GAAG,4EAA4E;oBAChG,iGAAiG;oBACjG,iEAAiE;aACpE;YACD,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,QAAQ,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;IACrC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAEnC,MAAM,IAAI,GAAwB;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;QAC7G,QAAQ;QACR,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC;IAEF,OAAO,aAAa,CAAsB;QACxC,GAAG;QACH,QAAQ,EAAE,GAAG,QAAQ,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,IAAI,UAAU,KAAK,QAAQ,CAAC,aAAa,aAAa;QACnG,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI;QACJ,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC;KAC7D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,kCAAkC;IACzC,WAAW,EACT,sGAAsG;QACtG,iGAAiG;QACjG,8DAA8D;IAChE,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,MAAM;IACnB,GAAG;CACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * `browser_read` — merges the four browser tools that read a page without needing consent of
3
+ * their own: `browser_snapshot`, `browser_navigate`, `browser_wait_for`, `browser_close_session`
4
+ * (documents/plans/mcp-surface-consolidation.md, group 2).
5
+ *
6
+ * `class: "stateful-read"` — deliberately not `action`. None of the four mutates the application;
7
+ * the developer's consent for driving it was already given at `browser_start_session`. What they
8
+ * DO change is what a *later* call in the same session sees (each takes a fresh snapshot, which
9
+ * invalidates every ref issued before it) — that is what "stateful" means here, and it is why
10
+ * `browser_snapshot` was never `read`-class to begin with. Declaring `browser_read` as `action`
11
+ * would put a plain read behind a confirmation handshake it has never needed; the other eight
12
+ * `browser_*` verbs (the ones that DO mutate) are a separate merge, owned elsewhere, and are not
13
+ * touched by this file.
14
+ *
15
+ * Dispatches on "verb" to each absorbed tool's exact `run` body — extracted, not reimplemented,
16
+ * so behaviour is unchanged per verb.
17
+ */
18
+ import type { ToolDefinition } from "./kit.ts";
19
+ import type { BrowserPageData } from "./browser-snapshot.ts";
20
+ import type { BrowserNavigateData } from "./browser-navigate.ts";
21
+ import type { BrowserWaitForData } from "./browser-wait-for.ts";
22
+ import type { BrowserCloseSessionData } from "./browser-close-session.ts";
23
+ /**
24
+ * What this tool answers with: one verb's shape, never a merged one.
25
+ *
26
+ * The merge cost this its single concrete output type, and `unknown` would have
27
+ * silently retired `output-shapes.test.ts`'s check that a declared shape is tied
28
+ * to the code producing it. A union keeps that tie: a verb added without its
29
+ * shape here stops compiling.
30
+ */
31
+ export type BrowserReadData = BrowserPageData | BrowserNavigateData | BrowserWaitForData | BrowserCloseSessionData;
32
+ export declare const browserReadTool: ToolDefinition;
33
+ //# sourceMappingURL=browser-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-read.d.ts","sourceRoot":"","sources":["../../src/tools/browser-read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,UAAU,CAAC;AAO5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAE1E;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,mBAAmB,GACnB,kBAAkB,GAClB,uBAAuB,CAAC;AA0E5B,eAAO,MAAM,eAAe,EAAE,cAY7B,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * `browser_read` — merges the four browser tools that read a page without needing consent of
3
+ * their own: `browser_snapshot`, `browser_navigate`, `browser_wait_for`, `browser_close_session`
4
+ * (documents/plans/mcp-surface-consolidation.md, group 2).
5
+ *
6
+ * `class: "stateful-read"` — deliberately not `action`. None of the four mutates the application;
7
+ * the developer's consent for driving it was already given at `browser_start_session`. What they
8
+ * DO change is what a *later* call in the same session sees (each takes a fresh snapshot, which
9
+ * invalidates every ref issued before it) — that is what "stateful" means here, and it is why
10
+ * `browser_snapshot` was never `read`-class to begin with. Declaring `browser_read` as `action`
11
+ * would put a plain read behind a confirmation handshake it has never needed; the other eight
12
+ * `browser_*` verbs (the ones that DO mutate) are a separate merge, owned elsewhere, and are not
13
+ * touched by this file.
14
+ *
15
+ * Dispatches on "verb" to each absorbed tool's exact `run` body — extracted, not reimplemented,
16
+ * so behaviour is unchanged per verb.
17
+ */
18
+ import { selectVerb } from "./verb.js";
19
+ import { WAIT_TIMEOUT_MAX_MS } from "../browser/wait-target.js";
20
+ import { run as runSnapshot } from "./browser-snapshot.js";
21
+ import { run as runNavigate } from "./browser-navigate.js";
22
+ import { run as runWaitFor } from "./browser-wait-for.js";
23
+ import { run as runClose } from "./browser-close-session.js";
24
+ const VERB_SPECS = [
25
+ { verb: "snapshot", accepts: ["startAt", "limit", "reveal"] },
26
+ { verb: "navigate", accepts: ["url"] },
27
+ { verb: "wait_for", accepts: ["role", "name", "timeoutMs"] },
28
+ { verb: "close", accepts: [] },
29
+ ];
30
+ /** Every verb needs the session it reads — genuinely shared, not one verb's property leaking
31
+ * into another's. */
32
+ const SHARED_PROPS = ["sessionId"];
33
+ const SCHEMA = {
34
+ type: "object",
35
+ properties: {
36
+ verb: {
37
+ type: "string",
38
+ enum: ["snapshot", "navigate", "wait_for", "close"],
39
+ description: "Which read to perform: snapshot, navigate, wait_for, or close.",
40
+ },
41
+ sessionId: {
42
+ type: "string",
43
+ description: "REQUIRED. From browser's start_session.",
44
+ },
45
+ // --- snapshot only ---
46
+ startAt: {
47
+ type: "integer",
48
+ minimum: 0,
49
+ description: "snapshot only. Skip this many elements. Page with totalElements.",
50
+ },
51
+ limit: {
52
+ type: "integer",
53
+ minimum: 1,
54
+ description: "snapshot only. Max elements returned.",
55
+ },
56
+ reveal: {
57
+ type: "boolean",
58
+ description: "snapshot only. Scroll to reveal rows not yet in the DOM. Off by default.",
59
+ },
60
+ // --- navigate only ---
61
+ url: {
62
+ type: "string",
63
+ description: "navigate only, REQUIRED. Must be the session's consented origin.",
64
+ },
65
+ // --- wait_for only ---
66
+ role: {
67
+ type: "string",
68
+ description: "wait_for only. role, name, or both required.",
69
+ },
70
+ name: {
71
+ type: "string",
72
+ description: "wait_for only. Matched exactly (case/space-insensitive).",
73
+ },
74
+ timeoutMs: {
75
+ type: "integer",
76
+ minimum: 0,
77
+ description: `wait_for only. Default 5000, capped at ${WAIT_TIMEOUT_MAX_MS}. Timing out is a normal outcome.`,
78
+ },
79
+ },
80
+ required: ["verb", "sessionId"],
81
+ additionalProperties: false,
82
+ };
83
+ async function run(args, ctx) {
84
+ const verb = selectVerb(args, "verb", VERB_SPECS, SHARED_PROPS);
85
+ if (verb === "snapshot")
86
+ return runSnapshot(args, ctx);
87
+ if (verb === "navigate")
88
+ return runNavigate(args, ctx);
89
+ if (verb === "wait_for")
90
+ return runWaitFor(args, ctx);
91
+ return runClose(args, ctx);
92
+ }
93
+ export const browserReadTool = {
94
+ name: "browser_read",
95
+ class: "stateful-read",
96
+ tier: "evidence",
97
+ version: "1.0.0",
98
+ title: "Read, navigate, wait on, or close a browser session",
99
+ description: "Read-only browser operations, chosen by verb: snapshot, navigate, wait_for, or close. Never " +
100
+ "mutates the app, so none needs confirming — but each takes a fresh snapshot, invalidating " +
101
+ "prior refs.",
102
+ inputSchema: SCHEMA,
103
+ run,
104
+ };
105
+ //# sourceMappingURL=browser-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-read.js","sourceRoot":"","sources":["../../src/tools/browser-read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /** `browser_run_scenario` replays a saved scenario in one batch call — one aggregated reply
2
+ * instead of N, since a check has one outcome, not fragments to reassemble. `class: "action"`
3
+ * like the verbs: mints nothing, consent stays bound to `browser_start_session`'s origin, and a
4
+ * stored `navigate` leaving it stops the replay. Per DEC-381, only an asserted expectation that
5
+ * fails is blocking — an observed console error the author never asserted against is not. */
6
+ import { type BrowserGraphWrite } from "../browser/graph-write.ts";
7
+ import { type ScenarioAssertionResult, type ScenarioCounts, type ScenarioStepResult } from "../browser/scenario-runner.ts";
8
+ import type { BrowserEvidenceReport } from "../browser/evidence.ts";
9
+ import { type ToolDefinition } from "./kit.ts";
10
+ export interface BrowserRunScenarioData {
11
+ readonly sessionId: string;
12
+ readonly scenario: string;
13
+ /** `passed` · `failed` · `unresolved` · `unverified` — never `passed` for a scenario that asserted nothing. */
14
+ readonly outcome: "passed" | "failed" | "unresolved" | "unverified" | "notRun";
15
+ /** Three counts that are never summed, plus how many assertions held. */
16
+ readonly counts: ScenarioCounts;
17
+ /** Failed assertions alone. An unresolvable step is not a defect claim, so it does not join this. */
18
+ readonly blockingTotal: number;
19
+ /** 0 clean · 1 blocking findings · 2 the check could not run. `descry check`'s existing vocabulary. */
20
+ readonly exitCode: 0 | 1 | 2;
21
+ readonly steps: readonly ScenarioStepResult[];
22
+ readonly assertions: readonly ScenarioAssertionResult[];
23
+ /** One summary for the whole batch, drained a step at a time. */
24
+ readonly evidence: BrowserEvidenceReport;
25
+ readonly graph: BrowserGraphWrite;
26
+ }
27
+ export declare const browserRunScenarioTool: ToolDefinition;
28
+ //# sourceMappingURL=browser-run-scenario.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-run-scenario.d.ts","sourceRoot":"","sources":["../../src/tools/browser-run-scenario.ts"],"names":[],"mappings":"AAAA;;;;8FAI8F;AAI9F,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAA2B,KAAK,uBAAuB,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEpJ,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAIpE,OAAO,EAAoC,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAGjF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+GAA+G;IAC/G,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC/E,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,qGAAqG;IACrG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,uGAAuG;IACvG,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACxD,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AAkOD,eAAO,MAAM,sBAAsB,EAAE,cAiBpC,CAAC"}
@@ -0,0 +1,238 @@
1
+ /** `browser_run_scenario` replays a saved scenario in one batch call — one aggregated reply
2
+ * instead of N, since a check has one outcome, not fragments to reassemble. `class: "action"`
3
+ * like the verbs: mints nothing, consent stays bound to `browser_start_session`'s origin, and a
4
+ * stored `navigate` leaving it stops the replay. Per DEC-381, only an asserted expectation that
5
+ * fails is blocking — an observed console error the author never asserted against is not. */
6
+ import { readScenario } from "../scenarios/index.js";
7
+ import { browserAnswer, emptyEvidence, mutationRefusal, useSession, withinConsent } from "../browser/tool-support.js";
8
+ import { NO_GRAPH_WRITE } from "../browser/graph-write.js";
9
+ import { mutates, replayScenario } from "../browser/scenario-runner.js";
10
+ import { scenarioPath } from "../scenarios/index.js";
11
+ import { CANCELLED_STATE } from "../cancellation.js";
12
+ import { runPreflight } from "@descryy/runtime-controller";
13
+ import { buildBrowserToolReadyChecks } from "../ready-checks.js";
14
+ import { requiredString } from "./kit.js";
15
+ const SCHEMA = {
16
+ type: "object",
17
+ properties: {
18
+ sessionId: {
19
+ type: "string",
20
+ description: "REQUIRED. The id returned by browser_start_session. The replay runs in that session, under the consent it was granted.",
21
+ },
22
+ name: {
23
+ type: "string",
24
+ description: "REQUIRED. The scenario's name, without the file extension — a scenario saved as " +
25
+ "descry/scenarios/checkout.scenario.json is named \"checkout\". Saved scenarios are committed files; " +
26
+ "browser_save_scenario writes them.",
27
+ },
28
+ confirmToken: {
29
+ type: "string",
30
+ description: "Not normally needed. Consent is granted once, for the whole session, by browser_start_session, so " +
31
+ "this call replays directly. The field is declared because the handshake reads it for every " +
32
+ "action-class tool.",
33
+ },
34
+ },
35
+ required: ["sessionId", "name"],
36
+ additionalProperties: false,
37
+ };
38
+ function empty(sessionId, name) {
39
+ return {
40
+ sessionId,
41
+ scenario: name,
42
+ outcome: "notRun",
43
+ counts: { passed: 0, failed: 0, unresolved: 0, unverified: 0 },
44
+ blockingTotal: 0,
45
+ // 2 rather than 0: this is "the check could not run", and a refusal that
46
+ // reported clean would let a scenario nobody could replay keep claiming
47
+ // coverage.
48
+ exitCode: 2,
49
+ steps: [],
50
+ assertions: [],
51
+ evidence: emptyEvidence(),
52
+ graph: NO_GRAPH_WRITE,
53
+ };
54
+ }
55
+ async function run(args, ctx) {
56
+ const sessionId = requiredString(args, "sessionId");
57
+ const name = requiredString(args, "name");
58
+ const stored = await readScenario(ctx.session.repoPath, name);
59
+ if (!stored.valid) {
60
+ return browserAnswer({
61
+ ctx,
62
+ state: "refused",
63
+ headline: `Scenario "${name}" cannot be replayed.`,
64
+ notes: [
65
+ ...stored.problems,
66
+ `Scenarios live in ${scenarioPath(ctx.session.repoPath, name)} and are committed like source. ` +
67
+ "browser_save_scenario writes one from a session you have explored.",
68
+ ],
69
+ data: empty(sessionId, name),
70
+ });
71
+ }
72
+ const scenario = stored.scenario;
73
+ const found = await useSession(ctx.session.browserSessions(), sessionId);
74
+ if (!found.ok) {
75
+ return browserAnswer({
76
+ ctx,
77
+ state: found.dead.state,
78
+ headline: found.dead.headline,
79
+ notes: found.dead.notes,
80
+ data: { ...empty(sessionId, name), evidence: found.dead.evidence },
81
+ });
82
+ }
83
+ const { entry } = found;
84
+ // Consent is bound to one origin and a stored file cannot widen it. Checked
85
+ // before anything runs, because a replay that got three steps in and then
86
+ // refused would have already changed the application.
87
+ if (!withinConsent(entry, scenario.targetUrl)) {
88
+ return browserAnswer({
89
+ ctx,
90
+ state: "refused",
91
+ headline: `Scenario "${name}" targets another origin.`,
92
+ notes: [
93
+ `It opens ${scenario.targetUrl}, and this session's consent covers ${entry.consentedOrigin} only. ` +
94
+ "Consent is granted per session and bound to the origin it was granted for, so a saved file cannot " +
95
+ "extend it. Start a session against that origin to replay this scenario.",
96
+ ],
97
+ data: empty(sessionId, name),
98
+ });
99
+ }
100
+ const refusedForSafety = mutationRefusal(entry);
101
+ if (refusedForSafety !== null && mutates(scenario)) {
102
+ return browserAnswer({
103
+ ctx,
104
+ state: "refused",
105
+ headline: `${entry.profile?.name ?? "This environment"} is read-only.`,
106
+ notes: [
107
+ refusedForSafety,
108
+ `Scenario "${name}" clicks, types or fills, so replaying it would change the application. A ` +
109
+ "navigate-only scenario would still run here.",
110
+ ],
111
+ data: empty(sessionId, name),
112
+ });
113
+ }
114
+ // RT-263: the session may have opened fine and then the application died before
115
+ // this replay started -- checked fresh here rather than trusted from
116
+ // browser_start_session's own preflight, which only proved the target answered at
117
+ // open time. Read-only, single TCP connect; reports within seconds instead of
118
+ // letting the replay's own step timeouts discover the same thing one step at a time.
119
+ // Optional on the port (`entry.page.probeTargetReachable`) for the same reason
120
+ // `browser-start-session.ts` guards it: the fake driver's page session has no real
121
+ // network to probe, so `packages/mcp/test`'s scenario suites (made-up target ports)
122
+ // are unaffected; only the real Chromium driver implements it.
123
+ const reachability = await entry.page.probeTargetReachable?.(scenario.targetUrl);
124
+ if (reachability !== undefined && reachability !== null && !reachability.reachable) {
125
+ return browserAnswer({
126
+ ctx,
127
+ state: "refused",
128
+ headline: `Scenario "${name}" cannot be replayed — its target does not answer.`,
129
+ notes: [reachability.message],
130
+ data: empty(sessionId, name),
131
+ });
132
+ }
133
+ const ready = await runPreflight(buildBrowserToolReadyChecks(ctx.session));
134
+ if (ready.status === "broken") {
135
+ return browserAnswer({
136
+ ctx,
137
+ state: "refused",
138
+ headline: `Scenario "${name}" cannot be replayed — the environment is not ready.`,
139
+ notes: ready.checks.filter((check) => check.required && !check.ok).map((check) => `${check.label} — ${check.message}`),
140
+ data: empty(sessionId, name),
141
+ });
142
+ }
143
+ // Start where the scenario says it starts, rather than wherever the session
144
+ // happened to be left. A replay that began from an arbitrary page is not a
145
+ // repeat of the run that was saved.
146
+ if (entry.page.currentUrl() !== scenario.targetUrl) {
147
+ await entry.page.navigate(scenario.targetUrl);
148
+ }
149
+ // `ctx.session.credentialStore` — RG-1(4) / lane "delivery": undefined for
150
+ // every session that never set one, so a `${credential:NAME}` step refuses
151
+ // by name exactly as before. `process.env` is passed through explicitly
152
+ // rather than omitted, because `credentialStore` is `replayScenario`'s
153
+ // sixth positional parameter and `env` is its fifth.
154
+ const replay = await replayScenario(ctx, ctx.session.browserSessions(), sessionId, scenario, process.env, ctx.session.credentialStore);
155
+ const notes = [
156
+ ...ready.disclosures,
157
+ ...(replay.sessionEnded === null ? [] : replay.sessionEnded.notes),
158
+ ...replay.notes,
159
+ // A cancelled replay is `unresolved` with zero unresolved steps — skip the outcome note, the
160
+ // replay's own note already says what stopped it.
161
+ ...(replay.cancelled ? [] : outcomeNotes(replay.outcome, replay.counts, name)),
162
+ ...replay.steps.filter((s) => s.resolution !== null).map((s) => s.resolution.message),
163
+ ...replay.assertions.filter((a) => a.status === "failed" || a.status === "unevaluable").map((a) => a.detail),
164
+ ];
165
+ // Cancellation outranks a dead session in the state: both are true, and
166
+ // "the caller stopped this" is the one that explains the other.
167
+ const state = replay.cancelled ? CANCELLED_STATE : replay.sessionEnded?.state;
168
+ return browserAnswer({
169
+ ctx,
170
+ ...(state === undefined ? {} : { state }),
171
+ headline: (replay.cancelled ? `Scenario "${name}" was cancelled: ` : `Scenario "${name}": `) +
172
+ `${replay.outcome} — ${replay.counts.passed} assertion(s) held, ` +
173
+ `${replay.counts.failed} failed, ${replay.counts.unresolved} could not run.`,
174
+ notes,
175
+ data: {
176
+ sessionId,
177
+ scenario: name,
178
+ outcome: replay.outcome,
179
+ counts: replay.counts,
180
+ blockingTotal: replay.blockingTotal,
181
+ exitCode: replay.exitCode,
182
+ steps: replay.steps,
183
+ assertions: replay.assertions,
184
+ evidence: replay.evidence,
185
+ graph: replay.graph,
186
+ },
187
+ });
188
+ }
189
+ /** The disclosure the three counts exist for. Emitted per outcome, not always — a note on every
190
+ * reply is one nobody reads by the third (same reasoning as `evidenceNotes`'s triage disclaimer). */
191
+ function outcomeNotes(outcome, counts, name) {
192
+ switch (outcome) {
193
+ case "unverified":
194
+ return [
195
+ `Scenario "${name}" stores no assertions, so this replay verified nothing. Its steps still resolved ` +
196
+ "and still ran — real information — but that is not the same statement as the application behaving, " +
197
+ "and it is deliberately never reported as passed.",
198
+ ];
199
+ case "unresolved":
200
+ return [
201
+ `${counts.unresolved} step or assertion could not run, so this replay neither passed nor failed. ` +
202
+ "Descry cannot tell a deliberate rename from a vanished element — both look identical from here — " +
203
+ "so it claims neither. The remedy is in the message below: re-save the step if the change was " +
204
+ "intended, or fix the application if it was not.",
205
+ ];
206
+ case "failed":
207
+ return [
208
+ `${counts.failed} assertion(s) the scenario's author wrote down did not hold. Only those count as ` +
209
+ "blocking; console errors and failed requests observed during the replay are reported below and are " +
210
+ "not, because they are frequently true of a working page." +
211
+ (counts.unresolved > 0
212
+ ? ` ${counts.unresolved} check(s) also could not run, counted separately and never added to the ` +
213
+ "blocking total."
214
+ : ""),
215
+ ];
216
+ case "passed":
217
+ case "notRun":
218
+ return [];
219
+ }
220
+ }
221
+ export const browserRunScenarioTool = {
222
+ name: "browser_run_scenario",
223
+ title: "Replay a saved scenario",
224
+ description: "Replay a saved scenario — a named step sequence with the assertions its author wrote down — in one " +
225
+ "call, and return a single evidence summary rather than one reply per step. Each step re-resolves its " +
226
+ "element against a fresh page: exactly one match or the replay stops and says which of role, name and " +
227
+ "selector disagreed and what the page holds now. Reports three counts that are never added together — " +
228
+ "failed assertions, checks that could not run, and whether the scenario asserted anything at all. A " +
229
+ "scenario with no assertions replays as unverified, never as passed.",
230
+ class: "action",
231
+ tier: "evidence",
232
+ version: "1.0.0",
233
+ inputSchema: SCHEMA,
234
+ run,
235
+ // Undefined, always, same as the verbs: consent lives at browser_start_session, not here.
236
+ describeAction: () => undefined,
237
+ };
238
+ //# sourceMappingURL=browser-run-scenario.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-run-scenario.js","sourceRoot":"","sources":["../../src/tools/browser-run-scenario.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * `browser_save_scenario`: an explored session becomes a durable scenario,
3
+ * written only through `writeScenario` (validates in and out — no private
4
+ * disk path here). A step can't carry a `ref`: the schema omits the field entirely and the format module also rejects one by name.
5
+ */
6
+ import { type ToolDefinition } from "./kit.ts";
7
+ export interface BrowserSaveScenarioData {
8
+ readonly sessionId: string;
9
+ readonly name: string;
10
+ /** Where it was written, or "" when nothing was written. */
11
+ readonly path: string;
12
+ readonly targetUrl: string;
13
+ readonly stepCount: number;
14
+ readonly assertionCount: number;
15
+ readonly savedAt: string;
16
+ readonly savedAtCommit: string;
17
+ }
18
+ export declare const browserSaveScenarioTool: ToolDefinition;
19
+ //# sourceMappingURL=browser-save-scenario.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-save-scenario.d.ts","sourceRoot":"","sources":["../../src/tools/browser-save-scenario.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,EAAoE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAGjH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAubD,eAAO,MAAM,uBAAuB,EAAE,cA0BrC,CAAC"}