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,20 @@
1
+ // Every command's flags, read with node:util's parseArgs from the command's own table, which also prints its help. An
2
+ // unknown flag or a flag missing its value stops the command with the reason.
3
+ import { parseArgs } from "node:util";
4
+ export function parseCommand(command, table, argv) {
5
+ const options = Object.fromEntries(Object.entries(table).map(([name, o]) => [name, { type: o.type, multiple: o.multiple === true }]));
6
+ try {
7
+ const { values, positionals, tokens } = parseArgs({ args: argv, options, allowPositionals: true, strict: true, tokens: true });
8
+ return { values: values, positionals, tokens };
9
+ }
10
+ catch (err) {
11
+ console.error(`waygraph ${command}: ${err instanceof Error ? err.message : String(err)}`);
12
+ process.exit(1);
13
+ }
14
+ }
15
+ /** The table as aligned help lines (`--name <value> help`). */
16
+ export function helpLines(table, indent = 2) {
17
+ const rows = Object.entries(table).map(([name, o]) => [`--${name}${o.value ? " " + o.value : ""}`, o.help]);
18
+ const width = Math.max(...rows.map(([flag]) => flag.length)) + 2;
19
+ return rows.map(([flag, help]) => " ".repeat(indent) + flag.padEnd(width) + help).join("\n");
20
+ }
@@ -10,7 +10,6 @@
10
10
  *
11
11
  * Also: list / nav / validate / check / graph / init / agent-dive / traverse / try
12
12
  * Skills: --skill / --skill-pilot / --skill-pilot-blind / --skill-convention
13
- * Aliases (one release): `chain` -> run/demo --blocks; `--autoplay` -> `--auto-next`
14
13
  *
15
14
  * "project" defaults to cwd. Flags beat WAYGRAPH_* env.
16
15
  */
@@ -10,17 +10,16 @@
10
10
  *
11
11
  * Also: list / nav / validate / check / graph / init / agent-dive / traverse / try
12
12
  * Skills: --skill / --skill-pilot / --skill-pilot-blind / --skill-convention
13
- * Aliases (one release): `chain` -> run/demo --blocks; `--autoplay` -> `--auto-next`
14
13
  *
15
14
  * "project" defaults to cwd. Flags beat WAYGRAPH_* env.
16
15
  */
17
16
  import { SKILL_FLAG_MAP, printSkillIndex, readSkillMarkdown } from "./commands/agent-dive-scaffold.js";
18
- import { takeEnvFlag } from "./env-file.js";
19
- import { takeConfigFlag } from "./config.js";
20
- import { usage } from "./cli/usage.js";
17
+ import { takeEnvFlag } from "../runtime/env-file.js";
18
+ import { takeConfigFlag } from "../runtime/waygraph-config.js";
19
+ import { usage } from "./usage.js";
21
20
  import { listCase, navCase } from "./commands/list.js";
22
21
  import { checkCase, typecheckCase, validateCase } from "./commands/check.js";
23
- import { chainCase, demoCase, runCase } from "./commands/run.js";
22
+ import { demoCase, runCase } from "./commands/run.js";
24
23
  import { testCase } from "./commands/test.js";
25
24
  import { initCase } from "./commands/init.js";
26
25
  import { traverseCase } from "./commands/traverse.js";
@@ -28,12 +27,14 @@ import { agentDiveCase } from "./commands/agent-dive.js";
28
27
  import { autoServeCase, sessionCase } from "./commands/session.js";
29
28
  import { tryCase } from "./commands/try.js";
30
29
  import { upgradeCase } from "./commands/upgrade.js";
30
+ import { manifestCase } from "./commands/manifest.js";
31
31
  import { extensionsCase } from "./commands/extensions.js";
32
32
  import { mapCase } from "./commands/map.js";
33
+ import { setEnv } from "../engine/env.js";
33
34
  const args = takeConfigFlag(takeEnvFlag(process.argv.slice(2)));
34
35
  const command = args[0];
35
36
  if (command)
