waygraph 0.15.54 → 0.16.1

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 (552) 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/cli/commands/browser.d.ts +2 -0
  21. package/dist/cli/commands/browser.js +109 -0
  22. package/dist/{commands → cli/commands}/check.d.ts +0 -1
  23. package/dist/cli/commands/check.js +104 -0
  24. package/dist/cli/commands/codemod-checkpoints.d.ts +18 -0
  25. package/dist/cli/commands/codemod-checkpoints.js +186 -0
  26. package/dist/cli/commands/codemod-flows.d.ts +18 -0
  27. package/dist/cli/commands/codemod-flows.js +284 -0
  28. package/dist/cli/commands/codemod-stubs.d.ts +10 -0
  29. package/dist/cli/commands/codemod-stubs.js +187 -0
  30. package/dist/{commands → cli/commands}/extensions.js +5 -4
  31. package/dist/{commands → cli/commands}/init.js +1 -2
  32. package/dist/{commands → cli/commands}/list.js +9 -7
  33. package/dist/cli/commands/manifest.d.ts +2 -0
  34. package/dist/cli/commands/manifest.js +20 -0
  35. package/dist/cli/commands/map.js +57 -0
  36. package/dist/cli/commands/pilot.d.ts +2 -0
  37. package/dist/cli/commands/pilot.js +102 -0
  38. package/dist/{commands → cli/commands}/run.d.ts +0 -1
  39. package/dist/cli/commands/run.js +64 -0
  40. package/dist/cli/commands/session-ops.d.ts +3 -0
  41. package/dist/cli/commands/session-ops.js +257 -0
  42. package/dist/cli/commands/session.js +132 -0
  43. package/dist/{commands → cli/commands}/test.js +11 -14
  44. package/dist/cli/commands/traverse.js +105 -0
  45. package/dist/{commands → cli/commands}/try.js +29 -25
  46. package/dist/{commands → cli/commands}/upgrade.js +40 -4
  47. package/dist/cli/flags.d.ts +193 -16
  48. package/dist/cli/flags.js +179 -234
  49. package/dist/cli/run-chain.d.ts +1 -0
  50. package/dist/cli/run-chain.js +42 -7
  51. package/dist/cli/usage.d.ts +1 -1
  52. package/dist/cli/usage.js +21 -53
  53. package/dist/cli/util.d.ts +2 -2
  54. package/dist/cli/util.js +2 -3
  55. package/dist/{highlights → demo/narration}/css.d.ts +1 -1
  56. package/dist/{highlights → demo/narration}/css.js +2 -3
  57. package/dist/{highlights → demo/narration}/demo-pace.d.ts +4 -12
  58. package/dist/{highlights → demo/narration}/demo-pace.js +5 -11
  59. package/dist/{highlights → demo/narration}/device.d.ts +4 -4
  60. package/dist/{highlights → demo/narration}/device.js +1 -1
  61. package/dist/demo/narration/merge.d.ts +10 -0
  62. package/dist/demo/narration/merge.js +67 -0
  63. package/dist/demo/narration/narration.d.ts +39 -0
  64. package/dist/{highlights/run-phase.js → demo/narration/narration.js} +25 -94
  65. package/dist/{highlights → demo/narration}/shorthand.d.ts +1 -1
  66. package/dist/demo/narration/stub-ctx.d.ts +8 -0
  67. package/dist/demo/narration/stub-ctx.js +164 -0
  68. package/dist/{highlights → demo/narration}/style.d.ts +1 -7
  69. package/dist/{highlights → demo/narration}/style.js +1 -41
  70. package/dist/{highlights → demo/narration}/todo-dock.d.ts +8 -8
  71. package/dist/{highlights → demo/narration}/todo-dock.js +13 -30
  72. package/dist/demo/overlay/auto-chrome.d.ts +7 -0
  73. package/dist/demo/overlay/auto-chrome.js +97 -0
  74. package/dist/demo/overlay/cursor.d.ts +19 -0
  75. package/dist/demo/overlay/cursor.js +142 -0
  76. package/dist/demo/overlay/device-stage.d.ts +26 -0
  77. package/dist/demo/overlay/device-stage.js +396 -0
  78. package/dist/demo/overlay/inpage/banner.d.ts +2 -0
  79. package/dist/demo/overlay/inpage/banner.js +160 -0
  80. package/dist/demo/overlay/inpage/caption.d.ts +2 -0
  81. package/dist/demo/overlay/inpage/caption.js +24 -0
  82. package/dist/demo/overlay/inpage/core.d.ts +2 -0
  83. package/dist/demo/overlay/inpage/core.js +345 -0
  84. package/dist/demo/overlay/inpage/device-chip.d.ts +1 -0
  85. package/dist/demo/overlay/inpage/device-chip.js +191 -0
  86. package/dist/demo/overlay/inpage/network.d.ts +10 -0
  87. package/dist/demo/overlay/inpage/network.js +189 -0
  88. package/dist/demo/overlay/inpage/panel-chrome.d.ts +1 -0
  89. package/dist/demo/overlay/inpage/panel-chrome.js +203 -0
  90. package/dist/demo/overlay/inpage/stamp.d.ts +1 -0
  91. package/dist/demo/overlay/inpage/stamp.js +46 -0
  92. package/dist/demo/overlay/inpage/swipe-zoom.d.ts +1 -0
  93. package/dist/demo/overlay/inpage/swipe-zoom.js +220 -0
  94. package/dist/demo/overlay/inpage/todos.d.ts +2 -0
  95. package/dist/demo/overlay/inpage/todos.js +293 -0
  96. package/dist/demo/overlay/locator-theater.d.ts +25 -0
  97. package/dist/demo/overlay/locator-theater.js +76 -0
  98. package/dist/demo/overlay/network-capture.d.ts +22 -0
  99. package/dist/demo/overlay/network-capture.js +127 -0
  100. package/dist/demo/overlay/overlay-css.d.ts +3 -0
  101. package/dist/demo/overlay/overlay-css.js +369 -0
  102. package/dist/demo/overlay/overlay-stage.d.ts +31 -0
  103. package/dist/demo/overlay/overlay-stage.js +106 -0
  104. package/dist/demo/overlay/overlay.d.ts +10 -0
  105. package/dist/demo/overlay/overlay.js +89 -0
  106. package/dist/{pilot-overlay/overlay-fixtures.d.ts → demo/overlay/phase-fixtures.d.ts} +2 -2
  107. package/dist/{pilot-overlay/overlay-fixtures.js → demo/overlay/phase-fixtures.js} +2 -2
  108. package/dist/{pilot-overlay/action-ring.js → demo/overlay/pilot/actions.js} +2 -1
  109. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.d.ts +6 -5
  110. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.js +19 -18
  111. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.d.ts +2 -2
  112. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.js +13 -22
  113. package/dist/demo/overlay/reattach.d.ts +7 -0
  114. package/dist/demo/overlay/reattach.js +23 -0
  115. package/dist/demo/overlay/rings.d.ts +61 -0
  116. package/dist/demo/overlay/rings.js +422 -0
  117. package/dist/{ui → demo/overlay/ui}/components/ring.js +2 -2
  118. package/dist/{ui → demo/overlay/ui}/overlay.css +4 -4
  119. package/dist/{ui → demo/overlay/ui}/shadow.d.ts +1 -1
  120. package/dist/{ui → demo/overlay/ui}/shadow.js +39 -2
  121. package/dist/demo/stepper/after.d.ts +3 -0
  122. package/dist/demo/stepper/after.js +103 -0
  123. package/dist/demo/stepper/banner-log.d.ts +35 -0
  124. package/dist/demo/stepper/banner-log.js +65 -0
  125. package/dist/demo/stepper/before.d.ts +4 -0
  126. package/dist/demo/stepper/before.js +110 -0
  127. package/dist/demo/stepper/demo-log.d.ts +48 -0
  128. package/dist/demo/stepper/demo-log.js +292 -0
  129. package/dist/demo/stepper/gate.d.ts +11 -0
  130. package/dist/demo/stepper/gate.js +78 -0
  131. package/dist/demo/stepper/interaction-patch.d.ts +4 -0
  132. package/dist/demo/stepper/interaction-patch.js +323 -0
  133. package/dist/demo/stepper/pacing.d.ts +21 -0
  134. package/dist/demo/stepper/pacing.js +23 -0
  135. package/dist/demo/stepper/panel-after.d.ts +17 -0
  136. package/dist/demo/stepper/panel-after.js +166 -0
  137. package/dist/demo/stepper/panel-before.d.ts +12 -0
  138. package/dist/demo/stepper/panel-before.js +241 -0
  139. package/dist/demo/stepper/slides.d.ts +23 -0
  140. package/dist/demo/stepper/slides.js +233 -0
  141. package/dist/demo/stepper/step-panels.d.ts +69 -0
  142. package/dist/demo/stepper/step-panels.js +172 -0
  143. package/dist/demo/stepper/stepper.d.ts +24 -0
  144. package/dist/demo/stepper/stepper.js +122 -0
  145. package/dist/demo/stepper/teardown.d.ts +47 -0
  146. package/dist/demo/stepper/teardown.js +178 -0
  147. package/dist/demo/stepper/todo-advance.d.ts +15 -0
  148. package/dist/demo/stepper/todo-advance.js +110 -0
  149. package/dist/demo/stepper/view.d.ts +58 -0
  150. package/dist/demo/stepper/view.js +31 -0
  151. package/dist/demo/types.d.ts +85 -0
  152. package/dist/demo/verbose-log.js +15 -0
  153. package/dist/engine/block/action-page.d.ts +53 -0
  154. package/dist/engine/block/action-page.js +1 -0
  155. package/dist/{types.d.ts → engine/block/block.d.ts} +102 -142
  156. package/dist/{core → engine/block}/block.js +12 -130
  157. package/dist/engine/block/branch.d.ts +17 -0
  158. package/dist/engine/block/branch.js +40 -0
  159. package/dist/{core → engine/block}/compose.d.ts +9 -7
  160. package/dist/{core → engine/block}/compose.js +1 -1
  161. package/dist/engine/block/dialog.d.ts +13 -0
  162. package/dist/engine/block/dialog.js +37 -0
  163. package/dist/{core/blocks → engine/block/kinds}/api.d.ts +16 -12
  164. package/dist/{core/blocks → engine/block/kinds}/api.js +26 -18
  165. package/dist/{core/blocks → engine/block/kinds}/effect.d.ts +13 -18
  166. package/dist/engine/block/kinds/effect.js +17 -0
  167. package/dist/{core/blocks → engine/block/kinds}/method.d.ts +17 -29
  168. package/dist/{core/blocks → engine/block/kinds}/method.js +6 -21
  169. package/dist/{core/blocks → engine/block/kinds}/nav.d.ts +21 -31
  170. package/dist/{core/blocks → engine/block/kinds}/nav.js +6 -12
  171. package/dist/{core/blocks → engine/block/kinds}/page.d.ts +14 -20
  172. package/dist/{core/blocks → engine/block/kinds}/page.js +5 -7
  173. package/dist/engine/checkpoint/checkpoint.d.ts +22 -0
  174. package/dist/engine/checkpoint/checkpoint.js +8 -0
  175. package/dist/engine/checkpoint/route.d.ts +28 -0
  176. package/dist/engine/checkpoint/route.js +28 -0
  177. package/dist/{core → engine}/config.d.ts +7 -2
  178. package/dist/engine/config.js +6 -0
  179. package/dist/engine/engine.d.ts +45 -0
  180. package/dist/{core → engine}/engine.js +6 -10
  181. package/dist/engine/env.d.ts +59 -0
  182. package/dist/engine/env.js +83 -0
  183. package/dist/{errors.d.ts → engine/errors.d.ts} +22 -22
  184. package/dist/{errors.js → engine/errors.js} +22 -22
  185. package/dist/{core → engine/flow}/branch-regression.d.ts +7 -7
  186. package/dist/{core → engine/flow}/branch-regression.js +4 -3
  187. package/dist/engine/flow/flow.d.ts +162 -0
  188. package/dist/engine/flow/flow.js +244 -0
  189. package/dist/engine/flow/map-branch.d.ts +9 -0
  190. package/dist/engine/flow/map-branch.js +57 -0
  191. package/dist/{core → engine/flow}/map-builder.d.ts +34 -54
  192. package/dist/engine/flow/map-builder.js +242 -0
  193. package/dist/engine/flow/map-steps.d.ts +30 -0
  194. package/dist/engine/flow/map-steps.js +87 -0
  195. package/dist/{core → engine}/locate.d.ts +1 -1
  196. package/dist/{core → engine}/locate.js +1 -2
  197. package/dist/{mem-stub.d.ts → engine/mem/mem-stub.d.ts} +9 -8
  198. package/dist/{mem-stub.js → engine/mem/mem-stub.js} +2 -2
  199. package/dist/{mem-page.d.ts → engine/mem/mem.d.ts} +1 -1
  200. package/dist/{mem-page.js → engine/mem/mem.js} +2 -1
  201. package/dist/engine/page-gone.d.ts +5 -0
  202. package/dist/engine/page-gone.js +20 -0
  203. package/dist/engine/run/connect.d.ts +28 -0
  204. package/dist/{types.js → engine/run/connect.js} +11 -10
  205. package/dist/engine/run/events.d.ts +67 -0
  206. package/dist/engine/run/events.js +90 -0
  207. package/dist/engine/run/hooks.d.ts +16 -0
  208. package/dist/engine/run/hooks.js +8 -0
  209. package/dist/engine/run/launch.d.ts +13 -0
  210. package/dist/engine/run/launch.js +27 -0
  211. package/dist/{core/run-graph.d.ts → engine/run/run.d.ts} +8 -12
  212. package/dist/{core/run-graph.js → engine/run/run.js} +22 -12
  213. package/dist/engine/stub/pace.d.ts +12 -0
  214. package/dist/engine/stub/pace.js +2 -0
  215. package/dist/engine/stub/ring.d.ts +130 -0
  216. package/dist/engine/stub/ring.js +41 -0
  217. package/dist/engine/stub/stub.d.ts +268 -0
  218. package/dist/engine/stub/stub.js +1 -0
  219. package/dist/engine/stub/todos.d.ts +104 -0
  220. package/dist/engine/stub/todos.js +2 -0
  221. package/dist/engine/stub/viewport.d.ts +26 -0
  222. package/dist/engine/stub/viewport.js +2 -0
  223. package/dist/{trait.d.ts → engine/trait/trait.d.ts} +1 -1
  224. package/dist/{trait.js → engine/trait/trait.js} +1 -1
  225. package/dist/index.d.ts +88 -36
  226. package/dist/index.js +46 -19
  227. package/dist/live/auto/auto.d.ts +22 -0
  228. package/dist/live/auto/auto.js +207 -0
  229. package/dist/{session/auto-explore.d.ts → live/auto/explore.d.ts} +4 -14
  230. package/dist/{session/auto-explore.js → live/auto/explore.js} +21 -127
  231. package/dist/live/auto/mem.d.ts +11 -0
  232. package/dist/live/auto/mem.js +85 -0
  233. package/dist/live/auto/menu.d.ts +30 -0
  234. package/dist/live/auto/menu.js +335 -0
  235. package/dist/live/auto-session/auto-session.d.ts +113 -0
  236. package/dist/live/auto-session/auto-session.js +452 -0
  237. package/dist/live/auto-session/console.d.ts +4 -0
  238. package/dist/live/auto-session/console.js +41 -0
  239. package/dist/live/auto-session/files.d.ts +44 -0
  240. package/dist/live/auto-session/files.js +145 -0
  241. package/dist/{auto-session → live/auto-session}/helpers.d.ts +9 -5
  242. package/dist/{auto-session → live/auto-session}/helpers.js +18 -1
  243. package/dist/live/auto-session/inspect.d.ts +4 -0
  244. package/dist/live/auto-session/inspect.js +75 -0
  245. package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +8 -25
  246. package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +36 -161
  247. package/dist/live/auto-session/open-browser.d.ts +6 -0
  248. package/dist/live/auto-session/open-browser.js +47 -0
  249. package/dist/{session/browser.d.ts → live/auto-session/start.d.ts} +1 -2
  250. package/dist/{session/browser.js → live/auto-session/start.js} +2 -3
  251. package/dist/{pilot-overlay → live/pilot}/panel.d.ts +1 -1
  252. package/dist/{pilot-overlay → live/pilot}/panel.js +23 -31
  253. package/dist/{session → live/pilot}/pilot.d.ts +3 -3
  254. package/dist/{session → live/pilot}/pilot.js +5 -4
  255. package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +1 -1
  256. package/dist/live/traverse/traverse.js +212 -0
  257. package/dist/live/traverse/worker.d.ts +37 -0
  258. package/dist/live/traverse/worker.js +200 -0
  259. package/dist/manifest/manifest.d.ts +52 -0
  260. package/dist/manifest/manifest.js +93 -0
  261. package/dist/manifest/map-imports.d.ts +7 -0
  262. package/dist/manifest/map-imports.js +22 -0
  263. package/dist/manifest/maps.d.ts +33 -0
  264. package/dist/manifest/maps.js +62 -0
  265. package/dist/manifest/pack.d.ts +21 -0
  266. package/dist/manifest/pack.js +109 -0
  267. package/dist/manifest/project.d.ts +60 -0
  268. package/dist/manifest/project.js +101 -0
  269. package/dist/{session/block-inject.js → manifest/roots.js} +1 -18
  270. package/dist/manifest/scan.d.ts +19 -0
  271. package/dist/manifest/scan.js +57 -0
  272. package/dist/manifest/source.d.ts +23 -0
  273. package/dist/manifest/source.js +86 -0
  274. package/dist/runner/mode.d.ts +71 -0
  275. package/dist/runner/mode.js +1 -0
  276. package/dist/runner/modes/branches.d.ts +5 -0
  277. package/dist/runner/modes/branches.js +37 -0
  278. package/dist/runner/modes/demo.d.ts +3 -0
  279. package/dist/runner/modes/demo.js +13 -0
  280. package/dist/runner/modes/report.d.ts +2 -0
  281. package/dist/runner/modes/report.js +54 -0
  282. package/dist/runner/modes/run.d.ts +2 -0
  283. package/dist/runner/modes/run.js +3 -0
  284. package/dist/runner/options.d.ts +31 -0
  285. package/dist/runner/options.js +42 -0
  286. package/dist/runner/plan/find.d.ts +18 -0
  287. package/dist/runner/plan/find.js +65 -0
  288. package/dist/runner/plan/plan.d.ts +11 -0
  289. package/dist/runner/plan/plan.js +97 -0
  290. package/dist/runner/plan/seed-mem.d.ts +12 -0
  291. package/dist/runner/plan/seed-mem.js +98 -0
  292. package/dist/runner/plan/spec.d.ts +5 -0
  293. package/dist/runner/plan/spec.js +17 -0
  294. package/dist/runner/play-steps.d.ts +2 -0
  295. package/dist/runner/play-steps.js +59 -0
  296. package/dist/runner/runner.d.ts +4 -0
  297. package/dist/runner/runner.js +64 -0
  298. package/dist/runner/session.d.ts +9 -0
  299. package/dist/runner/session.js +87 -0
  300. package/dist/{browser.js → runtime/browser.js} +4 -2
  301. package/dist/{env-file.js → runtime/env-file.js} +7 -12
  302. package/dist/{extensions.d.ts → runtime/extensions.d.ts} +1 -5
  303. package/dist/{extensions.js → runtime/extensions.js} +2 -1
  304. package/dist/runtime/full-launch.d.ts +1 -0
  305. package/dist/runtime/full-launch.js +34 -0
  306. package/dist/runtime/global-flag.d.ts +5 -0
  307. package/dist/runtime/global-flag.js +18 -0
  308. package/dist/{playwright-config.d.ts → runtime/playwright-config.d.ts} +1 -1
  309. package/dist/{playwright.config.js → runtime/playwright.config.js} +3 -2
  310. package/dist/runtime/run-log.d.ts +2 -0
  311. package/dist/runtime/run-log.js +17 -0
  312. package/dist/{video-dir.js → runtime/video-dir.js} +3 -2
  313. package/dist/{config.d.ts → runtime/waygraph-config.d.ts} +6 -9
  314. package/dist/{config.js → runtime/waygraph-config.js} +21 -51
  315. package/dist/{webserver.js → runtime/webserver.js} +5 -30
  316. package/examples/routed-demo/config/waygraph.config.ts +20 -0
  317. package/examples/routed-demo/package.json +1 -4
  318. package/examples/routed-demo/scripts/fixture-server.mjs +1 -1
  319. package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +2 -4
  320. package/examples/routed-demo/src/flows/routed-demo.flow.ts +1 -2
  321. package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +5 -4
  322. package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +3 -3
  323. package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +3 -3
  324. package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +3 -3
  325. package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +3 -3
  326. package/examples/routed-demo/src/states/routed-demo.states.ts +5 -3
  327. package/examples/routed-demo/tests/routed-demo.spec.ts +4 -4
  328. package/examples/routed-demo/tsconfig.json +1 -1
  329. package/examples/saucedemo/docs/CONVENTION.md +4 -5
  330. package/examples/saucedemo/docs/HELPERS.md +11 -11
  331. package/examples/saucedemo/src/blocks/SITE-MAP.md +0 -1
  332. package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +1 -5
  333. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
  334. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  335. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  336. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  337. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  338. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  339. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
  340. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
  341. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  342. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
  343. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  344. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  345. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  346. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  347. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  348. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  349. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
  350. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
  351. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
  352. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  353. package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  354. package/examples/saucedemo/src/flows/api-demo.flow.ts +12 -10
  355. package/examples/saucedemo/src/states/checkout.states.ts +21 -11
  356. package/examples/saucedemo/src/stubs/device-showcase.ts +8 -10
  357. package/examples/saucedemo/tests/auto-graph.spec.ts +4 -12
  358. package/package.json +14 -6
  359. package/templates/agents/waygraph-planner.agent.md +2 -2
  360. package/templates/quickstart/docs/CONVENTION.md +4 -4
  361. package/templates/quickstart/docs/HELPERS.md +10 -8
  362. package/templates/quickstart/package.json +0 -3
  363. package/templates/quickstart/src/blocks/SITE-MAP.md +0 -1
  364. package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +1 -5
  365. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
  366. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  367. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  368. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  369. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  370. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  371. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
  372. package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
  373. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  374. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
  375. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  376. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  377. package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  378. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  379. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  380. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  381. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
  382. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
  383. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
  384. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  385. package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  386. package/templates/quickstart/src/flows/api-demo.flow.ts +12 -10
  387. package/templates/quickstart/src/states/checkout.states.ts +21 -11
  388. package/templates/quickstart/src/stubs/device-showcase.ts +8 -10
  389. package/templates/scaffold/README.md +2 -1
  390. package/templates/scaffold/STRUCTURE.md +5 -4
  391. package/templates/scaffold/config/waygraph.config.ts +1 -0
  392. package/templates/scaffold/gitignore +1 -0
  393. package/templates/scaffold/src/flows/README.md +2 -2
  394. package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +3 -3
  395. package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +3 -3
  396. package/templates/scaffold/src/map/(app_base)/home/_methods/add-item.effect.block.ts +4 -4
  397. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +3 -3
  398. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +3 -3
  399. package/templates/scaffold/src/map/(app_base)/home/_methods/clear-cart.method.block.ts +5 -4
  400. package/templates/scaffold/src/map/(app_base)/home/_methods/remove-item.effect.block.ts +4 -4
  401. package/templates/scaffold/src/map/(app_base)/home/_nav.block.ts +3 -3
  402. package/templates/scaffold/src/map/(app_base)/home/_page.block.ts +3 -3
  403. package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +4 -4
  404. package/templates/scaffold/src/map/(external)/hoppscotch/_keys.ts +21 -0
  405. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-body.method.block.ts +4 -4
  406. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-header.method.block.ts +4 -4
  407. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-status.method.block.ts +4 -4
  408. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/pick-extension-interceptor.method.block.ts +5 -4
  409. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-body.method.block.ts +6 -5
  410. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-headers.method.block.ts +6 -5
  411. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/send-request.method.block.ts +5 -4
  412. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-bearer-token.method.block.ts +6 -5
  413. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-headers.method.block.ts +6 -5
  414. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-json-body.method.block.ts +6 -5
  415. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-method.method.block.ts +6 -5
  416. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-query-params.method.block.ts +6 -5
  417. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-url.method.block.ts +6 -5
  418. package/templates/scaffold/src/map/(external)/hoppscotch/_nav.block.ts +3 -3
  419. package/templates/scaffold/src/map/(external)/hoppscotch/_page.block.ts +3 -3
  420. package/templates/scaffold/src/map/(external)/hoppscotch/_states.ts +6 -0
  421. package/templates/scaffold/src/map/(external)/hoppscotch/settings/_nav.block.ts +3 -3
  422. package/templates/scaffold/src/map/(external)/mailpit/_keys.ts +13 -0
  423. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +4 -4
  424. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +4 -4
  425. package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +6 -5
  426. package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +6 -5
  427. package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +3 -3
  428. package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +3 -3
  429. package/templates/scaffold/src/map/(external)/mailpit/_states.ts +9 -0
  430. package/templates/scaffold/src/map/README.md +7 -0
  431. package/templates/scaffold/src/states/README.md +4 -1
  432. package/templates/scaffold/src/states/demo.mem-keys.ts +1 -29
  433. package/templates/scaffold/src/states/demo.states.ts +14 -20
  434. package/templates/scaffold/tests/hoppscotch.spec.ts +1 -11
  435. package/templates/scaffold/tests/mail-verify.spec.ts +2 -2
  436. package/templates/skills/waygraph-blind-pilot.skill.md +2 -6
  437. package/templates/skills/waygraph-convention.skill.md +23 -14
  438. package/templates/skills/waygraph-pilot.skill.md +7 -4
  439. package/dist/auto-session/session.d.ts +0 -193
  440. package/dist/auto-session/session.js +0 -719
  441. package/dist/auto-session/verbose-log.js +0 -16
  442. package/dist/auto-session.d.ts +0 -2
  443. package/dist/auto-session.js +0 -3
  444. package/dist/cli/discover.d.ts +0 -40
  445. package/dist/cli/discover.js +0 -148
  446. package/dist/commands/agent-dive.js +0 -52
  447. package/dist/commands/check.js +0 -192
  448. package/dist/commands/map.js +0 -29
  449. package/dist/commands/run.js +0 -104
  450. package/dist/commands/session.js +0 -600
  451. package/dist/commands/traverse.js +0 -177
  452. package/dist/core/block.d.ts +0 -109
  453. package/dist/core/blocks/effect.js +0 -23
  454. package/dist/core/config.js +0 -17
  455. package/dist/core/engine.d.ts +0 -198
  456. package/dist/core/flow.d.ts +0 -294
  457. package/dist/core/flow.js +0 -432
  458. package/dist/core/map-builder.js +0 -383
  459. package/dist/core.d.ts +0 -14
  460. package/dist/core.js +0 -15
  461. package/dist/highlights/merge.d.ts +0 -8
  462. package/dist/highlights/merge.js +0 -173
  463. package/dist/highlights/run-phase.d.ts +0 -43
  464. package/dist/highlights/stub-ctx.d.ts +0 -10
  465. package/dist/highlights/stub-ctx.js +0 -331
  466. package/dist/highlights/types.d.ts +0 -613
  467. package/dist/highlights.d.ts +0 -9
  468. package/dist/highlights.js +0 -10
  469. package/dist/pilot-overlay.d.ts +0 -5
  470. package/dist/pilot-overlay.js +0 -6
  471. package/dist/runner/banner-log.js +0 -63
  472. package/dist/runner/chain-run.js +0 -102
  473. package/dist/runner/cursor.js +0 -140
  474. package/dist/runner/demo-log.js +0 -316
  475. package/dist/runner/device-stage.d.ts +0 -9
  476. package/dist/runner/device-stage.js +0 -420
  477. package/dist/runner/discovery.js +0 -105
  478. package/dist/runner/index.js +0 -2
  479. package/dist/runner/inpage/banner.d.ts +0 -21
  480. package/dist/runner/inpage/banner.js +0 -156
  481. package/dist/runner/inpage/caption.d.ts +0 -3
  482. package/dist/runner/inpage/caption.js +0 -23
  483. package/dist/runner/inpage/core.d.ts +0 -4
  484. package/dist/runner/inpage/core.js +0 -316
  485. package/dist/runner/inpage/device.d.ts +0 -3
  486. package/dist/runner/inpage/device.js +0 -211
  487. package/dist/runner/inpage/network.d.ts +0 -15
  488. package/dist/runner/inpage/network.js +0 -217
  489. package/dist/runner/inpage/panel-chrome.js +0 -192
  490. package/dist/runner/inpage/stamp.js +0 -46
  491. package/dist/runner/inpage/swipe-zoom.js +0 -220
  492. package/dist/runner/inpage/todos.js +0 -337
  493. package/dist/runner/interaction-patch.js +0 -384
  494. package/dist/runner/main.js +0 -469
  495. package/dist/runner/network-capture.d.ts +0 -9
  496. package/dist/runner/network-capture.js +0 -126
  497. package/dist/runner/overlay-css.d.ts +0 -3
  498. package/dist/runner/overlay-css.js +0 -377
  499. package/dist/runner/overlay-install.js +0 -90
  500. package/dist/runner/overlay-stage.js +0 -110
  501. package/dist/runner/rings.js +0 -514
  502. package/dist/runner/seed-mem.js +0 -110
  503. package/dist/runner/slides.js +0 -278
  504. package/dist/runner/step-mode.js +0 -703
  505. package/dist/runner/step-panels.js +0 -729
  506. package/dist/runner/teardown.js +0 -202
  507. package/dist/runner/todo-dock.js +0 -142
  508. package/dist/session/auto-explore-run.d.ts +0 -40
  509. package/dist/session/auto-explore-run.js +0 -707
  510. package/dist/session/step-overlay.d.ts +0 -37
  511. package/dist/session/step-overlay.js +0 -244
  512. package/dist/traverse/run.js +0 -423
  513. package/examples/routed-demo/playwright.config.ts +0 -21
  514. package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  515. package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  516. /package/dist/{commands → cli/commands}/agent-dive-scaffold.d.ts +0 -0
  517. /package/dist/{commands → cli/commands}/agent-dive.d.ts +0 -0
  518. /package/dist/{commands → cli/commands}/extensions.d.ts +0 -0
  519. /package/dist/{commands → cli/commands}/init.d.ts +0 -0
  520. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  521. /package/dist/{commands → cli/commands}/map.d.ts +0 -0
  522. /package/dist/{commands → cli/commands}/session.d.ts +0 -0
  523. /package/dist/{commands → cli/commands}/test.d.ts +0 -0
  524. /package/dist/{commands → cli/commands}/traverse.d.ts +0 -0
  525. /package/dist/{commands → cli/commands}/try.d.ts +0 -0
  526. /package/dist/{commands → cli/commands}/upgrade.d.ts +0 -0
  527. /package/dist/{highlights → demo/narration}/shorthand.js +0 -0
  528. /package/dist/{session/overlay-beacon.d.ts → demo/overlay/beacon.d.ts} +0 -0
  529. /package/dist/{session/overlay-beacon.js → demo/overlay/beacon.js} +0 -0
  530. /package/dist/{pilot-overlay/action-ring.d.ts → demo/overlay/pilot/actions.d.ts} +0 -0
  531. /package/dist/{ui → demo/overlay/ui}/components/ring.d.ts +0 -0
  532. /package/dist/{ui → demo/overlay/ui}/stylesheet.d.ts +0 -0
  533. /package/dist/{ui → demo/overlay/ui}/stylesheet.js +0 -0
  534. /package/dist/{ui → demo/overlay/ui}/tokens.d.ts +0 -0
  535. /package/dist/{ui → demo/overlay/ui}/tokens.js +0 -0
  536. /package/dist/{highlights → demo}/types.js +0 -0
  537. /package/dist/{auto-session → demo}/verbose-log.d.ts +0 -0
  538. /package/dist/{selector.d.ts → engine/trait/selector.d.ts} +0 -0
  539. /package/dist/{selector.js → engine/trait/selector.js} +0 -0
  540. /package/dist/{traverse → live/traverse}/coverage.d.ts +0 -0
  541. /package/dist/{traverse → live/traverse}/coverage.js +0 -0
  542. /package/dist/{traverse → live/traverse}/lease.d.ts +0 -0
  543. /package/dist/{traverse → live/traverse}/lease.js +0 -0
  544. /package/dist/{session/block-inject.d.ts → manifest/roots.d.ts} +0 -0
  545. /package/dist/{blocks-select.d.ts → manifest/select.d.ts} +0 -0
  546. /package/dist/{blocks-select.js → manifest/select.js} +0 -0
  547. /package/dist/{browser.d.ts → runtime/browser.d.ts} +0 -0
  548. /package/dist/{env-file.d.ts → runtime/env-file.d.ts} +0 -0
  549. /package/dist/{playwright-config.js → runtime/playwright-config.js} +0 -0
  550. /package/dist/{playwright.config.d.ts → runtime/playwright.config.d.ts} +0 -0
  551. /package/dist/{video-dir.d.ts → runtime/video-dir.d.ts} +0 -0
  552. /package/dist/{webserver.d.ts → runtime/webserver.d.ts} +0 -0
