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
@@ -0,0 +1,10 @@
1
+ import type { WgPage } from "../types.js";
2
+ /**
3
+ * `ui` = authored banner UX from the stub phase: { pos, collision, hidden } (all optional).
4
+ * `caption` = bottom subtitle-bar text (ctx.caption()/ctx.hideCaption()) - `undefined` leaves it
5
+ * alone (unset this step), `""` hides it, any other string shows/updates it.
6
+ * `networkTabVisible` = network-tab panel shown/hidden (ctx.showNetworkTab()/hideNetworkTab()) -
7
+ * `undefined` leaves it alone (default state is hidden, set the very first time restoreNetworkHistory
8
+ * builds a panel); capture itself is unconditional and unaffected by this either way.
9
+ */
10
+ export declare function installOverlay(page: WgPage, title?: any, ui?: any, caption?: any, networkTabVisible?: any): Promise<void>;
@@ -0,0 +1,89 @@
1
+ import { HOST_CSS, RUNNER_EXTRA_CSS, WAYGRAPH_FAVICON } from "./overlay-css.js";
2
+ import { ensureShadowRoot } from "./ui/shadow.js";
3
+ import { resolveTodoDockUi } from "../narration/todo-dock.js";
4
+ import { installCore } from "./inpage/core.js";
5
+ import { installSwipeZoom } from "./inpage/swipe-zoom.js";
6
+ import { installBanner } from "./inpage/banner.js";
7
+ import { showCaption, hideCaption } from "./inpage/caption.js";
8
+ import { installStamp } from "./inpage/stamp.js";
9
+ import { installPanelChrome } from "./inpage/panel-chrome.js";
10
+ import { installTodos } from "./inpage/todos.js";
11
+ import { installDevice } from "./inpage/device-chip.js";
12
+ import { applyVideoDeviceStage } from "./device-stage.js";
13
+ import { installNetworkCapture, restoreNetworkHistory } from "./network-capture.js";
14
+ import { setNetworkTabVisible } from "./inpage/network.js";
15
+ import { envFlag, envString } from "../../engine/env.js";
16
+ import { ignorePageGone } from "../../engine/page-gone.js";
17
+ /**
18
+ * `ui` = authored banner UX from the stub phase: { pos, collision, hidden } (all optional).
19
+ * `caption` = bottom subtitle-bar text (ctx.caption()/ctx.hideCaption()) - `undefined` leaves it
20
+ * alone (unset this step), `""` hides it, any other string shows/updates it.
21
+ * `networkTabVisible` = network-tab panel shown/hidden (ctx.showNetworkTab()/hideNetworkTab()) -
22
+ * `undefined` leaves it alone (default state is hidden, set the very first time restoreNetworkHistory
23
+ * builds a panel); capture itself is unconditional and unaffected by this either way.
24
+ */
25
+ export async function installOverlay(page, title, ui, caption, networkTabVisible) {
26
+ // ring/cursor/banner/dock come from the ONE shared bundle every surface installs (ui/css/*.css).
27
+ await ensureShadowRoot(page);
28
+ // Idempotent (guarded on page.__wgNetworkCaptureInstalled) - safe to call every step even though
29
+ // installOverlay itself runs every step; the page.on() listeners this installs are attached to
30
+ // the Page object, not any one document, so they already survive navigations on their own.
31
+ installNetworkCapture(page);
32
+ // Visibility is Node-side state too (page.__wgNetworkTabVisible), same reason history is: a
33
+ // navigation wipes window.__wgNetworkTabVisible along with the rest of the page-side JS state,
34
+ // so "shown" would silently revert to the hidden default on the very next navigated step without
35
+ // this. Default false (hidden) - matches addNetworkEntry's own default-hidden behavior.
36
+ if (networkTabVisible !== undefined)
37
+ page.__wgNetworkTabVisible = !!networkTabVisible;
38
+ await page.evaluate((v) => { window.__wgNetworkTabVisible = v; }, !!page.__wgNetworkTabVisible).catch(ignorePageGone);
39
+ // Real bug this fixes: a navigation wipes the shadow root (and with it, the network panel's DOM
40
+ // and in-page entry list) - without replaying page.__wgNetworkHistory (Node-side, survives
41
+ // navigation) back in every step, the "network tab" silently reset to empty on any step that
42
+ // navigated, instead of staying persistent like a real Network tab.
43
+ await restoreNetworkHistory(page);
44
+ // Explicit toggle too, not just the flag write above - covers the case where the panel already
45
+ // existed (no restore ran this step) and this step's `networkTabVisible` differs from before.
46
+ if (networkTabVisible !== undefined) {
47
+ await page.evaluate(setNetworkTabVisible, networkTabVisible).catch(ignorePageGone);
48
+ }
49
+ // Runner-only chrome (step panel, zoom/typing/device chips) - separate key, no collision.
50
+ await page.evaluate(([css, key]) => __wgCss(css, key), [RUNNER_EXTRA_CSS, "wg-runner-css"]).catch(ignorePageGone);
51
+ await page.addStyleTag({ content: HOST_CSS }).catch(ignorePageGone);
52
+ // Default top-left; override with WAYGRAPH_TITLE_POS=left|center|right.
53
+ // Click cycles left -> center -> right (persisted in localStorage so a
54
+ // navigation that rebuilds the banner keeps the human's last pick).
55
+ const envPos = (envString("WAYGRAPH_TITLE_POS") || "left").toLowerCase();
56
+ const bannerPos = envPos === "center" || envPos === "right" ? envPos : "left";
57
+ const envTodoPos = (envString("WAYGRAPH_TODO_POS") || "left").toLowerCase();
58
+ const todoPos = envTodoPos === "right" ? "right" : "left";
59
+ const envAutoplay = envFlag("WAYGRAPH_AUTOPLAY");
60
+ const todoDockUi = resolveTodoDockUi();
61
+ const args = { title, favicon: WAYGRAPH_FAVICON, bannerPos, todoPos, envAutoplay, todoDockUi, bannerUi: ui || null };
62
+ await page.evaluate(installCore, args).catch(ignorePageGone);
63
+ await page.evaluate(installSwipeZoom, args).catch(ignorePageGone);
64
+ await page.evaluate(installBanner, args).catch(ignorePageGone);
65
+ await page.evaluate(installStamp, args).catch(ignorePageGone);
66
+ await page.evaluate(installPanelChrome, args).catch(ignorePageGone);
67
+ await page.evaluate(installTodos, args).catch(ignorePageGone);
68
+ await page.evaluate(installDevice, args).catch(ignorePageGone);
69
+ if (caption !== undefined) {
70
+ if (caption === "") {
71
+ await page.evaluate(hideCaption).catch(ignorePageGone);
72
+ }
73
+ else {
74
+ await page.evaluate(showCaption, caption).catch(ignorePageGone);
75
+ }
76
+ }
77
+ // Navigations wipe #wg-device-shell - rebuild when video stage + device are live.
78
+ // If we already shuttered to desktop-flat, re-apply FLAT (never re-add bezel).
79
+ if (page.__wgVideoViewport &&
80
+ page.__wgDeviceShell &&
81
+ page.__wgDeviceShell.width &&
82
+ page.__wgDeviceShell.height) {
83
+ await applyVideoDeviceStage(page, page.__wgDeviceShell, page.__wgVideoViewport, {
84
+ clear: false,
85
+ shutterOut: !!page.__wgDesktopFlat,
86
+ desktopFlat: !!page.__wgDesktopFlat,
87
+ });
88
+ }
89
+ }
@@ -1,5 +1,5 @@
1
- import type { StubPhaseResult } from "../highlights.js";
2
- import type { PilotHighlightFixtures } from "./fixtures.js";
1
+ import type { StubPhaseResult } from "../../engine/stub/stub.js";
2
+ import type { PilotHighlightFixtures } from "./pilot/fixtures.js";
3
3
  /**
4
4
  * The reverse: a resolved stub phase (what `runStubPhase` returns for a Block's stubBefore/After/OnError)
5
5
  * -> what the Pilot painter takes. Lets `auto/browser/pilot send` paint a Block's authored waygraph overlay
@@ -48,8 +48,8 @@ export function describeOverlayFixtures(tag, f) {
48
48
  out.push(`${tag} ctx.bannerUi(${JSON.stringify(f.bannerUi)})`);
49
49
  if (f.todos?.length)
50
50
  out.push(`${tag} ctx.todos n=${f.todos.length} index=${f.todoIndex ?? 0}${f.todoPos ? ` pos=${f.todoPos}` : ""}`);
51
- if (f.todoDockUi ?? f.todoUi)
52
- out.push(`${tag} ctx.todoDockUi(${JSON.stringify(f.todoDockUi ?? f.todoUi)})`);
51
+ if (f.todoUi)
52
+ out.push(`${tag} todoUi ${JSON.stringify(f.todoUi)}`);
53
53
  if (f.device)
54
54
  out.push(`${tag} ctx.device(${typeof f.device === "string" ? f.device : f.device.preset ?? "custom"})`);
55
55
  if (f.zoom)
@@ -1,4 +1,5 @@
1
1
  import { ensureInstalled } from "./shell.js";
2
+ import { ignorePageGone } from "../../../engine/page-gone.js";
2
3
  /** Paint the gray "auto" ring (Playwright is about to act here) at a viewport rectangle. */
