waygraph 0.15.53 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. package/README.md +8 -3
  2. package/bin/waygraph +2 -2
  3. package/dist/analysis/check.d.ts +38 -0
  4. package/dist/analysis/check.js +87 -0
  5. package/dist/analysis/coverage-gap.d.ts +1 -1
  6. package/dist/analysis/coverage-gap.js +14 -37
  7. package/dist/analysis/flow-source.d.ts +9 -0
  8. package/dist/analysis/flow-source.js +25 -0
  9. package/dist/analysis/graph.d.ts +13 -14
  10. package/dist/analysis/graph.js +48 -371
  11. package/dist/analysis/map-check.js +4 -39
  12. package/dist/analysis/practices-check.d.ts +1 -1
  13. package/dist/analysis/practices-check.js +24 -45
  14. package/dist/cli/args.d.ts +23 -0
  15. package/dist/cli/args.js +20 -0
  16. package/dist/{cli.d.ts → cli/cli.d.ts} +0 -1
  17. package/dist/{cli.js → cli/cli.js} +10 -9
  18. package/dist/{commands → cli/commands}/agent-dive-scaffold.js +35 -64
  19. package/dist/cli/commands/agent-dive.js +42 -0
  20. package/dist/{commands → cli/commands}/check.d.ts +0 -1
  21. package/dist/cli/commands/check.js +104 -0
  22. package/dist/cli/commands/codemod-checkpoints.d.ts +18 -0
  23. package/dist/cli/commands/codemod-checkpoints.js +186 -0
  24. package/dist/cli/commands/codemod-flows.d.ts +18 -0
  25. package/dist/cli/commands/codemod-flows.js +284 -0
  26. package/dist/cli/commands/codemod-stubs.d.ts +10 -0
  27. package/dist/cli/commands/codemod-stubs.js +187 -0
  28. package/dist/{commands → cli/commands}/extensions.js +5 -4
  29. package/dist/{commands → cli/commands}/init.js +1 -2
  30. package/dist/{commands → cli/commands}/list.js +9 -7
  31. package/dist/cli/commands/manifest.d.ts +2 -0
  32. package/dist/cli/commands/manifest.js +20 -0
  33. package/dist/cli/commands/map.js +57 -0
  34. package/dist/{commands → cli/commands}/run.d.ts +0 -1
  35. package/dist/cli/commands/run.js +64 -0
  36. package/dist/{commands → cli/commands}/session.js +61 -88
  37. package/dist/{commands → cli/commands}/test.js +11 -14
  38. package/dist/cli/commands/traverse.js +105 -0
  39. package/dist/{commands → cli/commands}/try.js +29 -25
  40. package/dist/{commands → cli/commands}/upgrade.js +40 -4
  41. package/dist/cli/flags.d.ts +193 -16
  42. package/dist/cli/flags.js +179 -234
  43. package/dist/cli/run-chain.d.ts +1 -0
  44. package/dist/cli/run-chain.js +42 -7
  45. package/dist/cli/usage.d.ts +1 -1
  46. package/dist/cli/usage.js +21 -53
  47. package/dist/cli/util.d.ts +2 -2
  48. package/dist/cli/util.js +2 -3
  49. package/dist/{highlights → demo/narration}/css.d.ts +1 -1
  50. package/dist/{highlights → demo/narration}/css.js +2 -3
  51. package/dist/{highlights → demo/narration}/demo-pace.d.ts +7 -11
  52. package/dist/{highlights → demo/narration}/demo-pace.js +9 -11
  53. package/dist/{highlights → demo/narration}/device.d.ts +4 -2
  54. package/dist/{highlights → demo/narration}/device.js +3 -1
  55. package/dist/demo/narration/merge.d.ts +8 -0
  56. package/dist/demo/narration/merge.js +71 -0
  57. package/dist/{highlights/run-phase.d.ts → demo/narration/narration.d.ts} +10 -14
  58. package/dist/{highlights/run-phase.js → demo/narration/narration.js} +25 -94
  59. package/dist/{highlights → demo/narration}/shorthand.d.ts +1 -1
  60. package/dist/demo/narration/stub-ctx.d.ts +8 -0
  61. package/dist/demo/narration/stub-ctx.js +164 -0
  62. package/dist/{highlights → demo/narration}/style.d.ts +1 -7
  63. package/dist/{highlights → demo/narration}/style.js +1 -41
  64. package/dist/{highlights → demo/narration}/todo-dock.d.ts +3 -3
  65. package/dist/{highlights → demo/narration}/todo-dock.js +13 -30
  66. package/dist/demo/overlay/auto-chrome.d.ts +7 -0
  67. package/dist/demo/overlay/auto-chrome.js +97 -0
  68. package/dist/{session/overlay-beacon.d.ts → demo/overlay/beacon.d.ts} +7 -0
  69. package/dist/{session/overlay-beacon.js → demo/overlay/beacon.js} +5 -0
  70. package/dist/demo/overlay/cursor.d.ts +12 -0
  71. package/dist/demo/overlay/cursor.js +142 -0
  72. package/dist/demo/overlay/device-stage.d.ts +13 -0
  73. package/dist/demo/overlay/device-stage.js +396 -0
  74. package/dist/demo/overlay/inpage/banner.d.ts +1 -0
  75. package/dist/demo/overlay/inpage/banner.js +160 -0
  76. package/dist/demo/overlay/inpage/caption.d.ts +2 -0
  77. package/dist/demo/overlay/inpage/caption.js +24 -0
  78. package/dist/demo/overlay/inpage/core.d.ts +1 -0
  79. package/dist/demo/overlay/inpage/core.js +345 -0
  80. package/dist/demo/overlay/inpage/device-chip.d.ts +1 -0
  81. package/dist/demo/overlay/inpage/device-chip.js +191 -0
  82. package/dist/demo/overlay/inpage/network.d.ts +9 -0
  83. package/dist/demo/overlay/inpage/network.js +200 -0
  84. package/dist/demo/overlay/inpage/panel-chrome.d.ts +1 -0
  85. package/dist/demo/overlay/inpage/panel-chrome.js +203 -0
  86. package/dist/demo/overlay/inpage/stamp.d.ts +1 -0
  87. package/dist/demo/overlay/inpage/stamp.js +46 -0
  88. package/dist/demo/overlay/inpage/swipe-zoom.d.ts +1 -0
  89. package/dist/demo/overlay/inpage/swipe-zoom.js +220 -0
  90. package/dist/demo/overlay/inpage/todos.d.ts +1 -0
  91. package/dist/demo/overlay/inpage/todos.js +294 -0
  92. package/dist/demo/overlay/locator-theater.d.ts +25 -0
  93. package/dist/demo/overlay/locator-theater.js +76 -0
  94. package/dist/demo/overlay/network-capture.d.ts +22 -0
  95. package/dist/demo/overlay/network-capture.js +127 -0
  96. package/dist/demo/overlay/overlay-css.d.ts +3 -0
  97. package/dist/demo/overlay/overlay-css.js +369 -0
  98. package/dist/demo/overlay/overlay-stage.d.ts +23 -0
  99. package/dist/demo/overlay/overlay-stage.js +106 -0
  100. package/dist/demo/overlay/overlay.d.ts +10 -0
  101. package/dist/demo/overlay/overlay.js +89 -0
  102. package/dist/{pilot-overlay/overlay-fixtures.d.ts → demo/overlay/phase-fixtures.d.ts} +2 -2
  103. package/dist/{pilot-overlay/overlay-fixtures.js → demo/overlay/phase-fixtures.js} +2 -2
  104. package/dist/{pilot-overlay/action-ring.js → demo/overlay/pilot/actions.js} +2 -1
  105. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.d.ts +6 -5
  106. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.js +19 -18
  107. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.d.ts +2 -2
  108. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.js +13 -22
  109. package/dist/demo/overlay/reattach.d.ts +7 -0
  110. package/dist/demo/overlay/reattach.js +23 -0
  111. package/dist/demo/overlay/rings.d.ts +33 -0
  112. package/dist/demo/overlay/rings.js +448 -0
  113. package/dist/{ui → demo/overlay/ui}/components/ring.js +2 -2
  114. package/dist/{ui → demo/overlay/ui}/overlay.css +4 -4
  115. package/dist/{ui → demo/overlay/ui}/shadow.d.ts +1 -1
  116. package/dist/{ui → demo/overlay/ui}/shadow.js +39 -2
  117. package/dist/demo/stepper/after.d.ts +3 -0
  118. package/dist/demo/stepper/after.js +113 -0
  119. package/dist/demo/stepper/banner-log.d.ts +37 -0
  120. package/dist/demo/stepper/banner-log.js +63 -0
  121. package/dist/demo/stepper/before.d.ts +4 -0
  122. package/dist/demo/stepper/before.js +110 -0
  123. package/dist/demo/stepper/demo-log.d.ts +31 -0
  124. package/dist/demo/stepper/demo-log.js +309 -0
  125. package/dist/demo/stepper/gate.d.ts +11 -0
  126. package/dist/demo/stepper/gate.js +78 -0
  127. package/dist/demo/stepper/interaction-patch.d.ts +3 -0
  128. package/dist/demo/stepper/interaction-patch.js +323 -0
  129. package/dist/demo/stepper/pacing.d.ts +21 -0
  130. package/dist/demo/stepper/pacing.js +23 -0
  131. package/dist/demo/stepper/slides.d.ts +11 -0
  132. package/dist/demo/stepper/slides.js +233 -0
  133. package/dist/demo/stepper/step-panels.d.ts +21 -0
  134. package/dist/demo/stepper/step-panels.js +589 -0
  135. package/dist/demo/stepper/stepper.d.ts +24 -0
  136. package/dist/demo/stepper/stepper.js +122 -0
  137. package/dist/demo/stepper/teardown.d.ts +48 -0
  138. package/dist/demo/stepper/teardown.js +179 -0
  139. package/dist/demo/stepper/todo-advance.d.ts +14 -0
  140. package/dist/demo/stepper/todo-advance.js +110 -0
  141. package/dist/demo/stepper/view.d.ts +68 -0
  142. package/dist/demo/stepper/view.js +31 -0
  143. package/dist/demo/types.d.ts +17 -0
  144. package/dist/demo/verbose-log.js +15 -0
  145. package/dist/{types.d.ts → engine/block/block.d.ts} +106 -91
  146. package/dist/{core → engine/block}/block.js +10 -53
  147. package/dist/{core → engine/block}/compose.d.ts +10 -7
  148. package/dist/{core → engine/block}/compose.js +1 -1
  149. package/dist/{core/blocks → engine/block/kinds}/api.d.ts +17 -12
  150. package/dist/{core/blocks → engine/block/kinds}/api.js +26 -18
  151. package/dist/{core/blocks → engine/block/kinds}/effect.d.ts +13 -18
  152. package/dist/engine/block/kinds/effect.js +17 -0
  153. package/dist/{core/blocks → engine/block/kinds}/method.d.ts +19 -29
  154. package/dist/{core/blocks → engine/block/kinds}/method.js +7 -21
  155. package/dist/{core/blocks → engine/block/kinds}/nav.d.ts +22 -31
  156. package/dist/{core/blocks → engine/block/kinds}/nav.js +6 -12
  157. package/dist/{core/blocks → engine/block/kinds}/page.d.ts +15 -20
  158. package/dist/{core/blocks → engine/block/kinds}/page.js +5 -7
  159. package/dist/engine/checkpoint/checkpoint.d.ts +22 -0
  160. package/dist/engine/checkpoint/checkpoint.js +8 -0
  161. package/dist/engine/checkpoint/route.d.ts +28 -0
  162. package/dist/engine/checkpoint/route.js +28 -0
  163. package/dist/{core → engine}/config.d.ts +7 -2
  164. package/dist/engine/config.js +6 -0
  165. package/dist/engine/engine.d.ts +45 -0
  166. package/dist/{core → engine}/engine.js +6 -10
  167. package/dist/engine/env.d.ts +59 -0
  168. package/dist/engine/env.js +83 -0
  169. package/dist/{errors.d.ts → engine/errors.d.ts} +23 -22
  170. package/dist/{errors.js → engine/errors.js} +22 -22
  171. package/dist/{core → engine/flow}/branch-regression.d.ts +8 -7
  172. package/dist/{core → engine/flow}/branch-regression.js +4 -3
  173. package/dist/engine/flow/flow.d.ts +162 -0
  174. package/dist/engine/flow/flow.js +244 -0
  175. package/dist/{core → engine/flow}/map-builder.d.ts +42 -40
  176. package/dist/{core → engine/flow}/map-builder.js +46 -48
  177. package/dist/{core → engine}/locate.d.ts +1 -1
  178. package/dist/{core → engine}/locate.js +1 -2
  179. package/dist/{mem-stub.d.ts → engine/mem/mem-stub.d.ts} +9 -8
  180. package/dist/{mem-stub.js → engine/mem/mem-stub.js} +2 -2
  181. package/dist/{mem-page.d.ts → engine/mem/mem.d.ts} +1 -1
  182. package/dist/{mem-page.js → engine/mem/mem.js} +2 -1
  183. package/dist/engine/page-gone.d.ts +5 -0
  184. package/dist/engine/page-gone.js +20 -0
  185. package/dist/engine/run/connect.d.ts +28 -0
  186. package/dist/{types.js → engine/run/connect.js} +11 -10
  187. package/dist/engine/run/events.d.ts +67 -0
  188. package/dist/engine/run/events.js +90 -0
  189. package/dist/engine/run/hooks.d.ts +16 -0
  190. package/dist/engine/run/hooks.js +8 -0
  191. package/dist/engine/run/launch.d.ts +13 -0
  192. package/dist/engine/run/launch.js +27 -0
  193. package/dist/{core/run-graph.d.ts → engine/run/run.d.ts} +9 -11
  194. package/dist/{core/run-graph.js → engine/run/run.js} +22 -11
  195. package/dist/engine/stub/pace.d.ts +12 -0
  196. package/dist/engine/stub/pace.js +2 -0
  197. package/dist/engine/stub/ring.d.ts +130 -0
  198. package/dist/engine/stub/ring.js +41 -0
  199. package/dist/engine/stub/stub.d.ts +268 -0
  200. package/dist/engine/stub/stub.js +1 -0
  201. package/dist/engine/stub/todos.d.ts +104 -0
  202. package/dist/engine/stub/todos.js +2 -0
  203. package/dist/engine/stub/viewport.d.ts +26 -0
  204. package/dist/engine/stub/viewport.js +2 -0
  205. package/dist/{trait.d.ts → engine/trait/trait.d.ts} +1 -1
  206. package/dist/index.d.ts +84 -36
  207. package/dist/index.js +44 -19
  208. package/dist/{session/auto-explore-run.d.ts → live/auto/auto.d.ts} +10 -16
  209. package/dist/{session/auto-explore-run.js → live/auto/auto.js} +164 -248
  210. package/dist/{session/auto-explore.d.ts → live/auto/explore.d.ts} +4 -14
  211. package/dist/{session/auto-explore.js → live/auto/explore.js} +21 -127
  212. package/dist/{auto-session/session.d.ts → live/auto-session/auto-session.d.ts} +1 -1
  213. package/dist/{auto-session/session.js → live/auto-session/auto-session.js} +27 -24
  214. package/dist/{auto-session → live/auto-session}/helpers.d.ts +16 -5
  215. package/dist/{auto-session → live/auto-session}/helpers.js +1 -1
  216. package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +7 -5
  217. package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +31 -16
  218. package/dist/{session/browser.d.ts → live/auto-session/start.d.ts} +1 -2
  219. package/dist/{session/browser.js → live/auto-session/start.js} +2 -3
  220. package/dist/{pilot-overlay → live/pilot}/panel.d.ts +1 -1
  221. package/dist/{pilot-overlay → live/pilot}/panel.js +23 -31
  222. package/dist/{session → live/pilot}/pilot.d.ts +4 -3
  223. package/dist/{session → live/pilot}/pilot.js +4 -4
  224. package/dist/{traverse → live/traverse}/coverage.d.ts +4 -0
  225. package/dist/{traverse → live/traverse}/coverage.js +3 -0
  226. package/dist/{traverse → live/traverse}/lease.d.ts +1 -0
  227. package/dist/{traverse → live/traverse}/lease.js +1 -0
  228. package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +4 -1
  229. package/dist/{traverse/run.js → live/traverse/traverse.js} +26 -43
  230. package/dist/manifest/manifest.d.ts +52 -0
  231. package/dist/manifest/manifest.js +93 -0
  232. package/dist/manifest/map-imports.d.ts +7 -0
  233. package/dist/manifest/map-imports.js +22 -0
  234. package/dist/manifest/maps.d.ts +33 -0
  235. package/dist/manifest/maps.js +62 -0
  236. package/dist/manifest/pack.d.ts +21 -0
  237. package/dist/manifest/pack.js +109 -0
  238. package/dist/manifest/project.d.ts +60 -0
  239. package/dist/manifest/project.js +101 -0
  240. package/dist/{session/block-inject.js → manifest/roots.js} +1 -18
  241. package/dist/manifest/scan.d.ts +19 -0
  242. package/dist/manifest/scan.js +57 -0
  243. package/dist/{blocks-select.d.ts → manifest/select.d.ts} +3 -0
  244. package/dist/{blocks-select.js → manifest/select.js} +2 -0
  245. package/dist/manifest/source.d.ts +23 -0
  246. package/dist/manifest/source.js +86 -0
  247. package/dist/runner/mode.d.ts +71 -0
  248. package/dist/runner/mode.js +1 -0
  249. package/dist/runner/modes/branches.d.ts +5 -0
  250. package/dist/runner/modes/branches.js +37 -0
  251. package/dist/runner/modes/demo.d.ts +3 -0
  252. package/dist/runner/modes/demo.js +13 -0
  253. package/dist/runner/modes/report.d.ts +2 -0
  254. package/dist/runner/modes/report.js +54 -0
  255. package/dist/runner/modes/run.d.ts +2 -0
  256. package/dist/runner/modes/run.js +3 -0
  257. package/dist/runner/options.d.ts +31 -0
  258. package/dist/runner/options.js +42 -0
  259. package/dist/runner/plan/find.d.ts +18 -0
  260. package/dist/runner/plan/find.js +65 -0
  261. package/dist/runner/plan/plan.d.ts +11 -0
  262. package/dist/runner/plan/plan.js +97 -0
  263. package/dist/runner/plan/seed-mem.d.ts +12 -0
  264. package/dist/runner/plan/seed-mem.js +98 -0
  265. package/dist/runner/plan/spec.d.ts +5 -0
  266. package/dist/runner/plan/spec.js +17 -0
  267. package/dist/runner/play-steps.d.ts +2 -0
  268. package/dist/runner/play-steps.js +59 -0
  269. package/dist/runner/runner.d.ts +4 -0
  270. package/dist/runner/runner.js +64 -0
  271. package/dist/runner/session.d.ts +9 -0
  272. package/dist/runner/session.js +87 -0
  273. package/dist/{browser.js → runtime/browser.js} +4 -2
  274. package/dist/{env-file.js → runtime/env-file.js} +7 -12
  275. package/dist/{extensions.d.ts → runtime/extensions.d.ts} +2 -5
  276. package/dist/{extensions.js → runtime/extensions.js} +3 -1
  277. package/dist/runtime/full-launch.d.ts +1 -0
  278. package/dist/runtime/full-launch.js +34 -0
  279. package/dist/runtime/global-flag.d.ts +5 -0
  280. package/dist/runtime/global-flag.js +18 -0
  281. package/dist/{playwright-config.d.ts → runtime/playwright-config.d.ts} +1 -1
  282. package/dist/{playwright.config.js → runtime/playwright.config.js} +3 -2
  283. package/dist/runtime/run-log.d.ts +2 -0
  284. package/dist/runtime/run-log.js +17 -0
  285. package/dist/{video-dir.js → runtime/video-dir.js} +3 -2
  286. package/dist/{config.d.ts → runtime/waygraph-config.d.ts} +8 -9
  287. package/dist/{config.js → runtime/waygraph-config.js} +21 -51
  288. package/dist/{webserver.js → runtime/webserver.js} +5 -30
  289. package/examples/routed-demo/config/waygraph.config.ts +20 -0
  290. package/examples/routed-demo/package.json +1 -4
  291. package/examples/routed-demo/scripts/fixture-server.mjs +1 -1
  292. package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +2 -4
  293. package/examples/routed-demo/src/flows/routed-demo.flow.ts +2 -3
  294. package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +5 -4
  295. package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +3 -3
  296. package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +3 -3
  297. package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +3 -3
  298. package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +3 -3
  299. package/examples/routed-demo/src/states/routed-demo.states.ts +5 -3
  300. package/examples/routed-demo/tests/routed-demo.spec.ts +4 -4
  301. package/examples/routed-demo/tsconfig.json +1 -1
  302. package/examples/saucedemo/README.md +11 -12
  303. package/examples/saucedemo/config/waygraph.config.ts +17 -0
  304. package/examples/saucedemo/docs/CONVENTION.md +5 -7
  305. package/examples/saucedemo/docs/HELPERS.md +12 -12
  306. package/examples/saucedemo/package-lock.json +10 -3
  307. package/examples/saucedemo/package.json +12 -29
  308. package/examples/saucedemo/src/blocks/SITE-MAP.md +0 -1
  309. package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +1 -5
  310. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -52
  311. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  312. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  313. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  314. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  315. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  316. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +21 -27
  317. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -9
  318. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  319. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +10 -76
  320. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  321. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  322. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  323. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  324. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  325. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  326. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -29
  327. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -48
  328. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +13 -77
  329. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  330. package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  331. package/examples/saucedemo/src/flows/api-demo.flow.ts +26 -18
  332. package/examples/saucedemo/src/flows/cart-bulk.flow.ts +19 -14
  333. package/examples/saucedemo/src/flows/cart-continue.flow.ts +10 -8
  334. package/examples/saucedemo/src/flows/cart-mem.flow.ts +7 -7
  335. package/examples/saucedemo/src/flows/catalog-logout.flow.ts +13 -8
  336. package/examples/saucedemo/src/flows/checkout-then-browse-again.flow.ts +26 -48
  337. package/examples/saucedemo/src/flows/checkout.flow.ts +70 -86
  338. package/examples/saucedemo/src/flows/device-showcase.flow.ts +24 -25
  339. package/examples/saucedemo/src/flows/login.flow.ts +11 -18
  340. package/examples/saucedemo/src/flows/mem-stub-demo.flow.ts +9 -20
  341. package/examples/saucedemo/src/flows/shop.flow.ts +15 -20
  342. package/examples/saucedemo/src/flows/smoke.flow.ts +12 -27
  343. package/examples/saucedemo/src/flows/stub-on-error.flow.ts +24 -43
  344. package/examples/saucedemo/src/flows/viewer-blocked.flow.ts +26 -34
  345. package/examples/saucedemo/src/states/checkout.mem-stubs.ts +11 -0
  346. package/examples/saucedemo/src/states/checkout.states.ts +21 -11
  347. package/examples/saucedemo/src/stubs/device-showcase.ts +191 -0
  348. package/examples/saucedemo/src/stubs/login.ts +37 -0
  349. package/examples/saucedemo/tests/auto-graph.spec.ts +4 -12
  350. package/examples/saucedemo/tests/chain-flow-episodes.spec.ts +7 -9
  351. package/examples/saucedemo/tests/submit-login-branch.spec.ts +18 -5
  352. package/package.json +12 -7
  353. package/templates/agents/waygraph-planner.agent.md +2 -2
  354. package/templates/quickstart/README.md +4 -7
  355. package/templates/quickstart/config/waygraph.config.ts +17 -0
  356. package/templates/quickstart/docs/CONVENTION.md +5 -6
  357. package/templates/quickstart/docs/HELPERS.md +11 -9
  358. package/templates/quickstart/package.json +14 -17
  359. package/templates/quickstart/src/blocks/SITE-MAP.md +13 -3
  360. package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +1 -5
  361. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -52
  362. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  363. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  364. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  365. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  366. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  367. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +21 -27
  368. package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -9
  369. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  370. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +10 -76
  371. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  372. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  373. package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  374. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  375. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  376. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  377. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -29
  378. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -48
  379. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +13 -77
  380. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  381. package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  382. package/templates/quickstart/src/flows/api-demo.flow.ts +45 -0
  383. package/templates/quickstart/src/flows/cart-bulk.flow.ts +19 -14
  384. package/templates/quickstart/src/flows/cart-continue.flow.ts +10 -8
  385. package/templates/quickstart/src/flows/cart-mem.flow.ts +7 -7
  386. package/templates/quickstart/src/flows/catalog-logout.flow.ts +13 -8
  387. package/templates/quickstart/src/flows/checkout-then-browse-again.flow.ts +26 -48
  388. package/templates/quickstart/src/flows/checkout.flow.ts +70 -63
  389. package/templates/quickstart/src/flows/device-showcase.flow.ts +24 -25
  390. package/templates/quickstart/src/flows/login.flow.ts +11 -18
  391. package/templates/quickstart/src/flows/mem-stub-demo.flow.ts +12 -0
  392. package/templates/quickstart/src/flows/shop.flow.ts +15 -20
  393. package/templates/quickstart/src/flows/smoke.flow.ts +12 -27
  394. package/templates/quickstart/src/flows/stub-on-error.flow.ts +31 -0
  395. package/templates/quickstart/src/flows/viewer-blocked.flow.ts +26 -34
  396. package/templates/quickstart/src/states/checkout.mem-stubs.ts +11 -0
  397. package/templates/quickstart/src/states/checkout.states.ts +21 -11
  398. package/templates/quickstart/src/stubs/device-showcase.ts +191 -0
  399. package/templates/quickstart/src/stubs/login.ts +37 -0
  400. package/templates/quickstart/tests/chain-flow.spec.ts +7 -10
  401. package/templates/scaffold/README.md +2 -1
  402. package/templates/scaffold/STRUCTURE.md +5 -4
  403. package/templates/scaffold/config/waygraph.config.ts +1 -0
  404. package/templates/scaffold/gitignore +1 -0
  405. package/templates/scaffold/src/flows/README.md +2 -2
  406. package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +3 -3
  407. package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +3 -3
  408. package/templates/scaffold/src/map/(app_base)/home/_methods/add-item.effect.block.ts +4 -4
  409. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +3 -3
  410. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +3 -3
  411. package/templates/scaffold/src/map/(app_base)/home/_methods/clear-cart.method.block.ts +5 -4
  412. package/templates/scaffold/src/map/(app_base)/home/_methods/remove-item.effect.block.ts +4 -4
  413. package/templates/scaffold/src/map/(app_base)/home/_nav.block.ts +3 -3
  414. package/templates/scaffold/src/map/(app_base)/home/_page.block.ts +3 -3
  415. package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +4 -4
  416. package/templates/scaffold/src/map/(external)/hoppscotch/_keys.ts +21 -0
  417. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-body.method.block.ts +4 -4
  418. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-header.method.block.ts +4 -4
  419. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-status.method.block.ts +4 -4
  420. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/pick-extension-interceptor.method.block.ts +5 -4
  421. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-body.method.block.ts +6 -5
  422. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-headers.method.block.ts +6 -5
  423. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/send-request.method.block.ts +5 -4
  424. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-bearer-token.method.block.ts +6 -5
  425. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-headers.method.block.ts +6 -5
  426. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-json-body.method.block.ts +6 -5
  427. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-method.method.block.ts +6 -5
  428. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-query-params.method.block.ts +6 -5
  429. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-url.method.block.ts +6 -5
  430. package/templates/scaffold/src/map/(external)/hoppscotch/_nav.block.ts +3 -3
  431. package/templates/scaffold/src/map/(external)/hoppscotch/_page.block.ts +3 -3
  432. package/templates/scaffold/src/map/(external)/hoppscotch/_states.ts +6 -0
  433. package/templates/scaffold/src/map/(external)/hoppscotch/settings/_nav.block.ts +3 -3
  434. package/templates/scaffold/src/map/(external)/mailpit/_keys.ts +13 -0
  435. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +4 -4
  436. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +4 -4
  437. package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +6 -5
  438. package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +6 -5
  439. package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +3 -3
  440. package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +3 -3
  441. package/templates/scaffold/src/map/(external)/mailpit/_states.ts +9 -0
  442. package/templates/scaffold/src/map/README.md +7 -0
  443. package/templates/scaffold/src/states/README.md +4 -1
  444. package/templates/scaffold/src/states/demo.mem-keys.ts +1 -29
  445. package/templates/scaffold/src/states/demo.states.ts +14 -20
  446. package/templates/scaffold/tests/hoppscotch.spec.ts +1 -11
  447. package/templates/scaffold/tests/mail-verify.spec.ts +2 -2
  448. package/templates/skills/waygraph-blind-pilot.skill.md +2 -6
  449. package/templates/skills/waygraph-convention.skill.md +23 -14
  450. package/templates/skills/waygraph-pilot.skill.md +7 -4
  451. package/dist/auto-session/verbose-log.js +0 -16
  452. package/dist/auto-session.d.ts +0 -2
  453. package/dist/auto-session.js +0 -3
  454. package/dist/cli/discover.d.ts +0 -40
  455. package/dist/cli/discover.js +0 -148
  456. package/dist/commands/agent-dive.js +0 -52
  457. package/dist/commands/check.js +0 -192
  458. package/dist/commands/map.js +0 -29
  459. package/dist/commands/run.js +0 -104
  460. package/dist/commands/traverse.js +0 -177
  461. package/dist/core/block.d.ts +0 -109
  462. package/dist/core/blocks/effect.js +0 -23
  463. package/dist/core/config.js +0 -17
  464. package/dist/core/engine.d.ts +0 -198
  465. package/dist/core/flow.d.ts +0 -293
  466. package/dist/core/flow.js +0 -432
  467. package/dist/core.d.ts +0 -14
  468. package/dist/core.js +0 -15
  469. package/dist/highlights/merge.d.ts +0 -8
  470. package/dist/highlights/merge.js +0 -173
  471. package/dist/highlights/stub-ctx.d.ts +0 -10
  472. package/dist/highlights/stub-ctx.js +0 -331
  473. package/dist/highlights/types.d.ts +0 -607
  474. package/dist/highlights.d.ts +0 -9
  475. package/dist/highlights.js +0 -10
  476. package/dist/pilot-overlay.d.ts +0 -5
  477. package/dist/pilot-overlay.js +0 -6
  478. package/dist/runner/banner-log.js +0 -63
  479. package/dist/runner/chain-run.js +0 -102
  480. package/dist/runner/cursor.js +0 -140
  481. package/dist/runner/demo-log.js +0 -316
  482. package/dist/runner/device-stage.d.ts +0 -9
  483. package/dist/runner/device-stage.js +0 -420
  484. package/dist/runner/discovery.js +0 -105
  485. package/dist/runner/index.js +0 -2
  486. package/dist/runner/inpage/banner.d.ts +0 -21
  487. package/dist/runner/inpage/banner.js +0 -156
  488. package/dist/runner/inpage/caption.d.ts +0 -3
  489. package/dist/runner/inpage/caption.js +0 -23
  490. package/dist/runner/inpage/core.d.ts +0 -4
  491. package/dist/runner/inpage/core.js +0 -316
  492. package/dist/runner/inpage/device.d.ts +0 -3
  493. package/dist/runner/inpage/device.js +0 -211
  494. package/dist/runner/inpage/network.d.ts +0 -15
  495. package/dist/runner/inpage/network.js +0 -217
  496. package/dist/runner/inpage/panel-chrome.js +0 -192
  497. package/dist/runner/inpage/stamp.js +0 -46
  498. package/dist/runner/inpage/swipe-zoom.js +0 -220
  499. package/dist/runner/inpage/todos.js +0 -337
  500. package/dist/runner/interaction-patch.js +0 -384
  501. package/dist/runner/main.js +0 -469
  502. package/dist/runner/network-capture.d.ts +0 -9
  503. package/dist/runner/network-capture.js +0 -126
  504. package/dist/runner/overlay-css.d.ts +0 -3
  505. package/dist/runner/overlay-css.js +0 -377
  506. package/dist/runner/overlay-install.js +0 -90
  507. package/dist/runner/overlay-stage.js +0 -110
  508. package/dist/runner/rings.js +0 -514
  509. package/dist/runner/seed-mem.js +0 -110
  510. package/dist/runner/slides.js +0 -278
  511. package/dist/runner/step-mode.js +0 -703
  512. package/dist/runner/step-panels.js +0 -729
  513. package/dist/runner/teardown.js +0 -202
  514. package/dist/runner/todo-dock.js +0 -142
  515. package/dist/session/step-overlay.d.ts +0 -37
  516. package/dist/session/step-overlay.js +0 -244
  517. package/examples/routed-demo/playwright.config.ts +0 -21
  518. package/examples/saucedemo/playwright.config.ts +0 -19
  519. package/examples/saucedemo/scripts/drive-auto-cli.mjs +0 -93
  520. package/examples/saucedemo/scripts/prove-add-to-cart-menu.mjs +0 -126
  521. package/examples/saucedemo/scripts/prove-auto-graph.mjs +0 -92
  522. package/examples/saucedemo/scripts/prove-wrong-login-runtime.mjs +0 -63
  523. package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  524. package/templates/quickstart/playwright.config.ts +0 -14
  525. package/templates/quickstart/scripts/drive-auto-cli.mjs +0 -93
  526. package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  527. /package/dist/{commands → cli/commands}/agent-dive-scaffold.d.ts +0 -0
  528. /package/dist/{commands → cli/commands}/agent-dive.d.ts +0 -0
  529. /package/dist/{commands → cli/commands}/extensions.d.ts +0 -0
  530. /package/dist/{commands → cli/commands}/init.d.ts +0 -0
  531. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  532. /package/dist/{commands → cli/commands}/map.d.ts +0 -0
  533. /package/dist/{commands → cli/commands}/session.d.ts +0 -0
  534. /package/dist/{commands → cli/commands}/test.d.ts +0 -0
  535. /package/dist/{commands → cli/commands}/traverse.d.ts +0 -0
  536. /package/dist/{commands → cli/commands}/try.d.ts +0 -0
  537. /package/dist/{commands → cli/commands}/upgrade.d.ts +0 -0
  538. /package/dist/{highlights → demo/narration}/shorthand.js +0 -0
  539. /package/dist/{pilot-overlay/action-ring.d.ts → demo/overlay/pilot/actions.d.ts} +0 -0
  540. /package/dist/{ui → demo/overlay/ui}/components/ring.d.ts +0 -0
  541. /package/dist/{ui → demo/overlay/ui}/stylesheet.d.ts +0 -0
  542. /package/dist/{ui → demo/overlay/ui}/stylesheet.js +0 -0
  543. /package/dist/{ui → demo/overlay/ui}/tokens.d.ts +0 -0
  544. /package/dist/{ui → demo/overlay/ui}/tokens.js +0 -0
  545. /package/dist/{highlights → demo}/types.js +0 -0
  546. /package/dist/{auto-session → demo}/verbose-log.d.ts +0 -0
  547. /package/dist/{selector.d.ts → engine/trait/selector.d.ts} +0 -0
  548. /package/dist/{selector.js → engine/trait/selector.js} +0 -0
  549. /package/dist/{trait.js → engine/trait/trait.js} +0 -0
  550. /package/dist/{session/block-inject.d.ts → manifest/roots.d.ts} +0 -0
  551. /package/dist/{browser.d.ts → runtime/browser.d.ts} +0 -0
  552. /package/dist/{env-file.d.ts → runtime/env-file.d.ts} +0 -0
  553. /package/dist/{playwright-config.js → runtime/playwright-config.js} +0 -0
  554. /package/dist/{playwright.config.d.ts → runtime/playwright.config.d.ts} +0 -0
  555. /package/dist/{video-dir.d.ts → runtime/video-dir.d.ts} +0 -0
  556. /package/dist/{webserver.d.ts → runtime/webserver.d.ts} +0 -0