@@ -1,16 +0,0 @@
1
- /**
2
- * One log format for every overlay surface (demo / auto / browser / pilot): `waygraph <surface>: ...`
3
- * with a `HH:MM:SS.mmm` prefix, same shape as `runner/demo-log.js`'s (demo stays on the JS copy since
4
- * it runs in the target project's own process; this one is for TS-side code — pilot/auto/browser —
5
- * that can't import a plain .js runner module). Silenced by WAYGRAPH_JSON=1, same convention as demo.
6
- */
7
- function ts() {
8
- const d = new Date();
9
- const p = (n) => String(n).padStart(2, "0");
10
- return `${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}.${String(d.getMilliseconds()).padStart(3, "0")}`;
11
- }
12
- export function verboseLog(surface, msg) {
13
- if (process.env.WAYGRAPH_JSON === "1")
14
- return;
15
- console.log(`[${ts()}] waygraph ${surface}: ${msg}`);
16
- }
@@ -1,2 +0,0 @@
1
- export * from "./auto-session/helpers.js";
2
- export * from "./auto-session/session.js";
@@ -1,3 +0,0 @@
1
- // Barrel: auto-session lives in src/auto-session/ (see src/ARCHITECTURE.md). Kept so existing imports of "./auto-session.js" don't change.
2
- export * from "./auto-session/helpers.js";
3
- export * from "./auto-session/session.js";
@@ -1,40 +0,0 @@
1
- export declare function walkDir(dir: string, pattern: RegExp): string[];
2
- export declare function discoverFlows(projectDir: string): string[];
3
- export declare function extractFlowNames(filePath: string): string[];
4
- /** `LoginBlock` -> `"login"`; `OverviewMetricsBlock` -> `"overview-metrics"`. */
5
- export declare function blockExportToLabel(exportId: string): string;
6
- /** Every `...Block` identifier a `.flow.ts` file imports, in source order. */
7
- export declare function parseBlockImports(filePath: string): string[];
8
- /** Every `page.goto("...")` string literal in a file, in source order. */
9
- export declare function extractGotos(filePath: string): string[];
10
- /** Every `Trait.url({ pathname: "..." })` target in a file, in source order. */
11
- export declare function extractUrlTraits(filePath: string): string[];
12
- export declare function importModule(filePath: string): Promise<Record<string, unknown>>;
13
- /** Kept as a named alias - `run`/`validate` below were written against this name first. */
14
- export declare const importFlowFile: typeof importModule;
15
- export declare function isFlowLike(val: unknown): val is {
16
- run: (...args: unknown[]) => Promise<unknown>;
17
- };
18
- export declare function discoverBlocks(projectDir: string): string[];
19
- export declare function isBlockLike(val: unknown): val is {
20
- name: string;
21
- instruction: {
22
- act: unknown;
23
- };
24
- };
25
- /** Set by `defineNavBlock` (non-enumerable) - see src/core.ts. */
26
- export declare function isNavBlockMarked(val: Record<string, unknown>): boolean;
27
- export declare const NAV_METHOD_CALLS: readonly ["page.goto(", "page.reload(", "page.goBack(", "page.goForward("];
28
- /**
29
- * Matches a selector-taking Trait factory call whose first argument is a
30
- * literal string/template, not an identifier or property access - the exact
31
- * shape found repeatedly in hand-written assertion Blocks
32
- * (`Trait.visible("#some-id")` instead of `Trait.visible(SomeSel.thing)`).
33
- * `Trait.url(...)` is deliberately excluded - it takes a URLPatternInit, never
34
- * a DOM selector. Same file-scoped-regex bluntness the nav-escape sweep above
35
- * already accepts (see openspec/specs/nav-block-and-check/spec.md) - a known
36
- * blind spot on string concatenation/template-built selectors, not solved
37
- * here for the same "recipe before promotion" reason that check accepts its
38
- * own shared-helper blind spot.
39
- */
40
- export declare const INLINE_SELECTOR_CALL: RegExp;
@@ -1,148 +0,0 @@
1
- // Split out of the former 8,700-line cli.ts (see src/ARCHITECTURE.md). Behavior unchanged.
2
- import { readFileSync, readdirSync } from "node:fs";
3
- import { join, resolve } from "node:path";
4
- // ---------------------------------------------------------------------------
5
- // Filesystem
6
- // ---------------------------------------------------------------------------
7
- export function walkDir(dir, pattern) {
8
- const results = [];
9
- let entries;
10
- try {
11
- entries = readdirSync(dir, { withFileTypes: true });
12
- }
13
- catch {
14
- return results;
15
- }
16
- for (const entry of entries) {
17
- const full = join(dir, entry.name);
18
- if (entry.isDirectory()) {
19
- if (entry.name === "node_modules" || entry.name === "dist" || entry.name === ".git")
20
- continue;
21
- results.push(...walkDir(full, pattern));
22
- }
23
- else if (pattern.test(entry.name)) {
24
- results.push(full);
25
- }
26
- }
27
- return results;
28
- }
29
- export function discoverFlows(projectDir) {
30
- return walkDir(projectDir, /\.flow\.ts$/);
31
- }
32
- // ---------------------------------------------------------------------------
33
- // Static analysis for `list`/`nav` (no import, regex only)
34
- // ---------------------------------------------------------------------------
35
- export function extractFlowNames(filePath) {
36
- const src = readFileSync(filePath, "utf-8");
37
- const names = [];
38
- const re = /export\s+const\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*[=:]/g;
39
- let m;
40
- while ((m = re.exec(src)) !== null) {
41
- const name = m[1];
42
- if (name !== undefined)
43
- names.push(name);
44
- }
45
- return names;
46
- }
47
- /** `LoginBlock` -> `"login"`; `OverviewMetricsBlock` -> `"overview-metrics"`. */
48
- export function blockExportToLabel(exportId) {
49
- const base = exportId.replace(/Block$/, "");
50
- return base
51
- .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
52
- .replace(/([A-Z]+)([A-Z][a-z])/g, "$1-$2")
53
- .toLowerCase();
54
- }
55
- /** Every `...Block` identifier a `.flow.ts` file imports, in source order. */
56
- export function parseBlockImports(filePath) {
57
- const src = readFileSync(filePath, "utf-8");
58
- const names = [];
59
- const re = /import\s*\{([^}]*)\}\s*from\s*["'][^"']*\.block(?:\.js)?["']/g;
60
- let m;
61
- while ((m = re.exec(src)) !== null) {
62
- for (const part of m[1].split(",")) {
63
- const name = part.trim().split(/\s+as\s+/)[0]?.trim();
64
- if (name)
65
- names.push(name);
66
- }
67
- }
68
- return names;
69
- }
70
- /** Every `page.goto("...")` string literal in a file, in source order. */
71
- export function extractGotos(filePath) {
72
- const src = readFileSync(filePath, "utf-8");
73
- const results = [];
74
- const re = /\.goto\(\s*["'`]([^"'`]*)["'`]/g;
75
- let m;
76
- while ((m = re.exec(src)) !== null) {
77
- const url = m[1];
78
- if (url !== undefined)
79
- results.push(url);
80
- }
81
- return results;
82
- }
83
- /** Every `Trait.url({ pathname: "..." })` target in a file, in source order. */
84
- export function extractUrlTraits(filePath) {
85
- const src = readFileSync(filePath, "utf-8");
86
- const results = [];
87
- const re = /Trait\.url\(\s*\{[^}]*pathname:\s*["'`]([^"'`]*)["'`]/g;
88
- let m;
89
- while ((m = re.exec(src)) !== null) {
90
- const url = m[1];
91
- if (url !== undefined)
92
- results.push(url);
93
- }
94
- return results;
95
- }
96
- // ---------------------------------------------------------------------------
97
- // Dynamic import + validation
98
- // ---------------------------------------------------------------------------
99
- export async function importModule(filePath) {
100
- const url = new URL(`file://${resolve(filePath)}`);
101
- return (await import(url.href));
102
- }
103
- /** Kept as a named alias - `run`/`validate` below were written against this name first. */
104
- export const importFlowFile = importModule;
105
- export function isFlowLike(val) {
106
- if (val === null || typeof val !== "object")
107
- return false;
108
- const obj = val;
109
- return typeof obj.run === "function";
110
- }
111
- // ---------------------------------------------------------------------------
112
- // `check` - secondary/complementary to the ActionPage @deprecated warning
113
- // (src/types.ts). That's the primary, always-on signal an editor shows the
114
- // instant a regular Block's act() calls a navigation method; this command
115
- // sweeps a whole project in one shot for contexts with no editor watching
116
- // (CI, an autonomous agent writing Block files without a language server).
117
- // See openspec/specs/nav-block-and-check/spec.md for the full rationale.
118
- // ---------------------------------------------------------------------------
119
- export function discoverBlocks(projectDir) {
120
- return walkDir(projectDir, /\.block\.ts$/);
121
- }
122
- export function isBlockLike(val) {
123
- if (val === null || typeof val !== "object")
124
- return false;
125
- const obj = val;
126
- if (typeof obj.name !== "string")
127
- return false;
128
- const instruction = obj.instruction;
129
- return instruction !== null && typeof instruction === "object" && typeof instruction?.act === "function";
130
- }
131
- /** Set by `defineNavBlock` (non-enumerable) - see src/core.ts. */
132
- export function isNavBlockMarked(val) {
133
- return val.__waygraphKind === "nav";
134
- }
135
- export const NAV_METHOD_CALLS = ["page.goto(", "page.reload(", "page.goBack(", "page.goForward("];
136
- /**
137
- * Matches a selector-taking Trait factory call whose first argument is a
138
- * literal string/template, not an identifier or property access - the exact
139
- * shape found repeatedly in hand-written assertion Blocks
140
- * (`Trait.visible("#some-id")` instead of `Trait.visible(SomeSel.thing)`).
141
- * `Trait.url(...)` is deliberately excluded - it takes a URLPatternInit, never
142
- * a DOM selector. Same file-scoped-regex bluntness the nav-escape sweep above
143
- * already accepts (see openspec/specs/nav-block-and-check/spec.md) - a known
144
- * blind spot on string concatenation/template-built selectors, not solved
145
- * here for the same "recipe before promotion" reason that check accepts its
146
- * own shared-helper blind spot.
147
- */
148
- export const INLINE_SELECTOR_CALL = /\b(?:Trait\.visible|Trait\.text|textEquals|visible)\(\s*["'`]/;
@@ -1,52 +0,0 @@
1
- // Split out of the former 8,700-line cli.ts (see src/ARCHITECTURE.md). Behavior unchanged.
2
- import { runAgentDive } from "./agent-dive-scaffold.js";
3
- import { resolve } from "node:path";
4
- import { existsSync, statSync } from "node:fs";
5
- export async function agentDiveCase(args) {
6
- // Playwright analogue: npx playwright init-agents --loop <provider>
7
- const rest = args.slice(1);
8
- let loop = "claude";
9
- let prompts = false;
10
- let projectDir = process.cwd();
11
- for (let i = 0; i < rest.length; i++) {
12
- const a = rest[i];
13
- if (a === "--prompts") {
14
- prompts = true;
15
- continue;
16
- }
17
- if (a === "--loop" || a.startsWith("--loop=")) {
18
- const v = a.startsWith("--loop=") ? a.slice("--loop=".length) : rest[++i];
19
- if (!v || !["claude", "opencode", "cursor", "vscode"].includes(v)) {
20
- console.error("waygraph agent-dive: --loop must be claude | opencode | cursor | vscode");
21
- process.exit(1);
22
- }
23
- loop = v;
24
- continue;
25
- }
26
- if (a === "--help" || a === "-h") {
27
- console.log(`waygraph agent-dive [--loop claude|opencode|cursor|vscode] [--prompts] [project]
28
-
29
- Initialize coding-agent definitions for diving an app into waygraph Blocks
30
- (Playwright \`init-agents\` analogue).
31
-
32
- --loop claude write .claude/agents/*.md (default)
33
- --loop opencode write .opencode/prompts/*.md
34
- --loop cursor write .cursor/rules/waygraph-*.mdc
35
- --loop vscode write .github/agents/*.md
36
- --prompts also copy docs/waygraph-agents/*.md
37
-
38
- Agents shipped: waygraph-planner, waygraph-author, waygraph-healer.
39
- `);
40
- process.exit(0);
41
- }
42
- if (!a.startsWith("-")) {
43
- projectDir = resolve(a);
44
- }
45
- }
46
- if (!existsSync(projectDir) || !statSync(projectDir).isDirectory()) {
47
- console.error(`waygraph agent-dive: no such directory: ${projectDir}`);
48
- process.exit(1);
49
- }
50
- runAgentDive({ loop, projectDir, prompts });
51
- return;
52
- }
@@ -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
- }