3
4
  async function showPilotRect(page, box, label, tone = "auto") {
4
5
  await ensureInstalled(page);
@@ -30,7 +31,7 @@ async function showPilotRect(page, box, label, tone = "auto") {
30
31
  tag.style.opacity = "0";
31
32
  }, 4_000);
32
33
  }, { box, label, tone })
33
- .catch(() => { });
34
+ .catch(ignorePageGone);
34
35
  }
35
36
  const LOCATOR_ACTIONS = ["click", "dblclick", "hover", "tap", "fill", "check", "uncheck", "selectOption", "press", "pressSequentially", "setInputFiles"];
36
37
  const patched = new WeakSet();
@@ -1,4 +1,7 @@
1
- import type { BannerPos, BannerUiOpts, DevicePreset, DeviceState, HighlightTone, TodoDockUiOpts, TodoListStyle, WaygraphTodoGroupInput } from "../highlights.js";
1
+ import type { BannerPos, BannerUiOpts } from "../../../engine/stub/stub.js";
2
+ import type { DevicePreset, DeviceState } from "../../../engine/stub/viewport.js";
3
+ import type { HighlightTone } from "../../../engine/stub/ring.js";
4
+ import type { TodoDockUiOpts, TodoListStyle, WaygraphTodoGroupInput } from "../../../engine/stub/todos.js";
2
5
  import type { Page } from "@playwright/test";