@@ -1,63 +0,0 @@
1
- // Banner (title card) authoring + verbose log helpers. Mirrors the todo dock's probe/log path
2
- // so an agent without eyes can read banner state from the demo log.
3
- import { demoLog } from "./demo-log.js";
4
-
5
- /** Authored banner UX from a stub phase -> the { pos, collision, hidden } shape installOverlay takes. */
6
- export function bannerUiFromPhase(phase) {
7
- const ui = {};
8
- if (phase && phase.titlePos) ui.pos = phase.titlePos;
9
- if (phase && phase.bannerUi) {
10
- if (phase.bannerUi.collision !== undefined) ui.collision = !!phase.bannerUi.collision;
11
- if (phase.bannerUi.hidden !== undefined) ui.hidden = !!phase.bannerUi.hidden;
12
- if (phase.bannerUi.captionFadeMs !== undefined) ui.captionFadeMs = Number(phase.bannerUi.captionFadeMs);
13
- }
14
- return ui;
15
- }
16
-
17
- /** Read the live banner: text, position, whether it was moved by ring collision; drains the move log. */
18
- export async function probeBanner(page) {
19
- return page
20
- .evaluate(() => {
21
- const b = __wgById("wg-banner");
22
- const log = window.__wgBannerLog || [];
23
- window.__wgBannerLog = [];
24
- if (!b) return { present: false, log };
25
- const r = b.getBoundingClientRect();
26
- const text = b.querySelector(".wg-banner-text");
27
- return {
28
- present: true,
29
- text: text ? text.textContent : "",
30
- pos: b.dataset.pos || null,
31
- home: b.dataset.home || null,
32
- moved: b.dataset.moved || null,
33
- collision: b.dataset.collision !== "0",
34
- hidden: b.style.display === "none",
35
- authored: b.dataset.authored === "1",
36
- left: Math.round(r.left),
37
- top: Math.round(r.top),
38
- w: Math.round(r.width),
39
- h: Math.round(r.height),
40
- log,
41
- };
42
- })
43
- .catch(() => ({ present: false, log: [] }));
44
- }
45
-
46
- export function logBannerDom(tag, p) {
47
- if (!p) return;
48
- if (!p.present) {
49
- demoLog(" " + tag + " banner-dom absent");
50
- return;
51
- }
52
- demoLog(
53
- " " + tag + " banner-dom " +
54
- JSON.stringify(String(p.text || "").slice(0, 60)) +
55
- "@" + p.pos +
56
- (p.home && p.home !== p.pos ? " (home=" + p.home + ")" : "") +
57
- " " + p.left + "," + p.top + " " + p.w + "x" + p.h +
58
- " collision=" + (p.collision ? "on" : "off") +
59
- (p.hidden ? " HIDDEN" : "") +
60
- (p.authored ? " authored" : ""),
61
- );
62
- for (const line of p.log || []) demoLog(" " + tag + " banner " + line);
63
- }
@@ -1,102 +0,0 @@
1
- // Moved verbatim from the former CHAIN_RUNNER_SCRIPT template string in cli.ts (see src/ARCHITECTURE.md).
2
- // Runs inside the target project's own waygraph copy - keep it dependency-light and self-contained.
3
- import { resetPageState } from "./teardown.js";
4
- import { join } from "node:path";
5
- import { tmpdir } from "node:os";
6
-
7
- /**
8
- * "chain WAYGRAPH_JSON=1" - the unattended counterpart to "chain --step": no
9
- * human gate, no overlay, headless by default. The same execution --step
10
- * already has (session-reset boundaries, per-segment mem-seeding) but
11
- * reporting built for an agent reading stdout afterward, not a human
12
- * watching the browser live - a flat JSON object naming exactly which Block
13
- * failed, what every EARLIER Block resolved to, and a screenshot at the
14
- * exact moment of failure, since there's no live browser for a human to
15
- * glance at instead. (Previously its own "waygraph auto" verb - renamed once
16
- * "auto" came to mean the state-machine discovery tool instead; this is a
17
- * chain reporting mode, not a distinct command.)
18
- */
19
- export async function runJsonReportMode(engine, start, end, context, page, mem, resolved, baseURL) {
20
- const steps = [];
21
- for (let i = 0; i < resolved.length; i++) {
22
- const r = resolved[i];
23
- if (r.seedMem) r.seedMem();
24
- if (r.resetSession && i > 0) {
25
- await resetPageState(context, page, baseURL);
26
- }
27
- const startedAt = Date.now();
28
- const stepFlow = engine.defineFlow([start, r.block, end]);
29
- try {
30
- const outcome = await stepFlow.run(context, mem, { page, closeOnFinish: false });
31
- steps.push({ name: r.block.name, checkpoint: outcome.result, ms: Date.now() - startedAt });
32
- } catch (err) {
33
- if (r.expectedFailureReason) {
34
- steps.push({
35
- name: r.block.name,
36
- expectedFailure: true,
37
- error: err && err.message ? err.message : String(err),
38
- ms: Date.now() - startedAt,
39
- });
40
- return {
41
- ok: true,
42
- expectedFailure: true,
43
- failedAt: r.block.name,
44
- reason: r.expectedFailureReason,
45
- steps,
46
- };
47
- }
48
- let screenshot = null;
49
- try {
50
- screenshot = join(tmpdir(), "waygraph-chain-failure-" + Date.now() + ".png");
51
- await page.screenshot({ path: screenshot, fullPage: true });
52
- } catch {
53
- screenshot = null;
54
- }
55
- return {
56
- ok: false,
57
- failedAt: r.block.name,
58
- stepIndex: i,
59
- totalSteps: resolved.length,
60
- error: err && err.message ? err.message : String(err),
61
- steps,
62
- screenshot,
63
- };
64
- }
65
- }
66
- return { ok: true, result: steps.length > 0 ? steps[steps.length - 1].checkpoint : null, steps };
67
- }
68
-
69
-
70
- export function isExpectedChainFailure(chainFlows, err) {
71
- if (!chainFlows || chainFlows.length === 0) return false;
72
- const last = chainFlows[chainFlows.length - 1];
73
- if (!last?.expectedFailureReason) return false;
74
- const msg = err && err.message ? err.message : String(err);
75
- return msg.includes("viewer-login") || msg.includes("reached-inventory-or-genuinely-blocked");
76
- }
77
-
78
-
79
- export async function runChainedFlows(chainFlow, chainFlows, context, mem, page) {
80
- try {
81
- const outcome = await chainFlow(...chainFlows).run(context, mem, { page, closeOnFinish: false });
82
- return outcome?.result !== undefined ? outcome.result : outcome;
83
- } catch (err) {
84
- if (isExpectedChainFailure(chainFlows, err)) {
85
- return { __expectedFailure: true, message: err && err.message ? err.message : String(err) };
86
- }
87
- throw err;
88
- }
89
- }
90
-
91
-
92
- /** Parses WAYGRAPH_VIDEO_VIEWPORT / --video-viewport: "1920x1080" or "1920,1080". */
93
- export function parseVideoViewport(raw) {
94
- if (!raw || !raw.trim()) return null;
95
- const m = raw.trim().match(/^(\d{3,5})[xX,](\d{3,5})$/);
96
- if (!m) return null;
97
- const width = Number(m[1]);
98
- const height = Number(m[2]);
99
- if (!Number.isFinite(width) || !Number.isFinite(height)) return null;
100
- if (width < 320 || height < 240 || width > 7680 || height > 4320) return null;
101
- return { width, height };
102
- }
@@ -1,140 +0,0 @@
1
- // Moved verbatim from the former CHAIN_RUNNER_SCRIPT template string in cli.ts (see src/ARCHITECTURE.md).
2
- // Runs inside the target project's own waygraph copy - keep it dependency-light and self-contained.
3
-
4
- export async function moveCursorTo(page, box, ms) {
5
- const x = box.x + box.width / 2;
6
- const y = box.y + box.height / 2;
7
- const travel = Math.max(0, Number(ms) || 0);
8
- await page
9
- .evaluate(({ x, y, ms }) => {
10
- if (window.__wgMoveCursorTo) window.__wgMoveCursorTo(x, y, ms);
11
- }, { x, y, ms: travel })
12
- .catch(() => {});
13
- // CSS transition is async - wait the full travel so the cursor is ON the
14
- // target before ring/pulse/real click (NavBlock click nav was skipping
15
- // this and looked like a teleport).
16
- if (travel > 0) {
17
- await new Promise((res) => setTimeout(res, travel));
18
- }
19
- return { x, y };
20
- }
21
-
22
-
23
- export async function clickPulseAt(page, x, y, tone) {
24
- await page
25
- .evaluate(({ x, y, tone }) => {
26
- if (window.__wgClickPulse) window.__wgClickPulse(x, y, tone || "planned");
27
- }, { x, y, tone: tone || "planned" })
28
- .catch(() => {});
29
- }
30
-
31
-
32
- /**
33
- * Touch swipe trail (mobile/tablet). dir: left|right|up|down.
34
- * Returns after the trail animation completes.
35
- * Self-contained when overlay helper is not installed yet (device runs before panel).
36
- */
37
- export async function playSwipeTrail(page, opts) {
38
- const o = opts || {};
39
- const waitMs = await page
40
- .evaluate((payload) => {
41
- if (typeof window.__wgSwipeTrail === "function") {
42
- return window.__wgSwipeTrail(payload);
43
- }
44
- // Fallback: inject a one-shot trail without full overlay install.
45
- const dir =
46
- payload.dir === "right" || payload.dir === "up" || payload.dir === "down"
47
- ? payload.dir
48
- : "left";
49
- const ms = Math.max(280, Math.min(1400, Number(payload.ms) || 720));
50
- const label = payload.label || "swipe";
51
- let layer = __wgById("wg-swipe-layer");
52
- if (layer) layer.remove();
53
- layer = document.createElement("div");
54
- layer.id = "wg-swipe-layer";
55
- layer.setAttribute("data-wg-ui", "1");
56
- layer.style.cssText =
57
- "position:fixed;inset:0;z-index:2147483646;pointer-events:none;overflow:hidden;";
58
- const finger = document.createElement("div");
59
- finger.style.cssText =
60
- "position:absolute;width:28px;height:28px;margin:-14px 0 0 -14px;border-radius:50%;" +
61
- "background:rgba(15,23,42,.92);border:2px solid #fff;box-shadow:0 4px 16px rgba(0,0,0,.4);";
62
- const lab = document.createElement("div");
63
- lab.textContent = label;
64
- lab.style.cssText =
65
- "position:absolute;left:50%;top:18%;transform:translateX(-50%);padding:6px 12px;" +
66
- "border-radius:999px;background:rgba(15,23,42,.88);color:#e0f2fe;" +
67
- "border:1px solid rgba(56,189,248,.55);font:700 12px/1.2 system-ui,sans-serif;";
68
- layer.appendChild(lab);
69
- layer.appendChild(finger);
70
- __wgAdd(layer);
71
- const vw = window.innerWidth || 390;
72
- const vh = window.innerHeight || 844;
73
- const pad = Math.min(vw, vh) * 0.18;
74
- let x0;
75
- let y0;
76
- let x1;
77
- let y1;
78
- if (dir === "left") {
79
- x0 = vw - pad;
80
- x1 = pad;
81
- y0 = y1 = vh * 0.52;
82
- } else if (dir === "right") {
83
- x0 = pad;
84
- x1 = vw - pad;
85
- y0 = y1 = vh * 0.52;
86
- } else if (dir === "up") {
87
- x0 = x1 = vw * 0.5;
88
- y0 = vh - pad;
89
- y1 = pad;
90
- } else {
91
- x0 = x1 = vw * 0.5;
92
- y0 = pad;
93
- y1 = vh - pad;
94
- }
95
- finger.style.left = x0 + "px";
96
- finger.style.top = y0 + "px";
97
- const steps = 12;
98
- const stepMs = Math.floor(ms / steps);
99
- for (let i = 1; i <= steps; i++) {
100
- const t = i / steps;
101
- const e = t * t * (3 - 2 * t);
102
- const x = x0 + (x1 - x0) * e;
103
- const y = y0 + (y1 - y0) * e;
104
- setTimeout(() => {
105
- finger.style.left = x + "px";
106
- finger.style.top = y + "px";
107
- const dot = document.createElement("div");
108
- dot.style.cssText =
109
- "position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;" +
110
- "background:rgba(147,197,253,.55);border:2px solid rgba(255,255,255,.85);left:" +
111
- x +
112
- "px;top:" +
113
- y +
114
- "px;opacity:" +
115
- (0.85 - t * 0.55) +
116
- ";transition:opacity .45s ease,transform .45s ease;";
117
- layer.appendChild(dot);
118
- requestAnimationFrame(() => {
119
- dot.style.opacity = "0";
120
- dot.style.transform = "scale(1.8)";
121
- });
122
- if (i === steps) {
123
- setTimeout(() => {
124
- const el = __wgById("wg-swipe-layer");
125
- if (el) el.remove();
126
- }, 400);
127
- }
128
- }, i * stepMs);
129
- }
130
- return ms + 120;
131
- }, {
132
- dir: o.dir || "left",
133
- label: o.label || "swipe",
134
- hint: o.hint || "",
135
- ms: o.ms || 720,
136
- })
137
- .catch(() => 0);
138
- const n = Number(waitMs) || 0;
139
- if (n > 0) await new Promise((r) => setTimeout(r, n));
140
- }
@@ -1,316 +0,0 @@
1
- // Moved verbatim from the former CHAIN_RUNNER_SCRIPT template string in cli.ts (see src/ARCHITECTURE.md).
2
- // Runs inside the target project's own waygraph copy - keep it dependency-light and self-contained.
3
- import { demoPaceIsFast, demoPaceIsSlow, formatDemoPaceBadge, formatDemoPaceLabel, normalizeDemoPace, normalizeHighlightTone } from "../highlights.js";
4
- import { join } from "node:path";
5
-
6
- export function demoPaceKind(pace) {
7
- const p = normalizeDemoPace(pace);
8
- if (typeof p === "number" && p > 20) return "ms";
9
- if (typeof p === "number") return demoPaceIsSlow(p) ? "num-slow" : demoPaceIsFast(p) ? "fast" : "normal";
10
- if (p === "blitz" || p === "fast" || p === "slow") return p;
11
- return "normal";
12
- }
13
-
14
-
15
- export function paceSpeakFields(pace, baseAutoplayMs) {
16
- const p = normalizeDemoPace(pace);
17
- const base = Number.isFinite(baseAutoplayMs) && baseAutoplayMs > 0 ? baseAutoplayMs : 1800;
18
- return {
19
- pace: p,
20
- paceBadge: formatDemoPaceBadge(p, base),
21
- paceLabel: formatDemoPaceLabel(p, base),
22
- paceKind: demoPaceKind(p),
23
- };
24
- }
25
-
26
-
27
- /** Demo CLI chatter (agents use this to ballpark timing / todo layout). Off for WAYGRAPH_JSON. */
28
- function demoQuiet() {
29
- return process.env.WAYGRAPH_JSON === "1";
30
- }
31
-
32
- function demoColorEnabled() {
33
- // FORCE_COLOR wins (agents/CI often set NO_COLOR=1).
34
- if (process.env.FORCE_COLOR && process.env.FORCE_COLOR !== "0") return true;
35
- if (process.env.NO_COLOR === "1" || process.env.NO_COLOR === "true") return false;
36
- if (process.env.FORCE_COLOR === "0") return false;
37
- return !!(
38
- (process.stderr && process.stderr.isTTY) ||
39
- (process.stdout && process.stdout.isTTY)
40
- );
41
- }
42
-
43
- const ESC = String.fromCharCode(27);
44
-
45
- export const ANSI = {
46
- reset: ESC + "[0m",
47
- bold: ESC + "[1m",
48
- dim: ESC + "[2m",
49
- purple: ESC + "[38;5;141m",
50
- blue: ESC + "[38;5;75m",
51
- yellow: ESC + "[38;5;220m",
52
- red: ESC + "[38;5;203m",
53
- green: ESC + "[38;5;114m",
54
- gray: ESC + "[38;5;246m",
55
- cyan: ESC + "[38;5;87m",
56
- magenta: ESC + "[38;5;213m",
57
- white: ESC + "[37m",
58
- };
59
-
60
- export function ansiPaint(code, text) {
61
- if (!demoColorEnabled() || text == null || text === "") return String(text ?? "");
62
- return code + String(text) + ANSI.reset;
63
- }
64
-
65
- function toneAnsi(tone) {
66
- const t = normalizeHighlightTone(tone);
67
- if (t === "info") return ANSI.blue;
68
- if (t === "warning") return ANSI.yellow;
69
- if (t === "danger") return ANSI.red;
70
- if (t === "success") return ANSI.green;
71
- if (t === "auto") return ANSI.gray;
72
- return ANSI.purple;
73
- }
74
-
75
- function toneName(tone) {
76
- const t = normalizeHighlightTone(tone);
77
- if (t === "info") return "BLUE";
78
- if (t === "warning") return "YELLOW";
79
- if (t === "danger") return "RED";
80
- if (t === "success") return "GREEN";
81
- if (t === "auto") return "GRAY";
82
- return "PURPLE";
83
- }
84
-
85
- /** Optional authored CSS color (#rrggbb) -> truecolor ANSI when TTY. */
86
- function hexAnsi(hex) {
87
- if (!hex || typeof hex !== "string") return null;
88
- const m = String(hex).trim().match(/^#?([0-9a-fA-F]{6})$/);
89
- if (!m) return null;
90
- const n = parseInt(m[1], 16);
91
- const r = (n >> 16) & 255;
92
- const g = (n >> 8) & 255;
93
- const b = n & 255;
94
- return ESC + "[38;2;" + r + ";" + g + ";" + b + "m";
95
- }
96
-
97
- function demoTs() {
98
- const d = new Date();
99
- const p = (n) => String(n).padStart(2, "0");
100
- const ms = String(d.getMilliseconds()).padStart(3, "0");
101
- return (
102
- p(d.getHours()) +
103
- ":" +
104
- p(d.getMinutes()) +
105
- ":" +
106
- p(d.getSeconds()) +
107
- "." +
108
- ms
109
- );
110
- }
111
-
112
- function demoPrefix() {
113
- return ansiPaint(ANSI.dim, "[" + demoTs() + "]") + " waygraph demo: ";
114
- }
115
-
116
- export function demoLog(msg) {
117
- if (demoQuiet()) return;
118
- console.log(demoPrefix() + msg);
119
- }
120
-
121
- /** Fixture catch-all: how it was called + value. */
122
- export function demoFixture(kind, call, value) {
123
- if (demoQuiet()) return;
124
- const head = ansiPaint(ANSI.cyan, "FIXTURE") + " " + ansiPaint(ANSI.bold, kind);
125
- const callPart = call ? " " + ansiPaint(ANSI.dim, call) : "";
126
- let val = "";
127
- if (value !== undefined) {
128
- if (typeof value === "string") val = value;
129
- else {
130
- try {
131
- val = JSON.stringify(value);
132
- } catch {
133
- val = String(value);
134
- }
135
- }
136
- if (val.length > 220) val = val.slice(0, 217) + "...";
137
- val = " = " + ansiPaint(ANSI.white, val);
138
- }
139
- console.log(demoPrefix() + head + callPart + val);
140
- }
141
-
142
- /** Highlight trigger line: PURPLE · Cart items - Product landed in cart */
143
- export function demoHighlight(h, extra) {
144
- if (demoQuiet()) return;
145
- const tone = h && h.tone != null ? h.tone : "planned";
146
- const paint = hexAnsi(h && h.color) || toneAnsi(tone);
147
- const name = toneName(tone);
148
- const label = String((h && h.label) || "").trim() || "(no label)";
149
- const sel = h && h.selector ? String(h.selector) : "";
150
- const bits = [];
151
- if (h && h.focus) bits.push("focus");
152
- if (h && h.zoom != null && Number(h.zoom) > 1) bits.push("zoom=" + h.zoom);
153
- if (h && h.zoomOut === false) bits.push("zoomOut=false");
154
- if (h && h.gesture) bits.push("gesture=" + h.gesture);
155
- if (h && h.weight && h.weight !== "normal") bits.push("weight=" + h.weight);
156
- if (h && h.size && h.size !== "md") bits.push("size=" + h.size);
157
- if (h && h.color) bits.push("color=" + h.color);
158
- if (extra) bits.push(extra);
159
- const line =
160
- ansiPaint(paint, name) +
161
- " · " +
162
- ansiPaint(paint, label) +
163
- (sel ? ansiPaint(ANSI.dim, " sel=" + sel) : "") +
164
- (bits.length ? ansiPaint(ANSI.dim, " [" + bits.join(" ") + "]") : "");
165
- console.log(demoPrefix() + ansiPaint(ANSI.magenta, "HIGHLIGHT") + " " + line);
166
- }
167
-
168
- export function logStubPhaseFixtures(phaseName, phase) {
169
- if (demoQuiet() || !phase) return;
170
- const tag = "stub." + phaseName;
171
- if (phase.title) demoFixture(tag, "ctx.title(...)", JSON.stringify(phase.title));
172
- if (phase.banner) demoFixture(tag, "ctx.banner(...)", JSON.stringify(phase.banner));
173
- if (phase.titlePos) demoFixture(tag, "ctx.titlePos(...)", JSON.stringify(phase.titlePos));
174
- if (phase.bannerUi) demoFixture(tag, "ctx.bannerUi(...)", JSON.stringify(phase.bannerUi));
175
- if (phase.deviceSync && phase.deviceSync !== "keep") {
176
- demoFixture(
177
- tag,
178
- phase.deviceSync === "clear" ? "ctx.clearDevice()" : "ctx.device(...)",
179
- phase.device
180
- ? {
181
- preset: phase.device.preset,
182
- w: phase.device.viewport && phase.device.viewport.width,
183
- h: phase.device.viewport && phase.device.viewport.height,
184
- orient: phase.device.orientation,
185
- touch: !!phase.device.touchMode,
186
- }
187
- : phase.deviceSync,
188
- );
189
- }
190
- if (phase.zoom != null) demoFixture(tag, "ctx.zoom(" + phase.zoom + ")", phase.zoom + "x");
191
- if (phase.zoomOut !== undefined) demoFixture(tag, "ctx.zoomOut(" + !!phase.zoomOut + ")", !!phase.zoomOut);
192
- if (phase.todoSync && phase.todoSync !== "keep") {
193
- demoFixture(
194
- tag,
195
- phase.todoSync === "clear" ? "ctx.hideTodos() / clear" : "ctx.todos(...)",
196
- phase.todoDock
197
- ? {
198
- id: phase.todoDock.id,
199
- pos: phase.todoDock.pos,
200
- title: phase.todoDock.title,
201
- n: (phase.todos && phase.todos.length) || 0,
202
- }
203
- : phase.todoSync,
204
- );
205
- }
206
- const rings = phase.highlights || [];
207
- for (let i = 0; i < rings.length; i++) {
208
- const h = rings[i];
209
- demoFixture(
210
- tag,
211
- "ctx.ring/highlights[" + i + "]",
212
- {
213
- selector: h.selector,
214
- label: h.label || h.caption,
215
- detail: h.detail,
216
- tone: h.tone || "planned",
217
- color: h.color,
218
- focus: !!h.focus,
219
- zoom: h.zoom,
220
- zoomOut: h.zoomOut,
221
- gesture: h.gesture,
222
- duration: h.duration,
223
- },
224
- );
225
- }
226
- if (phase.slides && phase.slides.length) {
227
- demoFixture(tag, "ctx.slides(...)", { n: phase.slides.length });
228
- }
229
- }
230
-
231
- function summarizeTodoDock(dock) {
232
- if (!dock) return "todos=none";
233
- const id = dock.id || "_default";
234
- const pos = dock.pos || "left";
235
- const style = dock.style || "sequential";
236
- const title = dock.title ? String(dock.title) : "";
237
- const items = [];
238
- for (const g of dock.groups || []) {
239
- for (const t of g.items || []) items.push(t);
240
- }
241
- const cur = items.find((t) => t.current);
242
- const done = items.filter((t) => t.done).length;
243
- return (
244
- "todos id=" +
245
- id +
246
- " pos=" +
247
- pos +
248
- " style=" +
249
- style +
250
- (title ? ' title="' + title + '"' : "") +
251
- " n=" +
252
- items.length +
253
- " done=" +
254
- done +
255
- (cur && cur.text ? ' current="' + String(cur.text).slice(0, 48) + '"' : "")
256
- );
257
- }
258
-
259
- /** Full todo dump for agents (every group/item id + flags). */
260
- export function logTodoDockFull(dock, tag) {
261
- const prefix = tag ? tag + " " : "";
262
- if (!dock) {
263
- demoLog(prefix + "todos=none");
264
- return;
265
- }
266
- demoLog(prefix + summarizeTodoDock(dock));
267
- const groups = dock.groups || [];
268
- if (!groups.length) {
269
- demoLog(prefix + " (no groups)");
270
- return;
271
- }
272
- for (let gi = 0; gi < groups.length; gi++) {
273
- const g = groups[gi];
274
- const gLabel =
275
- "group[" +
276
- gi +
277
- "]" +
278
- (g.id ? " id=" + g.id : "") +
279
- (g.title ? ' title="' + String(g.title).slice(0, 40) + '"' : "") +
280
- (g.style ? " style=" + g.style : "");
281
- demoLog(prefix + " " + gLabel);
282
- const items = g.items || [];
283
- for (let ti = 0; ti < items.length; ti++) {
284
- const t = items[ti];
285
- const mark = t.done ? "done" : t.current ? "CURRENT" : "pending";
286
- demoLog(
287
- prefix +
288
- " [" +
289
- ti +
290
- "] " +
291
- mark +
292
- (t.id ? " id=" + t.id : "") +
293
- ' text="' +
294
- String(t.text || "").slice(0, 80) +
295
- '"' +
296
- (t.detail ? ' detail="' + String(t.detail).slice(0, 40) + '"' : ""),
297
- );
298
- }
299
- }
300
- }
301
-
302
- export function summarizeDevice(d) {
303
- if (!d) return "device=none";
304
- const vp = d.viewport || {};
305
- return (
306
- "device=" +
307
- (d.preset || "?") +
308
- " " +
309
- (vp.width || "?") +
310
- "x" +
311
- (vp.height || "?") +
312
- " " +
313
- (d.orientation || "?") +
314
- (d.touchMode ? " touch" : "")
315
- );
316
- }
@@ -1,9 +0,0 @@
1
- import type { Page } from "@playwright/test";
2
- import type { DeviceState } from "../highlights.js";
3
-
4
- export function applyDeviceToPage(
5
- page: Page,
6
- device: DeviceState | undefined,
7
- sync: "set" | "clear" | "keep",
8
- ): Promise<void>;
9
- export function applyVideoDeviceStage(page: Page, shell: unknown, viewport: unknown, opts?: unknown): Promise<void>;