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,59 @@
1
+ export declare const WAYGRAPH_ENV: {
2
+ readonly WAYGRAPH_BASE_URL: "Base URL for relative gotos (--base-url, the config's baseUrl)";
3
+ readonly WAYGRAPH_CONFIG: "Which config file to load (--config <name|file>)";
4
+ readonly WAYGRAPH_ENV: "Env mode: loads .env.<mode> on top of .env (--env)";
5
+ readonly WAYGRAPH_COMMAND: "The command running (run / demo / test), so the config's per-command section applies";
6
+ readonly WAYGRAPH_PROJECT_DIR: "The project waygraph test runs Playwright for";
7
+ readonly WAYGRAPH_HEADED: "1 shows the browser, 0 hides it (--non-headless; demo default 1)";
8
+ readonly WAYGRAPH_STEP: "1 plays steps through the demo stepper (demo, run --step)";
9
+ readonly WAYGRAPH_JSON: "1 prints a JSON report instead of the demo log";
10
+ readonly WAYGRAPH_ALL_BRANCHES: "1 explores every branch() path (--all-branches)";
11
+ readonly WAYGRAPH_SHARED_SESSION: "1 keeps one session across branches (--shared-session)";
12
+ readonly WAYGRAPH_TITLE: "Demo banner title (--title)";
13
+ readonly WAYGRAPH_TITLE_POS: "Demo banner position: left | center | right";
14
+ readonly WAYGRAPH_DATA: "Mem seed JSON (--data)";
15
+ readonly WAYGRAPH_AUTO_MEM: "Mem seed JSON for auto sessions (same as WAYGRAPH_DATA)";
16
+ readonly WAYGRAPH_MEM_STUB: "1 fills missing requires from registerMemStub (--mem-stub)";
17
+ readonly WAYGRAPH_AUTOPLAY: "1 advances demo steps on their own (--auto-next)";
18
+ readonly WAYGRAPH_AUTOPLAY_MS: "Auto-next wait per step, ms (default 1800)";
19
+ readonly WAYGRAPH_DEMO_FAST: "1 shortens the demo's gates (--fast)";
20
+ readonly WAYGRAPH_DEMO_PACE: "Default pace for every demo step (the config's demo.pace)";
21
+ readonly WAYGRAPH_PACE_SPEEDS: "JSON of pace multipliers, e.g. {\"fast\":0.5}";
22
+ readonly WAYGRAPH_FAST_BLOCKS: "Comma-separated Block names that skip the demo's added dwell";
23
+ readonly WAYGRAPH_SLOWMO: "Playwright slowMo / the demo's beat after each action, ms";
24
+ readonly WAYGRAPH_TYPING_MS: "Demo typing delay per character, ms (default 30)";
25
+ readonly WAYGRAPH_SWIPE_MS: "Demo swipe gesture duration, ms (default 650)";
26
+ readonly WAYGRAPH_DEVICE_TRANSITION_MS: "Demo device resize animation, ms (default 520)";
27
+ readonly WAYGRAPH_STEPPER: "full shows every step chip (--full); default carousel";
28
+ readonly WAYGRAPH_MINI: "1 forces the compact stepper panel (--mini)";
29
+ readonly WAYGRAPH_TODO_POS: "Todo dock side: left | right (--todo-left / --todo-right)";
30
+ readonly WAYGRAPH_TODO_UI: "full turns off the todo dock's compact / collision / behind-ring (--todo-full)";
31
+ readonly WAYGRAPH_TODO_COLLISION: "0 turns off the todo dock moving away from a ring";
32
+ readonly WAYGRAPH_TODO_BEHIND: "0 turns off dimming the todo dock behind a ring";
33
+ readonly WAYGRAPH_TODO_COMPACT: "0 turns off folding long todo lists";
34
+ readonly WAYGRAPH_TODO_CAP: "Rows a folded todo list shows (default 5)";
35
+ readonly WAYGRAPH_TODO_EXPAND_CAP: "Rows a hovered todo list shows (default 14)";
36
+ readonly WAYGRAPH_FF_EXPAND: "1 plays fast-forward units step by step (--ff-expand)";
37
+ readonly WAYGRAPH_FF_DISABLED: "1 expands fast-forward units and keeps their blitz pace (--ff-disabled)";
38
+ readonly WAYGRAPH_CLEAR_SESSION: "1 clears the session before every step after the first";
39
+ readonly WAYGRAPH_VIDEO: "Record a video: the folder, or 1 for the default (--video)";
40
+ readonly WAYGRAPH_VIDEO_DIR: "Default video folder";
41
+ readonly WAYGRAPH_VIDEO_VIEWPORT: "Recording size, e.g. 1920x1080 (--video-viewport)";
42
+ readonly WAYGRAPH_RUN_LOG: "Run log: 0 turns it off, or a folder (the config's runLog)";
43
+ readonly WAYGRAPH_EXTENSIONS: "Unpacked browser extension folders, path-separated (overrides the config's extensions)";
44
+ readonly WAYGRAPH_CACHE_DIR: "Where downloaded extensions are cached";
45
+ readonly WAYGRAPH_PROVE_SHOT: "Demo self-check: screenshot path for the overlay proof";
46
+ readonly WAYGRAPH_PROVE_EXIT: "1 exits after the first overlay proof (demo self-check)";
47
+ readonly WAYGRAPH_PROVE_EVERY: "1 proves the overlay on every step, not only the first";
48
+ };
49
+ export type WaygraphEnvName = keyof typeof WAYGRAPH_ENV;
50
+ /** The raw value, or undefined when unset. */
51
+ export declare function envString(name: WaygraphEnvName): string | undefined;
52
+ /** On / off: 1 / true / yes / on, or 0 / false / no / off; `fallback` when unset or anything else. */
53
+ export declare function envSwitch(name: WaygraphEnvName, fallback: boolean): boolean;
54
+ /** True only when switched on. */
55
+ export declare function envFlag(name: WaygraphEnvName): boolean;
56
+ /** The value as a number, or undefined when unset or not a number. */
57
+ export declare function envNumber(name: WaygraphEnvName): number | undefined;
58
+ /** Sets a variable (for the runner child the CLI spawns); undefined unsets it. */
59
+ export declare function setEnv(name: WaygraphEnvName, value: string | undefined): void;
@@ -0,0 +1,83 @@
1
+ // Every WAYGRAPH_* variable waygraph reads, in one place: what it means and how it is read. The CLI writes most of them
2
+ // from flags (cli/flags.ts) and the config file (runtime/waygraph-config.ts) so the runner child it spawns inherits them; the
3
+ // rest are environment-only knobs. Nothing else touches process.env.WAYGRAPH_* (check:structure enforces it).
4
+ export const WAYGRAPH_ENV = {
5
+ WAYGRAPH_BASE_URL: "Base URL for relative gotos (--base-url, the config's baseUrl)",
6
+ WAYGRAPH_CONFIG: "Which config file to load (--config <name|file>)",
7
+ WAYGRAPH_ENV: "Env mode: loads .env.<mode> on top of .env (--env)",
8
+ WAYGRAPH_COMMAND: "The command running (run / demo / test), so the config's per-command section applies",
9
+ WAYGRAPH_PROJECT_DIR: "The project waygraph test runs Playwright for",
10
+ WAYGRAPH_HEADED: "1 shows the browser, 0 hides it (--non-headless; demo default 1)",
11
+ WAYGRAPH_STEP: "1 plays steps through the demo stepper (demo, run --step)",
12
+ WAYGRAPH_JSON: "1 prints a JSON report instead of the demo log",
13
+ WAYGRAPH_ALL_BRANCHES: "1 explores every branch() path (--all-branches)",
14
+ WAYGRAPH_SHARED_SESSION: "1 keeps one session across branches (--shared-session)",
15
+ WAYGRAPH_TITLE: "Demo banner title (--title)",
16
+ WAYGRAPH_TITLE_POS: "Demo banner position: left | center | right",
17
+ WAYGRAPH_DATA: "Mem seed JSON (--data)",
18
+ WAYGRAPH_AUTO_MEM: "Mem seed JSON for auto sessions (same as WAYGRAPH_DATA)",
19
+ WAYGRAPH_MEM_STUB: "1 fills missing requires from registerMemStub (--mem-stub)",
20
+ WAYGRAPH_AUTOPLAY: "1 advances demo steps on their own (--auto-next)",
21
+ WAYGRAPH_AUTOPLAY_MS: "Auto-next wait per step, ms (default 1800)",
22
+ WAYGRAPH_DEMO_FAST: "1 shortens the demo's gates (--fast)",
23
+ WAYGRAPH_DEMO_PACE: "Default pace for every demo step (the config's demo.pace)",
24
+ WAYGRAPH_PACE_SPEEDS: "JSON of pace multipliers, e.g. {\"fast\":0.5}",
25
+ WAYGRAPH_FAST_BLOCKS: "Comma-separated Block names that skip the demo's added dwell",
26
+ WAYGRAPH_SLOWMO: "Playwright slowMo / the demo's beat after each action, ms",
27
+ WAYGRAPH_TYPING_MS: "Demo typing delay per character, ms (default 30)",
28
+ WAYGRAPH_SWIPE_MS: "Demo swipe gesture duration, ms (default 650)",
29
+ WAYGRAPH_DEVICE_TRANSITION_MS: "Demo device resize animation, ms (default 520)",
30
+ WAYGRAPH_STEPPER: "full shows every step chip (--full); default carousel",
31
+ WAYGRAPH_MINI: "1 forces the compact stepper panel (--mini)",
32
+ WAYGRAPH_TODO_POS: "Todo dock side: left | right (--todo-left / --todo-right)",
33
+ WAYGRAPH_TODO_UI: "full turns off the todo dock's compact / collision / behind-ring (--todo-full)",
34
+ WAYGRAPH_TODO_COLLISION: "0 turns off the todo dock moving away from a ring",
35
+ WAYGRAPH_TODO_BEHIND: "0 turns off dimming the todo dock behind a ring",
36
+ WAYGRAPH_TODO_COMPACT: "0 turns off folding long todo lists",
37
+ WAYGRAPH_TODO_CAP: "Rows a folded todo list shows (default 5)",
38
+ WAYGRAPH_TODO_EXPAND_CAP: "Rows a hovered todo list shows (default 14)",
39
+ WAYGRAPH_FF_EXPAND: "1 plays fast-forward units step by step (--ff-expand)",
40
+ WAYGRAPH_FF_DISABLED: "1 expands fast-forward units and keeps their blitz pace (--ff-disabled)",
41
+ WAYGRAPH_CLEAR_SESSION: "1 clears the session before every step after the first",
42
+ WAYGRAPH_VIDEO: "Record a video: the folder, or 1 for the default (--video)",
43
+ WAYGRAPH_VIDEO_DIR: "Default video folder",
44
+ WAYGRAPH_VIDEO_VIEWPORT: "Recording size, e.g. 1920x1080 (--video-viewport)",
45
+ WAYGRAPH_RUN_LOG: "Run log: 0 turns it off, or a folder (the config's runLog)",
46
+ WAYGRAPH_EXTENSIONS: "Unpacked browser extension folders, path-separated (overrides the config's extensions)",
47
+ WAYGRAPH_CACHE_DIR: "Where downloaded extensions are cached",
48
+ WAYGRAPH_PROVE_SHOT: "Demo self-check: screenshot path for the overlay proof",
49
+ WAYGRAPH_PROVE_EXIT: "1 exits after the first overlay proof (demo self-check)",
50
+ WAYGRAPH_PROVE_EVERY: "1 proves the overlay on every step, not only the first",
51
+ };
52
+ /** The raw value, or undefined when unset. */
53
+ export function envString(name) {
54
+ return process.env[name];
55
+ }
56
+ /** On / off: 1 / true / yes / on, or 0 / false / no / off; `fallback` when unset or anything else. */
57
+ export function envSwitch(name, fallback) {
58
+ const v = (process.env[name] ?? "").trim().toLowerCase();
59
+ if (["1", "true", "yes", "on"].includes(v))
60
+ return true;
61
+ if (["0", "false", "no", "off"].includes(v))
62
+ return false;
63
+ return fallback;
64
+ }
65
+ /** True only when switched on. */
66
+ export function envFlag(name) {
67
+ return envSwitch(name, false);
68
+ }
69
+ /** The value as a number, or undefined when unset or not a number. */
70
+ export function envNumber(name) {
71
+ const raw = process.env[name];
72
+ if (raw === undefined || raw.trim() === "")
73
+ return undefined;
74
+ const n = Number(raw);
75
+ return Number.isFinite(n) ? n : undefined;
76
+ }
77
+ /** Sets a variable (for the runner child the CLI spawns); undefined unsets it. */
78
+ export function setEnv(name, value) {
79
+ if (value === undefined)
80
+ delete process.env[name];
81
+ else
82
+ process.env[name] = value;
83
+ }
@@ -9,107 +9,107 @@
9
9
  */
