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,220 @@
1
+ // In-page (runs inside the browser via page.evaluate, must stay self-contained): swipe trails and ring zoom.
2
+ export function installSwipeZoom({ title, favicon, bannerPos, todoPos, envAutoplay, todoDockUi }) {
3
+ /**
4
+ * Finger swipe trail for touch theater (orientation rotate / device change).
5
+ * opts: { dir: 'left'|'right'|'up'|'down', label?, ms? }
6
+ * Returns duration waited (ms) via Promise when called from page.evaluate async.
7
+ */
8
+ window.__wgSwipeTrail = (opts) => {
9
+ const o = opts || {};
10
+ const dir = o.dir === "right" || o.dir === "up" || o.dir === "down" ? o.dir : "left";
11
+ const ms = Math.max(280, Math.min(1400, Number(o.ms) || 720));
12
+ const label = o.label ||
13
+ (dir === "left" || dir === "right" ? "swipe" : "swipe") +
14
+ (o.hint ? " \u00b7 " + o.hint : "");
15
+ let layer = __wgById("wg-swipe-layer");
16
+ if (layer && layer._wgTimer) {
17
+ clearTimeout(layer._wgTimer);
18
+ layer._wgTimer = undefined;
19
+ }
20
+ if (layer)
21
+ layer.remove();
22
+ layer = document.createElement("div");
23
+ layer.id = "wg-swipe-layer";
24
+ layer.setAttribute("data-wg-ui", "1");
25
+ const finger = document.createElement("div");
26
+ finger.className = "wg-swipe-finger";
27
+ const lab = document.createElement("div");
28
+ lab.className = "wg-swipe-label";
29
+ lab.textContent = label;
30
+ layer.appendChild(lab);
31
+ layer.appendChild(finger);
32
+ __wgAdd(layer);
33
+ const vw = window.innerWidth || 390;
34
+ const vh = window.innerHeight || 844;
35
+ const pad = Math.min(vw, vh) * 0.18;
36
+ let x0;
37
+ let y0;
38
+ let x1;
39
+ let y1;
40
+ if (dir === "left") {
41
+ x0 = vw - pad;
42
+ x1 = pad;
43
+ y0 = y1 = vh * 0.52;
44
+ }
45
+ else if (dir === "right") {
46
+ x0 = pad;
47
+ x1 = vw - pad;
48
+ y0 = y1 = vh * 0.52;
49
+ }
50
+ else if (dir === "up") {
51
+ x0 = x1 = vw * 0.5;
52
+ y0 = vh - pad;
53
+ y1 = pad;
54
+ }
55
+ else {
56
+ x0 = x1 = vw * 0.5;
57
+ y0 = pad;
58
+ y1 = vh - pad;
59
+ }
60
+ finger.style.left = x0 + "px";
61
+ finger.style.top = y0 + "px";
62
+ finger.style.opacity = "1";
63
+ void layer.offsetWidth;
64
+ layer.classList.add("wg-in");
65
+ const steps = 12;
66
+ const stepMs = Math.floor(ms / steps);
67
+ let i = 0;
68
+ const tick = () => {
69
+ i += 1;
70
+ const t = Math.min(1, i / steps);
71
+ const e = t * t * (3 - 2 * t);
72
+ const x = x0 + (x1 - x0) * e;
73
+ const y = y0 + (y1 - y0) * e;
74
+ finger.style.left = x + "px";
75
+ finger.style.top = y + "px";
76
+ const dot = document.createElement("div");
77
+ dot.className = "wg-swipe-dot";
78
+ dot.style.left = x + "px";
79
+ dot.style.top = y + "px";
80
+ dot.style.opacity = String(0.85 - t * 0.55);
81
+ layer.appendChild(dot);
82
+ requestAnimationFrame(() => {
83
+ dot.style.transition = "opacity .45s ease, transform .45s ease";
84
+ dot.style.opacity = "0";
85
+ dot.style.transform = "scale(1.8)";
86
+ });
87
+ if (i < steps) {
88
+ layer._wgTimer = setTimeout(tick, stepMs);
89
+ }
90
+ else {
91
+ finger.style.opacity = "0";
92
+ layer.classList.remove("wg-in");
93
+ layer._wgTimer = setTimeout(() => {
94
+ const el = __wgById("wg-swipe-layer");
95
+ if (el)
96
+ el.remove();
97
+ }, 380);
98
+ }
99
+ };
100
+ layer._wgTimer = setTimeout(tick, 40);
101
+ return ms + 120;
102
+ };
103
+ window.__wgClearZoom = () => {
104
+ // Strip leftover element transforms from older zoom path.
105
+ document.querySelectorAll("[data-wg-zoomed=\"1\"]").forEach((el) => {
106
+ el.style.removeProperty("transform");
107
+ el.style.removeProperty("transform-origin");
108
+ el.style.removeProperty("transition");
109
+ el.style.removeProperty("z-index");
110
+ el.style.removeProperty("position");
111
+ delete el.dataset.wgZoomed;
112
+ });
113
+ // Undo any prior shell-camera experiment - restore device fit scale only.
114
+ const shell = __wgById("wg-device-shell");
115
+ if (shell && shell.dataset.wgCamBase != null) {
116
+ shell.style.transform = shell.dataset.wgCamBase;
117
+ if (shell.dataset.wgCamOrigin) {
118
+ shell.style.transformOrigin = shell.dataset.wgCamOrigin;
119
+ }
120
+ else {
121
+ shell.style.transformOrigin = "center center";
122
+ }
123
+ delete shell.dataset.wgCamBase;
124
+ delete shell.dataset.wgCamOrigin;
125
+ delete shell.dataset.wgCamZoom;
126
+ }
127
+ window.__wgZoomLevel = 1;
128
+ window.__wgZoomSel = "";
129
+ if (window.__wgSetZoomBadge)
130
+ window.__wgSetZoomBadge(1, "");
131
+ };
132
+ const ZOOM_ICO = '<svg viewBox="0 0 24 24" fill="none" stroke="#c9a6ff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">' +
133
+ '<circle cx="11" cy="11" r="7"/><path d="M20 20l-3.5-3.5"/></svg>';
134
+ window.__wgSetZoomBadge = (scale, sel) => {
135
+ const n = Number(scale);
136
+ const level = Number.isFinite(n) && n > 0 ? n : 1;
137
+ let badge = __wgById("wg-zoom-badge");
138
+ if (!badge) {
139
+ badge = document.createElement("div");
140
+ badge.id = "wg-zoom-badge";
141
+ badge.setAttribute("data-wg-ui", "1");
142
+ __wgAdd(badge);
143
+ }
144
+ const zoomed = level > 1.001 || level < 0.999;
145
+ badge.dataset.zoomed = zoomed ? "1" : "0";
146
+ const txt = level.toFixed(2) + "\u00d7";
147
+ __wgSet(badge, __wgEl("span", { class: "wg-zoom-ico" }, __wgSvg(ZOOM_ICO)), __wgEl("span", { class: "wg-zoom-val" }, txt));
148
+ badge.classList.add("wg-in");
149
+ window.__wgZoomLevel = level;
150
+ window.__wgZoomSel = sel || "";
151
+ };
152
+ window.__wgEnsureZoomBadge = () => {
153
+ if (window.__wgSetZoomBadge) {
154
+ window.__wgSetZoomBadge(window.__wgZoomLevel || 1, window.__wgZoomSel || "");
155
+ }
156
+ };
157
+ window.__wgSetTypingBadge = (on, label) => {
158
+ let badge = __wgById("wg-typing-badge");
159
+ if (!on) {
160
+ if (badge) {
161
+ badge.classList.remove("wg-in");
162
+ setTimeout(() => {
163
+ const b = __wgById("wg-typing-badge");
164
+ if (b && !b.classList.contains("wg-in"))
165
+ b.remove();
166
+ }, 220);
167
+ }
168
+ return;
169
+ }
170
+ if (!badge) {
171
+ badge = document.createElement("div");
172
+ badge.id = "wg-typing-badge";
173
+ badge.setAttribute("data-wg-ui", "1");
174
+ __wgAdd(badge);
175
+ }
176
+ const text = label ? String(label).slice(0, 40) : "typing";
177
+ __wgSet(badge, __wgEl("span", { class: "wg-ty-dots" }, "\u25cf\u25cf\u25cf"), __wgEl("span", null, "typing \u00b7 " + text));
178
+ void badge.offsetWidth;
179
+ badge.classList.add("wg-in");
180
+ };
181
+ /**
182
+ * Zoom HUD only - never CSS-scale the target or the device shell.
183
+ * Shell camera zoom fought device-theater fit-scale (broke ring follow
184
+ * + uneven border-radius). Element scale mangled cart rows. Emphasis
185
+ * is ring + focus veil; badge still shows authored zoom level.
186
+ */
187
+ window.__wgApplyZoom = (sel, scale) => {
188
+ document.querySelectorAll("[data-wg-zoomed=\"1\"]").forEach((el) => {
189
+ el.style.removeProperty("transform");
190
+ el.style.removeProperty("transform-origin");
191
+ el.style.removeProperty("transition");
192
+ el.style.removeProperty("z-index");
193
+ el.style.removeProperty("position");
194
+ delete el.dataset.wgZoomed;
195
+ });
196
+ const shell = __wgById("wg-device-shell");
197
+ if (shell && shell.dataset.wgCamBase != null) {
198
+ shell.style.transform = shell.dataset.wgCamBase;
199
+ shell.style.transformOrigin = shell.dataset.wgCamOrigin || "center center";
200
+ delete shell.dataset.wgCamBase;
201
+ delete shell.dataset.wgCamOrigin;
202
+ delete shell.dataset.wgCamZoom;
203
+ }
204
+ const n = Number(scale);
205
+ if (!Number.isFinite(n) || n <= 1.001) {
206
+ window.__wgZoomLevel = 1;
207
+ window.__wgZoomSel = "";
208
+ if (window.__wgSetZoomBadge)
209
+ window.__wgSetZoomBadge(1, "");
210
+ return;
211
+ }
212
+ window.__wgZoomLevel = n;
213
+ window.__wgZoomSel = sel || "";
214
+ if (window.__wgSetZoomBadge)
215
+ window.__wgSetZoomBadge(n, sel || "");
216
+ };
217
+ // Mount zoom HUD immediately so demos always show 1.00x.
218
+ if (window.__wgEnsureZoomBadge)
219
+ window.__wgEnsureZoomBadge();
220
+ }
@@ -0,0 +1 @@
1
+ export declare function installTodos({ title, favicon, bannerPos, todoPos, envAutoplay, todoDockUi }: any): void;
@@ -0,0 +1,294 @@
1
+ // In-page (runs inside the browser via page.evaluate, must stay self-contained): the todo dock(s).
2
+ export function installTodos({ title, favicon, bannerPos, todoPos, envAutoplay, todoDockUi }) {
3
+ // Floating todo dock - lives outside #wg-panel so --mini / Hide never
4
+ // hide the checklist. Click cycles left <-> right with CSS transform.
5
+ // Authors set side via ctx.todos(id, items, { pos }); env / --todo-* fallback.
6
+ // Payload:
7
+ // { sync: "clear" } -> remove dock
8
+ // { sync: "keep" } -> leave dock alone (no wipe)
9
+ // { sync: "set", dock } / { sync:"set", list } -> render / recreate
10
+ window.__wgSyncTodos = (payload, pos) => {
11
+ const syncPayload = payload;
12
+ let sync = "set";
13
+ let list = [];
14
+ let dockState = null;
15
+ let wantPos = pos === "left" || pos === "right" ? pos : null;
16
+ if (payload && typeof payload === "object") {
17
+ sync = payload.sync === "clear" || payload.sync === "keep" ? payload.sync : "set";
18
+ dockState = payload.dock || null;
19
+ if (payload.pos === "left" || payload.pos === "right")
20
+ wantPos = payload.pos;
21
+ if (Array.isArray(payload.list))
22
+ list = payload.list;
23
+ else if (dockState && Array.isArray(dockState.groups)) {
24
+ // The flat list; the full dock is rendered below.
25
+ list = [];
26
+ for (const g of dockState.groups) {
27
+ if (g && Array.isArray(g.items))
28
+ list = list.concat(g.items);
29
+ }
30
+ }
31
+ }
32
+ else {
33
+ list = [];
34
+ sync = "clear";
35
+ }
36
+ let dockKey = (dockState && dockState.id && String(dockState.id).trim()) ||
37
+ (payload && !Array.isArray(payload) && payload.todoId && String(payload.todoId).trim()) ||
38
+ "_default";
39
+ // Drop any in-panel leftover (old builds put #wg-todos in .wg-body).
40
+ __wgQA("#wg-panel #wg-todos").forEach((el) => el.remove());
41
+ const allDocks = () => [...__wgQA(".wg-todo-dock, #wg-todo-dock")].filter((el, i, arr) => arr.indexOf(el) === i);
42
+ const relayoutTodoDocks = () => {
43
+ const docks = allDocks();
44
+ // Must match .wg-todo-dock/#wg-todo-dock's own CSS `top` (demo/overlay/overlay-css.ts,
45
+ // ui/css/dock.css) - this inline style OVERRIDES that CSS the instant more than one
46
+ // dock exists (multi-todo stacking), so a CSS-only change here is silently underwater;
47
+ // real bug this was: the CSS top was bumped 72 -> 104 for banner clearance, but this
48
+ // hardcoded 72 kept winning at runtime and nothing actually moved.
49
+ let top = 104;
50
+ for (const el of docks) {
51
+ el.style.top = top + "px";
52
+ top += Math.max(48, el.getBoundingClientRect().height) + 10;
53
+ }
54
+ };
55
+ const findDock = (key) => {
56
+ if (key === "_default") {
57
+ return (__wgQ('.wg-todo-dock[data-wg-todo-key="_default"]') ||
58
+ __wgById("wg-todo-dock"));
59
+ }
60
+ const all = __wgQA(".wg-todo-dock");
61
+ for (let i = 0; i < all.length; i++) {
62
+ if (all[i].getAttribute("data-wg-todo-key") === String(key))
63
+ return all[i];
64
+ }
65
+ return null;
66
+ };
67
+ // keep + no new payload: do not remove existing docks (PIA #10).
68
+ if (sync === "keep") {
69
+ if (!dockState && !list.length)
70
+ return;
71
+ // After navigation the DOM may be gone - recreate from carried dock.
72
+ sync = "set";
73
+ }
74
+ // Default replace=true: one checklist. parallel docks only when replace:false.
75
+ const replace = !(payload && !Array.isArray(payload) && payload.replace === false) &&
76
+ !(payload && !Array.isArray(payload) && payload.parallel === true);
77
+ const hasDock = !!(dockState && Array.isArray(dockState.groups) && dockState.groups.length);
78
+ // Explicit clear only - never treat "set + dock + empty list" as clear
79
+ // (that thrash was marks -> blank in a few ms).
80
+ if (sync === "clear" || (sync === "set" && !hasDock && !list.length)) {
81
+ const clearId = (payload && !Array.isArray(payload) && payload.todoId && String(payload.todoId).trim()) ||
82
+ (dockState && dockState.id && String(dockState.id).trim()) ||
83
+ "";
84
+ if (clearId && !replace) {
85
+ const el = findDock(clearId);
86
+ if (el)
87
+ el.remove();
88
+ }
89
+ else {
90
+ allDocks().forEach((el) => el.remove());
91
+ }
92
+ relayoutTodoDocks();
93
+ return;
94
+ }
95
+ if (sync === "set" && replace) {
96
+ // Drop sibling docks so we never stack duplicates.
97
+ for (const el of allDocks()) {
98
+ const key = el.getAttribute("data-wg-todo-key") || "_default";
99
+ if (key !== dockKey)
100
+ el.remove();
101
+ }
102
+ }
103
+ const POS = ["left", "right"];
104
+ let dock = findDock(dockKey);
105
+ if (!dock) {
106
+ dock = document.createElement("div");
107
+ dock.className = "wg-todo-dock";
108
+ dock.setAttribute("data-wg-todo-key", dockKey);
109
+ if (dockKey === "_default")
110
+ dock.id = "wg-todo-dock";
111
+ else
112
+ dock.id = "wg-todo-dock--" + dockKey.replace(/[^a-zA-Z0-9_-]/g, "-");
113
+ dock.setAttribute("data-wg-ui", "1");
114
+ dock.setAttribute("data-wg-modal", "todos");
115
+ dock.setAttribute("data-wg-ready", "1");
116
+ let saved = null;
117
+ try {
118
+ saved = localStorage.getItem("wg-todo-pos");
119
+ }
120
+ catch {
121
+ /* ignore */
122
+ }
123
+ const start = wantPos ||
124
+ (saved && POS.includes(saved) ? saved : todoPos === "right" ? "right" : "left");
125
+ dock.dataset.pos = start;
126
+ dock.title = "Click to move checklist: left / right";
127
+ dock.addEventListener("click", (e) => {
128
+ e.stopPropagation();
129
+ const i = POS.indexOf(dock.dataset.pos || "left");
130
+ const next = POS[(i + 1) % POS.length];
131
+ dock.dataset.pos = next;
132
+ try {
133
+ localStorage.setItem("wg-todo-pos", next ?? "left");
134
+ }
135
+ catch {
136
+ /* ignore */
137
+ }
138
+ });
139
+ __wgAdd(dock);
140
+ }
141
+ else if (wantPos) {
142
+ dock.dataset.pos = wantPos;
143
+ try {
144
+ localStorage.setItem("wg-todo-pos", wantPos);
145
+ }
146
+ catch {
147
+ /* ignore */
148
+ }
149
+ }
150
+ const trimmedId = (raw) => (raw != null && String(raw).trim() ? String(raw).trim() : undefined);
151
+ // Compact + cap: >cap rows folds overflow; hover shows up to expandCap; "+N more" pins expand.
152
+ const ui = (payload && !Array.isArray(payload) && payload.ui) || window.__wgTodoDockUi || {};
153
+ const COMPACT_AT = Number(ui.cap) > 0 ? Number(ui.cap) : 5;
154
+ const WINDOW = COMPACT_AT;
155
+ const EXPAND_MAX = Number(ui.expandCap) > 0 ? Number(ui.expandCap) : 14;
156
+ const compactEnabled = ui.compact !== false;
157
+ const flattenItems = () => {
158
+ if (dockState && Array.isArray(dockState.groups) && dockState.groups.length) {
159
+ const out = [];
160
+ for (const g of dockState.groups) {
161
+ for (const t of g.items || [])
162
+ out.push({ ...t, __style: g.style || dockState.style });
163
+ }
164
+ return out;
165
+ }
166
+ return (list || []).map((t) => ({ ...t, __style: "sequential" }));
167
+ };
168
+ const windowBounds = (items, cap) => {
169
+ const n = items.length;
170
+ if (n <= cap)
171
+ return { start: 0, end: n };
172
+ let cur = items.findIndex((t) => t.current);
173
+ if (cur < 0)
174
+ cur = items.findIndex((t) => !t.done);
175
+ if (cur < 0)
176
+ cur = 0;
177
+ let start = Math.max(0, cur - Math.floor((cap - 1) / 2));
178
+ let end = Math.min(n, start + cap);
179
+ start = Math.max(0, end - cap);
180
+ return { start, end };
181
+ };
182
+ const renderItems = (items, style, foldMeta, indexOffset) => {
183
+ const offset = indexOffset || 0;
184
+ const rawStyle = String(style || "sequential").toLowerCase();
185
+ const st = rawStyle === "checklist"
186
+ ? "checklist"
187
+ : rawStyle === "bullets" ||
188
+ rawStyle === "bullet" ||
189
+ rawStyle === "list" ||
190
+ rawStyle === "ul" ||
191
+ rawStyle === "points" ||
192
+ rawStyle === "plain"
193
+ ? "bullets"
194
+ : "sequential";
195
+ const foldStart = foldMeta ? foldMeta.foldStart : -1;
196
+ const foldEnd = foldMeta ? foldMeta.foldEnd : -1;
197
+ const deepStart = foldMeta ? foldMeta.deepStart : -1;
198
+ const deepEnd = foldMeta ? foldMeta.deepEnd : -1;
199
+ return __wgEl("ul", { class: "wg-todos-list", data: { wgTodoStyle: st } }, (items || []).map((t, idx) => {
200
+ const gi = offset + idx;
201
+ const clsBase = st === "bullets"
202
+ ? t.done
203
+ ? "wg-todo-done"
204
+ : "wg-todo-pending"
205
+ : t.current
206
+ ? "wg-todo-current"
207
+ : t.done
208
+ ? "wg-todo-done"
209
+ : "wg-todo-pending";
210
+ let foldCls = "";
211
+ if (foldStart >= 0 && (gi < foldStart || gi >= foldEnd))
212
+ foldCls += " wg-todo-fold";
213
+ if (deepStart >= 0 && (gi < deepStart || gi >= deepEnd))
214
+ foldCls += " wg-todo-fold-deep";
215
+ let mark;
216
+ if (st === "checklist") {
217
+ mark = t.done ? "☑" : "☐";
218
+ }
219
+ else if (st === "bullets") {
220
+ mark = "•";
221
+ }
222
+ else {
223
+ mark = t.done ? "✓" : t.current ? "→" : "○";
224
+ }
225
+ return __wgEl("li", { class: clsBase + foldCls, data: { wgTodoItem: trimmedId(t.id) } }, __wgEl("span", { class: "wg-todo-mark" }, mark), __wgEl("span", null, t.text || ""));
226
+ }));
227
+ };
228
+ if (dockKey !== "_default")
229
+ dock.setAttribute("data-wg-todo-id", dockKey);
230
+ else
231
+ dock.removeAttribute("data-wg-todo-id");
232
+ const flat = flattenItems();
233
+ const compact = compactEnabled && flat.length > COMPACT_AT;
234
+ const win = windowBounds(flat, WINDOW);
235
+ const expand = windowBounds(flat, EXPAND_MAX);
236
+ const foldMeta = compact
237
+ ? {
238
+ foldStart: win.start,
239
+ foldEnd: win.end,
240
+ deepStart: expand.start,
241
+ deepEnd: expand.end,
242
+ }
243
+ : null;
244
+ const hiddenCompact = compact ? flat.length - (win.end - win.start) : 0;
245
+ const hiddenExpand = compact ? flat.length - (expand.end - expand.start) : 0;
246
+ const children = [];
247
+ if (dockState && Array.isArray(dockState.groups) && dockState.groups.length) {
248
+ const dockTitle = dockState.title && String(dockState.title).trim();
249
+ if (dockTitle)
250
+ children.push(__wgEl("div", { class: "wg-todo-dock-title" }, dockTitle));
251
+ let globalIdx = 0;
252
+ for (const g of dockState.groups) {
253
+ const gTitle = g.title && String(g.title).trim();
254
+ const gItems = g.items || [];
255
+ children.push(__wgEl("div", { class: "wg-todo-group", data: { wgTodoGroup: trimmedId(g.id) } }, gTitle ? __wgEl("div", { class: "wg-todo-group-title" }, gTitle) : null, renderItems(gItems, g.style || dockState.style, foldMeta, globalIdx)));
256
+ globalIdx += gItems.length;
257
+ }
258
+ }
259
+ else {
260
+ children.push(renderItems(list, "sequential", foldMeta, 0));
261
+ }
262
+ if (compact && hiddenCompact > 0) {
263
+ const n = dock.dataset.expanded === "1" ? hiddenExpand : hiddenCompact;
264
+ if (n > 0) {
265
+ children.push(__wgEl("div", { class: "wg-todo-more", data: { wgTodoMore: "1" }, title: "Click to expand / collapse" }, "+" + n + " more"));
266
+ }
267
+ }
268
+ if (compact)
269
+ dock.dataset.compact = "1";
270
+ else {
271
+ delete dock.dataset.compact;
272
+ delete dock.dataset.expanded;
273
+ }
274
+ __wgSet(dock, children);
275
+ const moreBtn = dock.querySelector("[data-wg-todo-more]");
276
+ if (moreBtn) {
277
+ moreBtn.addEventListener("click", (e) => {
278
+ e.stopPropagation();
279
+ if (dock.dataset.expanded === "1")
280
+ delete dock.dataset.expanded;
281
+ else
282
+ dock.dataset.expanded = "1";
283
+ if (window.__wgSyncTodos && dock._wgLastPayload) {
284
+ window.__wgSyncTodos(dock._wgLastPayload);
285
+ }
286
+ });
287
+ }
288
+ dock._wgLastPayload = syncPayload;
289
+ relayoutTodoDocks();
290
+ if (window.__wgStampModal) {
291
+ window.__wgStampModal(dock, "todos", { ready: true });
292
+ }
293
+ };
294
+ }
@@ -0,0 +1,25 @@
1
+ import type { Locator, Page } from "@playwright/test";
2
+ /** How a click is performed once the theater has shown it. */
3
+ export type ClickGesture = "click" | "tap" | "hold";
4
+ export interface LocatorTheater {
5
+ /** Before the value is typed: cursor, ring, typing badge. A failure here never stops the fill. */
6
+ beforeFill(locator: Locator, options: {
7
+ timeout?: number;
8
+ } | undefined): Promise<void>;
9
+ /** Per-character typing delay, ms. */
10
+ typingDelay(): number;
11
+ afterFill(locator: Locator): Promise<void>;
12
+ /** Before the click: cursor, ring, pulse. Returns the gesture to perform. A failure here never stops the click. */
13
+ beforeClick(locator: Locator, options: {
14
+ timeout?: number;
15
+ } | undefined): Promise<ClickGesture>;
16
+ /** How long a "hold" keeps the press down, ms. */
17
+ holdMs(): number;
18
+ afterClick(locator: Locator): Promise<void>;
19
+ /** A shorter timeout for a wait that may never succeed (a probe), or the declared one. */
20
+ capWait?(declaredMs: number): number;
21
+ /** A shorter plain sleep. */
22
+ capSleep?(ms: number): number;
23
+ }
24
+ /** Shows every fill and click on `page` through `theater` from now on. */
25
+ export declare function setLocatorTheater(page: Page, theater: LocatorTheater): void;
@@ -0,0 +1,76 @@
1
+ import { isPageGone } from "../../engine/page-gone.js";
2
+ const theaters = new WeakMap();
3
+ /** Shows every fill and click on `page` through `theater` from now on. */
4
+ export function setLocatorTheater(page, theater) {
5
+ theaters.set(page, theater);
6
+ patchLocator(Object.getPrototypeOf(page.locator("html")));
7
+ patchPage(Object.getPrototypeOf(page));
8
+ }
9
+ /**
10
+ * The theater only shows the action; the action itself must still run. So a theater failure is printed (unless the page
11
+ * simply went away) and the real fill / click goes ahead.
12
+ */
13
+ function theaterFailed(err) {
14
+ if (!isPageGone(err))
15
+ console.error(`waygraph: overlay: ${err instanceof Error ? err.message.split("\n")[0] : String(err)}`);
16
+ return undefined;
17
+ }
18
+ function patchLocator(proto) {
19
+ if (proto.__wgTheaterPatched)
20
+ return;
21
+ proto.__wgTheaterPatched = true;
22
+ const { fill, click, waitFor } = proto;
23
+ proto.fill = async function (value, options) {
24
+ const theater = theaters.get(this.page());
25
+ if (!theater)
26
+ return fill.call(this, value, options);
27
+ await theater.beforeFill(this, options).catch(theaterFailed);
28
+ try {
29
+ // Not this.clear(): Locator.clear() is fill(""), which would come back into this wrapper.
30
+ await fill.call(this, "", { ...(options?.timeout !== undefined ? { timeout: options.timeout } : {}) });
31
+ await this.pressSequentially(String(value), { delay: theater.typingDelay(), ...(options?.timeout !== undefined ? { timeout: options.timeout } : {}) });
32
+ }
33
+ catch {
34
+ // An element pressSequentially can't type into (a contenteditable, say): Playwright's own fill.
35
+ await fill.call(this, value, options);
36
+ }
37
+ await theater.afterFill(this);
38
+ };
39
+ proto.click = async function (options) {
40
+ const theater = theaters.get(this.page());
41
+ if (!theater)
42
+ return click.call(this, options);
43
+ const gesture = (await theater.beforeClick(this, options).catch(theaterFailed)) ?? "click";
44
+ if (gesture === "hold")
45
+ await click.call(this, { ...(options ?? {}), delay: theater.holdMs() });
46
+ else if (gesture === "tap") {
47
+ try {
48
+ await this.tap(options);
49
+ }
50
+ catch {
51
+ // A context without touch: a real click.
52
+ await click.call(this, options);
53
+ }
54
+ }
55
+ else
56
+ await click.call(this, options);
57
+ await theater.afterClick(this);
58
+ };
59
+ proto.waitFor = function (options) {
60
+ const theater = theaters.get(this.page());
61
+ if (!theater?.capWait)
62
+ return waitFor.call(this, options);
63
+ const declared = options?.timeout ?? 30000;
64
+ return waitFor.call(this, { ...(options ?? {}), timeout: theater.capWait(declared) });
65
+ };
66
+ }
67
+ function patchPage(proto) {
68
+ if (proto.__wgTheaterPatched)
69
+ return;
70
+ proto.__wgTheaterPatched = true;
71
+ const { waitForTimeout } = proto;
72
+ proto.waitForTimeout = function (ms) {
73
+ const theater = theaters.get(this);
74
+ return waitForTimeout.call(this, theater?.capSleep ? theater.capSleep(ms) : ms);
75
+ };
76
+ }
@@ -0,0 +1,22 @@
1
+ import type { WgPage } from "../types.js";
2
+ /**
3
+ * Records one entry AND paints it live - the single place that touches page.__wgNetworkHistory,
4
+ * so every caller (this file's own listeners, defineApiBlock) stays in sync automatically. History
5
+ * lives on the Playwright `Page` object (Node side), which survives navigation - the panel DOM
6
+ * (page side, inside the shadow root) does not, and gets wiped on every real navigation. Without
7
+ * this, the "network tab" reset to empty on every step that navigated - not what a persistent
8
+ * Network tab is supposed to do.
9
+ */
10
+ export declare function recordNetworkEntry(page: WgPage, entry: any): Promise<void | undefined>;
11
+ /**
12
+ * Replays whatever history survived the last navigation back into a freshly (re)installed panel -
13
+ * call this after ensureShadowRoot, every step, same as the rest of the overlay's own per-step
14
+ * resync (banner/todos/device), and BEFORE that step's own network activity can add anything new
15
+ * (installOverlay runs at the very start of a step, so this is always true in practice - no
16
+ * interleaving race between "replay old" and "record new" to reason about). A no-op when there's
17
+ * no history yet, or the panel already shows exactly as many entries as history has (nothing was
18
+ * wiped this step). Otherwise clears and rebuilds from scratch, in order - simpler and more
19
+ * obviously correct than trying to diff/append just the "missing" ones.
20
+ */
21
+ export declare function restoreNetworkHistory(page: WgPage): Promise<void>;
22
+ export declare function installNetworkCapture(page: WgPage): void;