waygraph 0.15.54 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/README.md +8 -3
  2. package/bin/waygraph +2 -2
  3. package/dist/analysis/check.d.ts +38 -0
  4. package/dist/analysis/check.js +87 -0
  5. package/dist/analysis/coverage-gap.d.ts +1 -1
  6. package/dist/analysis/coverage-gap.js +14 -37
  7. package/dist/analysis/flow-source.d.ts +9 -0
  8. package/dist/analysis/flow-source.js +25 -0
  9. package/dist/analysis/graph.d.ts +10 -14
  10. package/dist/analysis/graph.js +48 -371
  11. package/dist/analysis/map-check.js +4 -39
  12. package/dist/analysis/practices-check.d.ts +1 -1
  13. package/dist/analysis/practices-check.js +24 -45
  14. package/dist/cli/args.d.ts +23 -0
  15. package/dist/cli/args.js +20 -0
  16. package/dist/{cli.d.ts → cli/cli.d.ts} +0 -1
  17. package/dist/{cli.js → cli/cli.js} +10 -9
  18. package/dist/{commands → cli/commands}/agent-dive-scaffold.js +35 -64
  19. package/dist/cli/commands/agent-dive.js +42 -0
  20. package/dist/{commands → cli/commands}/check.d.ts +0 -1
  21. package/dist/cli/commands/check.js +104 -0
  22. package/dist/cli/commands/codemod-checkpoints.d.ts +18 -0
  23. package/dist/cli/commands/codemod-checkpoints.js +186 -0
  24. package/dist/cli/commands/codemod-flows.d.ts +18 -0
  25. package/dist/cli/commands/codemod-flows.js +284 -0
  26. package/dist/cli/commands/codemod-stubs.d.ts +10 -0
  27. package/dist/cli/commands/codemod-stubs.js +187 -0
  28. package/dist/{commands → cli/commands}/extensions.js +5 -4
  29. package/dist/{commands → cli/commands}/init.js +1 -2
  30. package/dist/{commands → cli/commands}/list.js +9 -7
  31. package/dist/cli/commands/manifest.d.ts +2 -0
  32. package/dist/cli/commands/manifest.js +20 -0
  33. package/dist/cli/commands/map.js +57 -0
  34. package/dist/{commands → cli/commands}/run.d.ts +0 -1
  35. package/dist/cli/commands/run.js +64 -0
  36. package/dist/{commands → cli/commands}/session.js +61 -88
  37. package/dist/{commands → cli/commands}/test.js +11 -14
  38. package/dist/cli/commands/traverse.js +105 -0
  39. package/dist/{commands → cli/commands}/try.js +29 -25
  40. package/dist/{commands → cli/commands}/upgrade.js +40 -4
  41. package/dist/cli/flags.d.ts +193 -16
  42. package/dist/cli/flags.js +179 -234
  43. package/dist/cli/run-chain.d.ts +1 -0
  44. package/dist/cli/run-chain.js +42 -7
  45. package/dist/cli/usage.d.ts +1 -1
  46. package/dist/cli/usage.js +21 -53
  47. package/dist/cli/util.d.ts +2 -2
  48. package/dist/cli/util.js +2 -3
  49. package/dist/{highlights → demo/narration}/css.d.ts +1 -1
  50. package/dist/{highlights → demo/narration}/css.js +2 -3
  51. package/dist/{highlights → demo/narration}/demo-pace.d.ts +3 -11
  52. package/dist/{highlights → demo/narration}/demo-pace.js +5 -11
  53. package/dist/{highlights → demo/narration}/device.d.ts +2 -2
  54. package/dist/{highlights → demo/narration}/device.js +1 -1
  55. package/dist/demo/narration/merge.d.ts +8 -0
  56. package/dist/demo/narration/merge.js +71 -0
  57. package/dist/{highlights/run-phase.d.ts → demo/narration/narration.d.ts} +10 -14
  58. package/dist/{highlights/run-phase.js → demo/narration/narration.js} +25 -94
  59. package/dist/{highlights → demo/narration}/shorthand.d.ts +1 -1
  60. package/dist/demo/narration/stub-ctx.d.ts +8 -0
  61. package/dist/demo/narration/stub-ctx.js +164 -0
  62. package/dist/{highlights → demo/narration}/style.d.ts +1 -7
  63. package/dist/{highlights → demo/narration}/style.js +1 -41
  64. package/dist/{highlights → demo/narration}/todo-dock.d.ts +3 -3
  65. package/dist/{highlights → demo/narration}/todo-dock.js +13 -30
  66. package/dist/demo/overlay/auto-chrome.d.ts +7 -0
  67. package/dist/demo/overlay/auto-chrome.js +97 -0
  68. package/dist/demo/overlay/cursor.d.ts +12 -0
  69. package/dist/demo/overlay/cursor.js +142 -0
  70. package/dist/demo/overlay/device-stage.d.ts +13 -0
  71. package/dist/demo/overlay/device-stage.js +396 -0
  72. package/dist/demo/overlay/inpage/banner.d.ts +1 -0
  73. package/dist/demo/overlay/inpage/banner.js +160 -0
  74. package/dist/demo/overlay/inpage/caption.d.ts +2 -0
  75. package/dist/demo/overlay/inpage/caption.js +24 -0
  76. package/dist/demo/overlay/inpage/core.d.ts +1 -0
  77. package/dist/demo/overlay/inpage/core.js +345 -0
  78. package/dist/demo/overlay/inpage/device-chip.d.ts +1 -0
  79. package/dist/demo/overlay/inpage/device-chip.js +191 -0
  80. package/dist/demo/overlay/inpage/network.d.ts +9 -0
  81. package/dist/demo/overlay/inpage/network.js +200 -0
  82. package/dist/demo/overlay/inpage/panel-chrome.d.ts +1 -0
  83. package/dist/demo/overlay/inpage/panel-chrome.js +203 -0
  84. package/dist/demo/overlay/inpage/stamp.d.ts +1 -0
  85. package/dist/demo/overlay/inpage/stamp.js +46 -0
  86. package/dist/demo/overlay/inpage/swipe-zoom.d.ts +1 -0
  87. package/dist/demo/overlay/inpage/swipe-zoom.js +220 -0
  88. package/dist/demo/overlay/inpage/todos.d.ts +1 -0
  89. package/dist/demo/overlay/inpage/todos.js +294 -0
  90. package/dist/demo/overlay/locator-theater.d.ts +25 -0
  91. package/dist/demo/overlay/locator-theater.js +76 -0
  92. package/dist/demo/overlay/network-capture.d.ts +22 -0
  93. package/dist/demo/overlay/network-capture.js +127 -0
  94. package/dist/demo/overlay/overlay-css.d.ts +3 -0
  95. package/dist/demo/overlay/overlay-css.js +369 -0
  96. package/dist/demo/overlay/overlay-stage.d.ts +23 -0
  97. package/dist/demo/overlay/overlay-stage.js +106 -0
  98. package/dist/demo/overlay/overlay.d.ts +10 -0
  99. package/dist/demo/overlay/overlay.js +89 -0
  100. package/dist/{pilot-overlay/overlay-fixtures.d.ts → demo/overlay/phase-fixtures.d.ts} +2 -2
  101. package/dist/{pilot-overlay/overlay-fixtures.js → demo/overlay/phase-fixtures.js} +2 -2
  102. package/dist/{pilot-overlay/action-ring.js → demo/overlay/pilot/actions.js} +2 -1
  103. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.d.ts +6 -5
  104. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.js +19 -18
  105. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.d.ts +2 -2
  106. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.js +13 -22
  107. package/dist/demo/overlay/reattach.d.ts +7 -0
  108. package/dist/demo/overlay/reattach.js +23 -0
  109. package/dist/demo/overlay/rings.d.ts +33 -0
  110. package/dist/demo/overlay/rings.js +448 -0
  111. package/dist/{ui → demo/overlay/ui}/components/ring.js +2 -2
  112. package/dist/{ui → demo/overlay/ui}/overlay.css +4 -4
  113. package/dist/{ui → demo/overlay/ui}/shadow.d.ts +1 -1
  114. package/dist/{ui → demo/overlay/ui}/shadow.js +39 -2
  115. package/dist/demo/stepper/after.d.ts +3 -0
  116. package/dist/demo/stepper/after.js +113 -0
  117. package/dist/demo/stepper/banner-log.d.ts +37 -0
  118. package/dist/demo/stepper/banner-log.js +63 -0
  119. package/dist/demo/stepper/before.d.ts +4 -0
  120. package/dist/demo/stepper/before.js +110 -0
  121. package/dist/demo/stepper/demo-log.d.ts +31 -0
  122. package/dist/demo/stepper/demo-log.js +309 -0
  123. package/dist/demo/stepper/gate.d.ts +11 -0
  124. package/dist/demo/stepper/gate.js +78 -0
  125. package/dist/demo/stepper/interaction-patch.d.ts +3 -0
  126. package/dist/demo/stepper/interaction-patch.js +323 -0
  127. package/dist/demo/stepper/pacing.d.ts +21 -0
  128. package/dist/demo/stepper/pacing.js +23 -0
  129. package/dist/demo/stepper/slides.d.ts +11 -0
  130. package/dist/demo/stepper/slides.js +233 -0
  131. package/dist/demo/stepper/step-panels.d.ts +21 -0
  132. package/dist/demo/stepper/step-panels.js +589 -0
  133. package/dist/demo/stepper/stepper.d.ts +24 -0
  134. package/dist/demo/stepper/stepper.js +122 -0
  135. package/dist/demo/stepper/teardown.d.ts +48 -0
  136. package/dist/demo/stepper/teardown.js +179 -0
  137. package/dist/demo/stepper/todo-advance.d.ts +14 -0
  138. package/dist/demo/stepper/todo-advance.js +110 -0
  139. package/dist/demo/stepper/view.d.ts +68 -0
  140. package/dist/demo/stepper/view.js +31 -0
  141. package/dist/demo/types.d.ts +17 -0
  142. package/dist/demo/verbose-log.js +15 -0
  143. package/dist/{types.d.ts → engine/block/block.d.ts} +106 -91
  144. package/dist/{core → engine/block}/block.js +10 -53
  145. package/dist/{core → engine/block}/compose.d.ts +9 -7
  146. package/dist/{core → engine/block}/compose.js +1 -1
  147. package/dist/{core/blocks → engine/block/kinds}/api.d.ts +16 -12
  148. package/dist/{core/blocks → engine/block/kinds}/api.js +26 -18
  149. package/dist/{core/blocks → engine/block/kinds}/effect.d.ts +13 -18
  150. package/dist/engine/block/kinds/effect.js +17 -0
  151. package/dist/{core/blocks → engine/block/kinds}/method.d.ts +17 -29
  152. package/dist/{core/blocks → engine/block/kinds}/method.js +6 -21
  153. package/dist/{core/blocks → engine/block/kinds}/nav.d.ts +21 -31
  154. package/dist/{core/blocks → engine/block/kinds}/nav.js +6 -12
  155. package/dist/{core/blocks → engine/block/kinds}/page.d.ts +14 -20
  156. package/dist/{core/blocks → engine/block/kinds}/page.js +5 -7
  157. package/dist/engine/checkpoint/checkpoint.d.ts +22 -0
  158. package/dist/engine/checkpoint/checkpoint.js +8 -0
  159. package/dist/engine/checkpoint/route.d.ts +28 -0
  160. package/dist/engine/checkpoint/route.js +28 -0
  161. package/dist/{core → engine}/config.d.ts +7 -2
  162. package/dist/engine/config.js +6 -0
  163. package/dist/engine/engine.d.ts +45 -0
  164. package/dist/{core → engine}/engine.js +6 -10
  165. package/dist/engine/env.d.ts +59 -0
  166. package/dist/engine/env.js +83 -0
  167. package/dist/{errors.d.ts → engine/errors.d.ts} +22 -22
  168. package/dist/{errors.js → engine/errors.js} +22 -22
  169. package/dist/{core → engine/flow}/branch-regression.d.ts +7 -7
  170. package/dist/{core → engine/flow}/branch-regression.js +4 -3
  171. package/dist/engine/flow/flow.d.ts +162 -0
  172. package/dist/engine/flow/flow.js +244 -0
  173. package/dist/{core → engine/flow}/map-builder.d.ts +34 -39
  174. package/dist/{core → engine/flow}/map-builder.js +45 -47
  175. package/dist/{core → engine}/locate.d.ts +1 -1
  176. package/dist/{core → engine}/locate.js +1 -2
  177. package/dist/{mem-stub.d.ts → engine/mem/mem-stub.d.ts} +9 -8
  178. package/dist/{mem-stub.js → engine/mem/mem-stub.js} +2 -2
  179. package/dist/{mem-page.d.ts → engine/mem/mem.d.ts} +1 -1
  180. package/dist/{mem-page.js → engine/mem/mem.js} +2 -1
  181. package/dist/engine/page-gone.d.ts +5 -0
  182. package/dist/engine/page-gone.js +20 -0
  183. package/dist/engine/run/connect.d.ts +28 -0
  184. package/dist/{types.js → engine/run/connect.js} +11 -10
  185. package/dist/engine/run/events.d.ts +67 -0
  186. package/dist/engine/run/events.js +90 -0
  187. package/dist/engine/run/hooks.d.ts +16 -0
  188. package/dist/engine/run/hooks.js +8 -0
  189. package/dist/engine/run/launch.d.ts +13 -0
  190. package/dist/engine/run/launch.js +27 -0
  191. package/dist/{core/run-graph.d.ts → engine/run/run.d.ts} +8 -12
  192. package/dist/{core/run-graph.js → engine/run/run.js} +22 -12
  193. package/dist/engine/stub/pace.d.ts +12 -0
  194. package/dist/engine/stub/pace.js +2 -0
  195. package/dist/engine/stub/ring.d.ts +130 -0
  196. package/dist/engine/stub/ring.js +41 -0
  197. package/dist/engine/stub/stub.d.ts +268 -0
  198. package/dist/engine/stub/stub.js +1 -0
  199. package/dist/engine/stub/todos.d.ts +104 -0
  200. package/dist/engine/stub/todos.js +2 -0
  201. package/dist/engine/stub/viewport.d.ts +26 -0
  202. package/dist/engine/stub/viewport.js +2 -0
  203. package/dist/{trait.d.ts → engine/trait/trait.d.ts} +1 -1
  204. package/dist/index.d.ts +84 -36
  205. package/dist/index.js +44 -19
  206. package/dist/{session/auto-explore-run.d.ts → live/auto/auto.d.ts} +10 -16
  207. package/dist/{session/auto-explore-run.js → live/auto/auto.js} +164 -254
  208. package/dist/{session/auto-explore.d.ts → live/auto/explore.d.ts} +4 -14
  209. package/dist/{session/auto-explore.js → live/auto/explore.js} +21 -127
  210. package/dist/{auto-session/session.d.ts → live/auto-session/auto-session.d.ts} +1 -1
  211. package/dist/{auto-session/session.js → live/auto-session/auto-session.js} +27 -24
  212. package/dist/{auto-session → live/auto-session}/helpers.d.ts +6 -5
  213. package/dist/{auto-session → live/auto-session}/helpers.js +1 -1
  214. package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +7 -5
  215. package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +31 -16
  216. package/dist/{session/browser.d.ts → live/auto-session/start.d.ts} +1 -2
  217. package/dist/{session/browser.js → live/auto-session/start.js} +2 -3
  218. package/dist/{pilot-overlay → live/pilot}/panel.d.ts +1 -1
  219. package/dist/{pilot-overlay → live/pilot}/panel.js +23 -31
  220. package/dist/{session → live/pilot}/pilot.d.ts +3 -3
  221. package/dist/{session → live/pilot}/pilot.js +4 -4
  222. package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +1 -1
  223. package/dist/{traverse/run.js → live/traverse/traverse.js} +26 -43
  224. package/dist/manifest/manifest.d.ts +52 -0
  225. package/dist/manifest/manifest.js +93 -0
  226. package/dist/manifest/map-imports.d.ts +7 -0
  227. package/dist/manifest/map-imports.js +22 -0
  228. package/dist/manifest/maps.d.ts +33 -0
  229. package/dist/manifest/maps.js +62 -0
  230. package/dist/manifest/pack.d.ts +21 -0
  231. package/dist/manifest/pack.js +109 -0
  232. package/dist/manifest/project.d.ts +60 -0
  233. package/dist/manifest/project.js +101 -0
  234. package/dist/{session/block-inject.js → manifest/roots.js} +1 -18
  235. package/dist/manifest/scan.d.ts +19 -0
  236. package/dist/manifest/scan.js +57 -0
  237. package/dist/manifest/source.d.ts +23 -0
  238. package/dist/manifest/source.js +86 -0
  239. package/dist/runner/mode.d.ts +71 -0
  240. package/dist/runner/mode.js +1 -0
  241. package/dist/runner/modes/branches.d.ts +5 -0
  242. package/dist/runner/modes/branches.js +37 -0
  243. package/dist/runner/modes/demo.d.ts +3 -0
  244. package/dist/runner/modes/demo.js +13 -0
  245. package/dist/runner/modes/report.d.ts +2 -0
  246. package/dist/runner/modes/report.js +54 -0
  247. package/dist/runner/modes/run.d.ts +2 -0
  248. package/dist/runner/modes/run.js +3 -0
  249. package/dist/runner/options.d.ts +31 -0
  250. package/dist/runner/options.js +42 -0
  251. package/dist/runner/plan/find.d.ts +18 -0
  252. package/dist/runner/plan/find.js +65 -0
  253. package/dist/runner/plan/plan.d.ts +11 -0
  254. package/dist/runner/plan/plan.js +97 -0
  255. package/dist/runner/plan/seed-mem.d.ts +12 -0
  256. package/dist/runner/plan/seed-mem.js +98 -0
  257. package/dist/runner/plan/spec.d.ts +5 -0
  258. package/dist/runner/plan/spec.js +17 -0
  259. package/dist/runner/play-steps.d.ts +2 -0
  260. package/dist/runner/play-steps.js +59 -0
  261. package/dist/runner/runner.d.ts +4 -0
  262. package/dist/runner/runner.js +64 -0
  263. package/dist/runner/session.d.ts +9 -0
  264. package/dist/runner/session.js +87 -0
  265. package/dist/{browser.js → runtime/browser.js} +4 -2
  266. package/dist/{env-file.js → runtime/env-file.js} +7 -12
  267. package/dist/{extensions.d.ts → runtime/extensions.d.ts} +1 -5
  268. package/dist/{extensions.js → runtime/extensions.js} +2 -1
  269. package/dist/runtime/full-launch.d.ts +1 -0
  270. package/dist/runtime/full-launch.js +34 -0
  271. package/dist/runtime/global-flag.d.ts +5 -0
  272. package/dist/runtime/global-flag.js +18 -0
  273. package/dist/{playwright-config.d.ts → runtime/playwright-config.d.ts} +1 -1
  274. package/dist/{playwright.config.js → runtime/playwright.config.js} +3 -2
  275. package/dist/runtime/run-log.d.ts +2 -0
  276. package/dist/runtime/run-log.js +17 -0
  277. package/dist/{video-dir.js → runtime/video-dir.js} +3 -2
  278. package/dist/{config.d.ts → runtime/waygraph-config.d.ts} +6 -9
  279. package/dist/{config.js → runtime/waygraph-config.js} +21 -51
  280. package/dist/{webserver.js → runtime/webserver.js} +5 -30
  281. package/examples/routed-demo/config/waygraph.config.ts +20 -0
  282. package/examples/routed-demo/package.json +1 -4
  283. package/examples/routed-demo/scripts/fixture-server.mjs +1 -1
  284. package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +2 -4
  285. package/examples/routed-demo/src/flows/routed-demo.flow.ts +1 -2
  286. package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +5 -4
  287. package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +3 -3
  288. package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +3 -3
  289. package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +3 -3
  290. package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +3 -3
  291. package/examples/routed-demo/src/states/routed-demo.states.ts +5 -3
  292. package/examples/routed-demo/tests/routed-demo.spec.ts +4 -4
  293. package/examples/routed-demo/tsconfig.json +1 -1
  294. package/examples/saucedemo/docs/CONVENTION.md +4 -5
  295. package/examples/saucedemo/docs/HELPERS.md +11 -11
  296. package/examples/saucedemo/src/blocks/SITE-MAP.md +0 -1
  297. package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +1 -5
  298. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
  299. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  300. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  301. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  302. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  303. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  304. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
  305. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
  306. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  307. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
  308. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  309. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  310. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  311. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  312. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  313. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  314. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
  315. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
  316. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
  317. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  318. package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  319. package/examples/saucedemo/src/flows/api-demo.flow.ts +12 -10
  320. package/examples/saucedemo/src/states/checkout.states.ts +21 -11
  321. package/examples/saucedemo/src/stubs/device-showcase.ts +8 -10
  322. package/examples/saucedemo/tests/auto-graph.spec.ts +4 -12
  323. package/package.json +10 -6
  324. package/templates/agents/waygraph-planner.agent.md +2 -2
  325. package/templates/quickstart/docs/CONVENTION.md +4 -4
  326. package/templates/quickstart/docs/HELPERS.md +10 -8
  327. package/templates/quickstart/package.json +0 -3
  328. package/templates/quickstart/src/blocks/SITE-MAP.md +0 -1
  329. package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +1 -5
  330. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
  331. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  332. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  333. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  334. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  335. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  336. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
  337. package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
  338. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  339. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
  340. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  341. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  342. package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  343. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  344. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  345. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  346. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
  347. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
  348. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
  349. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  350. package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  351. package/templates/quickstart/src/flows/api-demo.flow.ts +12 -10
  352. package/templates/quickstart/src/states/checkout.states.ts +21 -11
  353. package/templates/quickstart/src/stubs/device-showcase.ts +8 -10
  354. package/templates/scaffold/README.md +2 -1
  355. package/templates/scaffold/STRUCTURE.md +5 -4
  356. package/templates/scaffold/config/waygraph.config.ts +1 -0
  357. package/templates/scaffold/gitignore +1 -0
  358. package/templates/scaffold/src/flows/README.md +2 -2
  359. package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +3 -3
  360. package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +3 -3
  361. package/templates/scaffold/src/map/(app_base)/home/_methods/add-item.effect.block.ts +4 -4
  362. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +3 -3
  363. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +3 -3
  364. package/templates/scaffold/src/map/(app_base)/home/_methods/clear-cart.method.block.ts +5 -4
  365. package/templates/scaffold/src/map/(app_base)/home/_methods/remove-item.effect.block.ts +4 -4
  366. package/templates/scaffold/src/map/(app_base)/home/_nav.block.ts +3 -3
  367. package/templates/scaffold/src/map/(app_base)/home/_page.block.ts +3 -3
  368. package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +4 -4
  369. package/templates/scaffold/src/map/(external)/hoppscotch/_keys.ts +21 -0
  370. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-body.method.block.ts +4 -4
  371. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-header.method.block.ts +4 -4
  372. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-status.method.block.ts +4 -4
  373. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/pick-extension-interceptor.method.block.ts +5 -4
  374. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-body.method.block.ts +6 -5
  375. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-headers.method.block.ts +6 -5
  376. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/send-request.method.block.ts +5 -4
  377. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-bearer-token.method.block.ts +6 -5
  378. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-headers.method.block.ts +6 -5
  379. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-json-body.method.block.ts +6 -5
  380. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-method.method.block.ts +6 -5
  381. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-query-params.method.block.ts +6 -5
  382. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-url.method.block.ts +6 -5
  383. package/templates/scaffold/src/map/(external)/hoppscotch/_nav.block.ts +3 -3
  384. package/templates/scaffold/src/map/(external)/hoppscotch/_page.block.ts +3 -3
  385. package/templates/scaffold/src/map/(external)/hoppscotch/_states.ts +6 -0
  386. package/templates/scaffold/src/map/(external)/hoppscotch/settings/_nav.block.ts +3 -3
  387. package/templates/scaffold/src/map/(external)/mailpit/_keys.ts +13 -0
  388. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +4 -4
  389. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +4 -4
  390. package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +6 -5
  391. package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +6 -5
  392. package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +3 -3
  393. package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +3 -3
  394. package/templates/scaffold/src/map/(external)/mailpit/_states.ts +9 -0
  395. package/templates/scaffold/src/map/README.md +7 -0
  396. package/templates/scaffold/src/states/README.md +4 -1
  397. package/templates/scaffold/src/states/demo.mem-keys.ts +1 -29
  398. package/templates/scaffold/src/states/demo.states.ts +14 -20
  399. package/templates/scaffold/tests/hoppscotch.spec.ts +1 -11
  400. package/templates/scaffold/tests/mail-verify.spec.ts +2 -2
  401. package/templates/skills/waygraph-blind-pilot.skill.md +2 -6
  402. package/templates/skills/waygraph-convention.skill.md +23 -14
  403. package/templates/skills/waygraph-pilot.skill.md +7 -4
  404. package/dist/auto-session/verbose-log.js +0 -16
  405. package/dist/auto-session.d.ts +0 -2
  406. package/dist/auto-session.js +0 -3
  407. package/dist/cli/discover.d.ts +0 -40
  408. package/dist/cli/discover.js +0 -148
  409. package/dist/commands/agent-dive.js +0 -52
  410. package/dist/commands/check.js +0 -192
  411. package/dist/commands/map.js +0 -29
  412. package/dist/commands/run.js +0 -104
  413. package/dist/commands/traverse.js +0 -177
  414. package/dist/core/block.d.ts +0 -109
  415. package/dist/core/blocks/effect.js +0 -23
  416. package/dist/core/config.js +0 -17
  417. package/dist/core/engine.d.ts +0 -198
  418. package/dist/core/flow.d.ts +0 -294
  419. package/dist/core/flow.js +0 -432
  420. package/dist/core.d.ts +0 -14
  421. package/dist/core.js +0 -15
  422. package/dist/highlights/merge.d.ts +0 -8
  423. package/dist/highlights/merge.js +0 -173
  424. package/dist/highlights/stub-ctx.d.ts +0 -10
  425. package/dist/highlights/stub-ctx.js +0 -331
  426. package/dist/highlights/types.d.ts +0 -613
  427. package/dist/highlights.d.ts +0 -9
  428. package/dist/highlights.js +0 -10
  429. package/dist/pilot-overlay.d.ts +0 -5
  430. package/dist/pilot-overlay.js +0 -6
  431. package/dist/runner/banner-log.js +0 -63
  432. package/dist/runner/chain-run.js +0 -102
  433. package/dist/runner/cursor.js +0 -140
  434. package/dist/runner/demo-log.js +0 -316
  435. package/dist/runner/device-stage.d.ts +0 -9
  436. package/dist/runner/device-stage.js +0 -420
  437. package/dist/runner/discovery.js +0 -105
  438. package/dist/runner/index.js +0 -2
  439. package/dist/runner/inpage/banner.d.ts +0 -21
  440. package/dist/runner/inpage/banner.js +0 -156
  441. package/dist/runner/inpage/caption.d.ts +0 -3
  442. package/dist/runner/inpage/caption.js +0 -23
  443. package/dist/runner/inpage/core.d.ts +0 -4
  444. package/dist/runner/inpage/core.js +0 -316
  445. package/dist/runner/inpage/device.d.ts +0 -3
  446. package/dist/runner/inpage/device.js +0 -211
  447. package/dist/runner/inpage/network.d.ts +0 -15
  448. package/dist/runner/inpage/network.js +0 -217
  449. package/dist/runner/inpage/panel-chrome.js +0 -192
  450. package/dist/runner/inpage/stamp.js +0 -46
  451. package/dist/runner/inpage/swipe-zoom.js +0 -220
  452. package/dist/runner/inpage/todos.js +0 -337
  453. package/dist/runner/interaction-patch.js +0 -384
  454. package/dist/runner/main.js +0 -469
  455. package/dist/runner/network-capture.d.ts +0 -9
  456. package/dist/runner/network-capture.js +0 -126
  457. package/dist/runner/overlay-css.d.ts +0 -3
  458. package/dist/runner/overlay-css.js +0 -377
  459. package/dist/runner/overlay-install.js +0 -90
  460. package/dist/runner/overlay-stage.js +0 -110
  461. package/dist/runner/rings.js +0 -514
  462. package/dist/runner/seed-mem.js +0 -110
  463. package/dist/runner/slides.js +0 -278
  464. package/dist/runner/step-mode.js +0 -703
  465. package/dist/runner/step-panels.js +0 -729
  466. package/dist/runner/teardown.js +0 -202
  467. package/dist/runner/todo-dock.js +0 -142
  468. package/dist/session/step-overlay.d.ts +0 -37
  469. package/dist/session/step-overlay.js +0 -244
  470. package/examples/routed-demo/playwright.config.ts +0 -21
  471. package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  472. package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  473. /package/dist/{commands → cli/commands}/agent-dive-scaffold.d.ts +0 -0
  474. /package/dist/{commands → cli/commands}/agent-dive.d.ts +0 -0
  475. /package/dist/{commands → cli/commands}/extensions.d.ts +0 -0
  476. /package/dist/{commands → cli/commands}/init.d.ts +0 -0
  477. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  478. /package/dist/{commands → cli/commands}/map.d.ts +0 -0
  479. /package/dist/{commands → cli/commands}/session.d.ts +0 -0
  480. /package/dist/{commands → cli/commands}/test.d.ts +0 -0
  481. /package/dist/{commands → cli/commands}/traverse.d.ts +0 -0
  482. /package/dist/{commands → cli/commands}/try.d.ts +0 -0
  483. /package/dist/{commands → cli/commands}/upgrade.d.ts +0 -0
  484. /package/dist/{highlights → demo/narration}/shorthand.js +0 -0
  485. /package/dist/{session/overlay-beacon.d.ts → demo/overlay/beacon.d.ts} +0 -0
  486. /package/dist/{session/overlay-beacon.js → demo/overlay/beacon.js} +0 -0
  487. /package/dist/{pilot-overlay/action-ring.d.ts → demo/overlay/pilot/actions.d.ts} +0 -0
  488. /package/dist/{ui → demo/overlay/ui}/components/ring.d.ts +0 -0
  489. /package/dist/{ui → demo/overlay/ui}/stylesheet.d.ts +0 -0
  490. /package/dist/{ui → demo/overlay/ui}/stylesheet.js +0 -0
  491. /package/dist/{ui → demo/overlay/ui}/tokens.d.ts +0 -0
  492. /package/dist/{ui → demo/overlay/ui}/tokens.js +0 -0
  493. /package/dist/{highlights → demo}/types.js +0 -0
  494. /package/dist/{auto-session → demo}/verbose-log.d.ts +0 -0
  495. /package/dist/{selector.d.ts → engine/trait/selector.d.ts} +0 -0
  496. /package/dist/{selector.js → engine/trait/selector.js} +0 -0
  497. /package/dist/{trait.js → engine/trait/trait.js} +0 -0
  498. /package/dist/{traverse → live/traverse}/coverage.d.ts +0 -0
  499. /package/dist/{traverse → live/traverse}/coverage.js +0 -0
  500. /package/dist/{traverse → live/traverse}/lease.d.ts +0 -0
  501. /package/dist/{traverse → live/traverse}/lease.js +0 -0
  502. /package/dist/{session/block-inject.d.ts → manifest/roots.d.ts} +0 -0
  503. /package/dist/{blocks-select.d.ts → manifest/select.d.ts} +0 -0
  504. /package/dist/{blocks-select.js → manifest/select.js} +0 -0
  505. /package/dist/{browser.d.ts → runtime/browser.d.ts} +0 -0
  506. /package/dist/{env-file.d.ts → runtime/env-file.d.ts} +0 -0
  507. /package/dist/{playwright-config.js → runtime/playwright-config.js} +0 -0
  508. /package/dist/{playwright.config.d.ts → runtime/playwright.config.d.ts} +0 -0
  509. /package/dist/{video-dir.d.ts → runtime/video-dir.d.ts} +0 -0
  510. /package/dist/{webserver.d.ts → runtime/webserver.d.ts} +0 -0