36
- process.env.WAYGRAPH_COMMAND = command;
37
+ setEnv("WAYGRAPH_COMMAND", command);
37
38
  async function main() {
38
39
  if (!command || command === "--help" || command === "-h") {
39
40
  usage();
@@ -73,9 +74,6 @@ async function main() {
73
74
  case "init-agents":
74
75
  await agentDiveCase(args);
75
76
  break;
76
- case "chain":
77
- await chainCase(args);
78
- break;
79
77
  case "demo":
80
78
  await demoCase(args);
81
79
  break;
@@ -106,6 +104,9 @@ async function main() {
106
104
  case "upgrade":
107
105
  await upgradeCase(args);
108
106
  break;
107
+ case "manifest":
108
+ await manifestCase(args);
109
+ break;
109
110
  case "extensions":
110
111
  await extensionsCase(args);
111
112
  break;
@@ -5,9 +5,10 @@
5
5
  import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, } from "node:fs";
6
6
  import { basename, dirname, join, resolve } from "node:path";
7
7
  import { fileURLToPath } from "node:url";
8
+ import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
8
9
  function packageRoot() {
9
10
  // dist/commands/agent-dive-scaffold.js -> ../..
10
- return resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
11
+ return resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
11
12
  }
12
13
  function agentsTemplateDir() {
13
14
  return join(packageRoot(), "templates", "agents");
@@ -15,46 +16,33 @@ function agentsTemplateDir() {
15
16
  function skillsTemplateDir() {
16
17
  return join(packageRoot(), "templates", "skills");
17
18
  }
18
- /** Minimal YAML-ish frontmatter parser for `*.agent.md` templates. */
19
- function parseAgentSpec(filePath) {
19
+ /** A markdown file's YAML frontmatter (between the leading `---` lines) and its body. */
20
+ function readFrontmatter(filePath) {
20
21
  const raw = readFileSync(filePath, "utf-8");
21
- if (!raw.startsWith("---\n")) {
22
- throw new Error(`agent-dive: missing frontmatter in ${filePath}`);
23
- }
24
- const end = raw.indexOf("\n---\n", 4);
25
- if (end < 0)
26
- throw new Error(`agent-dive: unclosed frontmatter in ${filePath}`);
27
- const fm = raw.slice(4, end);
28
- const body = raw.slice(end + 5).trim();
29
- const meta = {};
30
- let listKey = null;
31
- const lists = {};
32
- for (const line of fm.split("\n")) {
33
- if (/^\s+-\s+/.test(line) && listKey) {
34
- lists[listKey].push(line.replace(/^\s+-\s+/, "").trim());
35
- continue;
36
- }
37
- listKey = null;
38
- const m = /^([A-Za-z0-9_-]+):\s*(.*)$/.exec(line);
39
- if (!m)
40
- continue;
41
- const key = m[1];
42
- const val = m[2].trim();
43
- if (val === "") {
44
- listKey = key;
45
- lists[key] = [];
46
- }
47
- else {
48
- meta[key] = val;
49
- }
50
- }
51
- const name = meta.name || basename(filePath).replace(/\.agent\.md$/, "");
22
+ const m = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/.exec(raw);
23
+ if (!m)
24
+ throw new Error(`agent-dive: missing or unclosed frontmatter in ${filePath}`);
25
+ const data = parseYaml(m[1]);
26
+ if (data === null || typeof data !== "object" || Array.isArray(data))
27
+ throw new Error(`agent-dive: frontmatter in ${filePath} is not a mapping`);
28
+ return { data: data, body: m[2].trim() };
29
+ }
30
+ /** Markdown with `data` as YAML frontmatter. */
31
+ function withFrontmatter(data, body) {
32
+ return `---\n${stringifyYaml(data, { lineWidth: 0 })}---\n\n${body}\n`;
33
+ }
34
+ function parseAgentSpec(filePath) {
35
+ const { data, body } = readFrontmatter(filePath);
36
+ const text = (k) => (typeof data[k] === "string" && data[k] !== "" ? data[k] : undefined);
37
+ const name = text("name") ?? basename(filePath).replace(/\.(agent|skill)\.md$/, "");
38
+ const model = text("model");
39
+ const color = text("color");
52
40
  return {
53
41
  name,
54
- description: meta.description || name,
55
- ...(meta.model ? { model: meta.model } : {}),
56
- ...(meta.color ? { color: meta.color } : {}),
57
- tools: lists.tools ?? [],
42
+ description: text("description") ?? name,
43
+ ...(model ? { model } : {}),
44
+ ...(color ? { color } : {}),
45
+ tools: Array.isArray(data.tools) ? data.tools.map(String) : [],
58
46
  instructions: body,
59
47
  };
60
48
  }
@@ -126,42 +114,25 @@ function writeFileLogged(path, content, kind) {
126
114
  console.log(` wrote ${path} (${kind})`);
127
115
  }
128
116
  function claudeAgentMd(agent) {
129
- const tools = agent.tools.join(", ");
130
- const lines = [
131
- "---",
132
- `name: ${agent.name}`,
133
- `description: ${agent.description}`,
134
- ...(agent.model ? [`model: ${agent.model}`] : []),
135
- ...(agent.color ? [`color: ${agent.color}`] : []),
136
- ...(tools ? [`tools: ${tools}`] : []),
137
- "---",
138
- "",
139
- agent.instructions,
140
- "",
141
- ];
142
- return lines.join("\n");
117
+ return withFrontmatter({
118
+ name: agent.name,
119
+ description: agent.description,
120
+ ...(agent.model ? { model: agent.model } : {}),
121
+ ...(agent.color ? { color: agent.color } : {}),
122
+ ...(agent.tools.length ? { tools: agent.tools.join(", ") } : {}),
123
+ }, agent.instructions);
143
124
  }
144
125
  function opencodePromptMd(agent) {
145
126
  return `${agent.instructions}\n`;
146
127
  }
147
128
  function cursorRuleMdc(agent) {
148
- return `---
149
- description: ${agent.description}
150
- globs:
151
- alwaysApply: false
152
- ---
153
-
154
- # ${agent.name}
155
-
156
- ${agent.instructions}
157
- `;
129
+ return withFrontmatter({ description: agent.description, globs: null, alwaysApply: false }, `# ${agent.name}\n\n${agent.instructions}`);
158
130
  }
159
131
  function vscodeAgentMd(agent) {
160
132
  return claudeAgentMd(agent);
161
133
  }
162
134
  function claudeSkillMd(skill) {
163
- const lines = ["---", `name: ${skill.name}`, `description: ${skill.description}`, "---", "", skill.instructions, ""];
164
- return lines.join("\n");
135
+ return withFrontmatter({ name: skill.name, description: skill.description }, skill.instructions);
165
136
  }
166
137
  export function runAgentDive(opts) {
167
138
  const agents = loadAgentSpecs();
@@ -0,0 +1,42 @@
1
+ import { runAgentDive } from "./agent-dive-scaffold.js";
2
+ import { resolve } from "node:path";
3
+ import { existsSync, statSync } from "node:fs";
4
+ import { helpLines, parseCommand } from "../args.js";
5
+ const LOOPS = ["claude", "opencode", "cursor", "vscode"];
6
+ const OPTIONS = {
7
+ loop: { type: "string", value: "claude|opencode|cursor|vscode", help: "Which agent tool to write for (default claude)" },
8
+ prompts: { type: "boolean", help: "Also copy docs/waygraph-agents/*.md" },
9
+ help: { type: "boolean", help: "This help" },
10
+ };
11
+ export async function agentDiveCase(args) {
12
+ // Playwright analogue: npx playwright init-agents --loop <provider>
13
+ const { values, positionals } = parseCommand("agent-dive", OPTIONS, args.slice(1));
14
+ if (values.help) {
15
+ console.log(`waygraph agent-dive [--loop claude|opencode|cursor|vscode] [--prompts] [project]
16
+
17
+ Initialize coding-agent definitions for diving an app into waygraph Blocks
18
+ (Playwright \`init-agents\` analogue).
19
+
20
+ ${helpLines(OPTIONS)}
21
+
22
+ --loop claude writes .claude/agents/*.md, opencode .opencode/prompts/*.md,
23
+ cursor .cursor/rules/waygraph-*.mdc, vscode .github/agents/*.md.
24
+
25
+ Agents shipped: waygraph-planner, waygraph-author, waygraph-healer.
26
+ `);
27
+ process.exit(0);
28
+ }
29
+ const loop = (values.loop ?? "claude");
30
+ if (!LOOPS.includes(loop)) {
31
+ console.error("waygraph agent-dive: --loop must be claude | opencode | cursor | vscode");
32
+ process.exit(1);
33
+ }
34
+ const prompts = values.prompts === true;
35
+ const projectDir = resolve(positionals[0] ?? process.cwd());
36
+ if (!existsSync(projectDir) || !statSync(projectDir).isDirectory()) {
37
+ console.error(`waygraph agent-dive: no such directory: ${projectDir}`);
38
+ process.exit(1);
39
+ }
40
+ runAgentDive({ loop, projectDir, prompts });
41
+ return;
42
+ }
@@ -0,0 +1,2 @@
1
+ /** Runs a `browser` subcommand; false when it is a session op for session-ops.ts. */
2
+ export declare function browserCase(args: string[]): Promise<boolean>;
@@ -0,0 +1,109 @@
1
+ // `waygraph browser start | sessions | stop`: start a detached session, list them, stop them. The session ops
2
+ // (send, status, ...) are session-ops.ts.
3
+ import { existsSync } from "node:fs";
4
+ import { resolve } from "node:path";
5
+ import { envString } from "../../engine/env.js";
6
+ import { listBrowserSessions, stopAllBrowserSessions, stopBrowserSession } from "../../live/auto-session/files.js";
7
+ import { runAttachLoop } from "../../live/auto-session/ipc.js";
8
+ import { browserStart } from "../../live/auto-session/start.js";
9
+ import { resolveInjectRoots } from "../../manifest/roots.js";
10
+ import { resolveBaseUrl } from "../../runtime/waygraph-config.js";
11
+ import { parseCommand } from "../args.js";
12
+ import { applyRunFlags, parseRunFlags } from "../flags.js";
13
+ import { printBrowserSessionsList, printBrowserUsage } from "../usage.js";
14
+ /** Runs a `browser` subcommand; false when it is a session op for session-ops.ts. */
15
+ export async function browserCase(args) {
16
+ const sub = args[1];
17
+ if (sub === "sessions") {
18
+ const { values, positionals: positional } = parseCommand("sessions", { json: { type: "boolean", help: "Machine-readable JSON" } }, args.slice(2));
19
+ const json = values.json === true;
20
+ const proj = resolve(positional[0] ?? process.cwd());
21
+ const sessions = listBrowserSessions(proj);
22
+ if (json) {
23
+ console.log(JSON.stringify(sessions, null, 2));
24
+ }
25
+ else {
26
+ printBrowserSessionsList(sessions, proj);
27
+ }
28
+ return true;
29
+ }
30
+ if (sub === "stop") {
31
+ const proj = resolve(args[3] ?? process.cwd());
32
+ const target = args[2];
33
+ if (!target) {
34
+ console.error("waygraph browser stop: usage: waygraph browser stop <sessionId|--all> [project]");
35
+ process.exit(1);
36
+ }
37
+ if (target === "--all") {
38
+ const n = stopAllBrowserSessions(proj);
39
+ console.log(JSON.stringify({ stopped: n, projectDir: proj }));
40
+ return true;
41
+ }
42
+ if (!stopBrowserSession(proj, target)) {
43
+ console.error(`waygraph browser stop: no such session "${target}"`);
44
+ process.exit(1);
45
+ }
46
+ console.log(JSON.stringify({ stopped: target }));
47
+ return true;
48
+ }
49
+ if (!sub) {
50
+ printBrowserUsage();
51
+ return true;
52
+ }
53
+ if (sub === "start" || sub.startsWith("-")) {
54
+ const flagArgs = sub === "start" ? args.slice(2) : args.slice(1);
55
+ const flags = parseRunFlags(flagArgs, "browser");
56
+ applyRunFlags(flags);
57
+ const proj = resolve(flags.positionals[0] ?? process.cwd());
58
+ if (!existsSync(proj)) {
59
+ console.error(`waygraph browser: no such directory: ${proj}`);
60
+ process.exit(1);
61
+ }
62
+ const baseURL = flags.baseUrl ?? envString("WAYGRAPH_BASE_URL") ?? (await resolveBaseUrl(proj));
63
+ try {
64
+ const inject = flags.inject?.length ? resolveInjectRoots(flags.inject, proj) : undefined;
65
+ const result = await browserStart({
66
+ projectDir: proj,
67
+ ...(inject?.length ? { inject } : {}),
68
+ ...(baseURL ? { baseURL } : {}),
69
+ ...(flags.goto
70
+ ? { startUrl: flags.goto, skipInitialNavigation: false }
71
+ : { skipInitialNavigation: flags.blank !== false }),
72
+ headless: flags.headlessBrowser === true,
73
+ });
74
+ console.log(JSON.stringify(result));
75
+ if (!result.headless) {
76
+ console.error(`Session ${result.sessionId} started. List all: waygraph browser sessions`);
77
+ }
78
+ if (flags.cli) {
79
+ await runAttachLoop(proj, result.sessionId);
80
+ }
81
+ }
82
+ catch (err) {
83
+ console.error(`waygraph browser start: ${err instanceof Error ? err.message : String(err)}`);
84
+ process.exit(1);
85
+ }
86
+ return true;
87
+ }
88
+ if (sub !== "send" &&
89
+ sub !== "status" &&
90
+ sub !== "attach" &&
91
+ sub !== "dom" &&
92
+ sub !== "trace" &&
93
+ sub !== "console" &&
94
+ sub !== "storage" &&
95
+ sub !== "upload" &&
96
+ sub !== "click" &&
97
+ sub !== "type" &&
98
+ sub !== "press" &&
99
+ sub !== "goto" &&
100
+ sub !== "reload" &&
101
+ sub !== "reach" &&
102
+ sub !== "resync" &&
103
+ sub !== "highlight") {
104
+ console.error("waygraph browser: unknown subcommand — run `waygraph browser` for usage");
105
+ printBrowserUsage();
106
+ process.exit(1);
107
+ }
108
+ return false;
109
+ }
@@ -1,4 +1,3 @@
1
- export declare function runChainAuto(projectDir: string, fromTag: string, toTag: string): Promise<void>;
2
1
  export declare function validateCase(args: string[]): Promise<void>;
3
2
  export declare function typecheckCase(args: string[]): Promise<void>;
4
3
  export declare function checkCase(args: string[]): Promise<void>;
@@ -0,0 +1,104 @@
1
+ import { relative, resolve } from "node:path";
2
+ import { findOrphanBlocks } from "../../analysis/graph.js";
3
+ import { checkMapGroups, checkProject, validateFlows } from "../../analysis/check.js";
4
+ import { parseRunFlags } from "../flags.js";
5
+ import { walkDir } from "../../manifest/scan.js";
6
+ import { collectPracticeWarnings, practiceKindLabel } from "../../analysis/practices-check.js";
7
+ function printOrphanReport(projectDir, orphans) {
8
+ if (orphans.length === 0) {
9
+ console.log(`waygraph check: no orphan Blocks (every *.block.ts export is wired into a flow)`);
10
+ return;
11
+ }
12
+ for (const o of orphans) {
13
+ console.warn(`waygraph check: orphan Block ${o.file} (${o.exportName} / "${o.block}") is not used in any flow - wire it into a .flow.ts before chain auto shorthand`);
14
+ }
15
+ console.log(`waygraph check: ${orphans.length} orphan Block${orphans.length === 1 ? "" : "s"}`);
16
+ }
17
+ function printPracticeReport(projectDir, practiceWarnings) {
18
+ if (practiceWarnings.length === 0) {
19
+ console.log(`waygraph check: no bad-practice patterns under ${projectDir}`);
20
+ return;
21
+ }
22
+ for (const w of practiceWarnings) {
23
+ console.warn(`waygraph check: ${w.file} (${practiceKindLabel(w.kind)}) — ${w.detail}`);
24
+ }
25
+ console.log(`waygraph check: ${practiceWarnings.length} bad-practice warning${practiceWarnings.length === 1 ? "" : "s"}`);
26
+ }
27
+ async function runTypecheckCommand(projectDir, noPractices) {
28
+ const { spawnSync } = await import("node:child_process");
29
+ const tsc = spawnSync("npx", ["tsc", "--noEmit"], {
30
+ cwd: projectDir,
31
+ stdio: "inherit",
32
+ shell: false,
33
+ });
34
+ if (tsc.status !== 0) {
35
+ process.exit(tsc.status === null ? 1 : tsc.status);
36
+ }
37
+ if (noPractices)
38
+ return;
39
+ const practiceWarnings = collectPracticeWarnings(projectDir, walkDir);
40
+ printPracticeReport(projectDir, practiceWarnings);
41
+ }
42
+ export async function validateCase(args) {
43
+ const proj = resolve(args[1] ?? process.cwd());
44
+ const results = await validateFlows(proj);
45
+ let failed = 0;
46
+ for (const r of results) {
47
+ const rel = relative(proj, r.file);
48
+ if (r.valid) {
49
+ console.log(`OK ${rel} ${r.name}`);
50
+ }
51
+ else {
52
+ failed++;
53
+ console.log(`FAIL ${rel} ${r.name} -- ${r.error}`);
54
+ }
55
+ }
56
+ if (failed > 0)
57
+ process.exitCode = 1;
58
+ return;
59
+ }
60
+ export async function typecheckCase(args) {
61
+ const flags = parseRunFlags(args.slice(1), args[0] ?? "check");
62
+ const proj = resolve(flags.positionals[0] ?? process.cwd());
63
+ await runTypecheckCommand(proj, flags.noPractices === true);
64
+ return;
65
+ }
66
+ export async function checkCase(args) {
67
+ const flags = parseRunFlags(args.slice(1), args[0] ?? "check");
68
+ const proj = resolve(flags.positionals[0] ?? process.cwd());
69
+ const { navWarnings, selWarnings, practiceWarnings } = await checkProject(proj, flags.noPractices ? { noPractices: true } : undefined);
70
+ if (navWarnings.length === 0) {
71
+ console.log(`waygraph check: no navigation found outside NavBlocks under ${proj}`);
72
+ }
73
+ else {
74
+ for (const w of navWarnings) {
75
+ const rel = relative(proj, w.file);
76
+ console.warn(`waygraph check: ${rel} (${w.blockName}) calls page.goto/reload/goBack/goForward outside a NavBlock - consider defineNavBlock instead`);
77
+ }
78
+ console.log(`waygraph check: ${navWarnings.length} nav warning${navWarnings.length === 1 ? "" : "s"}`);
79
+ }
80
+ if (selWarnings.length === 0) {
81
+ console.log(`waygraph check: no inline selectors found in verify arrays under ${proj}`);
82
+ }
83
+ else {
84
+ for (const w of selWarnings) {
85
+ const rel = relative(proj, w.file);
86
+ console.warn(`waygraph check: ${rel} (${w.blockName}) has an inline selector literal in verify - move it into a *Sel object`);
87
+ }
88
+ console.log(`waygraph check: ${selWarnings.length} inline-selector warning${selWarnings.length === 1 ? "" : "s"}`);
89
+ }
90
+ if (!flags.noPractices) {
91
+ printPracticeReport(proj, practiceWarnings);
92
+ }
93
+ const groupProblems = checkMapGroups(proj);
94
+ for (const p of groupProblems) {
95
+ console.warn(`waygraph check: ${relative(proj, p.file)} imports "${p.spec}" from outside map group ${p.group} - a group imports only waygraph and its own files, so it can be packed`);
96
+ }
97
+ if (groupProblems.length > 0)
98
+ console.log(`waygraph check: ${groupProblems.length} map group import warning${groupProblems.length === 1 ? "" : "s"}`);
99
+ const orphans = await findOrphanBlocks(proj);
100
+ printOrphanReport(proj, orphans);
101
+ // Warnings only - never fail exit code. Orphans are reported for
102
+ // human/agent cleanup; chain auto refuses while any remain.
103
+ return;
104
+ }
@@ -0,0 +1,18 @@
1
+ /** Checkpoint name -> tag, and union aliases -> member names, found in the states files. */
2
+ interface StatesInfo {
3
+ tags: Map<string, string>;
4
+ unions: Map<string, string[]>;
5
+ }
6
+ /** Rewrites one states file; returns the new text and what it declared. */
7
+ export declare function convertStates(text: string, info: StatesInfo): string;
8
+ /** Rewrites one Block file. Calls whose Checkpoints are not plain declared names are left as they are. */
9
+ export declare function convertBlocks(text: string, info: StatesInfo): {
10
+ text: string;
11
+ skipped: string[];
12
+ };
13
+ /** Runs the codemod over a project; returns the files changed and the calls it left alone. */
14
+ export declare function codemodCheckpoints(projectDir: string): {
15
+ changed: string[];
16
+ skipped: string[];
17
+ };
18
+ export {};