waygraph 0.15.53 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. package/README.md +8 -3
  2. package/bin/waygraph +2 -2
  3. package/dist/analysis/check.d.ts +38 -0
  4. package/dist/analysis/check.js +87 -0
  5. package/dist/analysis/coverage-gap.d.ts +1 -1
  6. package/dist/analysis/coverage-gap.js +14 -37
  7. package/dist/analysis/flow-source.d.ts +9 -0
  8. package/dist/analysis/flow-source.js +25 -0
  9. package/dist/analysis/graph.d.ts +13 -14
  10. package/dist/analysis/graph.js +48 -371
  11. package/dist/analysis/map-check.js +4 -39
  12. package/dist/analysis/practices-check.d.ts +1 -1
  13. package/dist/analysis/practices-check.js +24 -45
  14. package/dist/cli/args.d.ts +23 -0
  15. package/dist/cli/args.js +20 -0
  16. package/dist/{cli.d.ts → cli/cli.d.ts} +0 -1
  17. package/dist/{cli.js → cli/cli.js} +10 -9
  18. package/dist/{commands → cli/commands}/agent-dive-scaffold.js +35 -64
  19. package/dist/cli/commands/agent-dive.js +42 -0
  20. package/dist/{commands → cli/commands}/check.d.ts +0 -1
  21. package/dist/cli/commands/check.js +104 -0
  22. package/dist/cli/commands/codemod-checkpoints.d.ts +18 -0
  23. package/dist/cli/commands/codemod-checkpoints.js +186 -0
  24. package/dist/cli/commands/codemod-flows.d.ts +18 -0
  25. package/dist/cli/commands/codemod-flows.js +284 -0
  26. package/dist/cli/commands/codemod-stubs.d.ts +10 -0
  27. package/dist/cli/commands/codemod-stubs.js +187 -0
  28. package/dist/{commands → cli/commands}/extensions.js +5 -4
  29. package/dist/{commands → cli/commands}/init.js +1 -2
  30. package/dist/{commands → cli/commands}/list.js +9 -7
  31. package/dist/cli/commands/manifest.d.ts +2 -0
  32. package/dist/cli/commands/manifest.js +20 -0
  33. package/dist/cli/commands/map.js +57 -0
  34. package/dist/{commands → cli/commands}/run.d.ts +0 -1
  35. package/dist/cli/commands/run.js +64 -0
  36. package/dist/{commands → cli/commands}/session.js +61 -88
  37. package/dist/{commands → cli/commands}/test.js +11 -14
  38. package/dist/cli/commands/traverse.js +105 -0
  39. package/dist/{commands → cli/commands}/try.js +29 -25
  40. package/dist/{commands → cli/commands}/upgrade.js +40 -4
  41. package/dist/cli/flags.d.ts +193 -16
  42. package/dist/cli/flags.js +179 -234
  43. package/dist/cli/run-chain.d.ts +1 -0
  44. package/dist/cli/run-chain.js +42 -7
  45. package/dist/cli/usage.d.ts +1 -1
  46. package/dist/cli/usage.js +21 -53
  47. package/dist/cli/util.d.ts +2 -2
  48. package/dist/cli/util.js +2 -3
  49. package/dist/{highlights → demo/narration}/css.d.ts +1 -1
  50. package/dist/{highlights → demo/narration}/css.js +2 -3
  51. package/dist/{highlights → demo/narration}/demo-pace.d.ts +7 -11
  52. package/dist/{highlights → demo/narration}/demo-pace.js +9 -11
  53. package/dist/{highlights → demo/narration}/device.d.ts +4 -2
  54. package/dist/{highlights → demo/narration}/device.js +3 -1
  55. package/dist/demo/narration/merge.d.ts +8 -0
  56. package/dist/demo/narration/merge.js +71 -0
  57. package/dist/{highlights/run-phase.d.ts → demo/narration/narration.d.ts} +10 -14
  58. package/dist/{highlights/run-phase.js → demo/narration/narration.js} +25 -94
  59. package/dist/{highlights → demo/narration}/shorthand.d.ts +1 -1
  60. package/dist/demo/narration/stub-ctx.d.ts +8 -0
  61. package/dist/demo/narration/stub-ctx.js +164 -0
  62. package/dist/{highlights → demo/narration}/style.d.ts +1 -7
  63. package/dist/{highlights → demo/narration}/style.js +1 -41
  64. package/dist/{highlights → demo/narration}/todo-dock.d.ts +3 -3
  65. package/dist/{highlights → demo/narration}/todo-dock.js +13 -30
  66. package/dist/demo/overlay/auto-chrome.d.ts +7 -0
  67. package/dist/demo/overlay/auto-chrome.js +97 -0
  68. package/dist/{session/overlay-beacon.d.ts → demo/overlay/beacon.d.ts} +7 -0
  69. package/dist/{session/overlay-beacon.js → demo/overlay/beacon.js} +5 -0
  70. package/dist/demo/overlay/cursor.d.ts +12 -0
  71. package/dist/demo/overlay/cursor.js +142 -0
  72. package/dist/demo/overlay/device-stage.d.ts +13 -0
  73. package/dist/demo/overlay/device-stage.js +396 -0
  74. package/dist/demo/overlay/inpage/banner.d.ts +1 -0
  75. package/dist/demo/overlay/inpage/banner.js +160 -0
  76. package/dist/demo/overlay/inpage/caption.d.ts +2 -0
  77. package/dist/demo/overlay/inpage/caption.js +24 -0
  78. package/dist/demo/overlay/inpage/core.d.ts +1 -0
  79. package/dist/demo/overlay/inpage/core.js +345 -0
  80. package/dist/demo/overlay/inpage/device-chip.d.ts +1 -0
  81. package/dist/demo/overlay/inpage/device-chip.js +191 -0
  82. package/dist/demo/overlay/inpage/network.d.ts +9 -0
  83. package/dist/demo/overlay/inpage/network.js +200 -0
  84. package/dist/demo/overlay/inpage/panel-chrome.d.ts +1 -0
  85. package/dist/demo/overlay/inpage/panel-chrome.js +203 -0
  86. package/dist/demo/overlay/inpage/stamp.d.ts +1 -0
  87. package/dist/demo/overlay/inpage/stamp.js +46 -0
  88. package/dist/demo/overlay/inpage/swipe-zoom.d.ts +1 -0
  89. package/dist/demo/overlay/inpage/swipe-zoom.js +220 -0
  90. package/dist/demo/overlay/inpage/todos.d.ts +1 -0
  91. package/dist/demo/overlay/inpage/todos.js +294 -0
  92. package/dist/demo/overlay/locator-theater.d.ts +25 -0
  93. package/dist/demo/overlay/locator-theater.js +76 -0
  94. package/dist/demo/overlay/network-capture.d.ts +22 -0
  95. package/dist/demo/overlay/network-capture.js +127 -0
  96. package/dist/demo/overlay/overlay-css.d.ts +3 -0
  97. package/dist/demo/overlay/overlay-css.js +369 -0
  98. package/dist/demo/overlay/overlay-stage.d.ts +23 -0
  99. package/dist/demo/overlay/overlay-stage.js +106 -0
  100. package/dist/demo/overlay/overlay.d.ts +10 -0
  101. package/dist/demo/overlay/overlay.js +89 -0
  102. package/dist/{pilot-overlay/overlay-fixtures.d.ts → demo/overlay/phase-fixtures.d.ts} +2 -2
  103. package/dist/{pilot-overlay/overlay-fixtures.js → demo/overlay/phase-fixtures.js} +2 -2
  104. package/dist/{pilot-overlay/action-ring.js → demo/overlay/pilot/actions.js} +2 -1
  105. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.d.ts +6 -5
  106. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.js +19 -18
  107. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.d.ts +2 -2
  108. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.js +13 -22
  109. package/dist/demo/overlay/reattach.d.ts +7 -0
  110. package/dist/demo/overlay/reattach.js +23 -0
  111. package/dist/demo/overlay/rings.d.ts +33 -0
  112. package/dist/demo/overlay/rings.js +448 -0
  113. package/dist/{ui → demo/overlay/ui}/components/ring.js +2 -2
  114. package/dist/{ui → demo/overlay/ui}/overlay.css +4 -4
  115. package/dist/{ui → demo/overlay/ui}/shadow.d.ts +1 -1
  116. package/dist/{ui → demo/overlay/ui}/shadow.js +39 -2
  117. package/dist/demo/stepper/after.d.ts +3 -0
  118. package/dist/demo/stepper/after.js +113 -0
  119. package/dist/demo/stepper/banner-log.d.ts +37 -0
  120. package/dist/demo/stepper/banner-log.js +63 -0
  121. package/dist/demo/stepper/before.d.ts +4 -0
  122. package/dist/demo/stepper/before.js +110 -0
  123. package/dist/demo/stepper/demo-log.d.ts +31 -0
  124. package/dist/demo/stepper/demo-log.js +309 -0
  125. package/dist/demo/stepper/gate.d.ts +11 -0
  126. package/dist/demo/stepper/gate.js +78 -0
  127. package/dist/demo/stepper/interaction-patch.d.ts +3 -0
  128. package/dist/demo/stepper/interaction-patch.js +323 -0
  129. package/dist/demo/stepper/pacing.d.ts +21 -0
  130. package/dist/demo/stepper/pacing.js +23 -0
  131. package/dist/demo/stepper/slides.d.ts +11 -0
  132. package/dist/demo/stepper/slides.js +233 -0
  133. package/dist/demo/stepper/step-panels.d.ts +21 -0
  134. package/dist/demo/stepper/step-panels.js +589 -0
  135. package/dist/demo/stepper/stepper.d.ts +24 -0
  136. package/dist/demo/stepper/stepper.js +122 -0
  137. package/dist/demo/stepper/teardown.d.ts +48 -0
  138. package/dist/demo/stepper/teardown.js +179 -0
  139. package/dist/demo/stepper/todo-advance.d.ts +14 -0
  140. package/dist/demo/stepper/todo-advance.js +110 -0
  141. package/dist/demo/stepper/view.d.ts +68 -0
  142. package/dist/demo/stepper/view.js +31 -0
  143. package/dist/demo/types.d.ts +17 -0
  144. package/dist/demo/verbose-log.js +15 -0
  145. package/dist/{types.d.ts → engine/block/block.d.ts} +106 -91
  146. package/dist/{core → engine/block}/block.js +10 -53
  147. package/dist/{core → engine/block}/compose.d.ts +10 -7
  148. package/dist/{core → engine/block}/compose.js +1 -1
  149. package/dist/{core/blocks → engine/block/kinds}/api.d.ts +17 -12
  150. package/dist/{core/blocks → engine/block/kinds}/api.js +26 -18
  151. package/dist/{core/blocks → engine/block/kinds}/effect.d.ts +13 -18
  152. package/dist/engine/block/kinds/effect.js +17 -0
  153. package/dist/{core/blocks → engine/block/kinds}/method.d.ts +19 -29
  154. package/dist/{core/blocks → engine/block/kinds}/method.js +7 -21
  155. package/dist/{core/blocks → engine/block/kinds}/nav.d.ts +22 -31
  156. package/dist/{core/blocks → engine/block/kinds}/nav.js +6 -12
  157. package/dist/{core/blocks → engine/block/kinds}/page.d.ts +15 -20
  158. package/dist/{core/blocks → engine/block/kinds}/page.js +5 -7
  159. package/dist/engine/checkpoint/checkpoint.d.ts +22 -0
  160. package/dist/engine/checkpoint/checkpoint.js +8 -0
  161. package/dist/engine/checkpoint/route.d.ts +28 -0
  162. package/dist/engine/checkpoint/route.js +28 -0
  163. package/dist/{core → engine}/config.d.ts +7 -2
  164. package/dist/engine/config.js +6 -0
  165. package/dist/engine/engine.d.ts +45 -0
  166. package/dist/{core → engine}/engine.js +6 -10
  167. package/dist/engine/env.d.ts +59 -0
  168. package/dist/engine/env.js +83 -0
  169. package/dist/{errors.d.ts → engine/errors.d.ts} +23 -22
  170. package/dist/{errors.js → engine/errors.js} +22 -22
  171. package/dist/{core → engine/flow}/branch-regression.d.ts +8 -7
  172. package/dist/{core → engine/flow}/branch-regression.js +4 -3
  173. package/dist/engine/flow/flow.d.ts +162 -0
  174. package/dist/engine/flow/flow.js +244 -0
  175. package/dist/{core → engine/flow}/map-builder.d.ts +42 -40
  176. package/dist/{core → engine/flow}/map-builder.js +46 -48
  177. package/dist/{core → engine}/locate.d.ts +1 -1
  178. package/dist/{core → engine}/locate.js +1 -2
  179. package/dist/{mem-stub.d.ts → engine/mem/mem-stub.d.ts} +9 -8
  180. package/dist/{mem-stub.js → engine/mem/mem-stub.js} +2 -2
  181. package/dist/{mem-page.d.ts → engine/mem/mem.d.ts} +1 -1
  182. package/dist/{mem-page.js → engine/mem/mem.js} +2 -1
  183. package/dist/engine/page-gone.d.ts +5 -0
  184. package/dist/engine/page-gone.js +20 -0
  185. package/dist/engine/run/connect.d.ts +28 -0
  186. package/dist/{types.js → engine/run/connect.js} +11 -10
  187. package/dist/engine/run/events.d.ts +67 -0
  188. package/dist/engine/run/events.js +90 -0
  189. package/dist/engine/run/hooks.d.ts +16 -0
  190. package/dist/engine/run/hooks.js +8 -0
  191. package/dist/engine/run/launch.d.ts +13 -0
  192. package/dist/engine/run/launch.js +27 -0
  193. package/dist/{core/run-graph.d.ts → engine/run/run.d.ts} +9 -11
  194. package/dist/{core/run-graph.js → engine/run/run.js} +22 -11
  195. package/dist/engine/stub/pace.d.ts +12 -0
  196. package/dist/engine/stub/pace.js +2 -0
  197. package/dist/engine/stub/ring.d.ts +130 -0
  198. package/dist/engine/stub/ring.js +41 -0
  199. package/dist/engine/stub/stub.d.ts +268 -0
  200. package/dist/engine/stub/stub.js +1 -0
  201. package/dist/engine/stub/todos.d.ts +104 -0
  202. package/dist/engine/stub/todos.js +2 -0
  203. package/dist/engine/stub/viewport.d.ts +26 -0
  204. package/dist/engine/stub/viewport.js +2 -0
  205. package/dist/{trait.d.ts → engine/trait/trait.d.ts} +1 -1
  206. package/dist/index.d.ts +84 -36
  207. package/dist/index.js +44 -19
  208. package/dist/{session/auto-explore-run.d.ts → live/auto/auto.d.ts} +10 -16
  209. package/dist/{session/auto-explore-run.js → live/auto/auto.js} +164 -248
  210. package/dist/{session/auto-explore.d.ts → live/auto/explore.d.ts} +4 -14
  211. package/dist/{session/auto-explore.js → live/auto/explore.js} +21 -127
  212. package/dist/{auto-session/session.d.ts → live/auto-session/auto-session.d.ts} +1 -1
  213. package/dist/{auto-session/session.js → live/auto-session/auto-session.js} +27 -24
  214. package/dist/{auto-session → live/auto-session}/helpers.d.ts +16 -5
  215. package/dist/{auto-session → live/auto-session}/helpers.js +1 -1
  216. package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +7 -5
  217. package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +31 -16
  218. package/dist/{session/browser.d.ts → live/auto-session/start.d.ts} +1 -2
  219. package/dist/{session/browser.js → live/auto-session/start.js} +2 -3
  220. package/dist/{pilot-overlay → live/pilot}/panel.d.ts +1 -1
  221. package/dist/{pilot-overlay → live/pilot}/panel.js +23 -31
  222. package/dist/{session → live/pilot}/pilot.d.ts +4 -3
  223. package/dist/{session → live/pilot}/pilot.js +4 -4
  224. package/dist/{traverse → live/traverse}/coverage.d.ts +4 -0
  225. package/dist/{traverse → live/traverse}/coverage.js +3 -0
  226. package/dist/{traverse → live/traverse}/lease.d.ts +1 -0
  227. package/dist/{traverse → live/traverse}/lease.js +1 -0
  228. package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +4 -1
  229. package/dist/{traverse/run.js → live/traverse/traverse.js} +26 -43
  230. package/dist/manifest/manifest.d.ts +52 -0
  231. package/dist/manifest/manifest.js +93 -0
  232. package/dist/manifest/map-imports.d.ts +7 -0
  233. package/dist/manifest/map-imports.js +22 -0
  234. package/dist/manifest/maps.d.ts +33 -0
  235. package/dist/manifest/maps.js +62 -0
  236. package/dist/manifest/pack.d.ts +21 -0
  237. package/dist/manifest/pack.js +109 -0
  238. package/dist/manifest/project.d.ts +60 -0
  239. package/dist/manifest/project.js +101 -0
  240. package/dist/{session/block-inject.js → manifest/roots.js} +1 -18
  241. package/dist/manifest/scan.d.ts +19 -0
  242. package/dist/manifest/scan.js +57 -0
  243. package/dist/{blocks-select.d.ts → manifest/select.d.ts} +3 -0
  244. package/dist/{blocks-select.js → manifest/select.js} +2 -0
  245. package/dist/manifest/source.d.ts +23 -0
  246. package/dist/manifest/source.js +86 -0
  247. package/dist/runner/mode.d.ts +71 -0
  248. package/dist/runner/mode.js +1 -0
  249. package/dist/runner/modes/branches.d.ts +5 -0
  250. package/dist/runner/modes/branches.js +37 -0
  251. package/dist/runner/modes/demo.d.ts +3 -0
  252. package/dist/runner/modes/demo.js +13 -0
  253. package/dist/runner/modes/report.d.ts +2 -0
  254. package/dist/runner/modes/report.js +54 -0
  255. package/dist/runner/modes/run.d.ts +2 -0
  256. package/dist/runner/modes/run.js +3 -0
  257. package/dist/runner/options.d.ts +31 -0
  258. package/dist/runner/options.js +42 -0
  259. package/dist/runner/plan/find.d.ts +18 -0
  260. package/dist/runner/plan/find.js +65 -0
  261. package/dist/runner/plan/plan.d.ts +11 -0
  262. package/dist/runner/plan/plan.js +97 -0
  263. package/dist/runner/plan/seed-mem.d.ts +12 -0
  264. package/dist/runner/plan/seed-mem.js +98 -0
  265. package/dist/runner/plan/spec.d.ts +5 -0
  266. package/dist/runner/plan/spec.js +17 -0
  267. package/dist/runner/play-steps.d.ts +2 -0
  268. package/dist/runner/play-steps.js +59 -0
  269. package/dist/runner/runner.d.ts +4 -0
  270. package/dist/runner/runner.js +64 -0
  271. package/dist/runner/session.d.ts +9 -0
  272. package/dist/runner/session.js +87 -0
  273. package/dist/{browser.js → runtime/browser.js} +4 -2
  274. package/dist/{env-file.js → runtime/env-file.js} +7 -12
  275. package/dist/{extensions.d.ts → runtime/extensions.d.ts} +2 -5
  276. package/dist/{extensions.js → runtime/extensions.js} +3 -1
  277. package/dist/runtime/full-launch.d.ts +1 -0
  278. package/dist/runtime/full-launch.js +34 -0
  279. package/dist/runtime/global-flag.d.ts +5 -0
  280. package/dist/runtime/global-flag.js +18 -0
  281. package/dist/{playwright-config.d.ts → runtime/playwright-config.d.ts} +1 -1
  282. package/dist/{playwright.config.js → runtime/playwright.config.js} +3 -2
  283. package/dist/runtime/run-log.d.ts +2 -0
  284. package/dist/runtime/run-log.js +17 -0
  285. package/dist/{video-dir.js → runtime/video-dir.js} +3 -2
  286. package/dist/{config.d.ts → runtime/waygraph-config.d.ts} +8 -9
  287. package/dist/{config.js → runtime/waygraph-config.js} +21 -51
  288. package/dist/{webserver.js → runtime/webserver.js} +5 -30
  289. package/examples/routed-demo/config/waygraph.config.ts +20 -0
  290. package/examples/routed-demo/package.json +1 -4
  291. package/examples/routed-demo/scripts/fixture-server.mjs +1 -1
  292. package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +2 -4
  293. package/examples/routed-demo/src/flows/routed-demo.flow.ts +2 -3
  294. package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +5 -4
  295. package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +3 -3
  296. package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +3 -3
  297. package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +3 -3
  298. package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +3 -3
  299. package/examples/routed-demo/src/states/routed-demo.states.ts +5 -3
  300. package/examples/routed-demo/tests/routed-demo.spec.ts +4 -4
  301. package/examples/routed-demo/tsconfig.json +1 -1
  302. package/examples/saucedemo/README.md +11 -12
  303. package/examples/saucedemo/config/waygraph.config.ts +17 -0
  304. package/examples/saucedemo/docs/CONVENTION.md +5 -7
  305. package/examples/saucedemo/docs/HELPERS.md +12 -12
  306. package/examples/saucedemo/package-lock.json +10 -3
  307. package/examples/saucedemo/package.json +12 -29
  308. package/examples/saucedemo/src/blocks/SITE-MAP.md +0 -1
  309. package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +1 -5
  310. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -52
  311. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  312. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  313. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  314. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  315. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  316. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +21 -27
  317. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -9
  318. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  319. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +10 -76
  320. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  321. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  322. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  323. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  324. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  325. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  326. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -29
  327. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -48
  328. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +13 -77
  329. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  330. package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  331. package/examples/saucedemo/src/flows/api-demo.flow.ts +26 -18
  332. package/examples/saucedemo/src/flows/cart-bulk.flow.ts +19 -14
  333. package/examples/saucedemo/src/flows/cart-continue.flow.ts +10 -8
  334. package/examples/saucedemo/src/flows/cart-mem.flow.ts +7 -7
  335. package/examples/saucedemo/src/flows/catalog-logout.flow.ts +13 -8
  336. package/examples/saucedemo/src/flows/checkout-then-browse-again.flow.ts +26 -48
  337. package/examples/saucedemo/src/flows/checkout.flow.ts +70 -86
  338. package/examples/saucedemo/src/flows/device-showcase.flow.ts +24 -25
  339. package/examples/saucedemo/src/flows/login.flow.ts +11 -18
  340. package/examples/saucedemo/src/flows/mem-stub-demo.flow.ts +9 -20
  341. package/examples/saucedemo/src/flows/shop.flow.ts +15 -20
  342. package/examples/saucedemo/src/flows/smoke.flow.ts +12 -27
  343. package/examples/saucedemo/src/flows/stub-on-error.flow.ts +24 -43
  344. package/examples/saucedemo/src/flows/viewer-blocked.flow.ts +26 -34
  345. package/examples/saucedemo/src/states/checkout.mem-stubs.ts +11 -0
  346. package/examples/saucedemo/src/states/checkout.states.ts +21 -11
  347. package/examples/saucedemo/src/stubs/device-showcase.ts +191 -0
  348. package/examples/saucedemo/src/stubs/login.ts +37 -0
  349. package/examples/saucedemo/tests/auto-graph.spec.ts +4 -12
  350. package/examples/saucedemo/tests/chain-flow-episodes.spec.ts +7 -9
  351. package/examples/saucedemo/tests/submit-login-branch.spec.ts +18 -5
  352. package/package.json +12 -7
  353. package/templates/agents/waygraph-planner.agent.md +2 -2
  354. package/templates/quickstart/README.md +4 -7
  355. package/templates/quickstart/config/waygraph.config.ts +17 -0
  356. package/templates/quickstart/docs/CONVENTION.md +5 -6
  357. package/templates/quickstart/docs/HELPERS.md +11 -9
  358. package/templates/quickstart/package.json +14 -17
  359. package/templates/quickstart/src/blocks/SITE-MAP.md +13 -3
  360. package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +1 -5
  361. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -52
  362. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  363. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  364. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  365. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  366. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  367. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +21 -27
  368. package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -9
  369. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  370. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +10 -76
  371. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  372. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  373. package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  374. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  375. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  376. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  377. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -29
  378. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -48
  379. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +13 -77
  380. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  381. package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  382. package/templates/quickstart/src/flows/api-demo.flow.ts +45 -0
  383. package/templates/quickstart/src/flows/cart-bulk.flow.ts +19 -14
  384. package/templates/quickstart/src/flows/cart-continue.flow.ts +10 -8
  385. package/templates/quickstart/src/flows/cart-mem.flow.ts +7 -7
  386. package/templates/quickstart/src/flows/catalog-logout.flow.ts +13 -8
  387. package/templates/quickstart/src/flows/checkout-then-browse-again.flow.ts +26 -48
  388. package/templates/quickstart/src/flows/checkout.flow.ts +70 -63
  389. package/templates/quickstart/src/flows/device-showcase.flow.ts +24 -25
  390. package/templates/quickstart/src/flows/login.flow.ts +11 -18
  391. package/templates/quickstart/src/flows/mem-stub-demo.flow.ts +12 -0
  392. package/templates/quickstart/src/flows/shop.flow.ts +15 -20
  393. package/templates/quickstart/src/flows/smoke.flow.ts +12 -27
  394. package/templates/quickstart/src/flows/stub-on-error.flow.ts +31 -0
  395. package/templates/quickstart/src/flows/viewer-blocked.flow.ts +26 -34
  396. package/templates/quickstart/src/states/checkout.mem-stubs.ts +11 -0
  397. package/templates/quickstart/src/states/checkout.states.ts +21 -11
  398. package/templates/quickstart/src/stubs/device-showcase.ts +191 -0
  399. package/templates/quickstart/src/stubs/login.ts +37 -0
  400. package/templates/quickstart/tests/chain-flow.spec.ts +7 -10
  401. package/templates/scaffold/README.md +2 -1
  402. package/templates/scaffold/STRUCTURE.md +5 -4
  403. package/templates/scaffold/config/waygraph.config.ts +1 -0
  404. package/templates/scaffold/gitignore +1 -0
  405. package/templates/scaffold/src/flows/README.md +2 -2
  406. package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +3 -3
  407. package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +3 -3
  408. package/templates/scaffold/src/map/(app_base)/home/_methods/add-item.effect.block.ts +4 -4
  409. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +3 -3
  410. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +3 -3
  411. package/templates/scaffold/src/map/(app_base)/home/_methods/clear-cart.method.block.ts +5 -4
  412. package/templates/scaffold/src/map/(app_base)/home/_methods/remove-item.effect.block.ts +4 -4
  413. package/templates/scaffold/src/map/(app_base)/home/_nav.block.ts +3 -3
  414. package/templates/scaffold/src/map/(app_base)/home/_page.block.ts +3 -3
  415. package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +4 -4
  416. package/templates/scaffold/src/map/(external)/hoppscotch/_keys.ts +21 -0
  417. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-body.method.block.ts +4 -4
  418. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-header.method.block.ts +4 -4
  419. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-status.method.block.ts +4 -4
  420. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/pick-extension-interceptor.method.block.ts +5 -4
  421. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-body.method.block.ts +6 -5
  422. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-headers.method.block.ts +6 -5
  423. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/send-request.method.block.ts +5 -4
  424. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-bearer-token.method.block.ts +6 -5
  425. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-headers.method.block.ts +6 -5
  426. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-json-body.method.block.ts +6 -5
  427. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-method.method.block.ts +6 -5
  428. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-query-params.method.block.ts +6 -5
  429. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-url.method.block.ts +6 -5
  430. package/templates/scaffold/src/map/(external)/hoppscotch/_nav.block.ts +3 -3
  431. package/templates/scaffold/src/map/(external)/hoppscotch/_page.block.ts +3 -3
  432. package/templates/scaffold/src/map/(external)/hoppscotch/_states.ts +6 -0
  433. package/templates/scaffold/src/map/(external)/hoppscotch/settings/_nav.block.ts +3 -3
  434. package/templates/scaffold/src/map/(external)/mailpit/_keys.ts +13 -0
  435. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +4 -4
  436. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +4 -4
  437. package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +6 -5
  438. package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +6 -5
  439. package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +3 -3
  440. package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +3 -3
  441. package/templates/scaffold/src/map/(external)/mailpit/_states.ts +9 -0
  442. package/templates/scaffold/src/map/README.md +7 -0
  443. package/templates/scaffold/src/states/README.md +4 -1
  444. package/templates/scaffold/src/states/demo.mem-keys.ts +1 -29
  445. package/templates/scaffold/src/states/demo.states.ts +14 -20
  446. package/templates/scaffold/tests/hoppscotch.spec.ts +1 -11
  447. package/templates/scaffold/tests/mail-verify.spec.ts +2 -2
  448. package/templates/skills/waygraph-blind-pilot.skill.md +2 -6
  449. package/templates/skills/waygraph-convention.skill.md +23 -14
  450. package/templates/skills/waygraph-pilot.skill.md +7 -4
  451. package/dist/auto-session/verbose-log.js +0 -16
  452. package/dist/auto-session.d.ts +0 -2
  453. package/dist/auto-session.js +0 -3
  454. package/dist/cli/discover.d.ts +0 -40
  455. package/dist/cli/discover.js +0 -148
  456. package/dist/commands/agent-dive.js +0 -52
  457. package/dist/commands/check.js +0 -192
  458. package/dist/commands/map.js +0 -29
  459. package/dist/commands/run.js +0 -104
  460. package/dist/commands/traverse.js +0 -177
  461. package/dist/core/block.d.ts +0 -109
  462. package/dist/core/blocks/effect.js +0 -23
  463. package/dist/core/config.js +0 -17
  464. package/dist/core/engine.d.ts +0 -198
  465. package/dist/core/flow.d.ts +0 -293
  466. package/dist/core/flow.js +0 -432
  467. package/dist/core.d.ts +0 -14
  468. package/dist/core.js +0 -15
  469. package/dist/highlights/merge.d.ts +0 -8
  470. package/dist/highlights/merge.js +0 -173
  471. package/dist/highlights/stub-ctx.d.ts +0 -10
  472. package/dist/highlights/stub-ctx.js +0 -331
  473. package/dist/highlights/types.d.ts +0 -607
  474. package/dist/highlights.d.ts +0 -9
  475. package/dist/highlights.js +0 -10
  476. package/dist/pilot-overlay.d.ts +0 -5
  477. package/dist/pilot-overlay.js +0 -6
  478. package/dist/runner/banner-log.js +0 -63
  479. package/dist/runner/chain-run.js +0 -102
  480. package/dist/runner/cursor.js +0 -140
  481. package/dist/runner/demo-log.js +0 -316
  482. package/dist/runner/device-stage.d.ts +0 -9
  483. package/dist/runner/device-stage.js +0 -420
  484. package/dist/runner/discovery.js +0 -105
  485. package/dist/runner/index.js +0 -2
  486. package/dist/runner/inpage/banner.d.ts +0 -21
  487. package/dist/runner/inpage/banner.js +0 -156
  488. package/dist/runner/inpage/caption.d.ts +0 -3
  489. package/dist/runner/inpage/caption.js +0 -23
  490. package/dist/runner/inpage/core.d.ts +0 -4
  491. package/dist/runner/inpage/core.js +0 -316
  492. package/dist/runner/inpage/device.d.ts +0 -3
  493. package/dist/runner/inpage/device.js +0 -211
  494. package/dist/runner/inpage/network.d.ts +0 -15
  495. package/dist/runner/inpage/network.js +0 -217
  496. package/dist/runner/inpage/panel-chrome.js +0 -192
  497. package/dist/runner/inpage/stamp.js +0 -46
  498. package/dist/runner/inpage/swipe-zoom.js +0 -220
  499. package/dist/runner/inpage/todos.js +0 -337
  500. package/dist/runner/interaction-patch.js +0 -384
  501. package/dist/runner/main.js +0 -469
  502. package/dist/runner/network-capture.d.ts +0 -9
  503. package/dist/runner/network-capture.js +0 -126
  504. package/dist/runner/overlay-css.d.ts +0 -3
  505. package/dist/runner/overlay-css.js +0 -377
  506. package/dist/runner/overlay-install.js +0 -90
  507. package/dist/runner/overlay-stage.js +0 -110
  508. package/dist/runner/rings.js +0 -514
  509. package/dist/runner/seed-mem.js +0 -110
  510. package/dist/runner/slides.js +0 -278
  511. package/dist/runner/step-mode.js +0 -703
  512. package/dist/runner/step-panels.js +0 -729
  513. package/dist/runner/teardown.js +0 -202
  514. package/dist/runner/todo-dock.js +0 -142
  515. package/dist/session/step-overlay.d.ts +0 -37
  516. package/dist/session/step-overlay.js +0 -244
  517. package/examples/routed-demo/playwright.config.ts +0 -21
  518. package/examples/saucedemo/playwright.config.ts +0 -19
  519. package/examples/saucedemo/scripts/drive-auto-cli.mjs +0 -93
  520. package/examples/saucedemo/scripts/prove-add-to-cart-menu.mjs +0 -126
  521. package/examples/saucedemo/scripts/prove-auto-graph.mjs +0 -92
  522. package/examples/saucedemo/scripts/prove-wrong-login-runtime.mjs +0 -63
  523. package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  524. package/templates/quickstart/playwright.config.ts +0 -14
  525. package/templates/quickstart/scripts/drive-auto-cli.mjs +0 -93
  526. package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  527. /package/dist/{commands → cli/commands}/agent-dive-scaffold.d.ts +0 -0
  528. /package/dist/{commands → cli/commands}/agent-dive.d.ts +0 -0
  529. /package/dist/{commands → cli/commands}/extensions.d.ts +0 -0
  530. /package/dist/{commands → cli/commands}/init.d.ts +0 -0
  531. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  532. /package/dist/{commands → cli/commands}/map.d.ts +0 -0
  533. /package/dist/{commands → cli/commands}/session.d.ts +0 -0
  534. /package/dist/{commands → cli/commands}/test.d.ts +0 -0
  535. /package/dist/{commands → cli/commands}/traverse.d.ts +0 -0
  536. /package/dist/{commands → cli/commands}/try.d.ts +0 -0
  537. /package/dist/{commands → cli/commands}/upgrade.d.ts +0 -0
  538. /package/dist/{highlights → demo/narration}/shorthand.js +0 -0
  539. /package/dist/{pilot-overlay/action-ring.d.ts → demo/overlay/pilot/actions.d.ts} +0 -0
  540. /package/dist/{ui → demo/overlay/ui}/components/ring.d.ts +0 -0
  541. /package/dist/{ui → demo/overlay/ui}/stylesheet.d.ts +0 -0
  542. /package/dist/{ui → demo/overlay/ui}/stylesheet.js +0 -0
  543. /package/dist/{ui → demo/overlay/ui}/tokens.d.ts +0 -0
  544. /package/dist/{ui → demo/overlay/ui}/tokens.js +0 -0
  545. /package/dist/{highlights → demo}/types.js +0 -0
  546. /package/dist/{auto-session → demo}/verbose-log.d.ts +0 -0
  547. /package/dist/{selector.d.ts → engine/trait/selector.d.ts} +0 -0
  548. /package/dist/{selector.js → engine/trait/selector.js} +0 -0
  549. /package/dist/{trait.js → engine/trait/trait.js} +0 -0
  550. /package/dist/{session/block-inject.d.ts → manifest/roots.d.ts} +0 -0
  551. /package/dist/{browser.d.ts → runtime/browser.d.ts} +0 -0
  552. /package/dist/{env-file.d.ts → runtime/env-file.d.ts} +0 -0
  553. /package/dist/{playwright-config.js → runtime/playwright-config.js} +0 -0
  554. /package/dist/{playwright.config.d.ts → runtime/playwright.config.d.ts} +0 -0
  555. /package/dist/{video-dir.d.ts → runtime/video-dir.d.ts} +0 -0
  556. /package/dist/{webserver.d.ts → runtime/webserver.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
- import { createStubCtx, liftLegacySlotTodos } from "./stub-ctx.js";
2
- import { applyDefaultZoom, applyDefaultZoomOut, applyLegacyHighlightsShim, isStubPhase, mergePhaseMaps, readStubRaw } from "./merge.js";
1
+ import { createStubCtx } from "./stub-ctx.js";
2
+ import { applyDefaultZoom, applyDefaultZoomOut, readStubRaw, resolvePhaseMap } from "./merge.js";
3
3
  import { buildTodoDock, normalizeTodoStyle, normalizeTodos } from "./todo-dock.js";
4
4
  import { resolveDeviceState } from "./device.js";
5
5
  /**
@@ -7,7 +7,7 @@ import { resolveDeviceState } from "./device.js";
7
7
  * Returns rings + episode fixtures (todos / todoIndex / zoom).
8
8
  *
9
9
  * @example
10
- * const before = await runStubPhase(block, "stubBefore", { fixtures });
10
+ * const before = await runStubPhase(block, "stubBefore", { mem });
11
11
  * // before.todos, before.highlights
12
12
  */
13
13
  export async function runStubPhase(block, phase, opts) {
@@ -18,43 +18,16 @@ export async function runStubPhase(block, phase, opts) {
18
18
  ...(opts?.mem !== undefined ? { mem: opts.mem } : {}),
19
19
  });
20
20
  const raw = readStubRaw(block, phase);
21
- if (typeof raw === "function") {
21
+ if (raw) {
22
22
  try {
23
- const ret = await raw(ctx);
24
- if (isStubPhase(ret)) {
25
- bag.highlights = { ...bag.highlights, ...ret };
26
- }
27
- }
28
- catch {
29
- /* best-effort */
23
+ await raw(ctx);
30
24
  }
31
- // Compat: legacy `(out) => map` that expected Checkpoint (__state on arg). Only worth trying
32
- // when the real ctx call genuinely did nothing - checked against the WHOLE bag, not just
33
- // highlights/todos, so a stubBefore that only calls e.g. ctx.caption()/ctx.title()/ctx.zoom()
34
- // (no highlights, no todos) isn't mistaken for "didn't run" and re-invoked with a bare
35
- // Checkpoint that has none of StubCtx's methods - a real, previously-triggered bug (caught via
36
- // examples/saucedemo/src/flows/checkout.flow.ts's own stubBefore(ctx) { ctx.caption(...) }).
37
- const bagUntouched = Object.keys(bag).length === 1 && Object.keys(bag.highlights).length === 0;
38
- if (bagUntouched) {
39
- try {
40
- const legacyOut = (opts?.out ?? { __state: "" });
41
- const ret2 = raw(legacyOut);
42
- if (isStubPhase(ret2))
43
- bag.highlights = { ...ret2 };
44
- }
45
- catch {
46
- /* ignore */
47
- }
25
+ catch (err) {
26
+ // A mistake in the author's stub: shown on the step (the demo's failure panel), never dropped.
27
+ throw new Error(`${block.name}: its ${phase} stub threw: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
48
28
  }
49
29
  }
50
- else if (isStubPhase(raw)) {
51
- bag.highlights = { ...raw };
52
- }
53
- bag.highlights = applyLegacyHighlightsShim(block, phase, bag.highlights, opts?.out);
54
- liftLegacySlotTodos(bag);
55
- const fixturePhase = opts?.fixtures?.[block.name]?.[phase];
56
- let highlights = mergePhaseMaps(bag.highlights, fixturePhase);
57
- highlights = applyDefaultZoom(highlights, bag.zoom);
30
+ let highlights = applyDefaultZoom(resolvePhaseMap(bag.highlights), bag.zoom);
58
31
  highlights = applyDefaultZoomOut(highlights, bag.zoomOut);
59
32
  const todoDock = bag.hideTodos
60
33
  ? undefined
@@ -134,45 +107,19 @@ export async function runStubPhase(block, phase, opts) {
134
107
  export function resolveHighlightSlots(block, phase, opts) {
135
108
  const bag = { highlights: {} };
136
109
  const raw = readStubRaw(block, phase);
137
- if (typeof raw === "function") {
110
+ if (raw) {
111
+ // Synchronous read: the rings a stub paints before its first await.
138
112
  try {
139
- const ctx = createStubCtx(bag, {
140
- ...(opts?.out !== undefined ? { out: opts.out } : {}),
141
- });
142
- const ret = raw(ctx);
143
- if (isStubPhase(ret)) {
144
- bag.highlights = { ...bag.highlights, ...ret };
145
- }
113
+ void raw(createStubCtx(bag, { ...(opts?.out !== undefined ? { out: opts.out } : {}) }));
146
114
  }
147
- catch {
148
- try {
149
- const legacyOut = (opts?.out ?? { __state: "" });
150
- const ret2 = raw(legacyOut);
151
- if (isStubPhase(ret2))
152
- bag.highlights = { ...ret2 };
153
- }
154
- catch {
155
- bag.highlights = {};
156
- }
115
+ catch (err) {
116
+ throw new Error(`${block.name}: its ${phase} stub threw: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
157
117
  }
158
118
  }
159
- else if (isStubPhase(raw)) {
160
- bag.highlights = { ...raw };
161
- }
162
- bag.highlights = applyLegacyHighlightsShim(block, phase, bag.highlights, opts?.out);
163
- liftLegacySlotTodos(bag);
164
- const fixturePhase = opts?.fixtures?.[block.name]?.[phase];
165
- return applyDefaultZoom(mergePhaseMaps(bag.highlights, fixturePhase), bag.zoom);
119
+ return applyDefaultZoom(resolvePhaseMap(bag.highlights), bag.zoom);
166
120
  }
167
- /**
168
- * Resolve multi-step yap slides: flow fixture `slides` wins when present,
169
- * else `instruction.slides` (function form allowed).
170
- */
121
+ /** Resolve multi-step yap slides from `instruction.slides` (function form allowed). */
171
122
  export function resolveSlides(block, opts) {
172
- const fromFixture = opts?.fixtures?.[block.name]?.slides;
173
- if (fromFixture && fromFixture.length > 0) {
174
- return [...fromFixture];
175
- }
176
123
  const instr = block.instruction;
177
124
  let raw = instr.slides;
178
125
  if (typeof raw === "function") {
@@ -187,40 +134,24 @@ export function resolveSlides(block, opts) {
187
134
  return [];
188
135
  return raw.filter((s) => s && typeof s.caption === "string" && s.caption.length > 0);
189
136
  }
190
- function stubPhaseLooksAuthored(block, phase, fixtures) {
191
- const raw = readStubRaw(block, phase);
192
- if (typeof raw === "function")
193
- return true;
194
- if (isStubPhase(raw) && Object.keys(raw).length > 0)
195
- return true;
196
- const fx = fixtures?.[block.name]?.[phase];
197
- if (fx && Object.keys(fx).length > 0)
198
- return true;
199
- return false;
137
+ function stubPhaseLooksAuthored(block, phase) {
138
+ return readStubRaw(block, phase) !== undefined;
200
139
  }
201
140
  /**
202
- * True when the block authored stubAfter (lifecycle fn, slots, fixtures, or legacy highlights).
141
+ * True when the block authored stubAfter (lifecycle fn or slots).
203
142
  * When true, demo should not use verify-trait fallback.
204
143
  */
205
- export function hasAuthoredStubAfter(block, out, fixtures) {
206
- if (stubPhaseLooksAuthored(block, "stubAfter", fixtures))
207
- return true;
208
- const instr = block.instruction;
209
- if (instr.highlights)
144
+ export function hasAuthoredStubAfter(block, out) {
145
+ if (stubPhaseLooksAuthored(block, "stubAfter"))
210
146
  return true;
211
- return resolveHighlightSlots(block, "stubAfter", {
212
- ...(out !== undefined ? { out } : {}),
213
- ...(fixtures !== undefined ? { fixtures } : {}),
214
- }).length > 0;
147
+ return resolveHighlightSlots(block, "stubAfter", out !== undefined ? { out } : {}).length > 0;
215
148
  }
216
149
  /**
217
150
  * True when stubOnError is authored (lifecycle fn and/or rings).
218
151
  * Demo fail path only - success never consults this.
219
152
  */
220
- export function hasAuthoredStubOnError(block, fixtures) {
221
- if (stubPhaseLooksAuthored(block, "stubOnError", fixtures))
153
+ export function hasAuthoredStubOnError(block) {
154
+ if (stubPhaseLooksAuthored(block, "stubOnError"))
222
155
  return true;
223
- return (resolveHighlightSlots(block, "stubOnError", {
224
- ...(fixtures !== undefined ? { fixtures } : {}),
225
- }).length > 0);
156
+ return resolveHighlightSlots(block, "stubOnError").length > 0;
226
157
  }
@@ -13,7 +13,7 @@
13
13
  * `a, b` lists). A selector/label containing a literal `;` or `|` needs the
14
14
  * full-JSON form instead - documented, not silently mishandled.
15
15
  */
16
- import type { PilotHighlightFixtures } from "../pilot-overlay.js";
16
+ import type { PilotHighlightFixtures } from "../overlay/pilot/fixtures.js";
17
17
  export type ParsedHighlightShorthand = {
18
18
  type: "ok";
19
19
  fixtures: PilotHighlightFixtures;
@@ -0,0 +1,8 @@
1
+ import type { StubBagState, StubCtx } from "../../engine/stub/stub.js";
2
+ import type { Checkpoint } from "../../engine/checkpoint/checkpoint.js";
3
+ import type { MemPage } from "../../engine/mem/mem.js";
4
+ export declare function createStubCtx<Out extends Checkpoint<string>>(bag: StubBagState, opts: {
5
+ out?: Out;
6
+ error?: unknown;
7
+ mem?: MemPage;
8
+ }): StubCtx<Out>;
@@ -0,0 +1,164 @@
1
+ import { normalizeTodoPos, normalizeTodoStyle } from "./todo-dock.js";
2
+ import { applyOrientation, normalizeDeviceOrientation, resolveDeviceState } from "./device.js";
3
+ export function createStubCtx(bag, opts) {
4
+ /** One dock per id: its title, style and side; without `parallel` it replaces the dock on screen. */
5
+ const setDock = (id, opts) => {
6
+ bag.todoTouched = true;
7
+ bag.hideTodos = false;
8
+ delete bag.todoGroups;
9
+ const cleaned = id.trim();
10
+ if (cleaned)
11
+ bag.todoId = cleaned;
12
+ else
13
+ delete bag.todoId;
14
+ if (opts.title != null)
15
+ bag.todoTitle = String(opts.title);
16
+ const style = normalizeTodoStyle(opts.style);
17
+ if (style)
18
+ bag.todoStyle = style;
19
+ const pos = normalizeTodoPos(opts.pos);
20
+ if (pos)
21
+ bag.todoPos = pos;
22
+ bag.todoParallel = opts.parallel === true;
23
+ };
24
+ return {
25
+ mem: opts.mem,
26
+ out: opts.out,
27
+ error: opts.error,
28
+ highlights(slots) {
29
+ bag.highlights = { ...(slots || {}) };
30
+ },
31
+ ring(id, stub) {
32
+ bag.highlights = { ...bag.highlights, [id]: stub };
33
+ },
34
+ todos(id, items, opts = {}) {
35
+ setDock(id, opts);
36
+ bag.todos = items;
37
+ if (opts.index != null)
38
+ bag.todoIndex = Number(opts.index);
39
+ if (!items.length)
40
+ bag.hideTodos = true;
41
+ },
42
+ todoIndex(n) {
43
+ bag.todoIndex = n;
44
+ },
45
+ todoGroups(id, groups, opts = {}) {
46
+ setDock(id, opts);
47
+ bag.todoGroups = groups;
48
+ if (!groups.length)
49
+ bag.hideTodos = true;
50
+ },
51
+ hideTodos() {
52
+ bag.todoTouched = true;
53
+ bag.hideTodos = true;
54
+ bag.todos = [];
55
+ delete bag.todoGroups;
56
+ },
57
+ device(preset) {
58
+ bag.deviceTouched = true;
59
+ bag.hideDevice = false;
60
+ const resolved = resolveDeviceState(preset, bag.touchOverride, bag.orientationOverride);
61
+ if (resolved) {
62
+ bag.device = resolved;
63
+ if (resolved.preset === "desktop" && !resolved.touchMode) {
64
+ bag.hideDevice = true;
65
+ }
66
+ }
67
+ },
68
+ viewport(box) {
69
+ bag.deviceTouched = true;
70
+ bag.hideDevice = false;
71
+ const resolved = resolveDeviceState(box, bag.touchOverride, bag.orientationOverride);
72
+ if (resolved)
73
+ bag.device = resolved;
74
+ },
75
+ touch(on) {
76
+ bag.deviceTouched = true;
77
+ const enabled = on === undefined ? true : !!on;
78
+ bag.touchOverride = enabled;
79
+ if (enabled)
80
+ bag.hideDevice = false;
81
+ if (bag.device) {
82
+ bag.device = {
83
+ ...bag.device,
84
+ touchMode: enabled,
85
+ hasTouch: bag.device.hasTouch || enabled,
86
+ };
87
+ if (enabled)
88
+ bag.hideDevice = false;
89
+ }
90
+ else if (enabled) {
91
+ const base = resolveDeviceState("desktop", true, bag.orientationOverride);
92
+ if (base)
93
+ bag.device = { ...base, touchMode: true, hasTouch: true };
94
+ }
95
+ },
96
+ orientation(o) {
97
+ const want = normalizeDeviceOrientation(o);
98
+ if (!want)
99
+ return;
100
+ bag.deviceTouched = true;
101
+ bag.hideDevice = false;
102
+ bag.orientationOverride = want;
103
+ const base = bag.device ||
104
+ resolveDeviceState("mobile", bag.touchOverride) ||
105
+ resolveDeviceState("mobile");
106
+ if (base)
107
+ bag.device = applyOrientation(base, want);
108
+ },
109
+ hideDevice() {
110
+ bag.deviceTouched = true;
111
+ bag.hideDevice = true;
112
+ bag.device = resolveDeviceState("desktop", false);
113
+ bag.touchOverride = false;
114
+ bag.orientationOverride = undefined;
115
+ },
116
+ zoom(n) {
117
+ if (Number.isFinite(n) && n > 0)
118
+ bag.zoom = n;
119
+ },
120
+ zoomOut(keep) {
121
+ bag.zoomOut = !!keep;
122
+ },
123
+ title(text, opts) {
124
+ bag.title = String(text ?? "");
125
+ const p = normalizeBannerPos(opts?.pos);
126
+ if (p)
127
+ bag.titlePos = p;
128
+ },
129
+ titlePos(side) {
130
+ const p = normalizeBannerPos(side);
131
+ if (p)
132
+ bag.titlePos = p;
133
+ },
134
+ caption(text) {
135
+ bag.caption = String(text ?? "");
136
+ },
137
+ hideCaption() {
138
+ bag.caption = "";
139
+ },
140
+ showNetworkTab() {
141
+ bag.networkTabVisible = true;
142
+ },
143
+ hideNetworkTab() {
144
+ bag.networkTabVisible = false;
145
+ },
146
+ bannerUi(opts) {
147
+ if (!opts || typeof opts !== "object")
148
+ return;
149
+ bag.bannerUi = { ...(bag.bannerUi || {}), ...opts };
150
+ },
151
+ hideBanner() {
152
+ bag.bannerUi = { ...(bag.bannerUi || {}), hidden: true };
153
+ },
154
+ todoDockUi(opts) {
155
+ if (!opts || typeof opts !== "object")
156
+ return;
157
+ bag.todoDockUi = { ...(bag.todoDockUi || {}), ...opts };
158
+ },
159
+ };
160
+ }
161
+ function normalizeBannerPos(raw) {
162
+ const v = String(raw ?? "").toLowerCase();
163
+ return v === "left" || v === "center" || v === "right" ? v : undefined;
164
+ }
@@ -1,4 +1,4 @@
1
- import type { HighlightSize, HighlightStyleDefaults, HighlightTone, HighlightWeight } from "./types.js";
1
+ import type { HighlightSize, HighlightStyleDefaults, HighlightTone, HighlightWeight } from "../../engine/stub/ring.js";
2
2
  /** Apply Flow defaults under per-slot authored values (slot wins when set). */
3
3
  export declare function applyHighlightStyleDefaults<T extends {
4
4
  tone?: HighlightTone | string;
@@ -9,12 +9,6 @@ export declare function applyHighlightStyleDefaults<T extends {
9
9
  size: HighlightSize;
10
10
  weight: HighlightWeight;
11
11
  };
12
- /** Map author aliases (`error` -> danger) to a canonical tone. */
13
- export declare function normalizeHighlightTone(raw: unknown): HighlightTone;
14
- /** Map size aliases to sm/md/lg. */
15
- export declare function normalizeHighlightSize(raw: unknown): HighlightSize;
16
- /** Map weight aliases to normal/bold. */
17
- export declare function normalizeHighlightWeight(raw: unknown): HighlightWeight;
18
12
  /** Prefix label with a short ASCII icon for semantic tones. */
19
13
  export declare function toneIconPrefix(tone: HighlightTone): string;
20
14
  /** Caption for ring / slide UI (label|caption + optional detail/tag + tone icon). */
@@ -1,3 +1,4 @@
1
+ import { normalizeHighlightSize, normalizeHighlightTone, normalizeHighlightWeight } from "../../engine/stub/ring.js";
1
2
  /** Apply Flow defaults under per-slot authored values (slot wins when set). */
2
3
  export function applyHighlightStyleDefaults(slot, defaults) {
3
4
  const tone = slot.tone !== undefined && slot.tone !== ""
@@ -26,47 +27,6 @@ const TONE_ICONS = {
26
27
  success: "+",
27
28
  orange: "",
28
29
  };
29
- /** Map author aliases (`error` -> danger) to a canonical tone. */
30
- export function normalizeHighlightTone(raw) {
31
- if (typeof raw !== "string")
32
- return "planned";
33
- const t = raw.trim().toLowerCase();
34
- if (t === "auto" || t === "automation" || t === "engine")
35
- return "auto";
36
- if (t === "info" || t === "blue")
37
- return "info";
38
- if (t === "warning" || t === "warn" || t === "yellow")
39
- return "warning";
40
- if (t === "danger" || t === "error" || t === "red")
41
- return "danger";
42
- if (t === "success" || t === "ok" || t === "green")
43
- return "success";
44
- if (t === "orange" || t === "amber" || t === "dom" || t === "inspect")
45
- return "orange";
46
- if (t === "planned" || t === "purple" || t === "authored")
47
- return "planned";
48
- return "planned";
49
- }
50
- /** Map size aliases to sm/md/lg. */
51
- export function normalizeHighlightSize(raw) {
52
- if (typeof raw !== "string")
53
- return "md";
54
- const t = raw.trim().toLowerCase();
55
- if (t === "sm" || t === "s" || t === "small" || t === "tiny")
56
- return "sm";
57
- if (t === "lg" || t === "l" || t === "large" || t === "big" || t === "xl")
58
- return "lg";
59
- return "md";
60
- }
61
- /** Map weight aliases to normal/bold. */
62
- export function normalizeHighlightWeight(raw) {
63
- if (typeof raw !== "string")
64
- return "normal";
65
- const t = raw.trim().toLowerCase();
66
- if (t === "bold" || t === "strong" || t === "heavy" || t === "b")
67
- return "bold";
68
- return "normal";
69
- }
70
30
  /** Prefix label with a short ASCII icon for semantic tones. */
71
31
  export function toneIconPrefix(tone) {
72
32
  const icon = TONE_ICONS[tone];
@@ -1,9 +1,9 @@
1
- import type { TodoDockState, TodoDockUiOpts, TodoDockUiResolved, TodoListStyle, WaygraphTodoGroupInput, WaygraphTodoInput, WaygraphTodoItem } from "./types.js";
1
+ import type { TodoDockState, TodoDockUiOpts, TodoDockUiResolved, TodoListStyle, WaygraphTodoGroupInput, WaygraphTodoInput, WaygraphTodoItem } from "../../engine/stub/todos.js";
2
2
  /**
3
3
  * Resolve todo-dock UX from env + optional author patch.
4
- * `WAYGRAPH_TODO_UI=full|off|legacy` forces compact/collision/behindRing off.
4
+ * `WAYGRAPH_TODO_UI=full|off` forces compact/collision/behindRing off.
5
5
  */
6
- export declare function resolveTodoDockUi(patch?: TodoDockUiOpts | null, env?: NodeJS.ProcessEnv): TodoDockUiResolved;
6
+ export declare function resolveTodoDockUi(patch?: TodoDockUiOpts | null): TodoDockUiResolved;
7
7
  /** Normalize checklist dock side. */
8
8
  export declare function normalizeTodoPos(raw: unknown): "left" | "right" | undefined;
9
9
  /** Normalize dock list style. */
@@ -1,33 +1,20 @@
1
- function envFlagBool(env, key, fallback) {
2
- const v = env[key];
3
- if (v === undefined || v === "")
4
- return fallback;
5
- const s = String(v).trim().toLowerCase();
6
- if (s === "0" || s === "false" || s === "off" || s === "no")
7
- return false;
8
- if (s === "1" || s === "true" || s === "on" || s === "yes")
9
- return true;
10
- return fallback;
11
- }
12
- function envFlagInt(env, key, fallback) {
13
- const n = Number(env[key]);
14
- return Number.isFinite(n) && n > 0 ? Math.floor(n) : fallback;
15
- }
1
+ import { envNumber, envString, envSwitch } from "../../engine/env.js";
2
+ const positiveInt = (n, fallback) => (n !== undefined && n > 0 ? Math.floor(n) : fallback);
16
3
  /**
17
4
  * Resolve todo-dock UX from env + optional author patch.
18
- * `WAYGRAPH_TODO_UI=full|off|legacy` forces compact/collision/behindRing off.
5
+ * `WAYGRAPH_TODO_UI=full|off` forces compact/collision/behindRing off.
19
6
  */
20
- export function resolveTodoDockUi(patch, env = process.env) {
21
- const mode = String(env.WAYGRAPH_TODO_UI || "smart")
7
+ export function resolveTodoDockUi(patch) {
8
+ const mode = String(envString("WAYGRAPH_TODO_UI") || "smart")
22
9
  .trim()
23
10
  .toLowerCase();
24
- const full = mode === "full" || mode === "off" || mode === "0" || mode === "legacy" || mode === "classic";
11
+ const full = mode === "full" || mode === "off" || mode === "0";
25
12
  const base = {
26
- compact: full ? false : envFlagBool(env, "WAYGRAPH_TODO_COMPACT", true),
27
- collision: full ? false : envFlagBool(env, "WAYGRAPH_TODO_COLLISION", true),
28
- behindRing: full ? false : envFlagBool(env, "WAYGRAPH_TODO_BEHIND", true),
29
- cap: envFlagInt(env, "WAYGRAPH_TODO_CAP", 5),
30
- expandCap: envFlagInt(env, "WAYGRAPH_TODO_EXPAND_CAP", 14),
13
+ compact: full ? false : envSwitch("WAYGRAPH_TODO_COMPACT", true),
14
+ collision: full ? false : envSwitch("WAYGRAPH_TODO_COLLISION", true),
15
+ behindRing: full ? false : envSwitch("WAYGRAPH_TODO_BEHIND", true),
16
+ cap: positiveInt(envNumber("WAYGRAPH_TODO_CAP"), 5),
17
+ expandCap: positiveInt(envNumber("WAYGRAPH_TODO_EXPAND_CAP"), 14),
31
18
  };
32
19
  if (base.expandCap < base.cap)
33
20
  base.expandCap = base.cap;
@@ -96,7 +83,7 @@ export function normalizeTodos(todos, todoIndex, style = "sequential") {
96
83
  item.done = !!t.done;
97
84
  if (t.current !== undefined)
98
85
  item.current = !!t.current;
99
- const idRaw = t.id ?? t.name;
86
+ const idRaw = t.id;
100
87
  if (idRaw != null && String(idRaw).trim())
101
88
  item.id = String(idRaw).trim();
102
89
  }
@@ -135,7 +122,7 @@ export function buildTodoDock(opts) {
135
122
  const group = { style: gs, items };
136
123
  if (g.title && String(g.title).trim())
137
124
  group.title = String(g.title).trim();
138
- const gid = g.id ?? g.name;
125
+ const gid = g.id;
139
126
  if (gid != null && String(gid).trim())
140
127
  group.id = String(gid).trim();
141
128
  return group;
@@ -209,8 +196,6 @@ export function advanceTodoDock(dock, index) {
209
196
  const row = { text: it.text };
210
197
  if (it.id)
211
198
  row.id = it.id;
212
- else if (it.name)
213
- row.id = it.name;
214
199
  return row;
215
200
  });
216
201
  return {
@@ -238,8 +223,6 @@ export function completeSequentialTodoDock(dock) {
238
223
  const row = { text: it.text, done: true, current: false };
239
224
  if (it.id)
240
225
  row.id = it.id;
241
- else if (it.name)
242
- row.id = it.name;
243
226
  return row;
244
227
  }),
245
228
  };
@@ -0,0 +1,7 @@
1
+ import type { Page } from "@playwright/test";
2
+ import type { MemPage } from "../../engine/mem/mem.js";
3
+ export declare function installDemoChrome(page: Page, title?: string, options?: {
4
+ banner?: boolean;
5
+ }): Promise<void>;
6
+ /** Demo cursor + ring on fill/click during auto explore headful runs (automation = gray). */
7
+ export declare function instrumentAutoInteractions(page: Page, mem: MemPage, slowMo: number): void;
@@ -0,0 +1,97 @@
1
+ import { ensureShadowRoot } from "./ui/shadow.js";
2
+ import { installCore } from "./inpage/core.js";
3
+ import { clickPulseAt, moveCursorTo } from "./cursor.js";
4
+ import { hideRing } from "./rings.js";
5
+ import { setLocatorTheater } from "./locator-theater.js";
6
+ import { ignorePageGone, ignoreTimeout } from "../../engine/page-gone.js";
7
+ export async function installDemoChrome(page, title = "waygraph auto", options = {}) {
8
+ const showBanner = options.banner !== false;
9
+ await ensureShadowRoot(page);
10
+ await page.evaluate(installCore, {}).catch(ignorePageGone);
11
+ await page
12
+ .evaluate(({ title, showBanner }) => {
13
+ if (showBanner && title && !__wgById("wg-banner")) {
14
+ const banner = document.createElement("div");
15
+ banner.id = "wg-banner";
16
+ const tag = document.createElement("span");
17
+ tag.className = "wg-banner-tag";
18
+ tag.textContent = "waygraph auto";
19
+ const text = document.createElement("span");
20
+ text.textContent = title;
21
+ banner.append(tag, text);
22
+ __wgAdd(banner);
23
+ banner.setAttribute("data-wg-ui", "1");
24
+ banner.setAttribute("data-wg-modal", "banner");
25
+ banner.setAttribute("data-wg-ready", "1");
26
+ }
27
+ else {
28
+ const existing = __wgById("wg-banner");
29
+ if (existing) {
30
+ existing.setAttribute("data-wg-ui", "1");
31
+ existing.setAttribute("data-wg-modal", "banner");
32
+ existing.setAttribute("data-wg-ready", "1");
33
+ }
34
+ }
35
+ if (showBanner && !document.title.startsWith("[waygraph] ")) {
36
+ document.title = "[waygraph] " + document.title;
37
+ }
38
+ }, { title, showBanner })
39
+ .catch(ignorePageGone);
40
+ }
41
+ async function showRing(page, box, label) {
42
+ await page.evaluate(({ box, label }) => window.__wgPositionRing?.(box, label, "auto"), { box, label }).catch(ignorePageGone);
43
+ }
44
+ /** Demo cursor + ring on fill/click during auto explore headful runs (automation = gray). */
45
+ export function instrumentAutoInteractions(page, mem, slowMo) {
46
+ const typeDelay = () => (slowMo ? 0 : 30);
47
+ const clickPrePop = () => (slowMo ? 300 : 700);
48
+ const clickPostPop = () => (slowMo ? 200 : 500);
49
+ const cursorMs = (full) => full;
50
+ const memTrack = { lastKeyName: null, at: 0 };
51
+ const originalGet = mem.get.bind(mem);
52
+ mem.get = (key) => {
53
+ memTrack.lastKeyName = key?.name ?? null;
54
+ memTrack.at = Date.now();
55
+ return originalGet(key);
56
+ };
57
+ setLocatorTheater(page, {
58
+ async beforeFill(locator) {
59
+ await installDemoChrome(page, "", { banner: false });
60
+ const box = await locator.boundingBox();
61
+ if (!box)
62
+ return;
63
+ const label = memTrack.lastKeyName && Date.now() - memTrack.at < 3000 ? "from mem: " + memTrack.lastKeyName : "writing from mem";
64
+ await moveCursorTo(page, box, cursorMs(500));
65
+ await showRing(page, box, label);
66
+ await new Promise((res) => setTimeout(res, 200));
67
+ },
68
+ typingDelay: typeDelay,
69
+ async afterFill() {
70
+ await hideRing(page);
71
+ },
72
+ async beforeClick(locator, options) {
73
+ await installDemoChrome(page, "", { banner: false });
74
+ await locator.waitFor({ state: "visible", timeout: options?.timeout || 30000 }).catch(ignoreTimeout);
75
+ const box = await locator.boundingBox();
76
+ if (!box)
77
+ return "click";
78
+ let label = "click";
79
+ const text = (await locator.textContent().catch(() => null))?.trim();
80
+ if (text && text.length <= 30)
81
+ label = text;
82
+ const clickPoint = await moveCursorTo(page, box, cursorMs(600));
83
+ await showRing(page, box, label);
84
+ await new Promise((res) => setTimeout(res, clickPrePop()));
85
+ if (clickPoint) {
86
+ await clickPulseAt(page, clickPoint.x, clickPoint.y, "auto");
87
+ await new Promise((res) => setTimeout(res, 80));
88
+ }
89
+ return "click";
90
+ },
91
+ holdMs: () => 600,
92
+ async afterClick() {
93
+ await new Promise((res) => setTimeout(res, clickPostPop()));
94
+ await hideRing(page);
95
+ },
96
+ });
97
+ }
@@ -10,11 +10,17 @@
10
10
  * `assertWgOverlayReady(page)` (or WAYGRAPH_PROVE_EXIT=1) passes.
11
11
  */
12
12
  import type { Page } from "@playwright/test";
13
+ /** Selector matching every element waygraph's overlay draws into a page. */
13
14
  export declare const WG_UI_SEL = "[data-wg-ui=\"1\"]";
15
+ /** Selector of the overlay element that appears when the step panel is ready. */
14
16
  export declare const WG_READY_PANEL_SEL = "[data-wg-modal=\"panel\"][data-wg-ready=\"1\"]";
17
+ /** Selector of the overlay element that appears when the auto panel is ready. */
15
18
  export declare const WG_READY_AUTO_SEL = "[data-wg-modal=\"auto-panel\"][data-wg-ready=\"1\"]";
19
+ /** Selector of the overlay element that appears when the banner is ready. */
16
20
  export declare const WG_READY_BANNER_SEL = "[data-wg-modal=\"banner\"][data-wg-ready=\"1\"]";
21
+ /** The kind of modal the overlay beacon reports. */
17
22
  export type WgModalKind = "panel" | "banner" | "auto-panel";
23
+ /** One overlay element a session reports through its beacon. */
18
24
  export type WgBeaconRow = {
19
25
  id: string | null;
20
26
  modal: string | null;
@@ -31,6 +37,7 @@ export type WgBeaconRow = {
31
37
  };
32
38
  /** Browser-side beacon reader (also installed as window.__wgOverlayBeacon). */
33
39
  export declare function readWgOverlayBeaconInPage(): WgBeaconRow[];
40
+ /** Reads the overlay beacon from a page: what waygraph's own UI is showing. */
34
41
  export declare function readWgOverlayBeacon(page: Page): Promise<WgBeaconRow[]>;
35
42
  /**
36
43
  * Hard gate: a blank / missing / opacity-0 modal fails.