waygraph 0.15.54 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/README.md +8 -3
  2. package/bin/waygraph +2 -2
  3. package/dist/analysis/check.d.ts +38 -0
  4. package/dist/analysis/check.js +87 -0
  5. package/dist/analysis/coverage-gap.d.ts +1 -1
  6. package/dist/analysis/coverage-gap.js +14 -37
  7. package/dist/analysis/flow-source.d.ts +9 -0
  8. package/dist/analysis/flow-source.js +25 -0
  9. package/dist/analysis/graph.d.ts +10 -14
  10. package/dist/analysis/graph.js +48 -371
  11. package/dist/analysis/map-check.js +4 -39
  12. package/dist/analysis/practices-check.d.ts +1 -1
  13. package/dist/analysis/practices-check.js +24 -45
  14. package/dist/cli/args.d.ts +23 -0
  15. package/dist/cli/args.js +20 -0
  16. package/dist/{cli.d.ts → cli/cli.d.ts} +0 -1
  17. package/dist/{cli.js → cli/cli.js} +10 -9
  18. package/dist/{commands → cli/commands}/agent-dive-scaffold.js +35 -64
  19. package/dist/cli/commands/agent-dive.js +42 -0
  20. package/dist/{commands → cli/commands}/check.d.ts +0 -1
  21. package/dist/cli/commands/check.js +104 -0
  22. package/dist/cli/commands/codemod-checkpoints.d.ts +18 -0
  23. package/dist/cli/commands/codemod-checkpoints.js +186 -0
  24. package/dist/cli/commands/codemod-flows.d.ts +18 -0
  25. package/dist/cli/commands/codemod-flows.js +284 -0
  26. package/dist/cli/commands/codemod-stubs.d.ts +10 -0
  27. package/dist/cli/commands/codemod-stubs.js +187 -0
  28. package/dist/{commands → cli/commands}/extensions.js +5 -4
  29. package/dist/{commands → cli/commands}/init.js +1 -2
  30. package/dist/{commands → cli/commands}/list.js +9 -7
  31. package/dist/cli/commands/manifest.d.ts +2 -0
  32. package/dist/cli/commands/manifest.js +20 -0
  33. package/dist/cli/commands/map.js +57 -0
  34. package/dist/{commands → cli/commands}/run.d.ts +0 -1
  35. package/dist/cli/commands/run.js +64 -0
  36. package/dist/{commands → cli/commands}/session.js +61 -88
  37. package/dist/{commands → cli/commands}/test.js +11 -14
  38. package/dist/cli/commands/traverse.js +105 -0
  39. package/dist/{commands → cli/commands}/try.js +29 -25
  40. package/dist/{commands → cli/commands}/upgrade.js +40 -4
  41. package/dist/cli/flags.d.ts +193 -16
  42. package/dist/cli/flags.js +179 -234
  43. package/dist/cli/run-chain.d.ts +1 -0
  44. package/dist/cli/run-chain.js +42 -7
  45. package/dist/cli/usage.d.ts +1 -1
  46. package/dist/cli/usage.js +21 -53
  47. package/dist/cli/util.d.ts +2 -2
  48. package/dist/cli/util.js +2 -3
  49. package/dist/{highlights → demo/narration}/css.d.ts +1 -1
  50. package/dist/{highlights → demo/narration}/css.js +2 -3
  51. package/dist/{highlights → demo/narration}/demo-pace.d.ts +3 -11
  52. package/dist/{highlights → demo/narration}/demo-pace.js +5 -11
  53. package/dist/{highlights → demo/narration}/device.d.ts +2 -2
  54. package/dist/{highlights → demo/narration}/device.js +1 -1
  55. package/dist/demo/narration/merge.d.ts +8 -0
  56. package/dist/demo/narration/merge.js +71 -0
  57. package/dist/{highlights/run-phase.d.ts → demo/narration/narration.d.ts} +10 -14
  58. package/dist/{highlights/run-phase.js → demo/narration/narration.js} +25 -94
  59. package/dist/{highlights → demo/narration}/shorthand.d.ts +1 -1
  60. package/dist/demo/narration/stub-ctx.d.ts +8 -0
  61. package/dist/demo/narration/stub-ctx.js +164 -0
  62. package/dist/{highlights → demo/narration}/style.d.ts +1 -7
  63. package/dist/{highlights → demo/narration}/style.js +1 -41
  64. package/dist/{highlights → demo/narration}/todo-dock.d.ts +3 -3
  65. package/dist/{highlights → demo/narration}/todo-dock.js +13 -30
  66. package/dist/demo/overlay/auto-chrome.d.ts +7 -0
  67. package/dist/demo/overlay/auto-chrome.js +97 -0
  68. package/dist/demo/overlay/cursor.d.ts +12 -0
  69. package/dist/demo/overlay/cursor.js +142 -0
  70. package/dist/demo/overlay/device-stage.d.ts +13 -0
  71. package/dist/demo/overlay/device-stage.js +396 -0
  72. package/dist/demo/overlay/inpage/banner.d.ts +1 -0
  73. package/dist/demo/overlay/inpage/banner.js +160 -0
  74. package/dist/demo/overlay/inpage/caption.d.ts +2 -0
  75. package/dist/demo/overlay/inpage/caption.js +24 -0
  76. package/dist/demo/overlay/inpage/core.d.ts +1 -0
  77. package/dist/demo/overlay/inpage/core.js +345 -0
  78. package/dist/demo/overlay/inpage/device-chip.d.ts +1 -0
  79. package/dist/demo/overlay/inpage/device-chip.js +191 -0
  80. package/dist/demo/overlay/inpage/network.d.ts +9 -0
  81. package/dist/demo/overlay/inpage/network.js +200 -0
  82. package/dist/demo/overlay/inpage/panel-chrome.d.ts +1 -0
  83. package/dist/demo/overlay/inpage/panel-chrome.js +203 -0
  84. package/dist/demo/overlay/inpage/stamp.d.ts +1 -0
  85. package/dist/demo/overlay/inpage/stamp.js +46 -0
  86. package/dist/demo/overlay/inpage/swipe-zoom.d.ts +1 -0
  87. package/dist/demo/overlay/inpage/swipe-zoom.js +220 -0
  88. package/dist/demo/overlay/inpage/todos.d.ts +1 -0
  89. package/dist/demo/overlay/inpage/todos.js +294 -0
  90. package/dist/demo/overlay/locator-theater.d.ts +25 -0
  91. package/dist/demo/overlay/locator-theater.js +76 -0
  92. package/dist/demo/overlay/network-capture.d.ts +22 -0
  93. package/dist/demo/overlay/network-capture.js +127 -0
  94. package/dist/demo/overlay/overlay-css.d.ts +3 -0
  95. package/dist/demo/overlay/overlay-css.js +369 -0
  96. package/dist/demo/overlay/overlay-stage.d.ts +23 -0
  97. package/dist/demo/overlay/overlay-stage.js +106 -0
  98. package/dist/demo/overlay/overlay.d.ts +10 -0
  99. package/dist/demo/overlay/overlay.js +89 -0
  100. package/dist/{pilot-overlay/overlay-fixtures.d.ts → demo/overlay/phase-fixtures.d.ts} +2 -2
  101. package/dist/{pilot-overlay/overlay-fixtures.js → demo/overlay/phase-fixtures.js} +2 -2
  102. package/dist/{pilot-overlay/action-ring.js → demo/overlay/pilot/actions.js} +2 -1
  103. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.d.ts +6 -5
  104. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.js +19 -18
  105. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.d.ts +2 -2
  106. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.js +13 -22
  107. package/dist/demo/overlay/reattach.d.ts +7 -0
  108. package/dist/demo/overlay/reattach.js +23 -0
  109. package/dist/demo/overlay/rings.d.ts +33 -0
  110. package/dist/demo/overlay/rings.js +448 -0
  111. package/dist/{ui → demo/overlay/ui}/components/ring.js +2 -2
  112. package/dist/{ui → demo/overlay/ui}/overlay.css +4 -4
  113. package/dist/{ui → demo/overlay/ui}/shadow.d.ts +1 -1
  114. package/dist/{ui → demo/overlay/ui}/shadow.js +39 -2
  115. package/dist/demo/stepper/after.d.ts +3 -0
  116. package/dist/demo/stepper/after.js +113 -0
  117. package/dist/demo/stepper/banner-log.d.ts +37 -0
  118. package/dist/demo/stepper/banner-log.js +63 -0
  119. package/dist/demo/stepper/before.d.ts +4 -0
  120. package/dist/demo/stepper/before.js +110 -0
  121. package/dist/demo/stepper/demo-log.d.ts +31 -0
  122. package/dist/demo/stepper/demo-log.js +309 -0
  123. package/dist/demo/stepper/gate.d.ts +11 -0
  124. package/dist/demo/stepper/gate.js +78 -0
  125. package/dist/demo/stepper/interaction-patch.d.ts +3 -0
  126. package/dist/demo/stepper/interaction-patch.js +323 -0
  127. package/dist/demo/stepper/pacing.d.ts +21 -0
  128. package/dist/demo/stepper/pacing.js +23 -0
  129. package/dist/demo/stepper/slides.d.ts +11 -0
  130. package/dist/demo/stepper/slides.js +233 -0
  131. package/dist/demo/stepper/step-panels.d.ts +21 -0
  132. package/dist/demo/stepper/step-panels.js +589 -0
  133. package/dist/demo/stepper/stepper.d.ts +24 -0
  134. package/dist/demo/stepper/stepper.js +122 -0
  135. package/dist/demo/stepper/teardown.d.ts +48 -0
  136. package/dist/demo/stepper/teardown.js +179 -0
  137. package/dist/demo/stepper/todo-advance.d.ts +14 -0
  138. package/dist/demo/stepper/todo-advance.js +110 -0
  139. package/dist/demo/stepper/view.d.ts +68 -0
  140. package/dist/demo/stepper/view.js +31 -0
  141. package/dist/demo/types.d.ts +17 -0
  142. package/dist/demo/verbose-log.js +15 -0
  143. package/dist/{types.d.ts → engine/block/block.d.ts} +106 -91
  144. package/dist/{core → engine/block}/block.js +10 -53
  145. package/dist/{core → engine/block}/compose.d.ts +9 -7
  146. package/dist/{core → engine/block}/compose.js +1 -1
  147. package/dist/{core/blocks → engine/block/kinds}/api.d.ts +16 -12
  148. package/dist/{core/blocks → engine/block/kinds}/api.js +26 -18
  149. package/dist/{core/blocks → engine/block/kinds}/effect.d.ts +13 -18
  150. package/dist/engine/block/kinds/effect.js +17 -0
  151. package/dist/{core/blocks → engine/block/kinds}/method.d.ts +17 -29
  152. package/dist/{core/blocks → engine/block/kinds}/method.js +6 -21
  153. package/dist/{core/blocks → engine/block/kinds}/nav.d.ts +21 -31
  154. package/dist/{core/blocks → engine/block/kinds}/nav.js +6 -12
  155. package/dist/{core/blocks → engine/block/kinds}/page.d.ts +14 -20
  156. package/dist/{core/blocks → engine/block/kinds}/page.js +5 -7
  157. package/dist/engine/checkpoint/checkpoint.d.ts +22 -0
  158. package/dist/engine/checkpoint/checkpoint.js +8 -0
  159. package/dist/engine/checkpoint/route.d.ts +28 -0
  160. package/dist/engine/checkpoint/route.js +28 -0
  161. package/dist/{core → engine}/config.d.ts +7 -2
  162. package/dist/engine/config.js +6 -0
  163. package/dist/engine/engine.d.ts +45 -0
  164. package/dist/{core → engine}/engine.js +6 -10
  165. package/dist/engine/env.d.ts +59 -0
  166. package/dist/engine/env.js +83 -0
  167. package/dist/{errors.d.ts → engine/errors.d.ts} +22 -22
  168. package/dist/{errors.js → engine/errors.js} +22 -22
  169. package/dist/{core → engine/flow}/branch-regression.d.ts +7 -7
  170. package/dist/{core → engine/flow}/branch-regression.js +4 -3
  171. package/dist/engine/flow/flow.d.ts +162 -0
  172. package/dist/engine/flow/flow.js +244 -0
  173. package/dist/{core → engine/flow}/map-builder.d.ts +34 -39
  174. package/dist/{core → engine/flow}/map-builder.js +45 -47
  175. package/dist/{core → engine}/locate.d.ts +1 -1
  176. package/dist/{core → engine}/locate.js +1 -2
  177. package/dist/{mem-stub.d.ts → engine/mem/mem-stub.d.ts} +9 -8
  178. package/dist/{mem-stub.js → engine/mem/mem-stub.js} +2 -2
  179. package/dist/{mem-page.d.ts → engine/mem/mem.d.ts} +1 -1
  180. package/dist/{mem-page.js → engine/mem/mem.js} +2 -1
  181. package/dist/engine/page-gone.d.ts +5 -0
  182. package/dist/engine/page-gone.js +20 -0
  183. package/dist/engine/run/connect.d.ts +28 -0
  184. package/dist/{types.js → engine/run/connect.js} +11 -10
  185. package/dist/engine/run/events.d.ts +67 -0
  186. package/dist/engine/run/events.js +90 -0
  187. package/dist/engine/run/hooks.d.ts +16 -0
  188. package/dist/engine/run/hooks.js +8 -0
  189. package/dist/engine/run/launch.d.ts +13 -0
  190. package/dist/engine/run/launch.js +27 -0
  191. package/dist/{core/run-graph.d.ts → engine/run/run.d.ts} +8 -12
  192. package/dist/{core/run-graph.js → engine/run/run.js} +22 -12
  193. package/dist/engine/stub/pace.d.ts +12 -0
  194. package/dist/engine/stub/pace.js +2 -0
  195. package/dist/engine/stub/ring.d.ts +130 -0
  196. package/dist/engine/stub/ring.js +41 -0
  197. package/dist/engine/stub/stub.d.ts +268 -0
  198. package/dist/engine/stub/stub.js +1 -0
  199. package/dist/engine/stub/todos.d.ts +104 -0
  200. package/dist/engine/stub/todos.js +2 -0
  201. package/dist/engine/stub/viewport.d.ts +26 -0
  202. package/dist/engine/stub/viewport.js +2 -0
  203. package/dist/{trait.d.ts → engine/trait/trait.d.ts} +1 -1
  204. package/dist/index.d.ts +84 -36
  205. package/dist/index.js +44 -19
  206. package/dist/{session/auto-explore-run.d.ts → live/auto/auto.d.ts} +10 -16
  207. package/dist/{session/auto-explore-run.js → live/auto/auto.js} +164 -254
  208. package/dist/{session/auto-explore.d.ts → live/auto/explore.d.ts} +4 -14
  209. package/dist/{session/auto-explore.js → live/auto/explore.js} +21 -127
  210. package/dist/{auto-session/session.d.ts → live/auto-session/auto-session.d.ts} +1 -1
  211. package/dist/{auto-session/session.js → live/auto-session/auto-session.js} +27 -24
  212. package/dist/{auto-session → live/auto-session}/helpers.d.ts +6 -5
  213. package/dist/{auto-session → live/auto-session}/helpers.js +1 -1
  214. package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +7 -5
  215. package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +31 -16
  216. package/dist/{session/browser.d.ts → live/auto-session/start.d.ts} +1 -2
  217. package/dist/{session/browser.js → live/auto-session/start.js} +2 -3
  218. package/dist/{pilot-overlay → live/pilot}/panel.d.ts +1 -1
  219. package/dist/{pilot-overlay → live/pilot}/panel.js +23 -31
  220. package/dist/{session → live/pilot}/pilot.d.ts +3 -3
  221. package/dist/{session → live/pilot}/pilot.js +4 -4
  222. package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +1 -1
  223. package/dist/{traverse/run.js → live/traverse/traverse.js} +26 -43
  224. package/dist/manifest/manifest.d.ts +52 -0
  225. package/dist/manifest/manifest.js +93 -0
  226. package/dist/manifest/map-imports.d.ts +7 -0
  227. package/dist/manifest/map-imports.js +22 -0
  228. package/dist/manifest/maps.d.ts +33 -0
  229. package/dist/manifest/maps.js +62 -0
  230. package/dist/manifest/pack.d.ts +21 -0
  231. package/dist/manifest/pack.js +109 -0
  232. package/dist/manifest/project.d.ts +60 -0
  233. package/dist/manifest/project.js +101 -0
  234. package/dist/{session/block-inject.js → manifest/roots.js} +1 -18
  235. package/dist/manifest/scan.d.ts +19 -0
  236. package/dist/manifest/scan.js +57 -0
  237. package/dist/manifest/source.d.ts +23 -0
  238. package/dist/manifest/source.js +86 -0
  239. package/dist/runner/mode.d.ts +71 -0
  240. package/dist/runner/mode.js +1 -0
  241. package/dist/runner/modes/branches.d.ts +5 -0
  242. package/dist/runner/modes/branches.js +37 -0
  243. package/dist/runner/modes/demo.d.ts +3 -0
  244. package/dist/runner/modes/demo.js +13 -0
  245. package/dist/runner/modes/report.d.ts +2 -0
  246. package/dist/runner/modes/report.js +54 -0
  247. package/dist/runner/modes/run.d.ts +2 -0
  248. package/dist/runner/modes/run.js +3 -0
  249. package/dist/runner/options.d.ts +31 -0
  250. package/dist/runner/options.js +42 -0
  251. package/dist/runner/plan/find.d.ts +18 -0
  252. package/dist/runner/plan/find.js +65 -0
  253. package/dist/runner/plan/plan.d.ts +11 -0
  254. package/dist/runner/plan/plan.js +97 -0
  255. package/dist/runner/plan/seed-mem.d.ts +12 -0
  256. package/dist/runner/plan/seed-mem.js +98 -0
  257. package/dist/runner/plan/spec.d.ts +5 -0
  258. package/dist/runner/plan/spec.js +17 -0
  259. package/dist/runner/play-steps.d.ts +2 -0
  260. package/dist/runner/play-steps.js +59 -0
  261. package/dist/runner/runner.d.ts +4 -0
  262. package/dist/runner/runner.js +64 -0
  263. package/dist/runner/session.d.ts +9 -0
  264. package/dist/runner/session.js +87 -0
  265. package/dist/{browser.js → runtime/browser.js} +4 -2
  266. package/dist/{env-file.js → runtime/env-file.js} +7 -12
  267. package/dist/{extensions.d.ts → runtime/extensions.d.ts} +1 -5
  268. package/dist/{extensions.js → runtime/extensions.js} +2 -1
  269. package/dist/runtime/full-launch.d.ts +1 -0
  270. package/dist/runtime/full-launch.js +34 -0
  271. package/dist/runtime/global-flag.d.ts +5 -0
  272. package/dist/runtime/global-flag.js +18 -0
  273. package/dist/{playwright-config.d.ts → runtime/playwright-config.d.ts} +1 -1
  274. package/dist/{playwright.config.js → runtime/playwright.config.js} +3 -2
  275. package/dist/runtime/run-log.d.ts +2 -0
  276. package/dist/runtime/run-log.js +17 -0
  277. package/dist/{video-dir.js → runtime/video-dir.js} +3 -2
  278. package/dist/{config.d.ts → runtime/waygraph-config.d.ts} +6 -9
  279. package/dist/{config.js → runtime/waygraph-config.js} +21 -51
  280. package/dist/{webserver.js → runtime/webserver.js} +5 -30
  281. package/examples/routed-demo/config/waygraph.config.ts +20 -0
  282. package/examples/routed-demo/package.json +1 -4
  283. package/examples/routed-demo/scripts/fixture-server.mjs +1 -1
  284. package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +2 -4
  285. package/examples/routed-demo/src/flows/routed-demo.flow.ts +1 -2
  286. package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +5 -4
  287. package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +3 -3
  288. package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +3 -3
  289. package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +3 -3
  290. package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +3 -3
  291. package/examples/routed-demo/src/states/routed-demo.states.ts +5 -3
  292. package/examples/routed-demo/tests/routed-demo.spec.ts +4 -4
  293. package/examples/routed-demo/tsconfig.json +1 -1
  294. package/examples/saucedemo/docs/CONVENTION.md +4 -5
  295. package/examples/saucedemo/docs/HELPERS.md +11 -11
  296. package/examples/saucedemo/src/blocks/SITE-MAP.md +0 -1
  297. package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +1 -5
  298. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
  299. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  300. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  301. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  302. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  303. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  304. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
  305. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
  306. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  307. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
  308. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  309. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  310. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  311. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  312. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  313. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  314. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
  315. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
  316. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
  317. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  318. package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  319. package/examples/saucedemo/src/flows/api-demo.flow.ts +12 -10
  320. package/examples/saucedemo/src/states/checkout.states.ts +21 -11
  321. package/examples/saucedemo/src/stubs/device-showcase.ts +8 -10
  322. package/examples/saucedemo/tests/auto-graph.spec.ts +4 -12
  323. package/package.json +10 -6
  324. package/templates/agents/waygraph-planner.agent.md +2 -2
  325. package/templates/quickstart/docs/CONVENTION.md +4 -4
  326. package/templates/quickstart/docs/HELPERS.md +10 -8
  327. package/templates/quickstart/package.json +0 -3
  328. package/templates/quickstart/src/blocks/SITE-MAP.md +0 -1
  329. package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +1 -5
  330. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
  331. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  332. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  333. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  334. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  335. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  336. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
  337. package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
  338. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  339. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
  340. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  341. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  342. package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  343. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  344. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  345. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  346. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
  347. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
  348. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
  349. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  350. package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  351. package/templates/quickstart/src/flows/api-demo.flow.ts +12 -10
  352. package/templates/quickstart/src/states/checkout.states.ts +21 -11
  353. package/templates/quickstart/src/stubs/device-showcase.ts +8 -10
  354. package/templates/scaffold/README.md +2 -1
  355. package/templates/scaffold/STRUCTURE.md +5 -4
  356. package/templates/scaffold/config/waygraph.config.ts +1 -0
  357. package/templates/scaffold/gitignore +1 -0
  358. package/templates/scaffold/src/flows/README.md +2 -2
  359. package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +3 -3
  360. package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +3 -3
  361. package/templates/scaffold/src/map/(app_base)/home/_methods/add-item.effect.block.ts +4 -4
  362. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +3 -3
  363. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +3 -3
  364. package/templates/scaffold/src/map/(app_base)/home/_methods/clear-cart.method.block.ts +5 -4
  365. package/templates/scaffold/src/map/(app_base)/home/_methods/remove-item.effect.block.ts +4 -4
  366. package/templates/scaffold/src/map/(app_base)/home/_nav.block.ts +3 -3
  367. package/templates/scaffold/src/map/(app_base)/home/_page.block.ts +3 -3
  368. package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +4 -4
  369. package/templates/scaffold/src/map/(external)/hoppscotch/_keys.ts +21 -0
  370. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-body.method.block.ts +4 -4
  371. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-header.method.block.ts +4 -4
  372. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-status.method.block.ts +4 -4
  373. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/pick-extension-interceptor.method.block.ts +5 -4
  374. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-body.method.block.ts +6 -5
  375. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-headers.method.block.ts +6 -5
  376. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/send-request.method.block.ts +5 -4
  377. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-bearer-token.method.block.ts +6 -5
  378. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-headers.method.block.ts +6 -5
  379. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-json-body.method.block.ts +6 -5
  380. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-method.method.block.ts +6 -5
  381. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-query-params.method.block.ts +6 -5
  382. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-url.method.block.ts +6 -5
  383. package/templates/scaffold/src/map/(external)/hoppscotch/_nav.block.ts +3 -3
  384. package/templates/scaffold/src/map/(external)/hoppscotch/_page.block.ts +3 -3
  385. package/templates/scaffold/src/map/(external)/hoppscotch/_states.ts +6 -0
  386. package/templates/scaffold/src/map/(external)/hoppscotch/settings/_nav.block.ts +3 -3
  387. package/templates/scaffold/src/map/(external)/mailpit/_keys.ts +13 -0
  388. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +4 -4
  389. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +4 -4
  390. package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +6 -5
  391. package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +6 -5
  392. package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +3 -3
  393. package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +3 -3
  394. package/templates/scaffold/src/map/(external)/mailpit/_states.ts +9 -0
  395. package/templates/scaffold/src/map/README.md +7 -0
  396. package/templates/scaffold/src/states/README.md +4 -1
  397. package/templates/scaffold/src/states/demo.mem-keys.ts +1 -29
  398. package/templates/scaffold/src/states/demo.states.ts +14 -20
  399. package/templates/scaffold/tests/hoppscotch.spec.ts +1 -11
  400. package/templates/scaffold/tests/mail-verify.spec.ts +2 -2
  401. package/templates/skills/waygraph-blind-pilot.skill.md +2 -6
  402. package/templates/skills/waygraph-convention.skill.md +23 -14
  403. package/templates/skills/waygraph-pilot.skill.md +7 -4
  404. package/dist/auto-session/verbose-log.js +0 -16
  405. package/dist/auto-session.d.ts +0 -2
  406. package/dist/auto-session.js +0 -3
  407. package/dist/cli/discover.d.ts +0 -40
  408. package/dist/cli/discover.js +0 -148
  409. package/dist/commands/agent-dive.js +0 -52
  410. package/dist/commands/check.js +0 -192
  411. package/dist/commands/map.js +0 -29
  412. package/dist/commands/run.js +0 -104
  413. package/dist/commands/traverse.js +0 -177
  414. package/dist/core/block.d.ts +0 -109
  415. package/dist/core/blocks/effect.js +0 -23
  416. package/dist/core/config.js +0 -17
  417. package/dist/core/engine.d.ts +0 -198
  418. package/dist/core/flow.d.ts +0 -294
  419. package/dist/core/flow.js +0 -432
  420. package/dist/core.d.ts +0 -14
  421. package/dist/core.js +0 -15
  422. package/dist/highlights/merge.d.ts +0 -8
  423. package/dist/highlights/merge.js +0 -173
  424. package/dist/highlights/stub-ctx.d.ts +0 -10
  425. package/dist/highlights/stub-ctx.js +0 -331
  426. package/dist/highlights/types.d.ts +0 -613
  427. package/dist/highlights.d.ts +0 -9
  428. package/dist/highlights.js +0 -10
  429. package/dist/pilot-overlay.d.ts +0 -5
  430. package/dist/pilot-overlay.js +0 -6
  431. package/dist/runner/banner-log.js +0 -63
  432. package/dist/runner/chain-run.js +0 -102
  433. package/dist/runner/cursor.js +0 -140
  434. package/dist/runner/demo-log.js +0 -316
  435. package/dist/runner/device-stage.d.ts +0 -9
  436. package/dist/runner/device-stage.js +0 -420
  437. package/dist/runner/discovery.js +0 -105
  438. package/dist/runner/index.js +0 -2
  439. package/dist/runner/inpage/banner.d.ts +0 -21
  440. package/dist/runner/inpage/banner.js +0 -156
  441. package/dist/runner/inpage/caption.d.ts +0 -3
  442. package/dist/runner/inpage/caption.js +0 -23
  443. package/dist/runner/inpage/core.d.ts +0 -4
  444. package/dist/runner/inpage/core.js +0 -316
  445. package/dist/runner/inpage/device.d.ts +0 -3
  446. package/dist/runner/inpage/device.js +0 -211
  447. package/dist/runner/inpage/network.d.ts +0 -15
  448. package/dist/runner/inpage/network.js +0 -217
  449. package/dist/runner/inpage/panel-chrome.js +0 -192
  450. package/dist/runner/inpage/stamp.js +0 -46
  451. package/dist/runner/inpage/swipe-zoom.js +0 -220
  452. package/dist/runner/inpage/todos.js +0 -337
  453. package/dist/runner/interaction-patch.js +0 -384
  454. package/dist/runner/main.js +0 -469
  455. package/dist/runner/network-capture.d.ts +0 -9
  456. package/dist/runner/network-capture.js +0 -126
  457. package/dist/runner/overlay-css.d.ts +0 -3
  458. package/dist/runner/overlay-css.js +0 -377
  459. package/dist/runner/overlay-install.js +0 -90
  460. package/dist/runner/overlay-stage.js +0 -110
  461. package/dist/runner/rings.js +0 -514
  462. package/dist/runner/seed-mem.js +0 -110
  463. package/dist/runner/slides.js +0 -278
  464. package/dist/runner/step-mode.js +0 -703
  465. package/dist/runner/step-panels.js +0 -729
  466. package/dist/runner/teardown.js +0 -202
  467. package/dist/runner/todo-dock.js +0 -142
  468. package/dist/session/step-overlay.d.ts +0 -37
  469. package/dist/session/step-overlay.js +0 -244
  470. package/examples/routed-demo/playwright.config.ts +0 -21
  471. package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  472. package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  473. /package/dist/{commands → cli/commands}/agent-dive-scaffold.d.ts +0 -0
  474. /package/dist/{commands → cli/commands}/agent-dive.d.ts +0 -0
  475. /package/dist/{commands → cli/commands}/extensions.d.ts +0 -0
  476. /package/dist/{commands → cli/commands}/init.d.ts +0 -0
  477. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  478. /package/dist/{commands → cli/commands}/map.d.ts +0 -0
  479. /package/dist/{commands → cli/commands}/session.d.ts +0 -0
  480. /package/dist/{commands → cli/commands}/test.d.ts +0 -0
  481. /package/dist/{commands → cli/commands}/traverse.d.ts +0 -0
  482. /package/dist/{commands → cli/commands}/try.d.ts +0 -0
  483. /package/dist/{commands → cli/commands}/upgrade.d.ts +0 -0
  484. /package/dist/{highlights → demo/narration}/shorthand.js +0 -0
  485. /package/dist/{session/overlay-beacon.d.ts → demo/overlay/beacon.d.ts} +0 -0
  486. /package/dist/{session/overlay-beacon.js → demo/overlay/beacon.js} +0 -0
  487. /package/dist/{pilot-overlay/action-ring.d.ts → demo/overlay/pilot/actions.d.ts} +0 -0
  488. /package/dist/{ui → demo/overlay/ui}/components/ring.d.ts +0 -0
  489. /package/dist/{ui → demo/overlay/ui}/stylesheet.d.ts +0 -0
  490. /package/dist/{ui → demo/overlay/ui}/stylesheet.js +0 -0
  491. /package/dist/{ui → demo/overlay/ui}/tokens.d.ts +0 -0
  492. /package/dist/{ui → demo/overlay/ui}/tokens.js +0 -0
  493. /package/dist/{highlights → demo}/types.js +0 -0
  494. /package/dist/{auto-session → demo}/verbose-log.d.ts +0 -0
  495. /package/dist/{selector.d.ts → engine/trait/selector.d.ts} +0 -0
  496. /package/dist/{selector.js → engine/trait/selector.js} +0 -0
  497. /package/dist/{trait.js → engine/trait/trait.js} +0 -0
  498. /package/dist/{traverse → live/traverse}/coverage.d.ts +0 -0
  499. /package/dist/{traverse → live/traverse}/coverage.js +0 -0
  500. /package/dist/{traverse → live/traverse}/lease.d.ts +0 -0
  501. /package/dist/{traverse → live/traverse}/lease.js +0 -0
  502. /package/dist/{session/block-inject.d.ts → manifest/roots.d.ts} +0 -0
  503. /package/dist/{blocks-select.d.ts → manifest/select.d.ts} +0 -0
  504. /package/dist/{blocks-select.js → manifest/select.js} +0 -0
  505. /package/dist/{browser.d.ts → runtime/browser.d.ts} +0 -0
  506. /package/dist/{env-file.d.ts → runtime/env-file.d.ts} +0 -0
  507. /package/dist/{playwright-config.js → runtime/playwright-config.js} +0 -0
  508. /package/dist/{playwright.config.d.ts → runtime/playwright.config.d.ts} +0 -0
  509. /package/dist/{video-dir.d.ts → runtime/video-dir.d.ts} +0 -0
  510. /package/dist/{webserver.d.ts → runtime/webserver.d.ts} +0 -0
