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
@@ -0,0 +1,8 @@
1
+ import type { StubBagState, StubCtx } from "../../engine/stub/stub.js";
2
+ import type { Checkpoint } from "../../engine/checkpoint/checkpoint.js";
3
+ import type { MemPage } from "../../engine/mem/mem.js";
4
+ export declare function createStubCtx<Out extends Checkpoint<string>>(bag: StubBagState, opts: {
5
+ out?: Out;
6
+ error?: unknown;
7
+ mem?: MemPage;
8
+ }): StubCtx<Out>;
@@ -0,0 +1,164 @@
1
+ import { normalizeTodoPos, normalizeTodoStyle } from "./todo-dock.js";
2
+ import { applyOrientation, normalizeDeviceOrientation, resolveDeviceState } from "./device.js";
3
+ export function createStubCtx(bag, opts) {
4
+ /** One dock per id: its title, style and side; without `parallel` it replaces the dock on screen. */
5
+ const setDock = (id, opts) => {
6
+ bag.todoTouched = true;
7
+ bag.hideTodos = false;
8
+ delete bag.todoGroups;
9
+ const cleaned = id.trim();
10
+ if (cleaned)
11
+ bag.todoId = cleaned;
12
+ else
13
+ delete bag.todoId;
14
+ if (opts.title != null)
15
+ bag.todoTitle = String(opts.title);
16
+ const style = normalizeTodoStyle(opts.style);
17
+ if (style)
18
+ bag.todoStyle = style;
19
+ const pos = normalizeTodoPos(opts.pos);
20
+ if (pos)
21
+ bag.todoPos = pos;
22
+ bag.todoParallel = opts.parallel === true;
23
+ };
24
+ return {
25
+ mem: opts.mem,
26
+ out: opts.out,
27
+ error: opts.error,
28
+ highlights(slots) {
29
+ bag.highlights = { ...(slots || {}) };
30
+ },
31
+ ring(id, stub) {
32
+ bag.highlights = { ...bag.highlights, [id]: stub };
33
+ },
34
+ todos(id, items, opts = {}) {
35
+ setDock(id, opts);
36
+ bag.todos = items;
37
+ if (opts.index != null)
38
+ bag.todoIndex = Number(opts.index);
39
+ if (!items.length)
40
+ bag.hideTodos = true;
41
+ },
42
+ todoIndex(n) {
43
+ bag.todoIndex = n;
44
+ },
45
+ todoGroups(id, groups, opts = {}) {
46
+ setDock(id, opts);
47
+ bag.todoGroups = groups;
48
+ if (!groups.length)
49
+ bag.hideTodos = true;
50
+ },
51
+ hideTodos() {
52
+ bag.todoTouched = true;
53
+ bag.hideTodos = true;
54
+ bag.todos = [];
55
+ delete bag.todoGroups;
56
+ },
57
+ device(preset) {
58
+ bag.deviceTouched = true;
59
+ bag.hideDevice = false;
60
+ const resolved = resolveDeviceState(preset, bag.touchOverride, bag.orientationOverride);
61
+ if (resolved) {
62
+ bag.device = resolved;
63
+ if (resolved.preset === "desktop" && !resolved.touchMode) {
64
+ bag.hideDevice = true;
65
+ }
66
+ }
67
+ },
68
+ viewport(box) {
69
+ bag.deviceTouched = true;
70
+ bag.hideDevice = false;
71
+ const resolved = resolveDeviceState(box, bag.touchOverride, bag.orientationOverride);
72
+ if (resolved)
73
+ bag.device = resolved;
74
+ },
75
+ touch(on) {
76
+ bag.deviceTouched = true;
77
+ const enabled = on === undefined ? true : !!on;
78
+ bag.touchOverride = enabled;
79
+ if (enabled)
80
+ bag.hideDevice = false;
81
+ if (bag.device) {
82
+ bag.device = {
83
+ ...bag.device,
84
+ touchMode: enabled,
85
+ hasTouch: bag.device.hasTouch || enabled,
86
+ };
87
+ if (enabled)
88
+ bag.hideDevice = false;
89
+ }
90
+ else if (enabled) {
91
+ const base = resolveDeviceState("desktop", true, bag.orientationOverride);
92
+ if (base)
93
+ bag.device = { ...base, touchMode: true, hasTouch: true };
94
+ }
95
+ },
96
+ orientation(o) {
97
+ const want = normalizeDeviceOrientation(o);
98
+ if (!want)
99
+ return;
100
+ bag.deviceTouched = true;
101
+ bag.hideDevice = false;
102
+ bag.orientationOverride = want;
103
+ const base = bag.device ||
104
+ resolveDeviceState("mobile", bag.touchOverride) ||
105
+ resolveDeviceState("mobile");
106
+ if (base)
107
+ bag.device = applyOrientation(base, want);
108
+ },
109
+ hideDevice() {
110
+ bag.deviceTouched = true;
111
+ bag.hideDevice = true;
112
+ bag.device = resolveDeviceState("desktop", false);
113
+ bag.touchOverride = false;
114
+ bag.orientationOverride = undefined;
115
+ },
116
+ zoom(n) {
117
+ if (Number.isFinite(n) && n > 0)
118
+ bag.zoom = n;
119
+ },
120
+ zoomOut(keep) {
121
+ bag.zoomOut = !!keep;
122
+ },
123
+ title(text, opts) {
124
+ bag.title = String(text ?? "");
125
+ const p = normalizeBannerPos(opts?.pos);
126
+ if (p)
127
+ bag.titlePos = p;
128
+ },
129
+ titlePos(side) {
130
+ const p = normalizeBannerPos(side);
131
+ if (p)
132
+ bag.titlePos = p;
133
+ },
134
+ caption(text) {
135
+ bag.caption = String(text ?? "");
136
+ },
137
+ hideCaption() {
138
+ bag.caption = "";
139
+ },
140
+ showNetworkTab() {
141
+ bag.networkTabVisible = true;
142
+ },
143
+ hideNetworkTab() {
144
+ bag.networkTabVisible = false;
145
+ },
146
+ bannerUi(opts) {
147
+ if (!opts || typeof opts !== "object")
148
+ return;
149
+ bag.bannerUi = { ...(bag.bannerUi || {}), ...opts };
150
+ },
151
+ hideBanner() {
152
+ bag.bannerUi = { ...(bag.bannerUi || {}), hidden: true };
153
+ },
154
+ todoDockUi(opts) {
155
+ if (!opts || typeof opts !== "object")
156
+ return;
157
+ bag.todoDockUi = { ...(bag.todoDockUi || {}), ...opts };
158
+ },
159
+ };
160
+ }
161
+ function normalizeBannerPos(raw) {
162
+ const v = String(raw ?? "").toLowerCase();
163
+ return v === "left" || v === "center" || v === "right" ? v : undefined;
164
+ }
@@ -1,4 +1,4 @@
1
- import type { HighlightSize, HighlightStyleDefaults, HighlightTone, HighlightWeight } from "./types.js";
1
+ import type { HighlightSize, HighlightStyleDefaults, HighlightTone, HighlightWeight } from "../../engine/stub/ring.js";
2
2
  /** Apply Flow defaults under per-slot authored values (slot wins when set). */
