waygraph 0.15.54 → 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 (510) 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 +10 -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 +3 -11
  52. package/dist/{highlights → demo/narration}/demo-pace.js +5 -11
  53. package/dist/{highlights → demo/narration}/device.d.ts +2 -2
  54. package/dist/{highlights → demo/narration}/device.js +1 -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/demo/overlay/cursor.d.ts +12 -0
  69. package/dist/demo/overlay/cursor.js +142 -0
  70. package/dist/demo/overlay/device-stage.d.ts +13 -0
  71. package/dist/demo/overlay/device-stage.js +396 -0
  72. package/dist/demo/overlay/inpage/banner.d.ts +1 -0
  73. package/dist/demo/overlay/inpage/banner.js +160 -0
  74. package/dist/demo/overlay/inpage/caption.d.ts +2 -0
  75. package/dist/demo/overlay/inpage/caption.js +24 -0
  76. package/dist/demo/overlay/inpage/core.d.ts +1 -0
  77. package/dist/demo/overlay/inpage/core.js +345 -0
  78. package/dist/demo/overlay/inpage/device-chip.d.ts +1 -0
  79. package/dist/demo/overlay/inpage/device-chip.js +191 -0
  80. package/dist/demo/overlay/inpage/network.d.ts +9 -0
  81. package/dist/demo/overlay/inpage/network.js +200 -0
  82. package/dist/demo/overlay/inpage/panel-chrome.d.ts +1 -0
  83. package/dist/demo/overlay/inpage/panel-chrome.js +203 -0
  84. package/dist/demo/overlay/inpage/stamp.d.ts +1 -0
  85. package/dist/demo/overlay/inpage/stamp.js +46 -0
  86. package/dist/demo/overlay/inpage/swipe-zoom.d.ts +1 -0
  87. package/dist/demo/overlay/inpage/swipe-zoom.js +220 -0
  88. package/dist/demo/overlay/inpage/todos.d.ts +1 -0
  89. package/dist/demo/overlay/inpage/todos.js +294 -0
  90. package/dist/demo/overlay/locator-theater.d.ts +25 -0
  91. package/dist/demo/overlay/locator-theater.js +76 -0
  92. package/dist/demo/overlay/network-capture.d.ts +22 -0
  93. package/dist/demo/overlay/network-capture.js +127 -0
  94. package/dist/demo/overlay/overlay-css.d.ts +3 -0
  95. package/dist/demo/overlay/overlay-css.js +369 -0
  96. package/dist/demo/overlay/overlay-stage.d.ts +23 -0
  97. package/dist/demo/overlay/overlay-stage.js +106 -0
  98. package/dist/demo/overlay/overlay.d.ts +10 -0
  99. package/dist/demo/overlay/overlay.js +89 -0
  100. package/dist/{pilot-overlay/overlay-fixtures.d.ts → demo/overlay/phase-fixtures.d.ts} +2 -2
  101. package/dist/{pilot-overlay/overlay-fixtures.js → demo/overlay/phase-fixtures.js} +2 -2
  102. package/dist/{pilot-overlay/action-ring.js → demo/overlay/pilot/actions.js} +2 -1
  103. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.d.ts +6 -5
  104. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.js +19 -18
  105. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.d.ts +2 -2
  106. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.js +13 -22
  107. package/dist/demo/overlay/reattach.d.ts +7 -0
  108. package/dist/demo/overlay/reattach.js +23 -0
  109. package/dist/demo/overlay/rings.d.ts +33 -0
  110. package/dist/demo/overlay/rings.js +448 -0
  111. package/dist/{ui → demo/overlay/ui}/components/ring.js +2 -2
  112. package/dist/{ui → demo/overlay/ui}/overlay.css +4 -4
  113. package/dist/{ui → demo/overlay/ui}/shadow.d.ts +1 -1
  114. package/dist/{ui → demo/overlay/ui}/shadow.js +39 -2
  115. package/dist/demo/stepper/after.d.ts +3 -0
  116. package/dist/demo/stepper/after.js +113 -0
  117. package/dist/demo/stepper/banner-log.d.ts +37 -0
  118. package/dist/demo/stepper/banner-log.js +63 -0
  119. package/dist/demo/stepper/before.d.ts +4 -0
  120. package/dist/demo/stepper/before.js +110 -0
  121. package/dist/demo/stepper/demo-log.d.ts +31 -0
  122. package/dist/demo/stepper/demo-log.js +309 -0
  123. package/dist/demo/stepper/gate.d.ts +11 -0
  124. package/dist/demo/stepper/gate.js +78 -0
  125. package/dist/demo/stepper/interaction-patch.d.ts +3 -0
  126. package/dist/demo/stepper/interaction-patch.js +323 -0
  127. package/dist/demo/stepper/pacing.d.ts +21 -0
  128. package/dist/demo/stepper/pacing.js +23 -0
  129. package/dist/demo/stepper/slides.d.ts +11 -0
  130. package/dist/demo/stepper/slides.js +233 -0
  131. package/dist/demo/stepper/step-panels.d.ts +21 -0
  132. package/dist/demo/stepper/step-panels.js +589 -0
  133. package/dist/demo/stepper/stepper.d.ts +24 -0
  134. package/dist/demo/stepper/stepper.js +122 -0
  135. package/dist/demo/stepper/teardown.d.ts +48 -0
  136. package/dist/demo/stepper/teardown.js +179 -0
  137. package/dist/demo/stepper/todo-advance.d.ts +14 -0
  138. package/dist/demo/stepper/todo-advance.js +110 -0
  139. package/dist/demo/stepper/view.d.ts +68 -0
  140. package/dist/demo/stepper/view.js +31 -0
  141. package/dist/demo/types.d.ts +17 -0
  142. package/dist/demo/verbose-log.js +15 -0
  143. package/dist/{types.d.ts → engine/block/block.d.ts} +106 -91
  144. package/dist/{core → engine/block}/block.js +10 -53
  145. package/dist/{core → engine/block}/compose.d.ts +9 -7
  146. package/dist/{core → engine/block}/compose.js +1 -1
  147. package/dist/{core/blocks → engine/block/kinds}/api.d.ts +16 -12
  148. package/dist/{core/blocks → engine/block/kinds}/api.js +26 -18
  149. package/dist/{core/blocks → engine/block/kinds}/effect.d.ts +13 -18
  150. package/dist/engine/block/kinds/effect.js +17 -0
  151. package/dist/{core/blocks → engine/block/kinds}/method.d.ts +17 -29
  152. package/dist/{core/blocks → engine/block/kinds}/method.js +6 -21
  153. package/dist/{core/blocks → engine/block/kinds}/nav.d.ts +21 -31
  154. package/dist/{core/blocks → engine/block/kinds}/nav.js +6 -12
  155. package/dist/{core/blocks → engine/block/kinds}/page.d.ts +14 -20
  156. package/dist/{core/blocks → engine/block/kinds}/page.js +5 -7
  157. package/dist/engine/checkpoint/checkpoint.d.ts +22 -0
  158. package/dist/engine/checkpoint/checkpoint.js +8 -0
  159. package/dist/engine/checkpoint/route.d.ts +28 -0
  160. package/dist/engine/checkpoint/route.js +28 -0
  161. package/dist/{core → engine}/config.d.ts +7 -2
  162. package/dist/engine/config.js +6 -0
  163. package/dist/engine/engine.d.ts +45 -0
  164. package/dist/{core → engine}/engine.js +6 -10
  165. package/dist/engine/env.d.ts +59 -0
  166. package/dist/engine/env.js +83 -0
  167. package/dist/{errors.d.ts → engine/errors.d.ts} +22 -22
  168. package/dist/{errors.js → engine/errors.js} +22 -22
  169. package/dist/{core → engine/flow}/branch-regression.d.ts +7 -7
  170. package/dist/{core → engine/flow}/branch-regression.js +4 -3
  171. package/dist/engine/flow/flow.d.ts +162 -0
  172. package/dist/engine/flow/flow.js +244 -0
  173. package/dist/{core → engine/flow}/map-builder.d.ts +34 -39
  174. package/dist/{core → engine/flow}/map-builder.js +45 -47
  175. package/dist/{core → engine}/locate.d.ts +1 -1
  176. package/dist/{core → engine}/locate.js +1 -2
  177. package/dist/{mem-stub.d.ts → engine/mem/mem-stub.d.ts} +9 -8
  178. package/dist/{mem-stub.js → engine/mem/mem-stub.js} +2 -2
  179. package/dist/{mem-page.d.ts → engine/mem/mem.d.ts} +1 -1
  180. package/dist/{mem-page.js → engine/mem/mem.js} +2 -1
  181. package/dist/engine/page-gone.d.ts +5 -0
  182. package/dist/engine/page-gone.js +20 -0
  183. package/dist/engine/run/connect.d.ts +28 -0
  184. package/dist/{types.js → engine/run/connect.js} +11 -10
  185. package/dist/engine/run/events.d.ts +67 -0
  186. package/dist/engine/run/events.js +90 -0
  187. package/dist/engine/run/hooks.d.ts +16 -0
  188. package/dist/engine/run/hooks.js +8 -0
  189. package/dist/engine/run/launch.d.ts +13 -0
  190. package/dist/engine/run/launch.js +27 -0
  191. package/dist/{core/run-graph.d.ts → engine/run/run.d.ts} +8 -12
  192. package/dist/{core/run-graph.js → engine/run/run.js} +22 -12
  193. package/dist/engine/stub/pace.d.ts +12 -0
  194. package/dist/engine/stub/pace.js +2 -0
  195. package/dist/engine/stub/ring.d.ts +130 -0
  196. package/dist/engine/stub/ring.js +41 -0
  197. package/dist/engine/stub/stub.d.ts +268 -0
  198. package/dist/engine/stub/stub.js +1 -0
  199. package/dist/engine/stub/todos.d.ts +104 -0
  200. package/dist/engine/stub/todos.js +2 -0
  201. package/dist/engine/stub/viewport.d.ts +26 -0
  202. package/dist/engine/stub/viewport.js +2 -0
  203. package/dist/{trait.d.ts → engine/trait/trait.d.ts} +1 -1
  204. package/dist/index.d.ts +84 -36
  205. package/dist/index.js +44 -19
  206. package/dist/{session/auto-explore-run.d.ts → live/auto/auto.d.ts} +10 -16
  207. package/dist/{session/auto-explore-run.js → live/auto/auto.js} +164 -254
  208. package/dist/{session/auto-explore.d.ts → live/auto/explore.d.ts} +4 -14
  209. package/dist/{session/auto-explore.js → live/auto/explore.js} +21 -127
  210. package/dist/{auto-session/session.d.ts → live/auto-session/auto-session.d.ts} +1 -1
  211. package/dist/{auto-session/session.js → live/auto-session/auto-session.js} +27 -24
  212. package/dist/{auto-session → live/auto-session}/helpers.d.ts +6 -5
  213. package/dist/{auto-session → live/auto-session}/helpers.js +1 -1
  214. package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +7 -5
  215. package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +31 -16
  216. package/dist/{session/browser.d.ts → live/auto-session/start.d.ts} +1 -2
  217. package/dist/{session/browser.js → live/auto-session/start.js} +2 -3
  218. package/dist/{pilot-overlay → live/pilot}/panel.d.ts +1 -1
  219. package/dist/{pilot-overlay → live/pilot}/panel.js +23 -31
  220. package/dist/{session → live/pilot}/pilot.d.ts +3 -3
  221. package/dist/{session → live/pilot}/pilot.js +4 -4
  222. package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +1 -1
  223. package/dist/{traverse/run.js → live/traverse/traverse.js} +26 -43
  224. package/dist/manifest/manifest.d.ts +52 -0
  225. package/dist/manifest/manifest.js +93 -0
  226. package/dist/manifest/map-imports.d.ts +7 -0
  227. package/dist/manifest/map-imports.js +22 -0
  228. package/dist/manifest/maps.d.ts +33 -0
  229. package/dist/manifest/maps.js +62 -0
  230. package/dist/manifest/pack.d.ts +21 -0
  231. package/dist/manifest/pack.js +109 -0
  232. package/dist/manifest/project.d.ts +60 -0
  233. package/dist/manifest/project.js +101 -0
  234. package/dist/{session/block-inject.js → manifest/roots.js} +1 -18
  235. package/dist/manifest/scan.d.ts +19 -0
  236. package/dist/manifest/scan.js +57 -0
  237. package/dist/manifest/source.d.ts +23 -0
  238. package/dist/manifest/source.js +86 -0
  239. package/dist/runner/mode.d.ts +71 -0
  240. package/dist/runner/mode.js +1 -0
  241. package/dist/runner/modes/branches.d.ts +5 -0
  242. package/dist/runner/modes/branches.js +37 -0
  243. package/dist/runner/modes/demo.d.ts +3 -0
  244. package/dist/runner/modes/demo.js +13 -0
  245. package/dist/runner/modes/report.d.ts +2 -0
  246. package/dist/runner/modes/report.js +54 -0
  247. package/dist/runner/modes/run.d.ts +2 -0
  248. package/dist/runner/modes/run.js +3 -0
  249. package/dist/runner/options.d.ts +31 -0
  250. package/dist/runner/options.js +42 -0
  251. package/dist/runner/plan/find.d.ts +18 -0
  252. package/dist/runner/plan/find.js +65 -0
  253. package/dist/runner/plan/plan.d.ts +11 -0
  254. package/dist/runner/plan/plan.js +97 -0
  255. package/dist/runner/plan/seed-mem.d.ts +12 -0
  256. package/dist/runner/plan/seed-mem.js +98 -0
  257. package/dist/runner/plan/spec.d.ts +5 -0
  258. package/dist/runner/plan/spec.js +17 -0
  259. package/dist/runner/play-steps.d.ts +2 -0
  260. package/dist/runner/play-steps.js +59 -0
  261. package/dist/runner/runner.d.ts +4 -0
  262. package/dist/runner/runner.js +64 -0
  263. package/dist/runner/session.d.ts +9 -0
  264. package/dist/runner/session.js +87 -0
  265. package/dist/{browser.js → runtime/browser.js} +4 -2
  266. package/dist/{env-file.js → runtime/env-file.js} +7 -12
  267. package/dist/{extensions.d.ts → runtime/extensions.d.ts} +1 -5
  268. package/dist/{extensions.js → runtime/extensions.js} +2 -1
  269. package/dist/runtime/full-launch.d.ts +1 -0
  270. package/dist/runtime/full-launch.js +34 -0
  271. package/dist/runtime/global-flag.d.ts +5 -0
  272. package/dist/runtime/global-flag.js +18 -0
  273. package/dist/{playwright-config.d.ts → runtime/playwright-config.d.ts} +1 -1
  274. package/dist/{playwright.config.js → runtime/playwright.config.js} +3 -2
  275. package/dist/runtime/run-log.d.ts +2 -0
  276. package/dist/runtime/run-log.js +17 -0
  277. package/dist/{video-dir.js → runtime/video-dir.js} +3 -2
  278. package/dist/{config.d.ts → runtime/waygraph-config.d.ts} +6 -9
  279. package/dist/{config.js → runtime/waygraph-config.js} +21 -51
  280. package/dist/{webserver.js → runtime/webserver.js} +5 -30
  281. package/examples/routed-demo/config/waygraph.config.ts +20 -0
  282. package/examples/routed-demo/package.json +1 -4
  283. package/examples/routed-demo/scripts/fixture-server.mjs +1 -1
  284. package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +2 -4
  285. package/examples/routed-demo/src/flows/routed-demo.flow.ts +1 -2
  286. package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +5 -4
  287. package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +3 -3
  288. package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +3 -3
  289. package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +3 -3
  290. package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +3 -3
  291. package/examples/routed-demo/src/states/routed-demo.states.ts +5 -3
  292. package/examples/routed-demo/tests/routed-demo.spec.ts +4 -4
  293. package/examples/routed-demo/tsconfig.json +1 -1
  294. package/examples/saucedemo/docs/CONVENTION.md +4 -5
  295. package/examples/saucedemo/docs/HELPERS.md +11 -11
  296. package/examples/saucedemo/src/blocks/SITE-MAP.md +0 -1
  297. package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +1 -5
  298. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
  299. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  300. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  301. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  302. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  303. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  304. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
  305. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
  306. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  307. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
  308. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  309. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  310. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  311. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  312. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  313. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  314. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
  315. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
  316. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
  317. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  318. package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  319. package/examples/saucedemo/src/flows/api-demo.flow.ts +12 -10
  320. package/examples/saucedemo/src/states/checkout.states.ts +21 -11
  321. package/examples/saucedemo/src/stubs/device-showcase.ts +8 -10
  322. package/examples/saucedemo/tests/auto-graph.spec.ts +4 -12
  323. package/package.json +10 -6
  324. package/templates/agents/waygraph-planner.agent.md +2 -2
  325. package/templates/quickstart/docs/CONVENTION.md +4 -4
  326. package/templates/quickstart/docs/HELPERS.md +10 -8
  327. package/templates/quickstart/package.json +0 -3
  328. package/templates/quickstart/src/blocks/SITE-MAP.md +0 -1
  329. package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +1 -5
  330. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
  331. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  332. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  333. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  334. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  335. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  336. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
  337. package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
  338. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  339. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
  340. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  341. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  342. package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  343. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  344. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  345. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  346. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
  347. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
  348. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
  349. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  350. package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  351. package/templates/quickstart/src/flows/api-demo.flow.ts +12 -10
  352. package/templates/quickstart/src/states/checkout.states.ts +21 -11
  353. package/templates/quickstart/src/stubs/device-showcase.ts +8 -10
  354. package/templates/scaffold/README.md +2 -1
  355. package/templates/scaffold/STRUCTURE.md +5 -4
  356. package/templates/scaffold/config/waygraph.config.ts +1 -0
  357. package/templates/scaffold/gitignore +1 -0
  358. package/templates/scaffold/src/flows/README.md +2 -2
  359. package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +3 -3
  360. package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +3 -3
  361. package/templates/scaffold/src/map/(app_base)/home/_methods/add-item.effect.block.ts +4 -4
  362. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +3 -3
  363. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +3 -3
  364. package/templates/scaffold/src/map/(app_base)/home/_methods/clear-cart.method.block.ts +5 -4
  365. package/templates/scaffold/src/map/(app_base)/home/_methods/remove-item.effect.block.ts +4 -4
  366. package/templates/scaffold/src/map/(app_base)/home/_nav.block.ts +3 -3
  367. package/templates/scaffold/src/map/(app_base)/home/_page.block.ts +3 -3
  368. package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +4 -4
  369. package/templates/scaffold/src/map/(external)/hoppscotch/_keys.ts +21 -0
  370. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-body.method.block.ts +4 -4
  371. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-header.method.block.ts +4 -4
  372. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-status.method.block.ts +4 -4
  373. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/pick-extension-interceptor.method.block.ts +5 -4
  374. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-body.method.block.ts +6 -5
  375. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-headers.method.block.ts +6 -5
  376. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/send-request.method.block.ts +5 -4
  377. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-bearer-token.method.block.ts +6 -5
  378. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-headers.method.block.ts +6 -5
  379. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-json-body.method.block.ts +6 -5
  380. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-method.method.block.ts +6 -5
  381. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-query-params.method.block.ts +6 -5
  382. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-url.method.block.ts +6 -5
  383. package/templates/scaffold/src/map/(external)/hoppscotch/_nav.block.ts +3 -3
  384. package/templates/scaffold/src/map/(external)/hoppscotch/_page.block.ts +3 -3
  385. package/templates/scaffold/src/map/(external)/hoppscotch/_states.ts +6 -0
  386. package/templates/scaffold/src/map/(external)/hoppscotch/settings/_nav.block.ts +3 -3
  387. package/templates/scaffold/src/map/(external)/mailpit/_keys.ts +13 -0
  388. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +4 -4
  389. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +4 -4
  390. package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +6 -5
  391. package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +6 -5
  392. package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +3 -3
  393. package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +3 -3
  394. package/templates/scaffold/src/map/(external)/mailpit/_states.ts +9 -0
  395. package/templates/scaffold/src/map/README.md +7 -0
  396. package/templates/scaffold/src/states/README.md +4 -1
  397. package/templates/scaffold/src/states/demo.mem-keys.ts +1 -29
  398. package/templates/scaffold/src/states/demo.states.ts +14 -20
  399. package/templates/scaffold/tests/hoppscotch.spec.ts +1 -11
  400. package/templates/scaffold/tests/mail-verify.spec.ts +2 -2
  401. package/templates/skills/waygraph-blind-pilot.skill.md +2 -6
  402. package/templates/skills/waygraph-convention.skill.md +23 -14
  403. package/templates/skills/waygraph-pilot.skill.md +7 -4
  404. package/dist/auto-session/verbose-log.js +0 -16
  405. package/dist/auto-session.d.ts +0 -2
  406. package/dist/auto-session.js +0 -3
  407. package/dist/cli/discover.d.ts +0 -40
  408. package/dist/cli/discover.js +0 -148
  409. package/dist/commands/agent-dive.js +0 -52
  410. package/dist/commands/check.js +0 -192
  411. package/dist/commands/map.js +0 -29
  412. package/dist/commands/run.js +0 -104
  413. package/dist/commands/traverse.js +0 -177
  414. package/dist/core/block.d.ts +0 -109
  415. package/dist/core/blocks/effect.js +0 -23
  416. package/dist/core/config.js +0 -17
  417. package/dist/core/engine.d.ts +0 -198
  418. package/dist/core/flow.d.ts +0 -294
  419. package/dist/core/flow.js +0 -432
  420. package/dist/core.d.ts +0 -14
  421. package/dist/core.js +0 -15
  422. package/dist/highlights/merge.d.ts +0 -8
  423. package/dist/highlights/merge.js +0 -173
  424. package/dist/highlights/stub-ctx.d.ts +0 -10
  425. package/dist/highlights/stub-ctx.js +0 -331
  426. package/dist/highlights/types.d.ts +0 -613
  427. package/dist/highlights.d.ts +0 -9
  428. package/dist/highlights.js +0 -10
  429. package/dist/pilot-overlay.d.ts +0 -5
  430. package/dist/pilot-overlay.js +0 -6
  431. package/dist/runner/banner-log.js +0 -63
  432. package/dist/runner/chain-run.js +0 -102
  433. package/dist/runner/cursor.js +0 -140
  434. package/dist/runner/demo-log.js +0 -316
  435. package/dist/runner/device-stage.d.ts +0 -9
  436. package/dist/runner/device-stage.js +0 -420
  437. package/dist/runner/discovery.js +0 -105
  438. package/dist/runner/index.js +0 -2
  439. package/dist/runner/inpage/banner.d.ts +0 -21
  440. package/dist/runner/inpage/banner.js +0 -156
  441. package/dist/runner/inpage/caption.d.ts +0 -3
  442. package/dist/runner/inpage/caption.js +0 -23
  443. package/dist/runner/inpage/core.d.ts +0 -4
  444. package/dist/runner/inpage/core.js +0 -316
  445. package/dist/runner/inpage/device.d.ts +0 -3
  446. package/dist/runner/inpage/device.js +0 -211
  447. package/dist/runner/inpage/network.d.ts +0 -15
  448. package/dist/runner/inpage/network.js +0 -217
  449. package/dist/runner/inpage/panel-chrome.js +0 -192
  450. package/dist/runner/inpage/stamp.js +0 -46
  451. package/dist/runner/inpage/swipe-zoom.js +0 -220
  452. package/dist/runner/inpage/todos.js +0 -337
  453. package/dist/runner/interaction-patch.js +0 -384
  454. package/dist/runner/main.js +0 -469
  455. package/dist/runner/network-capture.d.ts +0 -9
  456. package/dist/runner/network-capture.js +0 -126
  457. package/dist/runner/overlay-css.d.ts +0 -3
  458. package/dist/runner/overlay-css.js +0 -377
  459. package/dist/runner/overlay-install.js +0 -90
  460. package/dist/runner/overlay-stage.js +0 -110
  461. package/dist/runner/rings.js +0 -514
  462. package/dist/runner/seed-mem.js +0 -110
  463. package/dist/runner/slides.js +0 -278
  464. package/dist/runner/step-mode.js +0 -703
  465. package/dist/runner/step-panels.js +0 -729
  466. package/dist/runner/teardown.js +0 -202
  467. package/dist/runner/todo-dock.js +0 -142
  468. package/dist/session/step-overlay.d.ts +0 -37
  469. package/dist/session/step-overlay.js +0 -244
  470. package/examples/routed-demo/playwright.config.ts +0 -21
  471. package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  472. package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  473. /package/dist/{commands → cli/commands}/agent-dive-scaffold.d.ts +0 -0
  474. /package/dist/{commands → cli/commands}/agent-dive.d.ts +0 -0
  475. /package/dist/{commands → cli/commands}/extensions.d.ts +0 -0
  476. /package/dist/{commands → cli/commands}/init.d.ts +0 -0
  477. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  478. /package/dist/{commands → cli/commands}/map.d.ts +0 -0
  479. /package/dist/{commands → cli/commands}/session.d.ts +0 -0
  480. /package/dist/{commands → cli/commands}/test.d.ts +0 -0
  481. /package/dist/{commands → cli/commands}/traverse.d.ts +0 -0
  482. /package/dist/{commands → cli/commands}/try.d.ts +0 -0
  483. /package/dist/{commands → cli/commands}/upgrade.d.ts +0 -0
  484. /package/dist/{highlights → demo/narration}/shorthand.js +0 -0
  485. /package/dist/{session/overlay-beacon.d.ts → demo/overlay/beacon.d.ts} +0 -0
  486. /package/dist/{session/overlay-beacon.js → demo/overlay/beacon.js} +0 -0
  487. /package/dist/{pilot-overlay/action-ring.d.ts → demo/overlay/pilot/actions.d.ts} +0 -0
  488. /package/dist/{ui → demo/overlay/ui}/components/ring.d.ts +0 -0
  489. /package/dist/{ui → demo/overlay/ui}/stylesheet.d.ts +0 -0
  490. /package/dist/{ui → demo/overlay/ui}/stylesheet.js +0 -0
  491. /package/dist/{ui → demo/overlay/ui}/tokens.d.ts +0 -0
  492. /package/dist/{ui → demo/overlay/ui}/tokens.js +0 -0
  493. /package/dist/{highlights → demo}/types.js +0 -0
  494. /package/dist/{auto-session → demo}/verbose-log.d.ts +0 -0
  495. /package/dist/{selector.d.ts → engine/trait/selector.d.ts} +0 -0
  496. /package/dist/{selector.js → engine/trait/selector.js} +0 -0
  497. /package/dist/{trait.js → engine/trait/trait.js} +0 -0
  498. /package/dist/{traverse → live/traverse}/coverage.d.ts +0 -0
  499. /package/dist/{traverse → live/traverse}/coverage.js +0 -0
  500. /package/dist/{traverse → live/traverse}/lease.d.ts +0 -0
  501. /package/dist/{traverse → live/traverse}/lease.js +0 -0
  502. /package/dist/{session/block-inject.d.ts → manifest/roots.d.ts} +0 -0
  503. /package/dist/{blocks-select.d.ts → manifest/select.d.ts} +0 -0
  504. /package/dist/{blocks-select.js → manifest/select.js} +0 -0
  505. /package/dist/{browser.d.ts → runtime/browser.d.ts} +0 -0
  506. /package/dist/{env-file.d.ts → runtime/env-file.d.ts} +0 -0
  507. /package/dist/{playwright-config.js → runtime/playwright-config.js} +0 -0
  508. /package/dist/{playwright.config.d.ts → runtime/playwright.config.d.ts} +0 -0
  509. /package/dist/{video-dir.d.ts → runtime/video-dir.d.ts} +0 -0
  510. /package/dist/{webserver.d.ts → runtime/webserver.d.ts} +0 -0