3
6
  /** One ring the Pilot agent wants painted (same fields as demo stub rings). */
4
7
  export type PilotFixtureRing = {
@@ -26,7 +29,7 @@ export type PilotFixtureRing = {
26
29
  };
27
30
  /**
28
31
  * Agent-sent highlight fixtures for a live Pilot / auto session.
29
- * Painted by {@link showPilotFixtures}; driven via IPC `op: "highlight"`.
32
+ * Painted by `showPilotFixtures`; driven via IPC `op: "highlight"`.
30
33
  * Mirrors demo stub surface: rings, todos, zoom, focus, device.
31
34
  */
32
35
  export type PilotHighlightFixtures = {
@@ -40,7 +43,7 @@ export type PilotHighlightFixtures = {
40
43
  todoTitle?: string;
41
44
  /** Todo dock side. Default `right`. */
42
45
  todoPos?: "left" | "right";
43
- /** Presentation: `sequential` (default, arrow walkthrough) | `checklist` | `bullets`. Same as ctx.todoStyle. */
46
+ /** Presentation: `sequential` (default, arrow walkthrough) | `checklist` | `bullets`. Same as ctx.todos(id, items, { style }). */
44
47
  todoStyle?: TodoListStyle;
45
48
  /** Multiple titled lists (FR/Scenarios/ACs, same as ctx.todoGroups) - replaces {@link todos} when set. */
46
49
  todoGroups?: readonly WaygraphTodoGroupInput[];
@@ -78,8 +81,6 @@ export type PilotHighlightFixtures = {
78
81
  titlePos?: BannerPos;
79
82
  /** Banner UX: collision / hidden (same as `ctx.bannerUi`). */
80
83
  bannerUi?: BannerUiOpts;
81
- /** Alias of {@link todoUi} - the name `ctx.todoDockUi` uses. */
82
- todoDockUi?: TodoDockUiOpts;
83
84
  };
84
85
  /**
85
86
  * Paint (or clear) agent-authored highlight fixtures on the live page.
@@ -1,7 +1,10 @@
1
- // Split out of the former 950-line pilot-overlay.ts (see src/ARCHITECTURE.md). Behavior unchanged.
2
- import { buildTodoDock, formatHighlightCaption, normalizeHighlightSize, normalizeHighlightTone, normalizeHighlightWeight, resolveDeviceState, resolveTodoDockUi } from "../highlights.js";
1
+ import { buildTodoDock, resolveTodoDockUi } from "../../narration/todo-dock.js";
2
+ import { formatHighlightCaption } from "../../narration/style.js";
3
+ import { normalizeHighlightSize, normalizeHighlightTone, normalizeHighlightWeight } from "../../../engine/stub/ring.js";
4
+ import { resolveDeviceState } from "../../narration/device.js";
3
5
  import { ensureInstalled } from "./shell.js";
4
- import { verboseLog } from "../auto-session/verbose-log.js";
6
+ import { verboseLog } from "../../verbose-log.js";
7
+ import { ignorePageGone } from "../../../engine/page-gone.js";
5
8
  /**
6
9
  * Paint (or clear) agent-authored highlight fixtures on the live page.
7
10
  * Multi-ring + optional todo strip + zoom/focus/device - the Pilot equivalent
@@ -44,7 +47,7 @@ export async function showPilotFixtures(page, fixtures) {
44
47
  const todoPos = fixtures.todoPos === "left" ? "left" : "right";
45
48
  const todoUi = resolveTodoDockUi(fixtures.todoUi ?? null);
46
49
  // Real TodoDockState (groups/style), same builder the demo runner uses - not a flat string[]
47
- // re-implementation, so a Block/agent that authors ctx.todoGroups()/ctx.todoStyle() looks the
50
+ // re-implementation, so a Block/agent that authors ctx.todoGroups() or a todos style looks the
48
51
  // same on Pilot as it does in `waygraph demo`.
49
52
  const todoDock = fixtures.clear
50
53
  ? undefined
@@ -84,31 +87,31 @@ export async function showPilotFixtures(page, fixtures) {
84
87
  if (hit?.zoomOut !== undefined)
85
88
  zoomOut = hit.zoomOut !== false;
86
89
  }
87
- // Device viewport - same runner/device-stage.js + inpage/device.js every other surface uses
90
+ // Device viewport - same demo/overlay/device-stage.ts + inpage/device.ts every other surface uses
88
91
  // (toast + persistent chip + touch mode), not a separate, simpler Pilot-only chip.
89
92
  if (fixtures.clear === true) {
90
- const { applyDeviceToPage } = await import("../runner/device-stage.js");
91
- await applyDeviceToPage(page, undefined, "clear").catch(() => { });
93
+ const { applyDeviceToPage } = await import("../device-stage.js");
94
+ await applyDeviceToPage(page, undefined, "clear").catch(ignorePageGone);
92
95
  }
93
96
  else if (fixtures.device !== undefined) {
94
97
  const d = resolveDeviceState(fixtures.device);
95
98
  if (d) {
96
99
  const [{ applyDeviceToPage }, { installDevice }] = await Promise.all([
97
- import("../runner/device-stage.js"),
98
- import("../runner/inpage/device.js"),
100
+ import("../device-stage.js"),
101
+ import("../inpage/device-chip.js"),
99
102
  ]);
100
- await page.evaluate(installDevice, {}).catch(() => { });
101
- await applyDeviceToPage(page, d, "set").catch(() => { });
103
+ await page.evaluate(installDevice, {}).catch(ignorePageGone);
104
+ await applyDeviceToPage(page, d, "set").catch(ignorePageGone);
102
105
  }
103
106
  }
104
107
  const bannerTitle = fixtures.clear ? undefined : fixtures.title;
105
108
  const bannerPos = fixtures.clear ? undefined : fixtures.titlePos;
106
109
  const bannerHidden = !!fixtures.clear || !!fixtures.bannerUi?.hidden;
107
110
  const bannerCollision = fixtures.bannerUi?.collision !== false;
108
- // Same #wg-banner installer the demo runner uses (runner/inpage/banner.js) - not a separate
111
+ // Same #wg-banner installer the demo runner uses (demo/overlay/inpage/banner.ts) - not a separate
109
112
  // re-implementation. `tag: "waygraph pilot"` is the only Pilot-specific bit.
110
113
  if (bannerTitle !== undefined || bannerHidden) {
111
- const { installBanner } = await import("../runner/inpage/banner.js");
114
+ const { installBanner } = await import("../inpage/banner.js");
112
115
  await page
113
116
  .evaluate(installBanner, {
114
117
  title: bannerTitle,
@@ -116,7 +119,7 @@ export async function showPilotFixtures(page, fixtures) {
116
119
  bannerUi: { hidden: bannerHidden, collision: bannerCollision, ...(bannerPos ? { pos: bannerPos } : {}) },
117
120
  tag: "waygraph pilot",
118
121
  })
119
- .catch(() => { });
122
+ .catch(ignorePageGone);
120
123
  }
121
124
  // Resolve every ring's box (and the zoom target, if any) through Playwright's own locator, not a
122
125
  // selector string handed to the page for a raw DOM querySelector to fail silently on - >>
@@ -185,9 +188,7 @@ export async function showPilotFixtures(page, fixtures) {
185
188
  }
186
189
  const zoomed = level > 1.001 || level < 0.999;
187
190
  badge.dataset.zoomed = zoomed ? "1" : "0";
188
- badge.innerHTML =
189
- '<span class="wg-pilot-fx-zoom-ico"><svg viewBox="0 0 24 24" fill="none" stroke="#fde68a" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7"/><path d="M20 20l-3.5-3.5"/></svg></span>' +
190
- `<span class="wg-pilot-fx-zoom-val">${level.toFixed(2)}\u00d7</span>`;
191
+ __wgSet(badge, __wgEl("span", { class: "wg-pilot-fx-zoom-ico" }, __wgSvg('<svg viewBox="0 0 24 24" fill="none" stroke="#fde68a" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7"/><path d="M20 20l-3.5-3.5"/></svg>')), __wgEl("span", { class: "wg-pilot-fx-zoom-val" }, level.toFixed(2) + "\u00d7"));
191
192
  };
192
193
  const clearZoom = () => {
193
194
  // Undo any leftover CSS-scale from older Pilot zoom path.
@@ -217,7 +218,7 @@ export async function showPilotFixtures(page, fixtures) {
217
218
  let painted = 0;
218
219
  let focusBox = null;
219
220
  // Paint through the SAME shared ring primitive the demo/auto singleton ring uses
220
- // (window.__wgPaintRingAt, installed by runner/inpage/core.js's installCore - see
221
+ // (window.__wgPaintRingAt, installed by demo/overlay/inpage/core.ts's installCore - see
221
222
  // ensureInstalled) - one ring implementation, not a separate DOM-building copy here.
222
223
  rings.forEach((ring, i) => {
223
224
  const box = ringBoxes[i];
@@ -1,4 +1,4 @@
1
- import type { HighlightTone } from "../highlights.js";
1
+ import type { HighlightTone } from "../../../engine/stub/ring.js";
2
2
  import type { BrowserContext, Page } from "@playwright/test";
3
3
  /**
4
4
  * Re-install the overlay shell on every navigation (about:blank, goto, etc.)
@@ -26,7 +26,7 @@ export declare function showPilotActivity(page: Page, text: string): Promise<voi
26
26
  * JSON blob in a terminal. Real, direct user request.
27
27
  *
28
28
  * Reuses the real `#wg-ring`/`#wg-ring-label` elements + `WAYGRAPH_RING_CSS`
29
- * (see `highlights.ts`) - the exact same visual language `cli.ts`'s own demo
29
+ * (see `demo/narration/index.ts`) - the exact same visual language `cli.ts`'s own demo
30
30
  * stepper paints rings with, not a separate look-alike. Still a purpose-built
31
31
  * renderer here (position/show/hide only, via plain `getBoundingClientRect` -
32
32
  * no camera zoom/spotlight/todo-dock/pacing), since that whole engine still
@@ -1,7 +1,7 @@
1
- // Split out of the former 950-line pilot-overlay.ts (see src/ARCHITECTURE.md). Behavior unchanged.
2
1
  import { SURFACE } from "../ui/tokens.js";
3
2
  import { ensureShadowRoot, installShadowRoot } from "../ui/shadow.js";
4
- import { verboseLog } from "../auto-session/verbose-log.js";
3
+ import { verboseLog } from "../../verbose-log.js";
4
+ import { ignorePageGone } from "../../../engine/page-gone.js";
5
5
  // Real, direct user request: this overlay's own colors were an improvised
6
6
  // purple/white scheme (#a78bfa / #1a1033) that didn't match anything else -
7
7
  // "our design here seems like barely shares with the ui on the stepper
@@ -64,7 +64,7 @@ const OVERLAY_CSS = `
64
64
  }
65
65
  #wg-pilot-activity.wg-pilot-toast-show { opacity: 1; transform: translateY(0); }
66
66
  /* Agent fixture rings (painted via the shared .wg-ring-el primitive, see ui/css/ring.css and
67
- runner/inpage/core.js's __wgPaintRingAt), #wg-pilot-fx-todos, #wg-ring/#wg-ring-label and
67
+ demo/overlay/inpage/core.ts's __wgPaintRingAt), #wg-pilot-fx-todos, #wg-ring/#wg-ring-label and
68
68
  #wg-banner all come from the ONE shared bundle ensureShadowRoot installs (ui/css/*.css) - not
69
69
  redefined here. */
70
70
  /* Spotlight (demo focus:true) - dim page, cutout around target. */
@@ -96,16 +96,7 @@ function installPilotOverlayShell(css) {
96
96
  if (__wgById("wg-pilot-overlay"))
97
97
  return;
98
98
  __wgCss(css, "wg-pilot-overlay-css");
99
- const root = document.createElement("div");
100
- root.id = "wg-pilot-overlay";
101
- root.innerHTML =
102
- '<div id="wg-pilot-badge">Waygraph Pilot</div>' +
103
- '<div id="wg-pilot-panel">' +
104
- '<div id="wg-pilot-panel-toggle"><button id="wg-pilot-view-current" class="wg-pilot-tab-active">Here</button>' +
105
- '<button id="wg-pilot-view-graph">All nodes</button></div>' +
106
- '<div id="wg-pilot-panel-current"></div>' +
107
- '<div id="wg-pilot-panel-graph" style="display:none"></div>' +
108
- "</div>";
99
+ const root = __wgEl("div", { id: "wg-pilot-overlay" }, __wgEl("div", { id: "wg-pilot-badge" }, "Waygraph Pilot"), __wgEl("div", { id: "wg-pilot-panel" }, __wgEl("div", { id: "wg-pilot-panel-toggle" }, __wgEl("button", { id: "wg-pilot-view-current", class: "wg-pilot-tab-active" }, "Here"), __wgEl("button", { id: "wg-pilot-view-graph" }, "All nodes")), __wgEl("div", { id: "wg-pilot-panel-current" }), __wgEl("div", { id: "wg-pilot-panel-graph", style: "display:none" })));
109
100
  __wgAdd(root);
110
101
  __wgById("wg-pilot-badge").addEventListener("click", () => {
111
102
  __wgById("wg-pilot-panel").classList.toggle("wg-pilot-open");
@@ -150,16 +141,16 @@ export async function installPersistentPilotOverlay(context) {
150
141
  /** Idempotent - safe to call before every update, matching narrate mode's own precedent. */
151
142
  export async function ensureInstalled(page) {
152
143
  await ensureShadowRoot(page);
153
- await page.evaluate(installPilotOverlayShell, OVERLAY_CSS).catch(() => { });
144
+ await page.evaluate(installPilotOverlayShell, OVERLAY_CSS).catch(ignorePageGone);
154
145
  // The shared ring primitive (__wgEnsureRingEl/__wgPaintRingAt) - so Pilot's fixture rings paint
155
146
  // through the SAME implementation the demo/auto singleton ring uses (see ui/css/ring.css / this
156
147
  // file's own header comment on redundancy), not a separate DOM-building copy.
157
- const { installCore } = await import("../runner/inpage/core.js");
158
- await page.evaluate(installCore, {}).catch(() => { });
159
- // Device toast/chip CSS (runner/overlay-css.js's RUNNER_EXTRA_CSS) - same rules the demo runner
148
+ const { installCore } = await import("../inpage/core.js");
149
+ await page.evaluate(installCore, {}).catch(ignorePageGone);
150
+ // Device toast/chip CSS (demo/overlay/overlay-css.ts's RUNNER_EXTRA_CSS) - same rules the demo runner
160
151
  // uses, reused here (not re-authored) so a device fixture looks identical on Pilot.
161
- const { RUNNER_EXTRA_CSS } = await import("../runner/overlay-css.js");
162
- await page.evaluate(([css, key]) => __wgCss(css, key), [RUNNER_EXTRA_CSS, "wg-runner-css"]).catch(() => { });
152
+ const { RUNNER_EXTRA_CSS } = await import("../overlay-css.js");
153
+ await page.evaluate(([css, key]) => __wgCss(css, key), [RUNNER_EXTRA_CSS, "wg-runner-css"]).catch(ignorePageGone);
163
154
  }
164
155
  /**
165
156
  * Bottom-left transient toast, separate from the persistent bottom-right
@@ -187,7 +178,7 @@ export async function showPilotActivity(page, text) {
187
178
  toast.classList.remove("wg-pilot-toast-show");
188
179
  }, 2500);
189
180
  }, text)
190
- .catch(() => { });
181
+ .catch(ignorePageGone);
191
182
  }
192
183
  /**
193
184
  * "browser-use"-style vision box: a ring drawn around the exact element
@@ -196,7 +187,7 @@ export async function showPilotActivity(page, text) {
196
187
  * JSON blob in a terminal. Real, direct user request.
197
188
  *
198
189
  * Reuses the real `#wg-ring`/`#wg-ring-label` elements + `WAYGRAPH_RING_CSS`
199
- * (see `highlights.ts`) - the exact same visual language `cli.ts`'s own demo
190
+ * (see `demo/narration/index.ts`) - the exact same visual language `cli.ts`'s own demo
200
191
  * stepper paints rings with, not a separate look-alike. Still a purpose-built
201
192
  * renderer here (position/show/hide only, via plain `getBoundingClientRect` -
202
193
  * no camera zoom/spotlight/todo-dock/pacing), since that whole engine still
@@ -276,5 +267,5 @@ export async function showPilotVision(page, selector, label, tone = "auto") {
276
267
  tag.style.opacity = "0";
277
268
  }, 4_000);
278
269
  }, { box, label, tone })
279
- .catch(() => { });
270
+ .catch(ignorePageGone);
280
271
  }
@@ -0,0 +1,7 @@
1
+ import type { Page } from "@playwright/test";
2
+ type Repaint = () => Promise<unknown>;
3
+ /** Repaints the page's overlay now, after any repaint already running (two never interleave). */
4
+ export declare function repaintOverlay(page: Page): Promise<void>;
5
+ /** Registers (or replaces) how this page's overlay repaints itself after a navigation. */
6
+ export declare function keepOverlayOnNavigation(page: Page, repaint: Repaint): void;
7
+ export {};
@@ -0,0 +1,23 @@
1
+ import { ignorePageGone } from "../../engine/page-gone.js";
2
+ const repaints = new WeakMap();
3
+ const running = new WeakMap();
4
+ /** Repaints the page's overlay now, after any repaint already running (two never interleave). */
5
+ export function repaintOverlay(page) {
6
+ const next = (running.get(page) ?? Promise.resolve()).then(async () => {
7
+ await repaints.get(page)?.();
8
+ }).catch(ignorePageGone);
9
+ running.set(page, next);
10
+ return next;
11
+ }
12
+ /** Registers (or replaces) how this page's overlay repaints itself after a navigation. */
13
+ export function keepOverlayOnNavigation(page, repaint) {
14
+ const listening = repaints.has(page);
15
+ repaints.set(page, repaint);
16
+ if (listening)
17
+ return;
18
+ let settle;
19
+ page.on("load", () => {
20
+ clearTimeout(settle);
21
+ settle = setTimeout(() => void repaintOverlay(page), 80);
22
+ });
23
+ }
@@ -0,0 +1,33 @@
1
+ import type { WgBox, WgPage } from "../types.js";
2
+ import type { Locator } from "@playwright/test";
3
+ /**
4
+ * Scroll a locator into view for demo theater.
5
+ * Prefer CSS smooth scroll + scrollend wait. Do NOT call Playwright's
6
+ * scrollIntoViewIfNeeded first - that jumps instantly and makes the
7
+ * following smooth scroll a no-op (looks like a teleport), especially
8
+ * noticeable under --fast when dwell is shorter.
9
+ * Pass opts.instant=true only for skipTheater / blitz.
10
+ */
11
+ export declare function ensureLocatorInView(locator: Locator, opts: any): Promise<void>;
12
+ export declare function ensureSelectorInView(page: WgPage, selector: any, opts?: any): Promise<void>;
13
+ export declare function applyHighlightZoom(page: WgPage, selector: any, zoom: any, zoomOut: any): Promise<void>;
14
+ export declare function cycleHighlightRings(page: WgPage, highlights: any, gatesFast: any, opts: any): Promise<void>;
15
+ export declare function showRing(page: WgPage, box: WgBox, label: any, tone: any, style: any): Promise<void>;
16
+ /** 0-based stub index for Method fill/click todo advance; -1 if none. */
17
+ export declare function matchStubIndexForLocator(page: WgPage, locator: Locator, stubs: any): Promise<number>;
18
+ export declare function captionForLocator(page: WgPage, locator: Locator, stubs: any, fallback: any): Promise<{
19
+ label: any;
20
+ tone: string;
21
+ size: string;
22
+ weight: string;
23
+ }>;
24
+ export declare function dwellMatchedStub(page: WgPage, locator: Locator, stubs: any, pacing: any): Promise<void>;
25
+ export declare function hideRing(page: WgPage): Promise<void>;
26
+ /**
27
+ * True if the engine's own narrate() (waygraph's public export, for a Block
28
+ * author explicitly captioning one action) JUST positioned the ring for
29
+ * THIS action, moments ago - the automatic per-fill/per-click narration
30
+ * below should not immediately overwrite an author's own explicit caption
31
+ * with its generic guess.
32
+ */
33
+ export declare function wasJustNarrated(page: WgPage): Promise<boolean>;