@@ -13,7 +13,7 @@
13
13
  * `a, b` lists). A selector/label containing a literal `;` or `|` needs the
14
14
  * full-JSON form instead - documented, not silently mishandled.
15
15
  */
16
- import type { PilotHighlightFixtures } from "../pilot-overlay.js";
16
+ import type { PilotHighlightFixtures } from "../overlay/pilot/fixtures.js";
17
17
  export type ParsedHighlightShorthand = {
18
18
  type: "ok";
19
19
  fixtures: PilotHighlightFixtures;
@@ -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. */
@@ -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,12 @@
1
+ import type { WgBox, WgPage } from "../types.js";
2
+ export declare function moveCursorTo(page: WgPage, box: WgBox, ms: number): Promise<{
3
+ x: number;
4
+ y: number;
5
+ }>;
6
+ export declare function clickPulseAt(page: WgPage, x: any, y: any, tone: any): Promise<void>;
7
+ /**
8
+ * Touch swipe trail (mobile/tablet). dir: left|right|up|down.
9
+ * Returns after the trail animation completes.
10
+ * Self-contained when overlay helper is not installed yet (device runs before panel).
11
+ */
12
+ export declare function playSwipeTrail(page: WgPage, opts: any): 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(() => 0);
139
+ const n = Number(waitMs) || 0;
140
+ if (n > 0)
141
+ await new Promise((r) => setTimeout(r, n));
142
+ }
@@ -0,0 +1,13 @@
1
+ import type { WgPage } from "../types.js";
2
+ /**
3
+ * Video recording locks Playwright viewport to recordVideo.size. Shrinking
4
+ * setViewportSize to mobile/tablet letterboxes the .webm top-left. Instead keep
5
+ * the stage size and center a device-sized #wg-device-shell inside the frame.
6
+ */
7
+ export declare function applyVideoDeviceStage(page: WgPage, target: any, stage: any, opts: any): Promise<void>;
8
+ /**
9
+ * Apply authored device fixture to the live page (0.13+).
10
+ * Seamless viewport lerp + centered window + toast on set/clear.
11
+ * With --video: keep recordVideo stage size and center a device shell in-frame.
12
+ */
13
+ export declare function applyDeviceToPage(page: WgPage, device: any, sync: any): Promise<void>;