@@ -1,192 +0,0 @@
1
- // Split out of the former 8,700-line cli.ts (see src/ARCHITECTURE.md). Behavior unchanged.
2
- import { INLINE_SELECTOR_CALL, NAV_METHOD_CALLS, discoverBlocks, discoverFlows, importFlowFile, importModule, isBlockLike, isFlowLike, isNavBlockMarked, walkDir } from "../cli/discover.js";
3
- import { basename, relative, resolve } from "node:path";
4
- import { discoverGraph, findBlockPath, findOrphanBlocks } from "../analysis/graph.js";
5
- import { parseRunFlags, resolveBaseUrl } from "../cli/flags.js";
6
- import { runChain } from "../cli/run-chain.js";
7
- import { collectPracticeWarnings, practiceKindLabel } from "../analysis/practices-check.js";
8
- import { readFileSync } from "node:fs";
9
- async function validateFlows(projectDir) {
10
- const files = discoverFlows(projectDir);
11
- const results = [];
12
- for (const file of files) {
13
- try {
14
- const mod = await importFlowFile(file);
15
- for (const [exportName, exported] of Object.entries(mod)) {
16
- if (isFlowLike(exported)) {
17
- results.push({ file, name: exportName, valid: true });
18
- }
19
- }
20
- }
21
- catch (err) {
22
- const msg = err instanceof Error ? err.message : String(err);
23
- results.push({ file, name: basename(file, ".ts"), valid: false, error: msg });
24
- }
25
- }
26
- return results;
27
- }
28
- /**
29
- * Walks every `*.block.ts` file under `projectDir`, imports each to find its
30
- * exported Blocks, and for any Block NOT built via `defineNavBlock`, scans
31
- * that file's own source text for a navigation call. Warning only - never
32
- * throws, never changes the caller's exit code on its own account (a Block
33
- * file that fails to import for unrelated reasons is silently skipped here;
34
- * `validate` is the command that reports import failures).
35
- */
36
- function printOrphanReport(projectDir, orphans) {
37
- if (orphans.length === 0) {
38
- console.log(`waygraph check: no orphan Blocks (every *.block.ts export is wired into a flow)`);
39
- return;
40
- }
41
- for (const o of orphans) {
42
- console.warn(`waygraph check: orphan Block ${o.file} (${o.exportName} / "${o.block}") is not referenced in any defineFlow([...]) - wire it into a .flow.ts before chain auto shorthand`);
43
- }
44
- console.log(`waygraph check: ${orphans.length} orphan Block${orphans.length === 1 ? "" : "s"}`);
45
- }
46
- async function requireNoOrphans(projectDir, forCommand) {
47
- const orphans = await findOrphanBlocks(projectDir);
48
- if (orphans.length === 0)
49
- return true;
50
- console.error(`waygraph ${forCommand}: ${orphans.length} orphan Block(s) - wire every Block into a .flow.ts before auto shorthand. Run: waygraph check ${projectDir === process.cwd() ? "." : JSON.stringify(projectDir)}`);
51
- for (const o of orphans) {
52
- console.error(` - ${o.file} (${o.exportName} / "${o.block}")`);
53
- }
54
- process.exitCode = 1;
55
- return false;
56
- }
57
- export async function runChainAuto(projectDir, fromTag, toTag) {
58
- if (!(await requireNoOrphans(projectDir, "chain auto")))
59
- return;
60
- const graph = await discoverGraph(projectDir);
61
- const path = findBlockPath(graph, fromTag, toTag);
62
- if (!path) {
63
- console.error(`waygraph chain auto: no Block path from "${fromTag}" to "${toTag}" in the discovered graph`);
64
- process.exitCode = 1;
65
- return;
66
- }
67
- const spec = path.join(" then ");
68
- console.error(`waygraph chain auto: ${fromTag} -> ${toTag} via ${spec}`);
69
- if (!process.env.WAYGRAPH_BASE_URL) {
70
- const resolved = await resolveBaseUrl(projectDir);
71
- if (resolved)
72
- process.env.WAYGRAPH_BASE_URL = resolved;
73
- }
74
- await runChain(projectDir, spec);
75
- }
76
- function printPracticeReport(projectDir, practiceWarnings) {
77
- if (practiceWarnings.length === 0) {
78
- console.log(`waygraph check: no bad-practice patterns under ${projectDir}`);
79
- return;
80
- }
81
- for (const w of practiceWarnings) {
82
- console.warn(`waygraph check: ${w.file} (${practiceKindLabel(w.kind)}) — ${w.detail}`);
83
- }
84
- console.log(`waygraph check: ${practiceWarnings.length} bad-practice warning${practiceWarnings.length === 1 ? "" : "s"}`);
85
- }
86
- async function checkCommand(projectDir, opts) {
87
- const files = discoverBlocks(projectDir);
88
- const navWarnings = [];
89
- const selWarnings = [];
90
- for (const file of files) {
91
- let mod;
92
- try {
93
- mod = await importModule(file);
94
- }
95
- catch {
96
- continue;
97
- }
98
- let src;
99
- for (const [exportName, exported] of Object.entries(mod)) {
100
- if (!isBlockLike(exported))
101
- continue;
102
- src ??= readFileSync(file, "utf-8");
103
- // Nav-escape: NavBlocks are exempt (their generated act() is the one
104
- // legitimate goto/click call site).
105
- if (!isNavBlockMarked(exported) &&
106
- NAV_METHOD_CALLS.some((needle) => src.includes(needle))) {
107
- navWarnings.push({ file, blockName: exported.name, exportName });
108
- }
109
- // Inline selector: applies to every Block kind, including NavBlocks -
110
- // a Nav's own `verify` array is just as likely to inline a selector.
111
- if (INLINE_SELECTOR_CALL.test(src)) {
112
- selWarnings.push({ file, blockName: exported.name, exportName });
113
- }
114
- }
115
- }
116
- const practiceWarnings = collectPracticeWarnings(projectDir, walkDir, {
117
- disabled: opts?.noPractices === true,
118
- });
119
- return { navWarnings, selWarnings, practiceWarnings };
120
- }
121
- async function runTypecheckCommand(projectDir, noPractices) {
122
- const { spawnSync } = await import("node:child_process");
123
- const tsc = spawnSync("npx", ["tsc", "--noEmit"], {
124
- cwd: projectDir,
125
- stdio: "inherit",
126
- shell: false,
127
- });
128
- if (tsc.status !== 0) {
129
- process.exit(tsc.status === null ? 1 : tsc.status);
130
- }
131
- if (noPractices)
132
- return;
133
- const practiceWarnings = collectPracticeWarnings(projectDir, walkDir);
134
- printPracticeReport(projectDir, practiceWarnings);
135
- }
136
- export async function validateCase(args) {
137
- const proj = resolve(args[1] ?? process.cwd());
138
- const results = await validateFlows(proj);
139
- let failed = 0;
140
- for (const r of results) {
141
- const rel = relative(proj, r.file);
142
- if (r.valid) {
143
- console.log(`OK ${rel} ${r.name}`);
144
- }
145
- else {
146
- failed++;
147
- console.log(`FAIL ${rel} ${r.name} -- ${r.error}`);
148
- }
149
- }
150
- if (failed > 0)
151
- process.exitCode = 1;
152
- return;
153
- }
154
- export async function typecheckCase(args) {
155
- const flags = parseRunFlags(args.slice(1));
156
- const proj = resolve(flags.positionals[0] ?? process.cwd());
157
- await runTypecheckCommand(proj, flags.noPractices === true);
158
- return;
159
- }
160
- export async function checkCase(args) {
161
- const flags = parseRunFlags(args.slice(1));
162
- const proj = resolve(flags.positionals[0] ?? process.cwd());
163
- const { navWarnings, selWarnings, practiceWarnings } = await checkCommand(proj, flags.noPractices ? { noPractices: true } : undefined);
164
- if (navWarnings.length === 0) {
165
- console.log(`waygraph check: no navigation found outside NavBlocks under ${proj}`);
166
- }
167
- else {
168
- for (const w of navWarnings) {
169
- const rel = relative(proj, w.file);
170
- console.warn(`waygraph check: ${rel} (${w.blockName}) calls page.goto/reload/goBack/goForward outside a NavBlock - consider defineNavBlock instead`);
171
- }
172
- console.log(`waygraph check: ${navWarnings.length} nav warning${navWarnings.length === 1 ? "" : "s"}`);
173
- }
174
- if (selWarnings.length === 0) {
175
- console.log(`waygraph check: no inline selectors found in verify arrays under ${proj}`);
176
- }
177
- else {
178
- for (const w of selWarnings) {
179
- const rel = relative(proj, w.file);
180
- console.warn(`waygraph check: ${rel} (${w.blockName}) has an inline selector literal in verify - move it into a *Sel object`);
181
- }
182
- console.log(`waygraph check: ${selWarnings.length} inline-selector warning${selWarnings.length === 1 ? "" : "s"}`);
183
- }
184
- if (!flags.noPractices) {
185
- printPracticeReport(proj, practiceWarnings);
186
- }
187
- const orphans = await findOrphanBlocks(proj);
188
- printOrphanReport(proj, orphans);
189
- // Warnings only - never fail exit code. Orphans are reported for
190
- // human/agent cleanup; chain auto refuses while any remain.
191
- return;
192
- }
@@ -1,29 +0,0 @@
1
- // Split out of the former 8,700-line cli.ts (see src/ARCHITECTURE.md). Behavior unchanged.
2
- import { relative, resolve } from "node:path";
3
- import { checkMap } from "../analysis/map-check.js";
4
- export async function mapCase(args) {
5
- const proj = resolve(args[1] ?? process.cwd());
6
- const result = await checkMap(proj);
7
- if (!result.hasMapDir) {
8
- console.log(`waygraph map: no src/map/ directory under ${proj} - nothing to check ` +
9
- "(this project isn't on the Waygraph Map convention, or hasn't been migrated yet)");
10
- return;
11
- }
12
- console.log(`waygraph map: ${result.nodes.length} node(s) found under ${relative(proj, result.mapRoot)}`);
13
- if (result.violations.length === 0) {
14
- console.log("waygraph map: 0 violations - every static Nav/Page url verbatim-matches its folder path");
15
- }
16
- else {
17
- for (const v of result.violations) {
18
- console.error(`waygraph map: ${v.file} (${v.block}) - ${v.reason}`);
19
- }
20
- console.error(`waygraph map: ${result.violations.length} violation${result.violations.length === 1 ? "" : "s"}`);
21
- // Unlike `check`'s warnings-only stance, a Map violation is exactly
22
- // the class of bug this command exists to catch (a fabricated
23
- // folder grouping that never matched the real site, e.g. the real
24
- // (auth)/signin/ mistake this command's own header comment cites) -
25
- // fail loud, not just warn.
26
- process.exitCode = 1;
27
- }
28
- return;
29
- }
@@ -1,104 +0,0 @@
1
- // Split out of the former 8,700-line cli.ts (see src/ARCHITECTURE.md). Behavior unchanged.
2
- import { applyDemoDefaults, applyRunFlags, parseRunFlags, resolveBaseUrl, resolveProjectDir, resolveSpec } from "../cli/flags.js";
3
- import { runChain } from "../cli/run-chain.js";
4
- import { resolve } from "node:path";
5
- import { existsSync } from "node:fs";
6
- import { runChainAuto } from "./check.js";
7
- export async function runCase(args) {
8
- const flags = parseRunFlags(args.slice(1));
9
- applyRunFlags(flags);
10
- const spec = resolveSpec(flags);
11
- if (!spec) {
12
- console.error("waygraph run: missing flow/spec — e.g.\n" +
13
- " waygraph run src/flows/shop.flow.ts\n" +
14
- " waygraph run --blocks shopFlow\n" +
15
- " waygraph list # file → export map\n" +
16
- " Flags: --blocks --data --mem-stub --non-headless --video [dir] --step/--no-step");
17
- process.exit(1);
18
- }
19
- const proj = flags.blocks
20
- ? resolveProjectDir(flags, 0)
21
- : resolve(flags.positionals[1] ?? process.cwd());
22
- if (!existsSync(proj)) {
23
- console.error(`waygraph: no such directory: ${proj}`);
24
- process.exit(1);
25
- }
26
- if (!process.env.WAYGRAPH_BASE_URL) {
27
- const resolved = await resolveBaseUrl(proj);
28
- if (resolved)
29
- process.env.WAYGRAPH_BASE_URL = resolved;
30
- }
31
- await runChain(proj, spec);
32
- return;
33
- }
34
- export async function chainCase(args) {
35
- // Compat alias: chain auto A B -> auto --blocks A B; else -> run --blocks.
36
- const flags = parseRunFlags(args.slice(1));
37
- applyRunFlags(flags);
38
- const first = flags.positionals[0];
39
- if (first === "auto") {
40
- const fromTag = flags.positionals[1];
41
- const toTag = flags.positionals[2];
42
- if (!fromTag || !toTag) {
43
- console.error("waygraph chain auto: missing <fromCheckpoint> <toCheckpoint> [project]");
44
- console.error(" prefer: waygraph auto --blocks LoggedIn OrderComplete");
45
- process.exit(1);
46
- }
47
- const proj = resolve(flags.positionals[3] ?? process.cwd());
48
- if (!existsSync(proj)) {
49
- console.error(`waygraph: no such directory: ${proj}`);
50
- process.exit(1);
51
- }
52
- await runChainAuto(proj, fromTag, toTag);
53
- return;
54
- }
55
- const spec = flags.blocks ?? first;
56
- if (!spec) {
57
- console.error('waygraph chain: missing <spec> — prefer: waygraph run --blocks "a then b"\n' +
58
- " or: waygraph auto --blocks <fromCheckpoint> <toCheckpoint>");
59
- process.exit(1);
60
- }
61
- const proj = resolve(flags.blocks ? (flags.positionals[0] ?? process.cwd()) : (flags.positionals[1] ?? process.cwd()));
62
- if (!process.env.WAYGRAPH_BASE_URL) {
63
- const resolved = await resolveBaseUrl(proj);
64
- if (resolved)
65
- process.env.WAYGRAPH_BASE_URL = resolved;
66
- }
67
- // If caller asked for step overlay, behave like demo; else like run.
68
- if (flags.step === true || process.env.WAYGRAPH_STEP === "1") {
69
- await applyDemoDefaults(proj);
70
- }
71
- await runChain(proj, spec);
72
- return;
73
- }
74
- export async function demoCase(args) {
75
- const flags = parseRunFlags(args.slice(1));
76
- applyRunFlags(flags, { allowAutoPlayVideo: true, allowDemoUi: true });
77
- const spec = resolveSpec(flags);
78
- if (!spec) {
79
- console.error("waygraph demo: missing flow/spec — e.g.\n" +
80
- " waygraph demo src/flows/shop.flow.ts\n" +
81
- " waygraph demo --blocks shopFlow\n" +
82
- " Flags: --blocks --data --mem-stub --auto-next --fast --full --mini --ff-expand --ff-disabled --auto-play-video --title --base-url --video");
83
- process.exit(1);
84
- }
85
- const proj = flags.blocks
86
- ? resolveProjectDir(flags, 0)
87
- : resolve(flags.positionals[1] ?? process.cwd());
88
- if (!existsSync(proj)) {
89
- console.error(`waygraph: no such directory: ${proj}`);
90
- process.exit(1);
91
- }
92
- if (flags.step === undefined && process.env.WAYGRAPH_STEP === undefined) {
93
- process.env.WAYGRAPH_STEP = "1";
94
- }
95
- await applyDemoDefaults(proj);
96
- console.error(`waygraph demo: STEP=${process.env.WAYGRAPH_STEP === "1" ? "on" : "off"}` +
97
- ` AUTO_NEXT=${process.env.WAYGRAPH_AUTOPLAY === "1" ? "on" : "off"}` +
98
- ` HEADED=${process.env.WAYGRAPH_HEADED === "0" ? "off" : "on"}` +
99
- ` BASE_URL=${process.env.WAYGRAPH_BASE_URL ?? "(unset)"}` +
100
- (process.env.WAYGRAPH_VIDEO ? ` VIDEO=${process.env.WAYGRAPH_VIDEO}` : "") +
101
- (process.env.WAYGRAPH_TITLE ? ` TITLE=${JSON.stringify(process.env.WAYGRAPH_TITLE)}` : ""));
102
- await runChain(proj, spec);
103
- return;
104
- }
@@ -1,177 +0,0 @@
1
- // Split out of the former 8,700-line cli.ts (see src/ARCHITECTURE.md). Behavior unchanged.
2
- import { resolve } from "node:path";
3
- import { existsSync, statSync } from "node:fs";
4
- import { parseBlocksSelect } from "../blocks-select.js";
5
- import { parseMinEdgeCoverage } from "../traverse/coverage.js";
6
- import { runTraverse } from "../traverse/run.js";
7
- export async function traverseCase(args) {
8
- if (args.includes("--step") || args.includes("--auto-next") || args.includes("--autoplay")) {
9
- console.error("waygraph traverse: --step / --auto-next not supported (not a demo)");
10
- process.exit(1);
11
- }
12
- const rest = args.slice(1);
13
- let from;
14
- let data;
15
- let maxSteps;
16
- let maxVisits;
17
- let maxEdge;
18
- let headed = false;
19
- let baseUrl;
20
- let blocksFilter;
21
- let parallel;
22
- let session;
23
- let minEdgeCoverageRaw;
24
- let coverageOut;
25
- let noCoverageReport = false;
26
- let projectDir = process.cwd();
27
- for (let i = 0; i < rest.length; i++) {
28
- const a = rest[i];
29
- if (a === "--from" || a.startsWith("--from=")) {
30
- from = a.startsWith("--from=") ? a.slice(7) : rest[++i];
31
- continue;
32
- }
33
- if (a === "--data" || a.startsWith("--data=")) {
34
- data = a.startsWith("--data=") ? a.slice(7) : rest[++i];
35
- continue;
36
- }
37
- if (a === "--blocks" || a.startsWith("--blocks=")) {
38
- if (a.startsWith("--blocks=")) {
39
- blocksFilter = a.slice("--blocks=".length);
40
- }
41
- else {
42
- const v = rest[++i];
43
- if (!v || v.startsWith("-")) {
44
- console.error("waygraph traverse: --blocks needs a glob, /regex/, or path substring");
45
- process.exit(1);
46
- }
47
- blocksFilter = v;
48
- }
49
- continue;
50
- }
51
- if (a === "--parallel" || a.startsWith("--parallel=")) {
52
- const v = a.startsWith("--parallel=") ? a.slice("--parallel=".length) : rest[++i];
53
- parallel = Number(v);
54
- continue;
55
- }
56
- if (a === "--session" || a.startsWith("--session=")) {
57
- const v = a.startsWith("--session=") ? a.slice("--session=".length) : rest[++i];
58
- if (v !== "clone" && v !== "inherit") {
59
- console.error('waygraph traverse: --session must be "clone" or "inherit"');
60
- process.exit(1);
61
- }
62
- session = v;
63
- continue;
64
- }
65
- if (a === "--min-edge-coverage" || a.startsWith("--min-edge-coverage=")) {
66
- minEdgeCoverageRaw = a.startsWith("--min-edge-coverage=")
67
- ? a.slice("--min-edge-coverage=".length)
68
- : rest[++i];
69
- continue;
70
- }
71
- if (a === "--coverage-out" || a.startsWith("--coverage-out=")) {
72
- coverageOut = a.startsWith("--coverage-out=")
73
- ? a.slice("--coverage-out=".length)
74
- : rest[++i];
75
- continue;
76
- }
77
- if (a === "--no-coverage-report") {
78
- noCoverageReport = true;
79
- continue;
80
- }
81
- if (a === "--max-steps" || a.startsWith("--max-steps=")) {
82
- const v = a.startsWith("--max-steps=") ? a.slice(12) : rest[++i];
83
- maxSteps = Number(v);
84
- continue;
85
- }
86
- if (a === "--max-visits" || a.startsWith("--max-visits=")) {
87
- const v = a.startsWith("--max-visits=") ? a.slice(13) : rest[++i];
88
- maxVisits = Number(v);
89
- continue;
90
- }
91
- if (a === "--max-visits-per-edge" || a.startsWith("--max-visits-per-edge=")) {
92
- const v = a.startsWith("--max-visits-per-edge=")
93
- ? a.slice("--max-visits-per-edge=".length)
94
- : rest[++i];
95
- maxEdge = Number(v);
96
- continue;
97
- }
98
- if (a === "--non-headless" || a === "--headed") {
99
- headed = true;
100
- continue;
101
- }
102
- if (a === "--base-url" || a.startsWith("--base-url=")) {
103
- baseUrl = a.startsWith("--base-url=") ? a.slice(11) : rest[++i];
104
- continue;
105
- }
106
- if (a === "--help" || a === "-h") {
107
- console.log(`waygraph traverse [project] [flags]
108
-
109
- Graph crawl (RFC Phase B-E). Walks unused legal edges until a leaf,
110
- budget kill, or first broken edge. --parallel N uses session clone + edge leases.
111
-
112
- --blocks <glob|/regex/|substr> Phase C: filter *.block.ts discovery
113
- --parallel N Phase D: N clone workers (default 1, max 4)
114
- --session clone|inherit Phase D: default clone; inherit refused if parallel>1
115
- --min-edge-coverage X Phase E: suite gate 0.8 | 80% | 80 (exit 2 if below)
116
- --coverage-out PATH Phase E: write JSON (default .waygraph-traverse/coverage.json)
117
- --no-coverage-report Phase E: print Coverage line only (no JSON file)
118
- --from <Checkpoint> start checkpoint (optional)
119
- --data '{...}' Mem seed JSON
120
- --max-steps N default 50 (per worker)
121
- --max-visits N per-node visit cap (default 2)
122
- --max-visits-per-edge N default 1
123
- --non-headless show browser
124
- --base-url URL
125
-
126
- Examples:
127
- waygraph traverse --blocks '**/mailpit/**/*.block.ts'
128
- waygraph traverse --parallel 2 --session clone --max-steps 20
129
- waygraph traverse --min-edge-coverage 80% --coverage-out ./cov.json
130
-
131
- PASS: [Reached Leaf Node[traverse-1] at=... steps=N]
132
- FAIL: [Broke at edge[traverse-1] block=... from=... to=...]
133
- COVER: [Coverage edges=H/T ratio=R% min=M% PASS|FAIL]
134
- `);
135
- process.exit(0);
136
- }
137
- if (!a.startsWith("-")) {
138
- projectDir = resolve(a);
139
- }
140
- }
141
- if (!existsSync(projectDir) || !statSync(projectDir).isDirectory()) {
142
- console.error(`waygraph traverse: no such directory: ${projectDir}`);
143
- process.exit(1);
144
- }
145
- const blocksSelect = blocksFilter
146
- ? parseBlocksSelect(blocksFilter)
147
- : undefined;
148
- let minEdgeCoverage;
149
- if (minEdgeCoverageRaw !== undefined) {
150
- const parsed = parseMinEdgeCoverage(minEdgeCoverageRaw);
151
- if (parsed === null) {
152
- console.error(`waygraph traverse: --min-edge-coverage expects 0.8, 80%, or 80 (got ${JSON.stringify(minEdgeCoverageRaw)})`);
153
- process.exit(1);
154
- }
155
- minEdgeCoverage = parsed;
156
- }
157
- const code = await runTraverse(projectDir, {
158
- ...(from ? { from } : {}),
159
- ...(data ? { data } : {}),
160
- ...(maxSteps !== undefined && Number.isFinite(maxSteps) ? { maxSteps } : {}),
161
- ...(maxVisits !== undefined && Number.isFinite(maxVisits)
162
- ? { maxVisitsPerNode: maxVisits }
163
- : {}),
164
- ...(maxEdge !== undefined && Number.isFinite(maxEdge)
165
- ? { maxVisitsPerEdge: maxEdge }
166
- : {}),
167
- headed,
168
- ...(baseUrl ? { baseURL: baseUrl } : {}),
169
- ...(blocksSelect ? { blocksSelect } : {}),
170
- ...(parallel !== undefined && Number.isFinite(parallel) ? { parallel } : {}),
171
- ...(session ? { session } : {}),
172
- ...(minEdgeCoverage !== undefined ? { minEdgeCoverage } : {}),
173
- ...(coverageOut ? { coverageOut: resolve(coverageOut) } : {}),
174
- ...(noCoverageReport ? { noCoverageReport: true } : {}),
175
- });
176
- process.exit(code);
177
- }
@@ -1,109 +0,0 @@
1
- import type { ActionPage, Block, Checkpoint, DefinedBlock, Instruction } from "../types.js";
2
- import { MemPage } from "../mem-page.js";
3
- import type { MemKey } from "../mem-page.js";
4
- import type { Trait } from "../trait.js";
5
- export declare function findBlockIndex(middle: readonly Block<any, any>[], block: Block<any, any> | string | number): number;
6
- /**
7
- * Attaches routing to `block` without touching its act/observe/resolve/verify -
8
- * `routes` must cover every tag of `block`'s output (a missing route is a compile
9
- * error), and the returned Block runs exactly as `block` always did, just followed
10
- * by whichever next Block the resolved tag routes to. `null` for a tag means that
11
- * tag is terminal - the run stops there, same as a Block with no routing at all.
12
- * A route pointing back at `block` itself is a self-loop; see `runGraph`'s
13
- * `maxSteps` for its safety net. The return type is deliberately `Block<In, any>` -
14
- * a route can lead anywhere, including back through itself, so there is no fixed
15
- * Out type to express; state the expected outcomes to `runGraph` via `terminals`
16
- * instead.
17
- */
18
- export declare function branch<In extends Checkpoint<string>, Out extends Checkpoint<string>>(block: Block<In, Out>, routes: {
19
- [K in Out["__state"]]: Block<Extract<Out, Checkpoint<K>>, any> | null;
20
- }): DefinedBlock<In, any>;
21
- /** Copy non-enumerable waygraph markers so decorate/withVerify keep map() kind checks. */
22
- export declare function copyWaygraphRuntime(from: object, to: object): void;
23
- /**
24
- * Builds a Block with `withVerify`/`modVerify`/`modVerifyAll` attached as
25
- * methods - `LoginBlock.withVerify([...])`, discoverable by typing
26
- * `LoginBlock.` in an editor, not just callable as `withVerify(LoginBlock, ...)`
27
- * if you already know it exists. A raw object literal is still a perfectly
28
- * valid Block (every test fixture in this codebase is one) - it just won't have
29
- * these attached. The methods are thin: they delegate to the identically-named
30
- * free functions, which remain the one place this logic actually lives.
31
- */
32
- export declare function defineBlock<In extends Checkpoint<string>, Out extends Checkpoint<string>>(base: {
33
- name: string;
34
- description?: Block<In, Out>["description"];
35
- instruction: Omit<Instruction<In, Out, any>, "act"> & {
36
- act(page: ActionPage, input: In, mem: MemPage): Promise<void>;
37
- };
38
- next?: Block<In, Out>["next"];
39
- requires?: Block<In, Out>["requires"];
40
- routes?: Block<In, Out>["routes"];
41
- instanceOptions?: Block<In, Out>["instanceOptions"];
42
- }): DefinedBlock<In, Out>;
43
- /**
44
- * Returns a new Block that runs exactly like `block` - same act/observe/resolve,
45
- * same routing - but with `verify` replaced. For giving one flow stricter (or
46
- * looser, or just different) confirmation on a Block it didn't author, without
47
- * that Block needing to have been written as a parameterized factory in
48
- * anticipation. Same move as `branch()`: decorate an existing Block, don't ask
49
- * every Block to pre-build its own override mechanism.
50
- *
51
- * Wrap the one Block you want to change, in place, wherever it already sits in
52
- * a `defineFlow([...])` array - every other Block stays untouched:
53
- * `defineFlow([start, LoginBlock, withVerify(AddToCartBlock, [...]), end])`.
54
- * There is no separate positional array to keep in sync and no `null`
55
- * placeholder for "skip this one" - `defineFlow` has no per-slot verify
56
- * argument at all, only whatever `verify` each Block's own `instruction` (or
57
- * a `withVerify(...)` wrapping it) carries with it.
58
- */
59
- export declare function withVerify<B extends Block<any, any>>(block: B, verify: Trait[] | ((out: any) => Trait[])): B;
60
- type StubPhaseFn<Out extends Checkpoint<string>> = import("../highlights.js").HighlightStubPhaseOrFn<Out>;
61
- /**
62
- * Attach / chain a stubBefore lifecycle on a Block. Prefer
63
- * `(ctx) => { ctx.ring(...); const x = ctx.mem?.get(Key); }`.
64
- * @example FillUsernameBlock.stubBefore((ctx) => { ctx.ring("username", { ... }) })
65
- * @deprecated Use the chained method: `Block.stubBefore((ctx) => …)`.
66
- */
67
- export declare function withStubBefore<B extends Block<any, any>>(block: B, stub: StubPhaseFn<any>): B;
68
- /** @see {@link withStubBefore} * @deprecated Use the chained method: `Block.stubAfter((ctx) => …)`.
69
- */
70
- export declare function withStubAfter<B extends Block<any, any>>(block: B, stub: StubPhaseFn<any>): B;
71
- /** @see {@link withStubBefore} * @deprecated Use the chained method: `Block.stubOnError((ctx) => …)`.
72
- */
73
- export declare function withStubOnError<B extends Block<any, any>>(block: B, stub: StubPhaseFn<any>): B;
74
- /**
75
- * Answers the browser's own dialog (`confirm`, `alert`, `prompt`, `beforeunload`) that this Block's action
76
- * triggers. A dialog freezes the page until it is answered, so the answer has to be armed before the click -
77
- * this does that without folding it into the Block's own `act`. The dialog's text can be kept in mem.
78
- * @example withDialog(CancelBlock, { accept: true, into: LeaveWarning })
79
- */
80
- export declare function withDialog<B extends Block<any, any>>(block: B, options?: {
81
- accept?: boolean;
82
- into?: MemKey<string>;
83
- promptText?: string;
84
- }): B;
85
- /**
86
- * Replaces one Trait inside `block`'s verify list, leaving every other check
87
- * untouched - the v1/v2/legacy-variant case, where one check needs a different
88
- * selector or URL pattern but the rest of the Block is identical. Addressed by
89
- * the Trait's own `name` (recommended - inserting or reordering other checks
90
- * can't silently retarget it) or, if you genuinely know the position and don't
91
- * need that safety, a numeric index. Either way a bad address fails loud
92
- * immediately instead of quietly doing nothing. `newCheck` can be a bare
93
- * `check` function (keeps the existing name) or a full `Trait` (to rename too).
94
- * Only works on a flat `verify` array - a function-form `verify` (from
95
- * `verify: (out) => Trait[]`) has no fixed list to address into, so this
96
- * throws rather than guess; use `withVerify` to replace it wholesale instead.
97
- */
98
- export declare function modVerify<In extends Checkpoint<string>, Out extends Checkpoint<string>>(block: Block<In, Out>, nameOrIndex: string | number, newCheck: Trait["check"] | Trait): DefinedBlock<In, Out>;
99
- /**
100
- * `modVerify`, but for several named checks in one call - a v2 variant that
101
- * differs in five ways from v1 shouldn't need five nested `modVerify(modVerify(
102
- * modVerify(...)))` calls to track by eye. `patches` keys are plain strings (a
103
- * Trait's `name`, not a `MemKey` instance), so an ordinary object literal is
104
- * fine here - unlike `MemPage`, there's no identity-collision reason to need
105
- * `[name, check]` pairs. Applies each patch in turn via `modVerify`, so the
106
- * same fail-loud-on-unknown-name behavior holds for every entry.
107
- */
108
- export declare function modVerifyAll<In extends Checkpoint<string>, Out extends Checkpoint<string>>(block: Block<In, Out>, patches: Record<string, Trait["check"] | Trait>): DefinedBlock<In, Out>;
109
- export {};
@@ -1,23 +0,0 @@
1
- import { defineBlock } from "../block.js";
2
- /**
3
- * {@link defineBlock} constrained for effect-style instance menus: `requires` +
4
- * `instanceOptions` are mandatory. Prefer this when the Block adds / removes /
5
- * toggles a live instance rather than navigating. Runtime result is an ordinary
6
- * Block - the helper is TypeScript salt only.
7
- */
8
- export function defineEffectBlock(base) {
9
- const built = defineBlock(base);
10
- Object.defineProperty(built, "__waygraphMemKind", {
11
- value: "effect",
12
- enumerable: false,
13
- configurable: false,
14
- });
15
- Object.defineProperty(built, "__waygraphSalt", {
16
- value: "effect",
17
- enumerable: false,
18
- configurable: false,
19
- });
20
- return built;
21
- }
22
- /** @deprecated Prefer {@link defineEffectBlock} - identical helper. */
23
- export const defineMemEffectBlock = defineEffectBlock;
@@ -1,17 +0,0 @@
1
- // Split out of the former 2,900-line engine.ts (see src/ARCHITECTURE.md). Behavior unchanged.
2
- import { chromium, firefox, webkit } from "@playwright/test";
3
- const LAUNCHERS = { chromium, firefox, webkit };
4
- /**
5
- * Resolves which `BrowserType` actually launches for a `mem`-only run (no
6
- * caller-supplied context) - `config.browsers[browserName]` if given,
7
- * otherwise the real `@playwright/test` export. Waygraph is deliberately
8
- * "just an opinionated Playwright" - it doesn't own browser automation
9
- * itself, so it shouldn't force every consumer onto the vanilla launcher.
10
- * A stealth-patched or otherwise customized launcher (e.g. `playwright-extra`
11
- * plus a stealth plugin) is a drop-in replacement for `chromium`/`firefox`/
12
- * `webkit` - same `.launch()` shape - so accepting one here costs nothing for
13
- * a consumer who never sets it.
14
- */
15
- export function resolveLauncher(browserName, config) {
16
- return config?.browsers?.[browserName] ?? LAUNCHERS[browserName];
17
- }