10
10
  export declare const WAYGRAPH_ERRORS: {
11
11
  readonly WG_PREFLIGHT_MISSING_KEY: {
12
- readonly where: "core/run-graph.ts - preflight()";
12
+ readonly where: "engine/run/run.ts - preflight()";
13
13
  readonly means: "A Flow/chain needs a MemKey that mem.set() never received before run() started.";
14
14
  readonly fix: "Pass --data / a mem.set() call for that key, or registerMemStub + --mem-stub for a fake value.";
15
15
  };
16
16
  readonly WG_RUNGRAPH_MAX_STEPS: {
17
- readonly where: "core/run-graph.ts - runGraph()";
17
+ readonly where: "engine/run/run.ts - runGraph()";
18
18
  readonly means: "A chain took more steps than maxSteps without reaching a Block with no .next() - almost always an unintended self-loop in branch()/next routing.";
19
19
  readonly fix: "Check the Block(s) involved in the loop; raise maxSteps only if the loop is genuinely intended.";
20
20
  };
21
21
  readonly WG_RUNGRAPH_NOT_TERMINAL: {
22
- readonly where: "core/run-graph.ts - runGraph()";
22
+ readonly where: "engine/run/run.ts - runGraph()";
23
23
  readonly means: "A Block with no .next() resolved to a Checkpoint that wasn't in the caller's declared `terminals` set.";
24
24
  readonly fix: "Add that Checkpoint to `terminals`, or fix the Block's resolve() - it landed somewhere the caller didn't expect.";
25
25
  };
26
26
  readonly WG_MAP_WRONG_KIND: {
27
- readonly where: "core/map-builder.ts - MapBuilder.gotoPage/gotoExternal/assert/method()";
27
+ readonly where: "engine/flow/map-builder.ts - MapBuilder.gotoPage/gotoExternal/assert/method()";
28
28
  readonly means: "A Block passed to a MapBuilder step method doesn't carry the __waygraphKind a real defineNavBlock/definePageBlock/defineAssertBlock/defineMethodBlock/defineEffectBlock stamps - either the wrong factory was used, or the object was hand-rolled instead of going through one.";
29
29
  readonly fix: "Use the factory the error names, or move this Block to the matching .gotoPage()/.assert()/.method() call.";
30
30
  };
31
31
  readonly WG_MAP_WRONG_SALT: {
32
- readonly where: "core/map-builder.ts - MapBuilder.method()";
32
+ readonly where: "engine/flow/map-builder.ts - MapBuilder.method()";
33
33
  readonly means: "A Block passed to .method() isn't a real Method/Effect Block (missing __waygraphSalt).";
34
34
  readonly fix: "Build it with defineMethodBlock/defineEffectBlock, or use .assert() if it's actually a defineAssertBlock.";
35
35
  };
36
36
  readonly WG_MAP_WRONG_ORIGIN: {
37
- readonly where: "core/map-builder.ts - MapBuilder.gotoPage/gotoExternal()";
37
+ readonly where: "engine/flow/map-builder.ts - MapBuilder.gotoPage/gotoExternal()";
38
38
  readonly means: "A Block's static `url` origin doesn't match what .gotoPage() (same-origin) or .gotoExternal() (cross-origin) expects, given this map()'s homeOrigin.";
39
39
  readonly fix: "Use .gotoExternal() for a genuinely different origin, .gotoPage() for the app's own homeOrigin, or fix the Block's url.";
40
40
  };
41
41
  readonly WG_MAP_FF_ALREADY_OPEN: {
42
- readonly where: "core/map-builder.ts - MapBuilder.ffStart()";
42
+ readonly where: "engine/flow/map-builder.ts - MapBuilder.ffStart()";
43
43
  readonly means: ".ffStart() was called while a previous .ffStart() window is still open.";
44
44
  readonly fix: "Call .ffEnd() before opening another fast-forward window.";
45
45
  };
46
46
  readonly WG_MAP_FF_EMPTY: {
47
- readonly where: "core/map-builder.ts - MapBuilder.ffEnd()";
47
+ readonly where: "engine/flow/map-builder.ts - MapBuilder.ffEnd()";
48
48
  readonly means: ".ffEnd() closed a window with zero steps inside it.";
49
49
  readonly fix: "Add at least one .gotoPage()/.method()/.assert() inside the .ffStart()/.ffEnd() window.";
50
50
  };
51
51
  readonly WG_MAP_FF_NOT_CLOSED: {
52
- readonly where: "core/map-builder.ts - MapBuilder.end()";
52
+ readonly where: "engine/flow/map-builder.ts - MapBuilder.end()";
53
53
  readonly means: ".end() was called while a .ffStart() window was still open.";
54
54
  readonly fix: "Call .ffEnd() before .end().";
55
55
  };
56
56
  readonly WG_MAP_FF_NOT_OPEN: {
57
- readonly where: "core/map-builder.ts - MapBuilder.ffEnd()";
57
+ readonly where: "engine/flow/map-builder.ts - MapBuilder.ffEnd()";
58
58
  readonly means: ".ffEnd() was called with no matching .ffStart().";
59
59
  readonly fix: "Remove the stray .ffEnd(), or add the .ffStart() it's meant to close.";
60
60
  };
61
61
  readonly WG_MAP_EMPTY: {
62
- readonly where: "core/map-builder.ts - MapBuilder.end()";
62
+ readonly where: "engine/flow/map-builder.ts - MapBuilder.end()";
63
63
  readonly means: ".end() was called with zero steps added.";
64
64
  readonly fix: "Add at least one .gotoPage()/.gotoExternal()/.assert()/.method() before .end().";
65
65
  };
66
66
  readonly WG_MAP_BRANCH_NO_PRIOR_STEP: {
67
- readonly where: "core/map-builder.ts - MapBuilder.branch()";
67
+ readonly where: "engine/flow/map-builder.ts - MapBuilder.branch()";
68
68
  readonly means: ".branch() was called before any step existed to branch FROM.";
69
69
  readonly fix: "Add a .gotoPage()/.gotoExternal()/.method()/.assert() before .branch().";
70
70
  };
71
71
  readonly WG_MAP_BRANCH_SHARED_SESSION_UNSUPPORTED: {
72
- readonly where: "core/map-builder.ts - a .branch()-built Flow's run()";
72
+ readonly where: "engine/flow/map-builder.ts - a .branch()-built Flow's run()";
73
73
  readonly means: "run(mem, config) was called on a branched Flow - that convenience form always closes its own browser/page before the branch's tag is known, so the branch can never be reached.";
74
74
  readonly fix: "Call run(context, mem[, options]) instead, keeping the same page across the branch.";
75
75
  };
76
76
  readonly WG_BRANCH_REGRESSION_NO_BROWSER: {
77
- readonly where: "core/branch-regression.ts - runBranchRegression()";
77
+ readonly where: "engine/flow/branch-regression.ts - runBranchRegression()";
78
78
  readonly means: "cloneSession is on (the default) but context.browser() returned null - a persistent context has no Browser to clone a new context from.";
79
79
  readonly fix: "Pass { cloneSession: false } to run the single live path in this context instead.";
80
80
  };
81
81
  readonly WG_COMPOSE_EMPTY: {
82
- readonly where: "core/compose.ts - composeBlock()";
82
+ readonly where: "engine/block/compose.ts - composeBlock()";
83
83
  readonly means: "composeBlock() was called with zero steps.";
84
84
  readonly fix: "Pass at least one Block.";
85
85
  };
86
86
  readonly WG_FASTFORWARD_EMPTY: {
87
- readonly where: "core/compose.ts - fastForwardComposeBlock()";
87
+ readonly where: "engine/block/compose.ts - fastForwardComposeBlock()";
88
88
  readonly means: "A fast-forward window was closed with zero steps inside it.";
89
89
  readonly fix: "Add at least one Block between ffStart()/ffEnd() (or the equivalent Map builder call).";
90
90
  };
91
91
  readonly WG_FLOW_BLOCK_NOT_FOUND: {
92
- readonly where: "core/block.ts - findBlockIndex() (used by withBlockVerify/modBlockVerify/chainFlow)";
92
+ readonly where: "engine/block/block.ts - findBlockIndex() (used by withBlockVerify/modBlockVerify/chainFlow)";
93
93
  readonly means: "The Block name/index/reference given doesn't exist in this Flow (or chained Flows).";
94
94
  readonly fix: "Check the name/index against flow.blocks() - it lists every Block this Flow actually has, tag-prefixed for branches.";
95
95
  };
96
96
  readonly WG_CHAINFLOW_EMPTY: {
97
- readonly where: "core/flow.ts - chainFlow()";
97
+ readonly where: "engine/flow/flow.ts - chainFlow()";
98
98
  readonly means: "chainFlow() was called with zero Flows.";
99
99
  readonly fix: "Pass at least one Flow.";
100
100
  };
101
101
  readonly WG_MODVERIFY_FUNCTION_FORM: {
102
- readonly where: "core/block.ts - modVerify()";
102
+ readonly where: "engine/block/block.ts - modVerify()";
103
103
  readonly means: "modVerify() was called on a Block whose verify is a function (tag-driven), which has no fixed list to address an item into.";
104
104
  readonly fix: "Use withVerify() to replace the whole verify instead.";
105
105
  };
106
106
  readonly WG_MODVERIFY_NOT_FOUND: {
107
- readonly where: "core/block.ts - modVerify()";
107
+ readonly where: "engine/block/block.ts - modVerify()";
108
108
  readonly means: "The Trait name/index given doesn't exist in this Block's verify list.";
109
109
  readonly fix: "Check the Block's actual verify list for the right name/index.";
110
110
  };
111
111
  readonly WG_MEM_READ_BEFORE_SET: {
112
- readonly where: "mem-page.ts - MemPage.get()";
112
+ readonly where: "engine/mem/mem.ts - MemPage.get()";
113
113
  readonly means: "mem.get(key) was called for a key that was never mem.set() on this MemPage.";
114
114
  readonly fix: "Set it first, or use mem.has(key) to check before an optional read.";
115
115
  };
@@ -119,7 +119,7 @@ export declare const WAYGRAPH_ERRORS: {
119
119
  * site (several throw sites can share a `WAYGRAPH_ERRORS` code but always have their own distinct
120
120
  * message here, since the same code can legitimately fire from more than one spot with different
121
121
  * detail). Plain strings for a message with no runtime values; a function for one that needs them.
122
- * `grep MSG_ src/errors.ts` finds every fixed string the engine can throw, in one place.
122
+ * `grep MSG_ src/engine/errors.ts` finds every fixed string the engine can throw, in one place.
123
123
  */
124
124
  export declare const MSG_PREFLIGHT_MISSING_KEY: (blockName: string, missingKeys: string) => string;
125
125
  export declare const MSG_RUNGRAPH_MAX_STEPS: (maxSteps: number) => string;
@@ -148,6 +148,7 @@ export declare const MSG_FASTFORWARD_EMPTY: (name: string) => string;
148
148
  export declare const MSG_CHAINFLOW_BLOCK_NOT_FOUND_BY_INDEX: (index: number, count: number) => string;
149
149
  export declare const MSG_CHAINFLOW_BLOCK_NOT_FOUND_BY_NAME: (blockName: string) => string;
150
150
  export declare const MSG_CHAINFLOW_EMPTY = "chainFlow: give at least one Flow";
151
+ /** The code of a `WaygraphError`, e.g. `WG_PREFLIGHT_MISSING_KEY`. */
151
152
  export type WaygraphErrorCode = keyof typeof WAYGRAPH_ERRORS;
152
153
  /** A thrown engine error with a stable, greppable `.code` - see WAYGRAPH_ERRORS for the full list. */
153
154
  export declare class WaygraphError extends Error {
@@ -9,107 +9,107 @@
9
9
  */
10
10
  export const WAYGRAPH_ERRORS = {
11
11
  WG_PREFLIGHT_MISSING_KEY: {
12
- where: "core/run-graph.ts - preflight()",
12
+ where: "engine/run/run.ts - preflight()",
13
13
  means: "A Flow/chain needs a MemKey that mem.set() never received before run() started.",
14
14
  fix: "Pass --data / a mem.set() call for that key, or registerMemStub + --mem-stub for a fake value.",
15
15
  },
16
16
  WG_RUNGRAPH_MAX_STEPS: {
17
- where: "core/run-graph.ts - runGraph()",
17
+ where: "engine/run/run.ts - runGraph()",
18
18
  means: "A chain took more steps than maxSteps without reaching a Block with no .next() - almost always an unintended self-loop in branch()/next routing.",
19
19
  fix: "Check the Block(s) involved in the loop; raise maxSteps only if the loop is genuinely intended.",
20
20
  },
21
21
  WG_RUNGRAPH_NOT_TERMINAL: {
22
- where: "core/run-graph.ts - runGraph()",
22
+ where: "engine/run/run.ts - runGraph()",
23
23
  means: "A Block with no .next() resolved to a Checkpoint that wasn't in the caller's declared `terminals` set.",
24
24
  fix: "Add that Checkpoint to `terminals`, or fix the Block's resolve() - it landed somewhere the caller didn't expect.",
25
25
  },
26
26
  WG_MAP_WRONG_KIND: {
27
- where: "core/map-builder.ts - MapBuilder.gotoPage/gotoExternal/assert/method()",
27
+ where: "engine/flow/map-builder.ts - MapBuilder.gotoPage/gotoExternal/assert/method()",
28
28
  means: "A Block passed to a MapBuilder step method doesn't carry the __waygraphKind a real defineNavBlock/definePageBlock/defineAssertBlock/defineMethodBlock/defineEffectBlock stamps - either the wrong factory was used, or the object was hand-rolled instead of going through one.",
29
29
  fix: "Use the factory the error names, or move this Block to the matching .gotoPage()/.assert()/.method() call.",
30
30
  },
31
31
  WG_MAP_WRONG_SALT: {
32
- where: "core/map-builder.ts - MapBuilder.method()",
32
+ where: "engine/flow/map-builder.ts - MapBuilder.method()",
33
33
  means: "A Block passed to .method() isn't a real Method/Effect Block (missing __waygraphSalt).",
34
34
  fix: "Build it with defineMethodBlock/defineEffectBlock, or use .assert() if it's actually a defineAssertBlock.",
35
35
  },
36
36
  WG_MAP_WRONG_ORIGIN: {
37
- where: "core/map-builder.ts - MapBuilder.gotoPage/gotoExternal()",
37
+ where: "engine/flow/map-builder.ts - MapBuilder.gotoPage/gotoExternal()",
38
38
  means: "A Block's static `url` origin doesn't match what .gotoPage() (same-origin) or .gotoExternal() (cross-origin) expects, given this map()'s homeOrigin.",
39
39
  fix: "Use .gotoExternal() for a genuinely different origin, .gotoPage() for the app's own homeOrigin, or fix the Block's url.",
40
40
  },
41
41
  WG_MAP_FF_ALREADY_OPEN: {
42
- where: "core/map-builder.ts - MapBuilder.ffStart()",
42
+ where: "engine/flow/map-builder.ts - MapBuilder.ffStart()",
43
43
  means: ".ffStart() was called while a previous .ffStart() window is still open.",
44
44
  fix: "Call .ffEnd() before opening another fast-forward window.",
45
45
  },
46
46
  WG_MAP_FF_EMPTY: {
47
- where: "core/map-builder.ts - MapBuilder.ffEnd()",
47
+ where: "engine/flow/map-builder.ts - MapBuilder.ffEnd()",
48
48
  means: ".ffEnd() closed a window with zero steps inside it.",
49
49
  fix: "Add at least one .gotoPage()/.method()/.assert() inside the .ffStart()/.ffEnd() window.",
50
50
  },
51
51
  WG_MAP_FF_NOT_CLOSED: {
52
- where: "core/map-builder.ts - MapBuilder.end()",
52
+ where: "engine/flow/map-builder.ts - MapBuilder.end()",
53
53
  means: ".end() was called while a .ffStart() window was still open.",
54
54
  fix: "Call .ffEnd() before .end().",
55
55
  },
56
56
  WG_MAP_FF_NOT_OPEN: {
57
- where: "core/map-builder.ts - MapBuilder.ffEnd()",
57
+ where: "engine/flow/map-builder.ts - MapBuilder.ffEnd()",
58
58
  means: ".ffEnd() was called with no matching .ffStart().",
59
59
  fix: "Remove the stray .ffEnd(), or add the .ffStart() it's meant to close.",
60
60
  },
61
61
  WG_MAP_EMPTY: {
62
- where: "core/map-builder.ts - MapBuilder.end()",
62
+ where: "engine/flow/map-builder.ts - MapBuilder.end()",
63
63
  means: ".end() was called with zero steps added.",
64
64
  fix: "Add at least one .gotoPage()/.gotoExternal()/.assert()/.method() before .end().",
65
65
  },
66
66
  WG_MAP_BRANCH_NO_PRIOR_STEP: {
67
- where: "core/map-builder.ts - MapBuilder.branch()",
67
+ where: "engine/flow/map-builder.ts - MapBuilder.branch()",
68
68
  means: ".branch() was called before any step existed to branch FROM.",
69
69
  fix: "Add a .gotoPage()/.gotoExternal()/.method()/.assert() before .branch().",
70
70
  },
71
71
  WG_MAP_BRANCH_SHARED_SESSION_UNSUPPORTED: {
72
- where: "core/map-builder.ts - a .branch()-built Flow's run()",
72
+ where: "engine/flow/map-builder.ts - a .branch()-built Flow's run()",
73
73
  means: "run(mem, config) was called on a branched Flow - that convenience form always closes its own browser/page before the branch's tag is known, so the branch can never be reached.",
74
74
  fix: "Call run(context, mem[, options]) instead, keeping the same page across the branch.",
75
75
  },
76
76
  WG_BRANCH_REGRESSION_NO_BROWSER: {
77
- where: "core/branch-regression.ts - runBranchRegression()",
77
+ where: "engine/flow/branch-regression.ts - runBranchRegression()",
78
78
  means: "cloneSession is on (the default) but context.browser() returned null - a persistent context has no Browser to clone a new context from.",
79
79
  fix: "Pass { cloneSession: false } to run the single live path in this context instead.",
80
80
  },
81
81
  WG_COMPOSE_EMPTY: {
82
- where: "core/compose.ts - composeBlock()",
82
+ where: "engine/block/compose.ts - composeBlock()",
83
83
  means: "composeBlock() was called with zero steps.",
84
84
  fix: "Pass at least one Block.",
85
85
  },
86
86
  WG_FASTFORWARD_EMPTY: {
87
- where: "core/compose.ts - fastForwardComposeBlock()",
87
+ where: "engine/block/compose.ts - fastForwardComposeBlock()",
88
88
  means: "A fast-forward window was closed with zero steps inside it.",
89
89
  fix: "Add at least one Block between ffStart()/ffEnd() (or the equivalent Map builder call).",
90
90
  },
91
91
  WG_FLOW_BLOCK_NOT_FOUND: {
92
- where: "core/block.ts - findBlockIndex() (used by withBlockVerify/modBlockVerify/chainFlow)",
92
+ where: "engine/block/block.ts - findBlockIndex() (used by withBlockVerify/modBlockVerify/chainFlow)",
93
93
  means: "The Block name/index/reference given doesn't exist in this Flow (or chained Flows).",
94
94
  fix: "Check the name/index against flow.blocks() - it lists every Block this Flow actually has, tag-prefixed for branches.",
95
95
  },
96
96
  WG_CHAINFLOW_EMPTY: {
97
- where: "core/flow.ts - chainFlow()",
97
+ where: "engine/flow/flow.ts - chainFlow()",
98
98
  means: "chainFlow() was called with zero Flows.",
99
99
  fix: "Pass at least one Flow.",
100
100
  },
101
101
  WG_MODVERIFY_FUNCTION_FORM: {
102
- where: "core/block.ts - modVerify()",
102
+ where: "engine/block/block.ts - modVerify()",
103
103
  means: "modVerify() was called on a Block whose verify is a function (tag-driven), which has no fixed list to address an item into.",
104
104
  fix: "Use withVerify() to replace the whole verify instead.",
105
105
  },
106
106
  WG_MODVERIFY_NOT_FOUND: {
107
- where: "core/block.ts - modVerify()",
107
+ where: "engine/block/block.ts - modVerify()",
108
108
  means: "The Trait name/index given doesn't exist in this Block's verify list.",
109
109
  fix: "Check the Block's actual verify list for the right name/index.",
110
110
  },
111
111
  WG_MEM_READ_BEFORE_SET: {
112
- where: "mem-page.ts - MemPage.get()",
112
+ where: "engine/mem/mem.ts - MemPage.get()",
113
113
  means: "mem.get(key) was called for a key that was never mem.set() on this MemPage.",
114
114
  fix: "Set it first, or use mem.has(key) to check before an optional read.",
115
115
  },
@@ -119,7 +119,7 @@ export const WAYGRAPH_ERRORS = {
119
119
  * site (several throw sites can share a `WAYGRAPH_ERRORS` code but always have their own distinct
120
120
  * message here, since the same code can legitimately fire from more than one spot with different
121
121
  * detail). Plain strings for a message with no runtime values; a function for one that needs them.
122
- * `grep MSG_ src/errors.ts` finds every fixed string the engine can throw, in one place.
122
+ * `grep MSG_ src/engine/errors.ts` finds every fixed string the engine can throw, in one place.
123
123
  */
124
124
  export const MSG_PREFLIGHT_MISSING_KEY = (blockName, missingKeys) => `preflight: MemPage is missing required key(s) before "${blockName}" can run: ${missingKeys}`;
125
125
  export const MSG_RUNGRAPH_MAX_STEPS = (maxSteps) => `runGraph: exceeded ${maxSteps} steps - check for an unintended self-loop`;
@@ -1,22 +1,23 @@
1
- import type { Checkpoint } from "../types.js";
1
+ import type { Checkpoint } from "../checkpoint/checkpoint.js";
2
2
  import type { Flow } from "./flow.js";
3
- import type { RunGraphOptions } from "./run-graph.js";
4
- import { MemPage } from "../mem-page.js";
3
+ import type { RunGraphOptions } from "../run/run.js";
4
+ import { MemPage } from "../mem/mem.js";
5
5
  import type { BrowserContext } from "@playwright/test";
6
6
  /** One branch reachable from `flow`, possibly several `.branch()` levels deep. */
7
7
  export interface BranchEntry {
8
8
  /** `"Away"`, or `"Away > Far"` for a nested branch - the route tags that lead here, in order. */
9
9
  path: string;
10
- flow: Flow<any>;
10
+ flow: Flow<Checkpoint<string>>;
11
11
  }
12
12
  /** This Flow's own immediate `.branch()` routes, or `undefined` if it wasn't built by `.branch()`. */
13
- export declare function branchRoutes(flow: Flow<any>): ReadonlyMap<string, Flow<any> | null> | undefined;
13
+ export declare function branchRoutes(flow: Flow<Checkpoint<string>>): ReadonlyMap<string, Flow<Checkpoint<string>> | null> | undefined;
14
14
  /**
15
15
  * Every branch Flow reachable from `flow`, at any depth, deduped by object identity (the same
16
16
  * route Flow reused under two tags is only listed once). Doesn't include `flow` itself - only its
17
17
  * `.branch()` continuations. Static - doesn't run anything.
18
18
  */
19
- export declare function collectBranchFlows(flow: Flow<any>): BranchEntry[];
19
+ export declare function collectBranchFlows(flow: Flow<Checkpoint<string>>): BranchEntry[];
20
+ /** The outcome of one branch path in a branch regression run. */
20
21
  export interface BranchRunResult {
21
22
  path: string;
22
23
  status: "ok" | "failed";
@@ -43,4 +44,4 @@ export interface RunBranchRegressionOptions extends RunGraphOptions {
43
44
  * console.log(r.path, r.status, r.error ?? "");
44
45
  * }
45
46
  */
46
- export declare function runBranchRegression(flow: Flow<any>, context: BrowserContext, mem?: MemPage, options?: RunBranchRegressionOptions): Promise<BranchRunResult[]>;
47
+ export declare function runBranchRegression(flow: Flow<Checkpoint<string>>, context: BrowserContext, mem?: MemPage, options?: RunBranchRegressionOptions): Promise<BranchRunResult[]>;
@@ -1,6 +1,7 @@
1
1
  import { WaygraphError, MSG_BRANCH_REGRESSION_NO_BROWSER } from "../errors.js";
2
- import { MemPage } from "../mem-page.js";
3
- import { seedMemStub } from "../mem-stub.js";
2
+ import { MemPage } from "../mem/mem.js";
3
+ import { seedMemStub } from "../mem/mem-stub.js";
4
+ import { ignorePageGone } from "../page-gone.js";
4
5
  function branchInfo(flow) {
5
6
  return flow.__wgBranch;
6
7
  }
@@ -104,7 +105,7 @@ export async function runBranchRegression(flow, context, mem = new MemPage(), op
104
105
  const branchPage = await branchContext.newPage();
105
106
  // Best-effort: land back on the same page the prefix ended on before this route's own
106
107
  // Blocks run - restores cookies/localStorage AND which page was loaded, not just auth state.
107
- await branchPage.goto(url).catch(() => { });
108
+ await branchPage.goto(url).catch(ignorePageGone);
108
109
  await walk(route, branchContext, m.clone(), branchPath, branchPage);
109
110
  }
110
111
  finally {