@@ -1,62 +1,7 @@
1
- import { readdirSync, statSync } from "node:fs";
2
- import { join, relative, resolve } from "node:path";
3
- import { discoverGraph } from "../analysis/graph.js";
4
- import { exploreRoots, injectTaggedFile } from "./block-inject.js";
5
- function walkDir(dir, pattern) {
6
- const results = [];
7
- let entries;
8
- try {
9
- entries = readdirSync(dir, { withFileTypes: true });
10
- }
11
- catch {
12
- return results;
13
- }
14
- for (const entry of entries) {
15
- const full = join(dir, entry.name);
16
- if (entry.isDirectory()) {
17
- if (entry.name === "node_modules" || entry.name === "dist" || entry.name === ".git")
18
- continue;
19
- results.push(...walkDir(full, pattern));
20
- }
21
- else if (pattern.test(entry.name)) {
22
- results.push(full);
23
- }
24
- }
25
- return results;
26
- }
27
- /**
28
- * Real, confirmed bug this fixes: a bare `import(url.href)` is permanently
29
- * cached by Node's ESM loader for the lifetime of the process, keyed on the
30
- * exact specifier. `AutoSession.reloadLibrary()` exists specifically so a
31
- * Block edited on disk mid-session takes effect without restarting the
32
- * session - but a SECOND `reload` of a file already imported once in this
33
- * process silently kept returning the FIRST version's content, no matter
34
- * how many times the file changed on disk after that. A one-shot CLI
35
- * process (`waygraph graph`, etc.) never hits this - it only ever imports
36
- * each file once anyway - but a long-running `--detach` session calling
37
- * `reloadLibrary()` repeatedly does.
38
- *
39
- * Fix: bust the cache with the file's own mtime as a query param - a
40
- * genuinely changed file gets a new specifier (forcing a fresh import); an
41
- * UNCHANGED file between two reloads keeps hitting the SAME specifier (no
42
- * unbounded accumulation of dead module instances across many reloads).
43
- */
44
- async function importModule(filePath) {
45
- const resolved = resolve(filePath);
46
- const url = new URL(`file://${resolved}`);
47
- const mtimeMs = statSync(resolved).mtimeMs;
48
- url.searchParams.set("t", String(mtimeMs));
49
- return (await import(url.href));
50
- }
51
- function isBlockLike(val) {
52
- if (val === null || typeof val !== "object")
53
- return false;
54
- const obj = val;
55
- if (typeof obj.name !== "string")
56
- return false;
57
- const instruction = obj.instruction;
58
- return instruction !== null && typeof instruction === "object" && typeof instruction?.act === "function";
59
- }
1
+ import { join } from "node:path";
2
+ import { discoverGraph } from "../../analysis/graph.js";
3
+ import { scanProject } from "../../manifest/project.js";
4
+ import { importFresh, walkDir } from "../../manifest/scan.js";
60
5
  function isNavBlockMarked(val) {
61
6
  const kind = val.__waygraphKind;
62
7
  return kind === "nav" || kind === "page";
@@ -103,56 +48,26 @@ async function wildcardActionRunnable(page, entry, here) {
103
48
  * Import every `*.block.ts` export keyed by runtime Block `.name`.
104
49
  */
105
50
  export async function loadBlockLibrary(projectDir, opts) {
106
- const { matchBlocksSelect } = await import("../blocks-select.js");
107
51
  const byName = new Map();
108
52
  const navBlocks = [];
109
- const navSeen = new Set();
110
- const select = opts?.blocksSelect;
111
- for (const root of exploreRoots(projectDir, opts?.inject)) {
112
- for (const file of walkDir(root, /\.block\.ts$/)) {
113
- const relFile = relative(root, file).replace(/\\/g, "/");
114
- const taggedFile = injectTaggedFile(projectDir, root, relFile);
115
- // Glob/bare: path filter before import. Regex: need block name — filter after.
116
- if (select && select.kind !== "regex" && !matchBlocksSelect(select, { relFile })) {
117
- continue;
118
- }
119
- let mod;
120
- try {
121
- mod = await importModule(file);
122
- }
123
- catch (err) {
124
- const msg = err instanceof Error ? err.message : String(err);
125
- if (/second time|playwright/i.test(msg)) {
126
- console.error(`waygraph auto: skip ${relFile}: ${msg.split("\n")[0]}`);
127
- }
128
- continue;
129
- }
130
- for (const [exportName, exported] of Object.entries(mod)) {
131
- if (!isBlockLike(exported))
132
- continue;
133
- if (select &&
134
- !matchBlocksSelect(select, { relFile, blockName: exported.name })) {
135
- continue;
136
- }
137
- const kind = isNavBlockMarked(exported) ? "nav" : "action";
138
- const entry = {
139
- block: exported,
140
- exportName,
141
- file: taggedFile,
142
- kind,
143
- description: typeof exported.description === "string" ? exported.description : "",
144
- };
145
- if (byName.has(exported.name)) {
146
- console.error(`waygraph: inject skipped duplicate Block name "${exported.name}" (${taggedFile})`);
147
- continue;
148
- }
149
- byName.set(exported.name, entry);
150
- if (kind === "nav" && !navSeen.has(exported.name)) {
151
- navSeen.add(exported.name);
152
- navBlocks.push(entry);
153
- }
154
- }
53
+ const scan = await scanProject(projectDir, {
54
+ blocksSelect: opts?.blocksSelect,
55
+ inject: opts?.inject,
56
+ flows: false,
57
+ });
58
+ // A Block's required keys get the project's own defaults: every `*.mem-stubs.ts` registers its fakes on import.
59
+ for (const file of walkDir(join(projectDir, "src"), /\.mem-stubs\.ts$/))
60
+ await importFresh(file);
61
+ for (const b of scan.blocks) {
62
+ const kind = isNavBlockMarked(b.block) ? "nav" : "action";
63
+ if (byName.has(b.name)) {
64
+ console.error(`waygraph: inject skipped duplicate Block name "${b.name}" (${b.file})`);
65
+ continue;
155
66
  }
67
+ const entry = { block: b.block, exportName: b.exportName, file: b.file, kind, description: b.description };
68
+ byName.set(b.name, entry);
69
+ if (kind === "nav")
70
+ navBlocks.push(entry);
156
71
  }
157
72
  navBlocks.sort((a, b) => {
158
73
  const aUrl = isUrlNav(a) ? 0 : 1;
@@ -161,27 +76,6 @@ export async function loadBlockLibrary(projectDir, opts) {
161
76
  });
162
77
  return { byName, navBlocks };
163
78
  }
164
- /**
165
- * @deprecated Use {@link buildExploreMenu} — kept for unit tests.
166
- */
167
- export function exploreChoices(graph, here) {
168
- const seen = new Set();
169
- const out = [];
170
- for (const edge of graph.edges) {
171
- if (here === null) {
172
- if (edge.kind !== "nav" || edge.from !== "*")
173
- continue;
174
- }
175
- else if (edge.from !== here && edge.from !== "*") {
176
- continue;
177
- }
178
- if (seen.has(edge.block))
179
- continue;
180
- seen.add(edge.block);
181
- out.push(edge);
182
- }
183
- return out.sort((a, b) => a.block.localeCompare(b.block));
184
- }
185
79
  /**
186
80
  * Runtime-filtered menu: only Blocks that can run on the live page, grouped forward/back.
187
81
  */
@@ -1,5 +1,5 @@
1
1
  import type { ApplyPathResult, ApplyPickResult, AutoSessionInit, ConsoleLogEntry, InspectDomOptions, InspectDomResult, SessionSnapshot, StorageSnapshot, StubFileKind, TraceStep } from "./helpers.js";
2
- import type { PilotHighlightFixtures } from "../pilot-overlay.js";
2
+ import type { PilotHighlightFixtures } from "../../demo/overlay/pilot/fixtures.js";
3
3
  /**
4
4
  * Non-interactive explore session: same graph/library/mem/browser setup
5
5
  * `runAutoExplore` runs in `--cli` mode, driven by `applyPick` instead of a
@@ -1,16 +1,21 @@
1
- // Split out of the former 1,078-line auto-session.ts (see src/ARCHITECTURE.md). Behavior unchanged.
2
1
  import { CONSOLE_LOG_MAX_ENTRIES, FULL_MODE_DEFAULT_DEPTH, FULL_MODE_MAX_NODES, FULL_MODE_MAX_TEXT_LENGTH, TRACE_MAX_STEPS, buildSessionSnapshot, parsePick, stubFilePath, stubPhaseHasContent, walkFullDom } from "./helpers.js";
3
- import { instrumentPilotActions, installPersistentPilotOverlay, showPilotActivity, showPilotFixtures, showPilotVision, phaseToOverlayFixtures, describeOverlayFixtures, updatePilotOverlay } from "../pilot-overlay.js";
4
- import { buildExploreContext, buildExploreMenu } from "../session/auto-explore.js";
5
- import { MemPage } from "../mem-page.js";
6
- import { Engine } from "../core.js";
7
- import { detectHere, ensureLivePage, ensureMem, resolveBaseUrl, runOneBlock, seedDefaultMem } from "../session/auto-explore-run.js";
8
- import { collectKnownInteractionSelectors, unmappedInteractionsPageScript } from "../analysis/coverage-gap.js";
9
- import { runStubPhase } from "../highlights.js";
10
- import { verboseLog } from "./verbose-log.js";
11
- import { findBlockPathDetailed } from "../analysis/graph.js";
12
- import { configuredExtensions } from "../config.js";
13
- import { chromiumExecutablePath, launchContext } from "../browser.js";
2
+ import { keepOverlayOnNavigation } from "../../demo/overlay/reattach.js";
3
+ import { installPersistentPilotOverlay, showPilotActivity, showPilotVision } from "../../demo/overlay/pilot/shell.js";
4
+ import { showPilotFixtures } from "../../demo/overlay/pilot/fixtures.js";
5
+ import { instrumentPilotActions } from "../../demo/overlay/pilot/actions.js";
6
+ import { phaseToOverlayFixtures, describeOverlayFixtures } from "../../demo/overlay/phase-fixtures.js";
7
+ import { updatePilotOverlay } from "../pilot/panel.js";
8
+ import { buildExploreContext, buildExploreMenu } from "../auto/explore.js";
9
+ import { MemPage } from "../../engine/mem/mem.js";
10
+ import { Engine } from "../../engine/engine.js";
11
+ import { detectHere, ensureLivePage, ensureMem, runOneBlock, seedDefaultMem } from "../auto/auto.js";
12
+ import { collectKnownInteractionSelectors, unmappedInteractionsPageScript } from "../../analysis/coverage-gap.js";
13
+ import { runStubPhase } from "../../demo/narration/narration.js";
14
+ import { verboseLog } from "../../demo/verbose-log.js";
15
+ import { findBlockPathDetailed } from "../../analysis/graph.js";
16
+ import { configuredExtensions, resolveBaseUrl } from "../../runtime/waygraph-config.js";
17
+ import { chromiumExecutablePath, launchContext } from "../../runtime/browser.js";
18
+ import { ignorePageGone, ignoreTimeout } from "../../engine/page-gone.js";
14
19
  /**
15
20
  * Non-interactive explore session: same graph/library/mem/browser setup
16
21
  * `runAutoExplore` runs in `--cli` mode, driven by `applyPick` instead of a
@@ -101,20 +106,18 @@ export class AutoSession {
101
106
  const page = await context.newPage();
102
107
  instrumentPilotActions(page, headless ? 0 : 450);
103
108
  if (startUrl) {
104
- await page.goto(startUrl, { waitUntil: "domcontentloaded" }).catch(() => { });
105
- await page.waitForLoadState("load").catch(() => { });
109
+ await page.goto(startUrl, { waitUntil: "domcontentloaded" }).catch(ignorePageGone);
110
+ await page.waitForLoadState("load").catch(ignoreTimeout);
106
111
  }
107
112
  else {
108
- await page.goto("about:blank").catch(() => { });
113
+ await page.goto("about:blank").catch(ignorePageGone);
109
114
  }
110
115
  const knownInteractionSelectors = collectKnownInteractionSelectors(init.projectDir, library, init.inject);
111
116
  const session = new AutoSession(init.projectDir, init.inject, init.blocksSelect, graph, library, mem, engine, closeBrowser, context, page, startUrl, init.sessionId, knownInteractionSelectors, headless);
112
- page.on("load", () => {
113
- void session.repaintOverlayAfterNavigation();
114
- });
117
+ keepOverlayOnNavigation(page, () => session.repaintOverlayAfterNavigation());
115
118
  if (!headless) {
116
- await session.bootstrapOverlay().catch(() => { });
117
- await page.bringToFront().catch(() => { });
119
+ await session.bootstrapOverlay().catch(ignorePageGone);
120
+ await page.bringToFront().catch(ignorePageGone);
118
121
  }
119
122
  // Attached once, on the page created here - `ensureLivePage` only swaps
120
123
  // to a fresh Page if the current one closed (a rare case, e.g. the human
@@ -204,11 +207,11 @@ export class AutoSession {
204
207
  /** Re-apply cached overlay state after navigation (init script restores shell only). */
205
208
  async repaintOverlayAfterNavigation() {
206
209
  if (this.lastOverlayInfo) {
207
- await updatePilotOverlay(this.page, this.lastOverlayInfo).catch(() => { });
210
+ await updatePilotOverlay(this.page, this.lastOverlayInfo).catch(ignorePageGone);
208
211
  return;
209
212
  }
210
213
  if (!this.headless) {
211
- await this.bootstrapOverlay().catch(() => { });
214
+ await this.bootstrapOverlay().catch(ignorePageGone);
212
215
  }
213
216
  }
214
217
  /**
@@ -233,7 +236,7 @@ export class AutoSession {
233
236
  knownPathnames,
234
237
  knownSelectors: this.knownInteractionSelectors,
235
238
  };
236
- await this.page.evaluate(unmappedInteractionsPageScript, payload).catch(() => { });
239
+ await this.page.evaluate(unmappedInteractionsPageScript, payload).catch(ignorePageGone);
237
240
  }
238
241
  /** Pure getter - no Block runs, no mem/page mutation. */
239
242
  async currentSnapshot() {
@@ -342,7 +345,7 @@ export class AutoSession {
342
345
  const fixtures = phaseToOverlayFixtures(phase, holdMs);
343
346
  for (const line of describeOverlayFixtures(tag, fixtures))
344
347
  verboseLog("pilot", line);
345
- await showPilotFixtures(this.page, fixtures).catch(() => { });
348
+ await showPilotFixtures(this.page, fixtures).catch(ignorePageGone);
346
349
  }
347
350
  async runNamedBlock(entry, expectedTo, instanceOption) {
348
351
  const from = this.here;
@@ -1,6 +1,7 @@
1
- import type { StubPhaseResult } from "../highlights.js";
2
- import type { BlockEntry, ExploreMenu } from "../session/auto-explore.js";
3
- import type { PickResult } from "../session/auto-explore-run.js";
1
+ import type { StubPhaseResult } from "../../engine/stub/stub.js";
2
+ import type { ExploreMenu } from "../auto/explore.js";
3
+ import type { BlockEntry } from "../../manifest/project.js";
4
+ import type { PickResult } from "../auto/auto.js";
4
5
  /** True when a stub-phase result actually carries authored content worth keeping. */
5
6
  export declare function stubPhaseHasContent(r: StubPhaseResult): boolean;
6
7
  /** One available move in a session snapshot: a Block and the Checkpoint it leads to. */
@@ -90,7 +91,7 @@ export interface AutoSessionInit {
90
91
  projectDir: string;
91
92
  baseURL?: string;
92
93
  startUrl?: string;
93
- blocksSelect?: import("../blocks-select.js").BlocksSelect;
94
+ blocksSelect?: import("../../manifest/select.js").BlocksSelect;
94
95
  /** Absolute paths — merged Block libraries (see `waygraph browser --inject`). */
95
96
  inject?: string[];
96
97
  /** When true, open about:blank instead of baseURL/startUrl (browser default). */
@@ -139,7 +140,7 @@ export interface TraceStep {
139
140
  * Resolved demo-narration fixtures (highlights/todos/device), when the
140
141
  * Block actually authors `stubBefore`/`stubAfter`/`stubOnError` - the same
141
142
  * data `waygraph demo`'s lifecycle logging already computes (`runStubPhase`
142
- * in highlights.ts), reused here for extra context on what a step meant to
143
+ * in demo/narration/index.ts), reused here for extra context on what a step meant to
143
144
  * convey. Omitted when the Block has none, or the result carries nothing.
144
145
  */
145
146
  stubBefore?: StubPhaseResult;
@@ -137,7 +137,7 @@ export const TRACE_MAX_STEPS = 500;
137
137
  * exist for more than a moment.
138
138
  */
139
139
  export function stubFilePath(kind) {
140
- const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
140
+ const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
141
141
  const names = {
142
142
  image: "stub.png",
143
143
  pdf: "stub.pdf",
@@ -1,6 +1,6 @@
1
- import { AutoSession, type AutoSessionInit, type SessionSnapshot, type InspectDomOptions, type DomSnapshot, type TraceStep, type ApplyPathResult, type ConsoleLogEntry, type StorageSnapshot, type StubFileKind } from "../auto-session.js";
2
- import type { PilotHighlightFixtures } from "../pilot-overlay.js";
3
- export type { PilotHighlightFixtures } from "../pilot-overlay.js";
1
+ import { AutoSession } from "./auto-session.js";
2
+ import { type AutoSessionInit, type SessionSnapshot, type InspectDomOptions, type DomSnapshot, type TraceStep, type ApplyPathResult, type ConsoleLogEntry, type StorageSnapshot, type StubFileKind } from "./helpers.js";
3
+ import type { PilotHighlightFixtures } from "../../demo/overlay/pilot/fixtures.js";
4
4
  export interface SessionMeta {
5
5
  sessionId: string;
6
6
  socketPath: string;
@@ -128,8 +128,10 @@ export declare function serveSession(session: AutoSession, projectDir: string, s
128
128
  export declare function runAutoServeCommand(init: AutoSessionInit, sessionId: string): Promise<void>;
129
129
  /**
130
130
  * Parent-side: spawns a detached background process running the same
131
- * explore session as a socket server, waits for it to signal readiness (its
132
- * metadata file appearing), and returns its identity. Recurses through the
131
+ * explore session as a socket server, waits for it to say it is serving (one
132
+ * message over an IPC channel, then disconnect), and returns its identity. A
133
+ * child that exits or stays silent past the timeout fails the start, and a silent
134
+ * one is stopped. Recurses through the
133
135
  * existing `bin/waygraph` launcher (same tsx/esm registration every other
134
136
  * invocation already gets) with the hidden `__auto-serve` command, rather
135
137
  * than re-implementing that resolution here.
@@ -14,7 +14,8 @@ import { fileURLToPath } from "node:url";
14
14
  import { randomBytes } from "node:crypto";
15
15
  import { createInterface } from "node:readline/promises";
16
16
  import { stdin as input, stdout as output } from "node:process";
17
- import { AutoSession, } from "../auto-session.js";
17
+ import { AutoSession } from "./auto-session.js";
18
+ import { ignorePageGone } from "../../engine/page-gone.js";
18
19
  function sessionDir(projectDir) {
19
20
  return join(projectDir, ".waygraph-auto");
20
21
  }
@@ -318,7 +319,7 @@ export async function serveSession(session, projectDir, sessionId, headless = tr
318
319
  return;
319
320
  shuttingDown = true;
320
321
  server.close();
321
- await session.close().catch(() => { });
322
+ await session.close().catch(ignorePageGone);
322
323
  removeSessionFiles(projectDir, sessionId);
323
324
  process.exit(0);
324
325
  }
@@ -343,14 +344,19 @@ export async function serveSession(session, projectDir, sessionId, headless = tr
343
344
  export async function runAutoServeCommand(init, sessionId) {
344
345
  const session = await AutoSession.start({ ...init, sessionId });
345
346
  await serveSession(session, init.projectDir, sessionId, init.headless ?? true);
347
+ // Tell the parent that spawned us (spawnDetachedSession) we are serving, then let it go.
348
+ process.send?.({ ready: true });
349
+ process.disconnect?.();
346
350
  // Keep the event loop alive - the listening server already does this,
347
351
  // but await forever here documents the intent for a reader.
348
352
  await new Promise(() => { });
349
353
  }
350
354
  /**
351
355
  * Parent-side: spawns a detached background process running the same
352
- * explore session as a socket server, waits for it to signal readiness (its
353
- * metadata file appearing), and returns its identity. Recurses through the
356
+ * explore session as a socket server, waits for it to say it is serving (one
357
+ * message over an IPC channel, then disconnect), and returns its identity. A
358
+ * child that exits or stays silent past the timeout fails the start, and a silent
359
+ * one is stopped. Recurses through the
354
360
  * existing `bin/waygraph` launcher (same tsx/esm registration every other
355
361
  * invocation already gets) with the hidden `__auto-serve` command, rather
356
362
  * than re-implementing that resolution here.
@@ -358,12 +364,12 @@ export async function runAutoServeCommand(init, sessionId) {
358
364
  export async function spawnDetachedSession(init, readyTimeoutMs = 20_000) {
359
365
  const sessionId = generateSessionId();
360
366
  mkdirSync(sessionDir(init.projectDir), { recursive: true });
361
- // This file compiles to dist/session/auto-session-ipc.js - two levels down from the package
367
+ // This file compiles to dist/live/auto-session/ipc.js - three levels down from the package
362
368
  // root, not one. Same bug class as cli/util.ts's own packageRoot(); see its comment.
363
- const pkgRoot = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
369
+ const pkgRoot = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
364
370
  const require = createRequire(join(pkgRoot, "package.json"));
365
371
  const tsxEsm = require.resolve("tsx/esm");
366
- const cli = join(pkgRoot, "dist", "cli.js");
372
+ const cli = join(pkgRoot, "dist", "cli", "cli.js");
367
373
  const logFd = openSync(logPathFor(init.projectDir, sessionId), "a");
368
374
  const args = ["--import", tsxEsm, cli, "__auto-serve", init.projectDir, "--session-id", sessionId];
369
375
  if (init.baseURL)
@@ -382,20 +388,29 @@ export async function spawnDetachedSession(init, readyTimeoutMs = 20_000) {
382
388
  // Spawn cli.js directly — not bin/waygraph (which would fork a second Node).
383
389
  const child = spawn(process.execPath, args, {
384
390
  detached: true,
385
- stdio: ["ignore", logFd, logFd],
391
+ stdio: ["ignore", logFd, logFd, "ipc"],
386
392
  windowsHide: true,
387
393
  env: process.env,
388
394
  });
395
+ const log = logPathFor(init.projectDir, sessionId);
396
+ const outcome = await new Promise((done) => {
397
+ const timer = setTimeout(() => done("timeout"), readyTimeoutMs);
398
+ child.once("message", () => (clearTimeout(timer), done("ready")));
399
+ child.once("exit", (code) => (clearTimeout(timer), done({ exit: code })));
400
+ });
401
+ if (child.connected)
402
+ child.disconnect();
389
403
  child.unref();
390
- const deadline = Date.now() + readyTimeoutMs;
391
- while (Date.now() < deadline) {
392
- const meta = readSessionMeta(init.projectDir, sessionId);
393
- if (meta)
394
- return meta;
395
- await new Promise((r) => setTimeout(r, 150));
404
+ if (outcome === "timeout") {
405
+ child.kill("SIGTERM");
406
+ throw new Error(`session "${sessionId}" did not become ready within ${readyTimeoutMs}ms (stopped it) - check ${log} for errors`);
396
407
  }
397
- throw new Error(`session "${sessionId}" did not become ready within ${readyTimeoutMs}ms - ` +
398
- `check ${logPathFor(init.projectDir, sessionId)} for errors`);
408
+ if (outcome !== "ready")
409
+ throw new Error(`session "${sessionId}" exited (code ${outcome.exit}) before it was ready - check ${log}`);
410
+ const meta = readSessionMeta(init.projectDir, sessionId);
411
+ if (!meta)
412
+ throw new Error(`session "${sessionId}" said it was ready but wrote no metadata - check ${log}`);
413
+ return meta;
399
414
  }
400
415
  /** Stop one detached session (SIGTERM + cleanup metadata/socket). */
401
416
  export function stopBrowserSession(projectDir, sessionId) {
@@ -1,4 +1,4 @@
1
- import type { AutoSessionInit } from "../auto-session.js";
1
+ import type { AutoSessionInit } from "./helpers.js";
2
2
  export interface BrowserStartInit extends AutoSessionInit {
3
3
  /** Preset names or paths; resolved before spawn. */
4
4
  injectTokens?: string[];
@@ -12,4 +12,3 @@ export interface BrowserStartResult {
12
12
  }
13
13
  /** Always spawns a new detached session — does not stop or reuse existing ones. */
14
14
  export declare function browserStart(init: BrowserStartInit): Promise<BrowserStartResult>;
15
- export { listBrowserSessions, stopBrowserSession, stopAllBrowserSessions, type SessionMeta, } from "./auto-session-ipc.js";
@@ -6,8 +6,8 @@
6
6
  * Session lifecycle is explicit: `browser sessions` lists what's live;
7
7
  * `browser start` always opens another; `browser attach` / `browser stop` pick one up or shut it down.
8
8
  */
9
- import { spawnDetachedSession } from "./auto-session-ipc.js";
10
- import { resolveInjectRoots } from "./block-inject.js";
9
+ import { spawnDetachedSession } from "./ipc.js";
10
+ import { resolveInjectRoots } from "../../manifest/roots.js";
11
11
  /** Always spawns a new detached session — does not stop or reuse existing ones. */
12
12
  export async function browserStart(init) {
13
13
  const inject = init.inject ??
@@ -26,4 +26,3 @@ export async function browserStart(init) {
26
26
  inject,
27
27
  };
28
28
  }
29
- export { listBrowserSessions, stopBrowserSession, stopAllBrowserSessions, } from "./auto-session-ipc.js";
@@ -1,4 +1,4 @@
1
- import type { SessionSnapshot } from "../auto-session.js";
1
+ import type { SessionSnapshot } from "../auto-session/helpers.js";
2
2
  import type { Page } from "@playwright/test";
3
3
  /** Minimal shape needed to render the graph tree - matches WaygraphGraph. */
4
4
  interface PilotOverlayGraph {
@@ -1,4 +1,5 @@
1
- import { ensureInstalled } from "./shell.js";
1
+ import { ensureInstalled } from "../../demo/overlay/pilot/shell.js";
2
+ import { ignorePageGone } from "../../engine/page-gone.js";
2
3
  /**
3
4
  * Refreshes the badge text and the (possibly-collapsed) panel's two tabs
4
5
  * ("Here" - current live menu; "All nodes" - whole project graph as a
@@ -10,6 +11,8 @@ export async function updatePilotOverlay(page, info) {
10
11
  await ensureInstalled(page);
11
12
  await page
12
13
  .evaluate(async ({ sessionId, snapshot, graph }) => {
14
+ // Block names, labels and descriptions can carry the page's own text (an Effect's instance label is read off
15
+ // the live DOM), so they go in as text nodes (__wgEl), never as markup.
13
16
  const badge = __wgById("wg-pilot-badge");
14
17
  const current = __wgById("wg-pilot-panel-current");
15
18
  const graphPanel = __wgById("wg-pilot-panel-graph");
@@ -21,26 +24,16 @@ export async function updatePilotOverlay(page, info) {
21
24
  badge.textContent = `Waygraph Pilot - ${idPart} - ${hereLabel}`;
22
25
  const totalEdges = snapshot.sections.reduce((n, s) => n + s.edges.length, 0);
23
26
  if (totalEdges === 0) {
24
- current.innerHTML = onBlank
25
- ? '<div class="wg-pilot-empty">Blank page — no Block moves yet. Use auto goto or a nav Block when ready.</div>'
26
- : '<div class="wg-pilot-empty">No Block moves from here right now.</div>';
27
+ __wgSet(current, __wgEl("div", { class: "wg-pilot-empty" }, onBlank ? "Blank page — no Block moves yet. Use auto goto or a nav Block when ready." : "No Block moves from here right now."));
27
28
  }
28
29
  else {
29
- current.innerHTML = snapshot.sections
30
- .map((section) => {
31
- const rows = section.edges
32
- .map((edge) => {
33
- const desc = edge.description ? ` - ${edge.description}` : "";
34
- const label = edge.label ? ` (${edge.label})` : "";
35
- return `<div class="wg-pilot-edge">[${edge.index}] <span class="wg-pilot-kind">${edge.kind}</span> ${edge.block}${label} -&gt; ${edge.to}${desc}</div>`;
36
- })
37
- .join("");
38
- return `<div class="wg-pilot-section">${section.title}</div>${rows}`;
39
- })
40
- .join("");
30
+ __wgSet(current, snapshot.sections.map((section) => [
31
+ __wgEl("div", { class: "wg-pilot-section" }, section.title),
32
+ section.edges.map((edge) => __wgEl("div", { class: "wg-pilot-edge" }, `[${edge.index}] `, __wgEl("span", { class: "wg-pilot-kind" }, edge.kind), ` ${edge.block}${edge.label ? ` (${edge.label})` : ""} -> ${edge.to}${edge.description ? ` - ${edge.description}` : ""}`)),
33
+ ]));
41
34
  }
42
35
  if (!graph || graph.nodes.length === 0) {
43
- graphPanel.innerHTML = '<div class="wg-pilot-empty">No graph data yet.</div>';
36
+ __wgSet(graphPanel, __wgEl("div", { class: "wg-pilot-empty" }, "No graph data yet."));
44
37
  return;
45
38
  }
46
39
  // Flat indented-text tree - the ORIGINAL "All nodes" rendering.
@@ -49,18 +42,14 @@ export async function updatePilotOverlay(page, info) {
49
42
  // when Mermaid genuinely can't load (e.g. offline), not the primary
50
43
  // rendering anymore.
51
44
  const renderTextTree = () => {
52
- graphPanel.innerHTML = graph.nodes
53
- .map((node) => {
45
+ __wgSet(graphPanel, graph.nodes.map((node) => {
54
46
  const outgoing = graph.edges.filter((e) => e.from === node.checkpoint || e.from === "*");
55
47
  const rows = outgoing.length
56
- ? outgoing
57
- .map((e) => `<div class="wg-pilot-graph-edge"><span class="wg-pilot-kind">${e.kind}</span> ${e.block} -&gt; ${e.to}</div>`)
58
- .join("")
59
- : '<div class="wg-pilot-graph-edge wg-pilot-empty">(no outgoing edges)</div>';
48
+ ? outgoing.map((e) => __wgEl("div", { class: "wg-pilot-graph-edge" }, __wgEl("span", { class: "wg-pilot-kind" }, e.kind), ` ${e.block} -> ${e.to}`))
49
+ : [__wgEl("div", { class: "wg-pilot-graph-edge wg-pilot-empty" }, "(no outgoing edges)")];
60
50
  const here = node.checkpoint === snapshot.here ? " (here)" : "";
61
- return `<div class="wg-pilot-graph-node"><div class="wg-pilot-graph-checkpoint">${node.checkpoint}${here}</div>${rows}</div>`;
62
- })
63
- .join("");
51
+ return __wgEl("div", { class: "wg-pilot-graph-node" }, __wgEl("div", { class: "wg-pilot-graph-checkpoint" }, node.checkpoint + here), rows);
52
+ }));
64
53
  };
65
54
  try {
66
55
  const w = window;
@@ -80,10 +69,11 @@ export async function updatePilotOverlay(page, info) {
80
69
  throw new Error("mermaid did not attach to window after load");
81
70
  // Real, direct user request: "left to right stuff. maybe mermaid?
82
71
  // with square ish arrows???" - LR layout, linear (non-curvy) edges.
83
- w.mermaid.initialize({ startOnLoad: false, theme: "dark", securityLevel: "loose", flowchart: { curve: "linear" } });
72
+ // strict: Mermaid escapes label text itself; plain SVG labels (no HTML) so the result parses as SVG.
73
+ w.mermaid.initialize({ startOnLoad: false, theme: "dark", securityLevel: "strict", flowchart: { curve: "linear", htmlLabels: false } });
84
74
  const sanitize = (s) => s.replace(/[^A-Za-z0-9_]/g, "_");
85
75
  // Every Nav Block gets a `from:"*"` wildcard edge for pathfinding
86
- // (see auto-explore.ts's own isUrlNav comment). Real, screenshot-
76
+ // (see live/auto/explore.ts's own isUrlNav comment). Real, screenshot-
87
77
  // confirmed finding, TWICE over:
88
78
  // 1. Collapsing all of these into one shared "Anywhere" hub node
89
79
  // still broke the layout - ~9 of 10 Checkpoints have their own
@@ -137,8 +127,10 @@ export async function updatePilotOverlay(page, info) {
137
127
  lines.push(` ${sanitize(e.from)} -->|${e.block}| ${sanitize(e.to)}`);
138
128
  }
139
129
  const { svg } = await w.mermaid.render(`wg-mermaid-${Date.now()}`, lines.join("\n"));
140
- graphPanel.innerHTML =
141
- svg + `<div class="wg-pilot-graph-note">[nav] = also directly reachable via sidebar/URL from anywhere (not drawn as an edge - see the "Here" tab for what's live on this page).</div>`;
130
+ const diagram = __wgSvg(svg);
131
+ if (diagram.nodeName !== "svg")
132
+ throw new Error("mermaid output did not parse as SVG");
133
+ __wgSet(graphPanel, diagram, __wgEl("div", { class: "wg-pilot-graph-note" }, '[nav] = also directly reachable via sidebar/URL from anywhere (not drawn as an edge - see the "Here" tab for what\'s live on this page).'));
142
134
  // Real, direct user request: "i hope it is zoomed to the current
143
135
  // node" - the diagram is usually bigger than the panel, so scroll
144
136
  // (not zoom - the SVG itself stays real size, legible) the "here"
@@ -151,5 +143,5 @@ export async function updatePilotOverlay(page, info) {
151
143
  renderTextTree();
152
144
  }
153
145
  }, { sessionId: info.sessionId, snapshot: info.snapshot, graph: info.graph ?? null })
154
- .catch(() => { });
146
+ .catch(ignorePageGone);
155
147
  }
@@ -28,9 +28,9 @@
28
28
  * hand-picking indices from each status response) that proved this needs no
29
29
  * new execution primitive.
30
30
  */
31
- import { type WaygraphGraph } from "../analysis/graph.js";
32
- import { type BrowserStartInit } from "./browser.js";
33
- import type { SessionSnapshot } from "../auto-session.js";
31
+ import { type WaygraphGraph } from "../../analysis/graph.js";
32
+ import { type BrowserStartInit } from "../auto-session/start.js";
33
+ import type { SessionSnapshot } from "../auto-session/helpers.js";
34
34
  /** What `pilotStart` returns: the session id, socket path and first snapshot. */
35
35
  export interface PilotStartResult {
36
36
  sessionId: string;
@@ -28,9 +28,9 @@
28
28
  * hand-picking indices from each status response) that proved this needs no
29
29
  * new execution primitive.
30
30
  */
31
- import { discoverGraph } from "../analysis/graph.js";
32
- import { requestSession, resolveSessionMeta, } from "./auto-session-ipc.js";
33
- import { browserStart } from "./browser.js";
31
+ import { discoverGraph } from "../../analysis/graph.js";
32
+ import { requestSession, resolveSessionMeta, } from "../auto-session/ipc.js";
33
+ import { browserStart } from "../auto-session/start.js";
34
34
  /**
35
35
  * Starts a detached session and reads back its own graph + starting
36
36
  * snapshot in one call, so an agent bootstraps with everything it needs
@@ -39,7 +39,7 @@ import { browserStart } from "./browser.js";
39
39
  * --detach` and `waygraph graph` itself.
40
40
  */
41
41
  export async function pilotStart(init) {
42
- const { resolveInjectRoots } = await import("./block-inject.js");
42
+ const { resolveInjectRoots } = await import("../../manifest/roots.js");
43
43
  const exploreInject = init.inject ??
44
44
  (init.injectTokens?.length ? resolveInjectRoots(init.injectTokens, init.projectDir) : undefined);
45
45
  const started = await browserStart({
@@ -28,7 +28,7 @@ export interface TraverseOptions {
28
28
  /** Traverse id for greppable lines (default traverse-1). */
29
29
  traverseId?: string;
30
30
  /** Phase C: glob / regex / bare `--blocks` file select. */
31
- blocksSelect?: import("../blocks-select.js").BlocksSelect;
31
+ blocksSelect?: import("../../manifest/select.js").BlocksSelect;
32
32
  /** Phase D: parallel workers (default 1). Cap 4. */
33
33
  parallel?: number;
34
34
  /** Phase D: clone (default) or inherit. Inherit refused when parallel > 1. */