@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,353 @@
1
+ /**
2
+ * Replays a stored scenario (§7 runner). DEC-384: failed assertion blocks; console
3
+ * error/failed request doesn't; no assertions is `unverified`; unresolvable step is
4
+ * neither pass nor fail. `registry.use()` and evidence draining run once per step only.
5
+ */
6
+ import { resolveEitherRef, } from "../scenarios/index.js";
7
+ import { NoSuchOptionError, NotSelectableError, NotSubmittableError } from "./driver.js";
8
+ import { NO_GRAPH_WRITE } from "./graph-write.js";
9
+ import { resolveTarget } from "./scenario-resolve.js";
10
+ import { observeAndCorrelate, useSession, withinConsent } from "./tool-support.js";
11
+ const MUTATING = ["click", "type", "fill", "select", "submit"];
12
+ /** True when replaying this scenario would change the running application. A navigate-only scenario would not. */
13
+ export function mutates(scenario) {
14
+ return scenario.steps.some((step) => MUTATING.includes(step.action));
15
+ }
16
+ function mergeGraph(into, next) {
17
+ const reached = [...into.reached];
18
+ for (const node of next.reached)
19
+ if (!reached.some((seen) => seen.nodeId === node.nodeId))
20
+ reached.push(node);
21
+ return {
22
+ reached,
23
+ promoted: [...new Set([...into.promoted, ...next.promoted])],
24
+ created: [...new Set([...into.created, ...next.created])],
25
+ refused: [...new Set([...into.refused, ...next.refused])],
26
+ contradictions: [...new Set([...into.contradictions, ...next.contradictions])],
27
+ };
28
+ }
29
+ export async function replayScenario(ctx, registry, sessionId, scenario,
30
+ /** Where a `${env:VAR}` step resolves its value. Defaulted rather than required so every
31
+ * existing caller is unchanged, and injectable so a test never has to mutate the process. */
32
+ env = process.env,
33
+ /** Where a `${credential:NAME}` step resolves its value — "sign in as this profile" without the
34
+ * credential ever entering the committed file (lane A1, item 4). Undefined by default, same as
35
+ * every existing caller being unchanged: a scenario naming a credential reference with no store
36
+ * configured refuses by name rather than silently falling through to the environment resolver. */
37
+ credentialStore = undefined) {
38
+ const steps = scenario.steps.map((step, index) => ({
39
+ index,
40
+ action: step.action,
41
+ status: "skipped",
42
+ url: "",
43
+ resolution: null,
44
+ }));
45
+ const assertionResults = scenario.assertions.map(() => null);
46
+ const acc = { consoleErrors: [], failedRequests: [], pendingRequests: [], actions: [], unsettled: [], evidenceWarnings: [], totalRequests: 0 };
47
+ let graph = NO_GRAPH_WRITE;
48
+ const notes = [];
49
+ let sessionEnded = null;
50
+ let stopped = false;
51
+ let cancelled = false;
52
+ function absorb(evidence) {
53
+ acc.consoleErrors.push(...evidence.consoleErrors);
54
+ acc.failedRequests.push(...evidence.failedRequests);
55
+ acc.pendingRequests.push(...evidence.pendingRequests);
56
+ acc.actions.push(...evidence.actions);
57
+ acc.unsettled.push(...evidence.unsettled);
58
+ for (const warning of evidence.evidenceWarnings)
59
+ if (!acc.evidenceWarnings.includes(warning))
60
+ acc.evidenceWarnings.push(warning);
61
+ acc.totalRequests += evidence.totalRequests;
62
+ }
63
+ function cumulative() {
64
+ return {
65
+ consoleErrors: [...acc.consoleErrors],
66
+ failedRequests: [...acc.failedRequests],
67
+ pendingRequests: [...acc.pendingRequests],
68
+ actions: [...acc.actions],
69
+ unsettled: [...acc.unsettled],
70
+ evidenceWarnings: [...acc.evidenceWarnings],
71
+ totalRequests: acc.totalRequests,
72
+ };
73
+ }
74
+ function anchoredAt(anchor) {
75
+ return scenario.assertions.some((assertion, index) => assertion.afterStep === anchor && assertionResults[index] === null);
76
+ }
77
+ /** Snapshots only when something is anchored here — not a micro-optimisation: a
78
+ * snapshot is a real round trip, and snapshotting every step of a 20-step scenario
79
+ * that asserts once at the end would triple the common case's cost. */
80
+ async function evaluateAnchored(anchor, entry) {
81
+ if (!anchoredAt(anchor))
82
+ return;
83
+ const snapshot = await entry.page.snapshot();
84
+ scenario.assertions.forEach((assertion, index) => {
85
+ if (assertion.afterStep !== anchor || assertionResults[index] !== null)
86
+ return;
87
+ assertionResults[index] = evaluateAssertion(assertion, index, entry, snapshot, cumulative());
88
+ });
89
+ }
90
+ for (const [index, step] of scenario.steps.entries()) {
91
+ // Checked between steps, before driving anything: a cancelled replay must not
92
+ // keep clicking a live system for a caller who's gone. The in-flight step still
93
+ // finishes and its evidence is kept; nothing after it starts.
94
+ if (ctx.signal.aborted) {
95
+ cancelled = true;
96
+ stopped = true;
97
+ notes.push(`The replay was cancelled after ${index} of ${scenario.steps.length} step(s). The remaining steps ` +
98
+ "were not run, so this scenario neither passed nor failed — it stopped. Everything observed up " +
99
+ "to that point is below.");
100
+ break;
101
+ }
102
+ // `use` is the crash detector and touches the idle clock — resolving the
103
+ // session once per scenario would let a 5-minute run get reaped halfway through.
104
+ const found = await useSession(registry, sessionId);
105
+ if (!found.ok) {
106
+ sessionEnded = found.dead;
107
+ absorb(found.dead.evidence);
108
+ stopped = true;
109
+ break;
110
+ }
111
+ const { entry } = found;
112
+ ctx.progress(`Replaying step ${index + 1} of ${scenario.steps.length}`, index + 1, scenario.steps.length);
113
+ if (step.action === "navigate") {
114
+ const url = step.url ?? "";
115
+ if (!withinConsent(entry, url)) {
116
+ steps[index] = {
117
+ index,
118
+ action: step.action,
119
+ status: "unresolved",
120
+ url: entry.page.currentUrl(),
121
+ resolution: {
122
+ kind: "zero",
123
+ disagreed: [],
124
+ message: `step ${index}: navigating to ${url} would leave ${entry.consentedOrigin}, the origin this ` +
125
+ "session was consented for. The step is not run and the replay stops — consent is bound to one " +
126
+ "origin, and a stored step cannot widen it.",
127
+ },
128
+ };
129
+ stopped = true;
130
+ break;
131
+ }
132
+ await entry.page.navigate(url);
133
+ }
134
+ else {
135
+ // Fresh snapshot every time, exact-or-refuse against it.
136
+ const snapshot = await entry.page.snapshot();
137
+ const target = step.target;
138
+ if (target === null) {
139
+ steps[index] = {
140
+ index,
141
+ action: step.action,
142
+ status: "unresolved",
143
+ url: snapshot.url,
144
+ resolution: {
145
+ kind: "zero",
146
+ disagreed: [],
147
+ message: `step ${index}: a ${step.action} step carries no target to resolve. Fix the scenario file and re-save it.`,
148
+ },
149
+ };
150
+ stopped = true;
151
+ break;
152
+ }
153
+ const resolved = resolveTarget(`step ${index}`, target, snapshot);
154
+ if (!resolved.resolved) {
155
+ steps[index] = { index, action: step.action, status: "unresolved", url: snapshot.url, resolution: resolved.failure };
156
+ // Stopping without draining would discard the evidence needed to tell a
157
+ // rename from a real breakage.
158
+ const observed = await observeAndCorrelate(ctx, entry);
159
+ absorb(observed.evidence);
160
+ graph = mergeGraph(graph, observed.graph);
161
+ notes.push(...observed.notes);
162
+ stopped = true;
163
+ break;
164
+ }
165
+ // Resolved before the verb runs, and a failure stops the replay rather than typing the
166
+ // reference's own text into the field. An unresolvable reference is Descry's inability to
167
+ // run the check — `unresolved`, exit 2 — never a claim about the application.
168
+ let value = "";
169
+ if (step.action === "type" || step.action === "fill" || step.action === "select") {
170
+ const secret = await resolveEitherRef(step.text ?? "", env, credentialStore);
171
+ if (!secret.resolved) {
172
+ steps[index] = {
173
+ index,
174
+ action: step.action,
175
+ status: "unresolved",
176
+ url: snapshot.url,
177
+ resolution: { kind: "zero", disagreed: [], message: `step ${index}: ${secret.reason}` },
178
+ };
179
+ const observed = await observeAndCorrelate(ctx, entry);
180
+ absorb(observed.evidence);
181
+ graph = mergeGraph(graph, observed.graph);
182
+ notes.push(...observed.notes);
183
+ stopped = true;
184
+ break;
185
+ }
186
+ value = secret.value;
187
+ }
188
+ const ref = resolved.element.ref;
189
+ try {
190
+ if (step.action === "click")
191
+ await entry.page.click(ref);
192
+ else if (step.action === "type")
193
+ await entry.page.type(ref, value);
194
+ else if (step.action === "fill")
195
+ await entry.page.fill(ref, value);
196
+ else if (step.action === "select")
197
+ await entry.page.select(ref, value);
198
+ else
199
+ await entry.page.submit(ref);
200
+ }
201
+ catch (error) {
202
+ // The element resolved and the verb still could not act on it: the chooser no longer
203
+ // offers this option, or the form lost its submit control. That is the page having
204
+ // changed under a scenario written against an older one — the same statement an
205
+ // unresolvable target makes, so it is reported the same way and stops the replay.
206
+ // Anything else (a crashed session, a driver fault) is not this, and is rethrown.
207
+ if (!(error instanceof NotSelectableError) &&
208
+ !(error instanceof NoSuchOptionError) &&
209
+ !(error instanceof NotSubmittableError)) {
210
+ throw error;
211
+ }
212
+ steps[index] = {
213
+ index,
214
+ action: step.action,
215
+ status: "unresolved",
216
+ url: snapshot.url,
217
+ resolution: { kind: "zero", disagreed: [], message: `step ${index}: ${error.message}` },
218
+ };
219
+ const observed = await observeAndCorrelate(ctx, entry);
220
+ absorb(observed.evidence);
221
+ graph = mergeGraph(graph, observed.graph);
222
+ notes.push(...observed.notes);
223
+ stopped = true;
224
+ break;
225
+ }
226
+ }
227
+ // Drained once per step, aggregated — a final-only read loses earlier steps;
228
+ // peeking double-reports on teardown flush.
229
+ const observed = await observeAndCorrelate(ctx, entry);
230
+ absorb(observed.evidence);
231
+ graph = mergeGraph(graph, observed.graph);
232
+ notes.push(...observed.notes);
233
+ steps[index] = { index, action: step.action, status: "ran", url: entry.page.currentUrl(), resolution: null };
234
+ await evaluateAnchored(index, entry);
235
+ }
236
+ // Only when something is anchored at the end — `use` is not free (crash
237
+ // detector, idle clock), so a scenario with nothing anchored skips the call.
238
+ if (!stopped && anchoredAt(null)) {
239
+ const found = await useSession(registry, sessionId);
240
+ if (found.ok) {
241
+ await evaluateAnchored(null, found.entry);
242
+ }
243
+ else {
244
+ sessionEnded = found.dead;
245
+ absorb(found.dead.evidence);
246
+ }
247
+ }
248
+ const assertions = scenario.assertions.map((assertion, index) => assertionResults[index] ?? {
249
+ index,
250
+ kind: assertion.kind,
251
+ afterStep: assertion.afterStep,
252
+ status: "notReached",
253
+ detail: `The replay stopped before this assertion's anchor, so it never ran. That is not a pass and not a ` +
254
+ "failure — it is already accounted for by the step that stopped the run.",
255
+ });
256
+ const failed = assertions.filter((a) => a.status === "failed").length;
257
+ const unevaluable = assertions.filter((a) => a.status === "unevaluable").length;
258
+ const unresolvedSteps = steps.filter((s) => s.status === "unresolved").length;
259
+ const unresolved = unresolvedSteps + unevaluable;
260
+ // A scenario with no assertions verified nothing — 1 or 0, summable across
261
+ // scenarios but never with the other two counts.
262
+ const unverified = scenario.assertions.length === 0 ? 1 : 0;
263
+ const passed = assertions.filter((a) => a.status === "passed").length;
264
+ // `cancelled` sits beside `sessionEnded`: a stopped replay leaves assertions
265
+ // `notReached`, counted toward neither `failed` nor `unresolved` — without it, a
266
+ // run cancelled after 1 of 20 steps would look identical to one that verified all.
267
+ const outcome = failed > 0
268
+ ? "failed"
269
+ : unresolved > 0 || sessionEnded !== null || cancelled
270
+ ? "unresolved"
271
+ : unverified > 0
272
+ ? "unverified"
273
+ : "passed";
274
+ return {
275
+ scenario: scenario.name,
276
+ sessionId,
277
+ outcome,
278
+ counts: { passed, failed, unresolved, unverified },
279
+ // Only failed assertions. See the header.
280
+ blockingTotal: failed,
281
+ exitCode: outcome === "failed" ? 1 : outcome === "unresolved" ? 2 : 0,
282
+ steps,
283
+ assertions,
284
+ evidence: cumulative(),
285
+ graph,
286
+ sessionEnded,
287
+ cancelled,
288
+ notes,
289
+ };
290
+ }
291
+ /** Evaluates one assertion against current page + evidence gathered so far. The two
292
+ * evidence assertions read cumulatively (since replay began, not just the last step) —
293
+ * anchoring `noConsoleErrors` after step 3 claims the page was clean the whole way. */
294
+ function evaluateAssertion(assertion, index, entry, snapshot, evidence) {
295
+ const base = { index, kind: assertion.kind, afterStep: assertion.afterStep };
296
+ const unevaluable = (detail) => ({ ...base, status: "unevaluable", detail });
297
+ const passed = (detail) => ({ ...base, status: "passed", detail });
298
+ const failed = (detail) => ({ ...base, status: "failed", detail });
299
+ switch (assertion.kind) {
300
+ case "elementVisible": {
301
+ if (assertion.target === null) {
302
+ return unevaluable(`assertion ${index}: elementVisible names no element. Fix the scenario file and re-save it.`);
303
+ }
304
+ const found = resolveTarget(`assertion ${index}`, assertion.target, snapshot);
305
+ if (found.resolved)
306
+ return passed(`assertion ${index}: the element is on ${snapshot.url}.`);
307
+ // Ambiguity is the page being unreadable, not the claim being wrong. Zero/partial
308
+ // matches are the claim failing — the author said this element would be here.
309
+ if (found.failure.kind === "ambiguous")
310
+ return unevaluable(found.failure.message);
311
+ return failed(found.failure.message);
312
+ }
313
+ case "textEquals": {
314
+ if (assertion.target === null || assertion.expected === null) {
315
+ return unevaluable(`assertion ${index}: textEquals needs both an element and an expected value, and the scenario file ` +
316
+ "stores only one of them. Fix the scenario and re-save it.");
317
+ }
318
+ const found = resolveTarget(`assertion ${index}`, assertion.target, snapshot);
319
+ if (!found.resolved) {
320
+ return found.failure.kind === "ambiguous" ? unevaluable(found.failure.message) : failed(found.failure.message);
321
+ }
322
+ // Compares accessible name only — the port exposes no text-content field, and
323
+ // inventing one would promise something the format can't keep.
324
+ return found.element.name === assertion.expected
325
+ ? passed(`assertion ${index}: the element's accessible name is "${assertion.expected}".`)
326
+ : failed(`assertion ${index}: expected the element's accessible name to be "${assertion.expected}", and it ` +
327
+ `is "${found.element.name}".`);
328
+ }
329
+ case "urlEquals": {
330
+ if (assertion.expected === null) {
331
+ return unevaluable(`assertion ${index}: urlEquals stores no expected URL. Fix the scenario file and re-save it.`);
332
+ }
333
+ const actual = entry.page.currentUrl();
334
+ return actual === assertion.expected
335
+ ? passed(`assertion ${index}: the page is at ${actual}.`)
336
+ : failed(`assertion ${index}: expected the page to be at ${assertion.expected}, and it is at ${actual}.`);
337
+ }
338
+ case "noConsoleErrors":
339
+ return evidence.consoleErrors.length === 0
340
+ ? passed(`assertion ${index}: no console errors were observed.`)
341
+ : failed(`assertion ${index}: ${evidence.consoleErrors.length} console error(s) were observed, the first ` +
342
+ `being "${evidence.consoleErrors[0]?.text ?? ""}". An observed console error does not block a ` +
343
+ "push on its own; this one does, because the scenario's author claimed there would be none.");
344
+ case "noFailedRequests":
345
+ return evidence.failedRequests.length === 0
346
+ ? passed(`assertion ${index}: no failed requests were observed.`)
347
+ : failed(`assertion ${index}: ${evidence.failedRequests.length} request(s) failed, the first being ` +
348
+ `${evidence.failedRequests[0]?.method ?? ""} ${evidence.failedRequests[0]?.url ?? ""}. A failed ` +
349
+ "request does not block a push on its own; this one does, because the author claimed there " +
350
+ "would be none.");
351
+ }
352
+ }
353
+ //# sourceMappingURL=scenario-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-runner.js","sourceRoot":"","sources":["../../src/browser/scenario-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Loads a stack-trace parser named by the caller as a module specifier —
3
+ * rule 1: a static import from a language-named adapter would put
4
+ * "typescript" above the IR boundary. Without one, every request is still observed and endpoint named, but no caller edge is written — disclosed, never hidden.
5
+ */
6
+ import type { StackTraceParser } from "@descryy/runtime-backend-observation";
7
+ /** A stack-trace parser named the way `RuntimeAdapterSpec` names a runtime adapter. */
8
+ export interface StackParserSpec {
9
+ readonly module: string;
10
+ /** Named export to call. Defaults to the `create*StackTraceParser` convention. */
11
+ readonly export?: string;
12
+ }
13
+ /** Distinct from a generic `Error` so a tool can disclose "the parser wouldn't load" separately from "the run itself broke" — both honest, not the same statement. */
14
+ export declare class StackParserLoadError extends Error {
15
+ readonly specifier: string;
16
+ constructor(specifier: string, reason: string);
17
+ }
18
+ export declare function loadStackParser(spec: StackParserSpec): Promise<StackTraceParser>;
19
+ //# sourceMappingURL=stack-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-parser.d.ts","sourceRoot":"","sources":["../../src/browser/stack-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAI7E,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,sKAAsK;AACtK,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAQ9C;AAKD,wBAAsB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8CtF"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Loads a stack-trace parser named by the caller as a module specifier —
3
+ * rule 1: a static import from a language-named adapter would put
4
+ * "typescript" above the IR boundary. Without one, every request is still observed and endpoint named, but no caller edge is written — disclosed, never hidden.
5
+ */
6
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
7
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
8
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
9
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
10
+ });
11
+ }
12
+ return path;
13
+ };
14
+ import { checkModuleTrust } from "../module-trust.js";
15
+ /** Distinct from a generic `Error` so a tool can disclose "the parser wouldn't load" separately from "the run itself broke" — both honest, not the same statement. */
16
+ export class StackParserLoadError extends Error {
17
+ specifier;
18
+ constructor(specifier, reason) {
19
+ super(`Could not load a stack-trace parser from "${specifier}": ${reason}. Requests will still be observed ` +
20
+ "and endpoints still named, but no frontend→backend caller edge can be written without one.");
21
+ this.name = "StackParserLoadError";
22
+ this.specifier = specifier;
23
+ }
24
+ }
25
+ const FACTORY_PATTERN = /^create[A-Za-z0-9]*StackTraceParser$/;
26
+ const RESOLVER_PATTERN = /^create[A-Za-z0-9]*SourceLocationResolver$/;
27
+ export async function loadStackParser(spec) {
28
+ // A-F2: `spec.module` comes straight from tool arguments, no allowlist upstream — see module-trust.ts.
29
+ const trust = checkModuleTrust(spec.module);
30
+ if (!trust.allowed)
31
+ throw new StackParserLoadError(spec.module, trust.reason);
32
+ let module;
33
+ try {
34
+ module = (await import(__rewriteRelativeImportExtension(spec.module)));
35
+ }
36
+ catch (error) {
37
+ throw new StackParserLoadError(spec.module, error instanceof Error ? error.message : String(error));
38
+ }
39
+ const name = spec.export ?? soleFactory(module, spec.module);
40
+ const factory = module[name];
41
+ if (typeof factory !== "function") {
42
+ throw new StackParserLoadError(spec.module, `"${name}" is not a function`);
43
+ }
44
+ // A factory taking an arg needs a `SourceLocationResolver` (script URL to
45
+ // real file). Checked, not assumed: called with none, the parser silently
46
+ // returns null for every stack — measured, not hypothesised (a prior bug).
47
+ const needsResolver = factory.length >= 1;
48
+ let resolver;
49
+ if (needsResolver) {
50
+ const resolverName = soleMatch(module, RESOLVER_PATTERN);
51
+ if (resolverName === null) {
52
+ throw new StackParserLoadError(spec.module, `${name}() expects a source-location resolver and the module exports no create*SourceLocationResolver ` +
53
+ "to build one from. Without it every stack parses to null and no caller edge could ever be written");
54
+ }
55
+ try {
56
+ resolver = module[resolverName]();
57
+ }
58
+ catch (error) {
59
+ throw new StackParserLoadError(spec.module, `${resolverName}() threw: ${error instanceof Error ? error.message : String(error)}`);
60
+ }
61
+ }
62
+ try {
63
+ return needsResolver
64
+ ? factory(resolver)
65
+ : factory();
66
+ }
67
+ catch (error) {
68
+ throw new StackParserLoadError(spec.module, `${name}() threw: ${error instanceof Error ? error.message : String(error)}`);
69
+ }
70
+ }
71
+ function soleMatch(module, pattern) {
72
+ const matches = Object.keys(module).filter((key) => pattern.test(key) && typeof module[key] === "function");
73
+ return matches.length === 1 ? matches[0] : null;
74
+ }
75
+ /** Two matches is an error, not a coin toss — `runtime-registry.ts`'s rule, for the same reason. */
76
+ function soleFactory(module, specifier) {
77
+ const matches = Object.keys(module).filter((key) => FACTORY_PATTERN.test(key) && typeof module[key] === "function");
78
+ if (matches.length === 1)
79
+ return matches[0];
80
+ if (matches.length === 0) {
81
+ throw new StackParserLoadError(specifier, "it exports no create*StackTraceParser factory; name one explicitly with \"export\"");
82
+ }
83
+ throw new StackParserLoadError(specifier, `it exports ${matches.length} create*StackTraceParser factories (${matches.join(", ")}) — name one explicitly with "export"`);
84
+ }
85
+ //# sourceMappingURL=stack-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-parser.js","sourceRoot":"","sources":["../../src/browser/stack-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /** What the seven browser tools share — kept in one place because the parts that repeat
2
+ * are the parts that must not drift: how a dead session is reported, how consent is
3
+ * checked, how a reply is stamped. Seven copies of a refusal is seven chances for one to
4
+ * say something slightly different about the same state. */
5
+ import { type ToolContext } from "../tools/kit.ts";
6
+ import type { ToolAnswer } from "../render.ts";
7
+ import type { BrowserSessionEntry, BrowserSessionRegistry } from "./registry.ts";
8
+ import { type BrowserEvidenceReport } from "./evidence.ts";
9
+ import type { BrowserObservation, PageSnapshot } from "./driver.ts";
10
+ import { type BrowserGraphWrite } from "./graph-write.ts";
11
+ /** Staleness stamp for a reply that observed a browser. No graph on an unanalysed repo
12
+ * should not block opening a browser — the stamp degrades instead of refusing, and says so. */
13
+ export interface BrowserStamp {
14
+ readonly commitSha: string | null;
15
+ readonly graphBuiltAt: number | null;
16
+ readonly irSchemaVersion: number;
17
+ readonly commitSpread: number;
18
+ readonly repoCount: number;
19
+ readonly note: string | null;
20
+ }
21
+ export declare function browserStamp(ctx: ToolContext): BrowserStamp;
22
+ export interface BrowserReplyOptions<T> {
23
+ readonly headline: string;
24
+ readonly data: T;
25
+ readonly notes: readonly string[];
26
+ readonly state?: "ok" | "refused" | "failed" | "empty";
27
+ readonly ctx: ToolContext;
28
+ readonly fitToBudget?: (budgetBytes: number) => import("../render.ts").ReplyFit<T>;
29
+ }
30
+ /** Every browser reply, stamped identically. `resolutionFloor: 4` on success — R4 is
31
+ * "observed at runtime", exactly what this call saw; a refusal/failure observed nothing,
32
+ * so stamps R0 — describing this reply's evidence, not the tool's best case. */
33
+ export declare function browserAnswer<T>(options: BrowserReplyOptions<T>): ToolAnswer<T>;
34
+ export interface DeadSession {
35
+ readonly state: "refused" | "failed";
36
+ readonly headline: string;
37
+ readonly notes: readonly string[];
38
+ readonly evidence: BrowserEvidenceReport;
39
+ }
40
+ /** Looks a session up, or says exactly why it can't be used. The three dead states stay
41
+ * apart — "never had it", "timed out, here's what it saw", "crashed" send a caller to
42
+ * three different things; only the last is `failed`. */
43
+ export declare function useSession(registry: BrowserSessionRegistry, sessionId: string): Promise<{
44
+ readonly ok: true;
45
+ readonly entry: BrowserSessionEntry;
46
+ } | {
47
+ readonly ok: false;
48
+ readonly dead: DeadSession;
49
+ }>;
50
+ /** Drains page evidence, relates it to the graph, and returns both in one place — every
51
+ * evidence-bearing tool routes through this so the R4 write can't silently not happen.
52
+ * No graph correlates nothing and says so; that's real, not "found no connection". */
53
+ export declare function observeAndCorrelate(ctx: ToolContext, entry: BrowserSessionEntry): Promise<{
54
+ readonly evidence: BrowserEvidenceReport;
55
+ readonly graph: BrowserGraphWrite;
56
+ readonly notes: readonly string[];
57
+ }>;
58
+ export declare function emptyEvidence(): BrowserEvidenceReport;
59
+ export declare function reportOf(observation: BrowserObservation): BrowserEvidenceReport;
60
+ /** Does the session's environment profile permit changing the application? Reads DEC-270's
61
+ * `safetyLevel` (same field `observe_runtime` consults), not a per-tool flag — two "safe"
62
+ * notions could disagree. No profile ⇒ null; consent and profile are independent, both must pass. */
63
+ export declare function mutationRefusal(entry: BrowserSessionEntry): string | null;
64
+ /** Is `url` inside the origin this session was consented for? The consent ruling's one
65
+ * hard bound — checked here, not in each verb, so a future eighth tool can't forget it. */
66
+ export declare function withinConsent(entry: BrowserSessionEntry, url: string): boolean;
67
+ /** Everything a snapshot could not reach, said out loud. Rule 7: a fallback the caller is not
68
+ * told about is the same as not having tried. Empty when every document was read, nothing was
69
+ * withheld, and no reveal pass ran — silence then means "nothing to disclose", not "not checked". */
70
+ export declare function reachNotes(snapshot: PageSnapshot): string[];
71
+ //# sourceMappingURL=tool-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-support.d.ts","sourceRoot":"","sources":["../../src/browser/tool-support.ts"],"names":[],"mappings":"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"}