3
3
  export declare function applyHighlightStyleDefaults<T extends {
4
4
  tone?: HighlightTone | string;
@@ -9,12 +9,6 @@ export declare function applyHighlightStyleDefaults<T extends {
9
9
  size: HighlightSize;
10
10
  weight: HighlightWeight;
11
11
  };
12
- /** Map author aliases (`error` -> danger) to a canonical tone. */
13
- export declare function normalizeHighlightTone(raw: unknown): HighlightTone;
14
- /** Map size aliases to sm/md/lg. */
15
- export declare function normalizeHighlightSize(raw: unknown): HighlightSize;
16
- /** Map weight aliases to normal/bold. */
17
- export declare function normalizeHighlightWeight(raw: unknown): HighlightWeight;
18
12
  /** Prefix label with a short ASCII icon for semantic tones. */
19
13
  export declare function toneIconPrefix(tone: HighlightTone): string;
20
14
  /** Caption for ring / slide UI (label|caption + optional detail/tag + tone icon). */
@@ -1,3 +1,4 @@
1
+ import { normalizeHighlightSize, normalizeHighlightTone, normalizeHighlightWeight } from "../../engine/stub/ring.js";
1
2
  /** Apply Flow defaults under per-slot authored values (slot wins when set). */
2
3
  export function applyHighlightStyleDefaults(slot, defaults) {
3
4
  const tone = slot.tone !== undefined && slot.tone !== ""
@@ -26,47 +27,6 @@ const TONE_ICONS = {
26
27
  success: "+",
27
28
  orange: "",
28
29
  };
29
- /** Map author aliases (`error` -> danger) to a canonical tone. */
30
- export function normalizeHighlightTone(raw) {
31
- if (typeof raw !== "string")
32
- return "planned";
33
- const t = raw.trim().toLowerCase();
34
- if (t === "auto" || t === "automation" || t === "engine")
35
- return "auto";
36
- if (t === "info" || t === "blue")
37
- return "info";
38
- if (t === "warning" || t === "warn" || t === "yellow")
39
- return "warning";
40
- if (t === "danger" || t === "error" || t === "red")
41
- return "danger";
42
- if (t === "success" || t === "ok" || t === "green")
43
- return "success";
44
- if (t === "orange" || t === "amber" || t === "dom" || t === "inspect")
45
- return "orange";
46
- if (t === "planned" || t === "purple" || t === "authored")
47
- return "planned";
48
- return "planned";
49
- }
50
- /** Map size aliases to sm/md/lg. */
51
- export function normalizeHighlightSize(raw) {
52
- if (typeof raw !== "string")
53
- return "md";
54
- const t = raw.trim().toLowerCase();
55
- if (t === "sm" || t === "s" || t === "small" || t === "tiny")
56
- return "sm";
57
- if (t === "lg" || t === "l" || t === "large" || t === "big" || t === "xl")
58
- return "lg";
59
- return "md";
60
- }
61
- /** Map weight aliases to normal/bold. */
62
- export function normalizeHighlightWeight(raw) {
63
- if (typeof raw !== "string")
64
- return "normal";
65
- const t = raw.trim().toLowerCase();
66
- if (t === "bold" || t === "strong" || t === "heavy" || t === "b")
67
- return "bold";
68
- return "normal";
69
- }
70
30
  /** Prefix label with a short ASCII icon for semantic tones. */
71
31
  export function toneIconPrefix(tone) {
72
32
  const icon = TONE_ICONS[tone];
@@ -1,9 +1,9 @@
1
- import type { TodoDockState, TodoDockUiOpts, TodoDockUiResolved, TodoListStyle, WaygraphTodoGroupInput, WaygraphTodoInput, WaygraphTodoItem } from "./types.js";
1
+ import type { TodoDockState, TodoDockUiOpts, TodoDockUiResolved, TodoListStyle, WaygraphTodoGroupInput, WaygraphTodoInput, WaygraphTodoItem } from "../../engine/stub/todos.js";
2
2
  /**
3
3
  * Resolve todo-dock UX from env + optional author patch.
4
- * `WAYGRAPH_TODO_UI=full|off|legacy` forces compact/collision/behindRing off.
4
+ * `WAYGRAPH_TODO_UI=full|off` forces compact/collision/behindRing off.
5
5
  */
6
- export declare function resolveTodoDockUi(patch?: TodoDockUiOpts | null, env?: NodeJS.ProcessEnv): TodoDockUiResolved;
6
+ export declare function resolveTodoDockUi(patch?: TodoDockUiOpts | null): TodoDockUiResolved;
7
7
  /** Normalize checklist dock side. */
8
8
  export declare function normalizeTodoPos(raw: unknown): "left" | "right" | undefined;
9
9
  /** Normalize dock list style. */
@@ -31,11 +31,11 @@ export declare function buildTodoDock(opts: {
31
31
  * - keep: author omitted todos — preserve previous dock (do not wipe)
32
32
  */
33
33
  export declare function applyTodoPhase(prev: TodoDockState | undefined, phase: {
34
- todoSync?: "set" | "clear" | "keep";
35
- todoDock?: TodoDockState;
36
- todos?: WaygraphTodoItem[];
37
- todoPos?: "left" | "right";
38
- todoId?: string;
34
+ todoSync?: "set" | "clear" | "keep" | undefined;
35
+ todoDock?: TodoDockState | undefined;
36
+ todos?: WaygraphTodoItem[] | undefined;
37
+ todoPos?: "left" | "right" | undefined;
38
+ todoId?: string | undefined;
39
39
  }): {
40
40
  dock: TodoDockState | undefined;
41
41
  sync: "set" | "clear" | "keep";
@@ -1,33 +1,20 @@
1
- function envFlagBool(env, key, fallback) {
2
- const v = env[key];
3
- if (v === undefined || v === "")
4
- return fallback;
5
- const s = String(v).trim().toLowerCase();
6
- if (s === "0" || s === "false" || s === "off" || s === "no")
7
- return false;
8
- if (s === "1" || s === "true" || s === "on" || s === "yes")
9
- return true;
10
- return fallback;
11
- }
12
- function envFlagInt(env, key, fallback) {
13
- const n = Number(env[key]);
14
- return Number.isFinite(n) && n > 0 ? Math.floor(n) : fallback;
15
- }
1
+ import { envNumber, envString, envSwitch } from "../../engine/env.js";
2
+ const positiveInt = (n, fallback) => (n !== undefined && n > 0 ? Math.floor(n) : fallback);
16
3
  /**
17
4
  * Resolve todo-dock UX from env + optional author patch.
18
- * `WAYGRAPH_TODO_UI=full|off|legacy` forces compact/collision/behindRing off.
5
+ * `WAYGRAPH_TODO_UI=full|off` forces compact/collision/behindRing off.
19
6
  */
20
- export function resolveTodoDockUi(patch, env = process.env) {
21
- const mode = String(env.WAYGRAPH_TODO_UI || "smart")
7
+ export function resolveTodoDockUi(patch) {
8
+ const mode = String(envString("WAYGRAPH_TODO_UI") || "smart")
22
9
  .trim()
23
10
  .toLowerCase();
24
- const full = mode === "full" || mode === "off" || mode === "0" || mode === "legacy" || mode === "classic";
11
+ const full = mode === "full" || mode === "off" || mode === "0";
25
12
  const base = {
26
- compact: full ? false : envFlagBool(env, "WAYGRAPH_TODO_COMPACT", true),
27
- collision: full ? false : envFlagBool(env, "WAYGRAPH_TODO_COLLISION", true),
28
- behindRing: full ? false : envFlagBool(env, "WAYGRAPH_TODO_BEHIND", true),
29
- cap: envFlagInt(env, "WAYGRAPH_TODO_CAP", 5),
30
- expandCap: envFlagInt(env, "WAYGRAPH_TODO_EXPAND_CAP", 14),
13
+ compact: full ? false : envSwitch("WAYGRAPH_TODO_COMPACT", true),
14
+ collision: full ? false : envSwitch("WAYGRAPH_TODO_COLLISION", true),
15
+ behindRing: full ? false : envSwitch("WAYGRAPH_TODO_BEHIND", true),
16
+ cap: positiveInt(envNumber("WAYGRAPH_TODO_CAP"), 5),
17
+ expandCap: positiveInt(envNumber("WAYGRAPH_TODO_EXPAND_CAP"), 14),
31
18
  };
32
19
  if (base.expandCap < base.cap)
33
20
  base.expandCap = base.cap;
@@ -96,7 +83,7 @@ export function normalizeTodos(todos, todoIndex, style = "sequential") {
96
83
  item.done = !!t.done;
97
84
  if (t.current !== undefined)
98
85
  item.current = !!t.current;
99
- const idRaw = t.id ?? t.name;
86
+ const idRaw = t.id;
100
87
  if (idRaw != null && String(idRaw).trim())
101
88
  item.id = String(idRaw).trim();
102
89
  }
@@ -135,7 +122,7 @@ export function buildTodoDock(opts) {
135
122
  const group = { style: gs, items };
136
123
  if (g.title && String(g.title).trim())
137
124
  group.title = String(g.title).trim();
138
- const gid = g.id ?? g.name;
125
+ const gid = g.id;
139
126
  if (gid != null && String(gid).trim())
140
127
  group.id = String(gid).trim();
141
128
  return group;
@@ -209,8 +196,6 @@ export function advanceTodoDock(dock, index) {
209
196
  const row = { text: it.text };
210
197
  if (it.id)
211
198
  row.id = it.id;
212
- else if (it.name)
213
- row.id = it.name;
214
199
  return row;
215
200
  });
216
201
  return {
@@ -238,8 +223,6 @@ export function completeSequentialTodoDock(dock) {
238
223
  const row = { text: it.text, done: true, current: false };
239
224
  if (it.id)
240
225
  row.id = it.id;
241
- else if (it.name)
242
- row.id = it.name;
243
226
  return row;
244
227
  }),
245
228
  };
@@ -0,0 +1,7 @@
1
+ import type { Page } from "@playwright/test";
2
+ import type { MemPage } from "../../engine/mem/mem.js";
3
+ export declare function installDemoChrome(page: Page, title?: string, options?: {
4
+ banner?: boolean;
5
+ }): Promise<void>;
6
+ /** Demo cursor + ring on fill/click during auto explore headful runs (automation = gray). */
7
+ export declare function instrumentAutoInteractions(page: Page, mem: MemPage, slowMo: number): void;
@@ -0,0 +1,97 @@
1
+ import { ensureShadowRoot } from "./ui/shadow.js";
2
+ import { installCore } from "./inpage/core.js";
3
+ import { clickPulseAt, moveCursorTo } from "./cursor.js";
4
+ import { hideRing } from "./rings.js";
5
+ import { setLocatorTheater } from "./locator-theater.js";
6
+ import { ignorePageGone, ignoreTimeout } from "../../engine/page-gone.js";
7
+ export async function installDemoChrome(page, title = "waygraph auto", options = {}) {
8
+ const showBanner = options.banner !== false;
9
+ await ensureShadowRoot(page);
10
+ await page.evaluate(installCore, {}).catch(ignorePageGone);
11
+ await page
12
+ .evaluate(({ title, showBanner }) => {
13
+ if (showBanner && title && !__wgById("wg-banner")) {
14
+ const banner = document.createElement("div");
15
+ banner.id = "wg-banner";
16
+ const tag = document.createElement("span");
17
+ tag.className = "wg-banner-tag";
18
+ tag.textContent = "waygraph auto";
19
+ const text = document.createElement("span");
20
+ text.textContent = title;
21
+ banner.append(tag, text);
22
+ __wgAdd(banner);
23
+ banner.setAttribute("data-wg-ui", "1");
24
+ banner.setAttribute("data-wg-modal", "banner");
25
+ banner.setAttribute("data-wg-ready", "1");
26
+ }
27
+ else {
28
+ const existing = __wgById("wg-banner");
29
+ if (existing) {
30
+ existing.setAttribute("data-wg-ui", "1");
31
+ existing.setAttribute("data-wg-modal", "banner");
32
+ existing.setAttribute("data-wg-ready", "1");
33
+ }
34
+ }
35
+ if (showBanner && !document.title.startsWith("[waygraph] ")) {
36
+ document.title = "[waygraph] " + document.title;
37
+ }
38
+ }, { title, showBanner })
39
+ .catch(ignorePageGone);
40
+ }
41
+ async function showRing(page, box, label) {
42
+ await page.evaluate(({ box, label }) => window.__wgPositionRing?.(box, label, "auto"), { box, label }).catch(ignorePageGone);
43
+ }
44
+ /** Demo cursor + ring on fill/click during auto explore headful runs (automation = gray). */
45
+ export function instrumentAutoInteractions(page, mem, slowMo) {
46
+ const typeDelay = () => (slowMo ? 0 : 30);
47
+ const clickPrePop = () => (slowMo ? 300 : 700);
48
+ const clickPostPop = () => (slowMo ? 200 : 500);
49
+ const cursorMs = (full) => full;
50
+ const memTrack = { lastKeyName: null, at: 0 };
51
+ const originalGet = mem.get.bind(mem);
52
+ mem.get = (key) => {
53
+ memTrack.lastKeyName = key?.name ?? null;
54
+ memTrack.at = Date.now();
55
+ return originalGet(key);
56
+ };
57
+ setLocatorTheater(page, {
58
+ async beforeFill(locator) {
59
+ await installDemoChrome(page, "", { banner: false });
60
+ const box = await locator.boundingBox();
61
+ if (!box)
62
+ return;
63
+ const label = memTrack.lastKeyName && Date.now() - memTrack.at < 3000 ? "from mem: " + memTrack.lastKeyName : "writing from mem";
64
+ await moveCursorTo(page, box, cursorMs(500));
65
+ await showRing(page, box, label);
66
+ await new Promise((res) => setTimeout(res, 200));
67
+ },
68
+ typingDelay: typeDelay,
69
+ async afterFill() {
70
+ await hideRing(page);
71
+ },
72
+ async beforeClick(locator, options) {
73
+ await installDemoChrome(page, "", { banner: false });
74
+ await locator.waitFor({ state: "visible", timeout: options?.timeout || 30000 }).catch(ignoreTimeout);
75
+ const box = await locator.boundingBox();
76
+ if (!box)
77
+ return "click";
78
+ let label = "click";
79
+ const text = (await locator.textContent().catch(() => null))?.trim();
80
+ if (text && text.length <= 30)
81
+ label = text;
82
+ const clickPoint = await moveCursorTo(page, box, cursorMs(600));
83
+ await showRing(page, box, label);
84
+ await new Promise((res) => setTimeout(res, clickPrePop()));
85
+ if (clickPoint) {
86
+ await clickPulseAt(page, clickPoint.x, clickPoint.y, "auto");
87
+ await new Promise((res) => setTimeout(res, 80));
88
+ }
89
+ return "click";
90
+ },
91
+ holdMs: () => 600,
92
+ async afterClick() {
93
+ await new Promise((res) => setTimeout(res, clickPostPop()));
94
+ await hideRing(page);
95
+ },
96
+ });
97
+ }
@@ -0,0 +1,19 @@
1
+ import type { WgBox, WgPage } from "../types.js";
2
+ /** A touch swipe: which way, its caption (plus an optional hint) and how long it takes. */
3
+ export interface SwipeTrailOptions {
4
+ dir?: "left" | "right" | "up" | "down";
5
+ label?: string;
6
+ hint?: string;
7
+ ms?: number;
8
+ }
9
+ export declare function moveCursorTo(page: WgPage, box: WgBox, ms: number): Promise<{
10
+ x: number;
11
+ y: number;
12
+ }>;
13
+ export declare function clickPulseAt(page: WgPage, x: number, y: number, tone?: string): Promise<void>;
14
+ /**
15
+ * Touch swipe trail (mobile/tablet). dir: left|right|up|down.
16
+ * Returns after the trail animation completes.
17
+ * Self-contained when overlay helper is not installed yet (device runs before panel).
18
+ */
19
+ export declare function playSwipeTrail(page: WgPage, opts?: SwipeTrailOptions): Promise<void>;
@@ -0,0 +1,142 @@
1
+ // The demo cursor: travels to what a step clicks, pulses on the click, draws a swipe trail on touch devices.
2
+ import { ignorePageGone } from "../../engine/page-gone.js";
3
+ export async function moveCursorTo(page, box, ms) {
4
+ const x = box.x + box.width / 2;
5
+ const y = box.y + box.height / 2;
6
+ const travel = Math.max(0, Number(ms) || 0);
7
+ await page
8
+ .evaluate(({ x, y, ms }) => {
9
+ if (window.__wgMoveCursorTo)
10
+ window.__wgMoveCursorTo(x, y, ms);
11
+ }, { x, y, ms: travel })
12
+ .catch(ignorePageGone);
13
+ // CSS transition is async - wait the full travel so the cursor is ON the
14
+ // target before ring/pulse/real click (NavBlock click nav was skipping
15
+ // this and looked like a teleport).
16
+ if (travel > 0) {
17
+ await new Promise((res) => setTimeout(res, travel));
18
+ }
19
+ return { x, y };
20
+ }
21
+ export async function clickPulseAt(page, x, y, tone) {
22
+ await page
23
+ .evaluate(({ x, y, tone }) => {
24
+ if (window.__wgClickPulse)
25
+ window.__wgClickPulse(x, y, tone || "planned");
26
+ }, { x, y, tone: tone || "planned" })
27
+ .catch(ignorePageGone);
28
+ }
29
+ /**
30
+ * Touch swipe trail (mobile/tablet). dir: left|right|up|down.
31
+ * Returns after the trail animation completes.
32
+ * Self-contained when overlay helper is not installed yet (device runs before panel).
33
+ */
34
+ export async function playSwipeTrail(page, opts) {
35
+ const o = opts || {};
36
+ const waitMs = await page
37
+ .evaluate((payload) => {
38
+ if (typeof window.__wgSwipeTrail === "function") {
39
+ return window.__wgSwipeTrail(payload);
40
+ }
41
+ // Fallback: inject a one-shot trail without full overlay install.
42
+ const dir = payload.dir === "right" || payload.dir === "up" || payload.dir === "down"
43
+ ? payload.dir
44
+ : "left";
45
+ const ms = Math.max(280, Math.min(1400, Number(payload.ms) || 720));
46
+ const label = payload.label || "swipe";
47
+ let layer = __wgById("wg-swipe-layer");
48
+ if (layer)
49
+ layer.remove();
50
+ layer = document.createElement("div");
51
+ layer.id = "wg-swipe-layer";
52
+ layer.setAttribute("data-wg-ui", "1");
53
+ layer.style.cssText =
54
+ "position:fixed;inset:0;z-index:2147483646;pointer-events:none;overflow:hidden;";
55
+ const finger = document.createElement("div");
56
+ finger.style.cssText =
57
+ "position:absolute;width:28px;height:28px;margin:-14px 0 0 -14px;border-radius:50%;" +
58
+ "background:rgba(15,23,42,.92);border:2px solid #fff;box-shadow:0 4px 16px rgba(0,0,0,.4);";
59
+ const lab = document.createElement("div");
60
+ lab.textContent = label;
61
+ lab.style.cssText =
62
+ "position:absolute;left:50%;top:18%;transform:translateX(-50%);padding:6px 12px;" +
63
+ "border-radius:999px;background:rgba(15,23,42,.88);color:#e0f2fe;" +
64
+ "border:1px solid rgba(56,189,248,.55);font:700 12px/1.2 system-ui,sans-serif;";
65
+ layer.appendChild(lab);
66
+ layer.appendChild(finger);
67
+ __wgAdd(layer);
68
+ const vw = window.innerWidth || 390;
69
+ const vh = window.innerHeight || 844;
70
+ const pad = Math.min(vw, vh) * 0.18;
71
+ let x0;
72
+ let y0;
73
+ let x1;
74
+ let y1;
75
+ if (dir === "left") {
76
+ x0 = vw - pad;
77
+ x1 = pad;
78
+ y0 = y1 = vh * 0.52;
79
+ }
80
+ else if (dir === "right") {
81
+ x0 = pad;
82
+ x1 = vw - pad;
83
+ y0 = y1 = vh * 0.52;
84
+ }
85
+ else if (dir === "up") {
86
+ x0 = x1 = vw * 0.5;
87
+ y0 = vh - pad;
88
+ y1 = pad;
89
+ }
90
+ else {
91
+ x0 = x1 = vw * 0.5;
92
+ y0 = pad;
93
+ y1 = vh - pad;
94
+ }
95
+ finger.style.left = x0 + "px";
96
+ finger.style.top = y0 + "px";
97
+ const steps = 12;
98
+ const stepMs = Math.floor(ms / steps);
99
+ for (let i = 1; i <= steps; i++) {
100
+ const t = i / steps;
101
+ const e = t * t * (3 - 2 * t);
102
+ const x = x0 + (x1 - x0) * e;
103
+ const y = y0 + (y1 - y0) * e;
104
+ setTimeout(() => {
105
+ finger.style.left = x + "px";
106
+ finger.style.top = y + "px";
107
+ const dot = document.createElement("div");
108
+ dot.style.cssText =
109
+ "position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;" +
110
+ "background:rgba(147,197,253,.55);border:2px solid rgba(255,255,255,.85);left:" +
111
+ x +
112
+ "px;top:" +
113
+ y +
114
+ "px;opacity:" +
115
+ (0.85 - t * 0.55) +
116
+ ";transition:opacity .45s ease,transform .45s ease;";
117
+ layer.appendChild(dot);
118
+ requestAnimationFrame(() => {
119
+ dot.style.opacity = "0";
120
+ dot.style.transform = "scale(1.8)";
121
+ });
122
+ if (i === steps) {
123
+ setTimeout(() => {
124
+ const el = __wgById("wg-swipe-layer");
125
+ if (el)
126
+ el.remove();
127
+ }, 400);
128
+ }
129
+ }, i * stepMs);
130
+ }
131
+ return ms + 120;
132
+ }, {
133
+ dir: o.dir || "left",
134
+ label: o.label || "swipe",
135
+ hint: o.hint || "",
136
+ ms: o.ms || 720,
137
+ })
138
+ .catch(ignorePageGone);
139
+ const n = Number(waitMs) || 0;
140
+ if (n > 0)
141
+ await new Promise((r) => setTimeout(r, n));
142
+ }
@@ -0,0 +1,26 @@
1
+ import type { DeviceState } from "../../engine/stub/viewport.js";
2
+ import type { WgPage } from "../types.js";
3
+ interface Size {
4
+ width: number;
5
+ height: number;
6
+ }
7
+ /** How a device-shell change animates: clear it, shutter out to desktop, enter in, or stay flat. */
8
+ interface DeviceStageOptions {
9
+ clear?: boolean;
10
+ shutterOut?: boolean;
11
+ enterIn?: boolean;
12
+ desktopFlat?: boolean;
13
+ }
14
+ /**
15
+ * Video recording locks Playwright viewport to recordVideo.size. Shrinking
16
+ * setViewportSize to mobile/tablet letterboxes the .webm top-left. Instead keep
17
+ * the stage size and center a device-sized #wg-device-shell inside the frame.
18
+ */
19
+ export declare function applyVideoDeviceStage(page: WgPage, target: Size, stage: Size, opts?: DeviceStageOptions): Promise<void>;
20
+ /**
21
+ * Apply authored device fixture to the live page (0.13+).
22
+ * Seamless viewport lerp + centered window + toast on set/clear.
23
+ * With --video: keep recordVideo stage size and center a device shell in-frame.
24
+ */
25
+ export declare function applyDeviceToPage(page: WgPage, device: DeviceState | null | undefined, sync?: string): Promise<void>;
26
+ export {};