waygraph 0.13.7 → 0.15.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 (358) hide show
  1. package/README.md +970 -232
  2. package/assets/stubs/stub.mp4 +0 -0
  3. package/assets/stubs/stub.pdf +32 -0
  4. package/assets/stubs/stub.png +0 -0
  5. package/dist/agent-dive.d.ts +9 -0
  6. package/dist/agent-dive.js +32 -0
  7. package/dist/auto-explore-run.d.ts +20 -2
  8. package/dist/auto-explore-run.js +9 -8
  9. package/dist/auto-explore.js +22 -2
  10. package/dist/auto-session-ipc.d.ts +123 -0
  11. package/dist/auto-session-ipc.js +381 -0
  12. package/dist/auto-session.d.ts +342 -0
  13. package/dist/auto-session.js +760 -0
  14. package/dist/cli.js +450 -51
  15. package/dist/engine.d.ts +201 -1
  16. package/dist/engine.js +312 -2
  17. package/dist/graph.d.ts +18 -0
  18. package/dist/graph.js +65 -2
  19. package/dist/highlights.d.ts +20 -1
  20. package/dist/highlights.js +60 -0
  21. package/dist/index.d.ts +8 -4
  22. package/dist/index.js +5 -3
  23. package/dist/map-check.d.ts +18 -0
  24. package/dist/map-check.js +140 -0
  25. package/dist/pilot-overlay.d.ts +88 -0
  26. package/dist/pilot-overlay.js +363 -0
  27. package/dist/pilot.d.ts +49 -0
  28. package/dist/pilot.js +53 -0
  29. package/dist/trait.d.ts +22 -0
  30. package/dist/trait.js +60 -3
  31. package/dist/types.d.ts +21 -1
  32. package/dist/types.js +17 -1
  33. package/examples/routed-demo/.waygraph-auto/4d4902b7.log +0 -0
  34. package/examples/routed-demo/.waygraph-auto/51ef462e.log +0 -0
  35. package/examples/routed-demo/.waygraph-auto/71527ad9.log +0 -0
  36. package/examples/routed-demo/.waygraph-auto/ca16778e.log +0 -0
  37. package/examples/routed-demo/package.json +26 -0
  38. package/examples/routed-demo/playwright.config.ts +20 -0
  39. package/examples/routed-demo/scripts/fixture-server.mjs +37 -0
  40. package/examples/routed-demo/scripts/with-fixture.mjs +70 -0
  41. package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +39 -0
  42. package/examples/routed-demo/src/flows/routed-demo.flow.ts +12 -0
  43. package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +23 -0
  44. package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +18 -0
  45. package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +22 -0
  46. package/examples/routed-demo/src/map/(app_base)/dashboard/_sel.ts +10 -0
  47. package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +21 -0
  48. package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +15 -0
  49. package/examples/routed-demo/src/map/(external)/docs/_sel.ts +7 -0
  50. package/examples/routed-demo/src/pages/dashboard.html +10 -0
  51. package/examples/routed-demo/src/pages/docs.html +8 -0
  52. package/examples/routed-demo/src/states/routed-demo.states.ts +10 -0
  53. package/examples/routed-demo/test-results/.last-run.json +4 -0
  54. package/examples/routed-demo/tests/routed-demo-map.spec.ts +17 -0
  55. package/examples/routed-demo/tests/routed-demo.spec.ts +75 -0
  56. package/examples/routed-demo/tsconfig.json +18 -0
  57. package/examples/routed-demo-consumer/package.json +18 -0
  58. package/examples/saucedemo/.waygraph-auto/00d5336e.log +0 -0
  59. package/examples/saucedemo/.waygraph-auto/010dd92b.log +0 -0
  60. package/examples/saucedemo/.waygraph-auto/011ad671.log +0 -0
  61. package/examples/saucedemo/.waygraph-auto/01b45645.log +0 -0
  62. package/examples/saucedemo/.waygraph-auto/03764153.log +0 -0
  63. package/examples/saucedemo/.waygraph-auto/0593587e.log +0 -0
  64. package/examples/saucedemo/.waygraph-auto/06d12823.log +0 -0
  65. package/examples/saucedemo/.waygraph-auto/083cc5b9.log +0 -0
  66. package/examples/saucedemo/.waygraph-auto/0b1f5b26.json +8 -0
  67. package/examples/saucedemo/.waygraph-auto/0c00f25f.log +0 -0
  68. package/examples/saucedemo/.waygraph-auto/0e480591.log +0 -0
  69. package/examples/saucedemo/.waygraph-auto/104751ef.log +0 -0
  70. package/examples/saucedemo/.waygraph-auto/110958b8.log +0 -0
  71. package/examples/saucedemo/.waygraph-auto/138107c1.log +0 -0
  72. package/examples/saucedemo/.waygraph-auto/159d541b.log +0 -0
  73. package/examples/saucedemo/.waygraph-auto/16aa2c01.log +0 -0
  74. package/examples/saucedemo/.waygraph-auto/16c35dd5.log +0 -0
  75. package/examples/saucedemo/.waygraph-auto/1706547d.log +0 -0
  76. package/examples/saucedemo/.waygraph-auto/17537e42.log +0 -0
  77. package/examples/saucedemo/.waygraph-auto/175655f7.log +0 -0
  78. package/examples/saucedemo/.waygraph-auto/17ede493.log +0 -0
  79. package/examples/saucedemo/.waygraph-auto/1fe2414f.log +0 -0
  80. package/examples/saucedemo/.waygraph-auto/1fe2e3b8.log +0 -0
  81. package/examples/saucedemo/.waygraph-auto/2219f00b.log +0 -0
  82. package/examples/saucedemo/.waygraph-auto/23e62571.log +0 -0
  83. package/examples/saucedemo/.waygraph-auto/25f68ada.log +0 -0
  84. package/examples/saucedemo/.waygraph-auto/26ca9cd8.log +0 -0
  85. package/examples/saucedemo/.waygraph-auto/2bb6c4e8.log +0 -0
  86. package/examples/saucedemo/.waygraph-auto/2d425004.log +0 -0
  87. package/examples/saucedemo/.waygraph-auto/2f5b3ea6.log +0 -0
  88. package/examples/saucedemo/.waygraph-auto/31bb303d.log +0 -0
  89. package/examples/saucedemo/.waygraph-auto/31f2042f.log +0 -0
  90. package/examples/saucedemo/.waygraph-auto/36551ec1.log +0 -0
  91. package/examples/saucedemo/.waygraph-auto/36a1c274.log +0 -0
  92. package/examples/saucedemo/.waygraph-auto/381aa338.log +0 -0
  93. package/examples/saucedemo/.waygraph-auto/3882bce1.log +0 -0
  94. package/examples/saucedemo/.waygraph-auto/38acd1dc.log +0 -0
  95. package/examples/saucedemo/.waygraph-auto/3b8b77b9.log +0 -0
  96. package/examples/saucedemo/.waygraph-auto/4028d2a2.log +0 -0
  97. package/examples/saucedemo/.waygraph-auto/4168b208.log +0 -0
  98. package/examples/saucedemo/.waygraph-auto/42cc9113.log +0 -0
  99. package/examples/saucedemo/.waygraph-auto/439d30aa.log +0 -0
  100. package/examples/saucedemo/.waygraph-auto/43ab66ce.log +0 -0
  101. package/examples/saucedemo/.waygraph-auto/43f66838.log +0 -0
  102. package/examples/saucedemo/.waygraph-auto/442171d4.log +0 -0
  103. package/examples/saucedemo/.waygraph-auto/453b1ce1.log +0 -0
  104. package/examples/saucedemo/.waygraph-auto/457322bd.log +0 -0
  105. package/examples/saucedemo/.waygraph-auto/46197027.log +0 -0
  106. package/examples/saucedemo/.waygraph-auto/46889468.log +0 -0
  107. package/examples/saucedemo/.waygraph-auto/4890da1c.log +0 -0
  108. package/examples/saucedemo/.waygraph-auto/4893a63b.log +0 -0
  109. package/examples/saucedemo/.waygraph-auto/4a85f496.log +0 -0
  110. package/examples/saucedemo/.waygraph-auto/4af71440.log +0 -0
  111. package/examples/saucedemo/.waygraph-auto/4f7496d1.log +0 -0
  112. package/examples/saucedemo/.waygraph-auto/50e8baaa.log +0 -0
  113. package/examples/saucedemo/.waygraph-auto/52b3a455.log +0 -0
  114. package/examples/saucedemo/.waygraph-auto/532dd9b8.log +0 -0
  115. package/examples/saucedemo/.waygraph-auto/5391ce40.log +0 -0
  116. package/examples/saucedemo/.waygraph-auto/57dbddb3.log +0 -0
  117. package/examples/saucedemo/.waygraph-auto/5897f501.log +0 -0
  118. package/examples/saucedemo/.waygraph-auto/59c0b57d.log +0 -0
  119. package/examples/saucedemo/.waygraph-auto/5b511794.log +0 -0
  120. package/examples/saucedemo/.waygraph-auto/5c0eef7f.log +0 -0
  121. package/examples/saucedemo/.waygraph-auto/5c47910f.log +0 -0
  122. package/examples/saucedemo/.waygraph-auto/5d60da77.log +0 -0
  123. package/examples/saucedemo/.waygraph-auto/5eda8273.log +0 -0
  124. package/examples/saucedemo/.waygraph-auto/5fc3a33b.log +0 -0
  125. package/examples/saucedemo/.waygraph-auto/61b6546d.log +0 -0
  126. package/examples/saucedemo/.waygraph-auto/621518ad.log +0 -0
  127. package/examples/saucedemo/.waygraph-auto/632b7118.log +0 -0
  128. package/examples/saucedemo/.waygraph-auto/64314c2b.log +0 -0
  129. package/examples/saucedemo/.waygraph-auto/650ed066.log +0 -0
  130. package/examples/saucedemo/.waygraph-auto/66516213.log +0 -0
  131. package/examples/saucedemo/.waygraph-auto/66c17079.log +0 -0
  132. package/examples/saucedemo/.waygraph-auto/69bf0b80.log +0 -0
  133. package/examples/saucedemo/.waygraph-auto/69c2347a.log +0 -0
  134. package/examples/saucedemo/.waygraph-auto/6d22bdb0.log +0 -0
  135. package/examples/saucedemo/.waygraph-auto/6d9aaad3.log +0 -0
  136. package/examples/saucedemo/.waygraph-auto/7103bebb.log +0 -0
  137. package/examples/saucedemo/.waygraph-auto/740c9faa.log +0 -0
  138. package/examples/saucedemo/.waygraph-auto/74872fc5.log +0 -0
  139. package/examples/saucedemo/.waygraph-auto/75846ca9.log +0 -0
  140. package/examples/saucedemo/.waygraph-auto/7626c85b.log +0 -0
  141. package/examples/saucedemo/.waygraph-auto/76308eec.log +0 -0
  142. package/examples/saucedemo/.waygraph-auto/76c1650e.log +0 -0
  143. package/examples/saucedemo/.waygraph-auto/7861f38f.log +0 -0
  144. package/examples/saucedemo/.waygraph-auto/78b21219.log +0 -0
  145. package/examples/saucedemo/.waygraph-auto/7af224ed.log +0 -0
  146. package/examples/saucedemo/.waygraph-auto/7c3be585.log +0 -0
  147. package/examples/saucedemo/.waygraph-auto/7ed55a2c.log +0 -0
  148. package/examples/saucedemo/.waygraph-auto/80086ba2.log +0 -0
  149. package/examples/saucedemo/.waygraph-auto/80206369.log +0 -0
  150. package/examples/saucedemo/.waygraph-auto/847f1092.log +0 -0
  151. package/examples/saucedemo/.waygraph-auto/84d6d293.log +0 -0
  152. package/examples/saucedemo/.waygraph-auto/8581abfa.log +0 -0
  153. package/examples/saucedemo/.waygraph-auto/87b7e0fd.log +0 -0
  154. package/examples/saucedemo/.waygraph-auto/87c79256.log +0 -0
  155. package/examples/saucedemo/.waygraph-auto/88af2495.log +0 -0
  156. package/examples/saucedemo/.waygraph-auto/8a3eb088.log +0 -0
  157. package/examples/saucedemo/.waygraph-auto/8c04a403.log +0 -0
  158. package/examples/saucedemo/.waygraph-auto/8c9ab09e.log +0 -0
  159. package/examples/saucedemo/.waygraph-auto/8cc5db51.log +0 -0
  160. package/examples/saucedemo/.waygraph-auto/8ea3a69c.log +0 -0
  161. package/examples/saucedemo/.waygraph-auto/9150f913.log +0 -0
  162. package/examples/saucedemo/.waygraph-auto/929a4313.log +0 -0
  163. package/examples/saucedemo/.waygraph-auto/95a599e4.log +0 -0
  164. package/examples/saucedemo/.waygraph-auto/96c45350.log +0 -0
  165. package/examples/saucedemo/.waygraph-auto/986030e6.log +0 -0
  166. package/examples/saucedemo/.waygraph-auto/99787abb.log +0 -0
  167. package/examples/saucedemo/.waygraph-auto/99ddb62c.log +0 -0
  168. package/examples/saucedemo/.waygraph-auto/a2dd30dd.log +0 -0
  169. package/examples/saucedemo/.waygraph-auto/a63a2d20.log +0 -0
  170. package/examples/saucedemo/.waygraph-auto/a78befb7.log +0 -0
  171. package/examples/saucedemo/.waygraph-auto/a84d9b79.log +0 -0
  172. package/examples/saucedemo/.waygraph-auto/a87bb3ee.log +0 -0
  173. package/examples/saucedemo/.waygraph-auto/a9270890.log +0 -0
  174. package/examples/saucedemo/.waygraph-auto/aa440153.log +0 -0
  175. package/examples/saucedemo/.waygraph-auto/ab7561e0.log +0 -0
  176. package/examples/saucedemo/.waygraph-auto/ac19ae60.log +0 -0
  177. package/examples/saucedemo/.waygraph-auto/ae21ad8e.log +0 -0
  178. package/examples/saucedemo/.waygraph-auto/af09042f.log +0 -0
  179. package/examples/saucedemo/.waygraph-auto/b1684126.log +0 -0
  180. package/examples/saucedemo/.waygraph-auto/b21e9d12.log +0 -0
  181. package/examples/saucedemo/.waygraph-auto/b5a838be.log +0 -0
  182. package/examples/saucedemo/.waygraph-auto/b603549d.log +0 -0
  183. package/examples/saucedemo/.waygraph-auto/b81e074f.log +0 -0
  184. package/examples/saucedemo/.waygraph-auto/b83e6259.log +0 -0
  185. package/examples/saucedemo/.waygraph-auto/b9cb2796.log +0 -0
  186. package/examples/saucedemo/.waygraph-auto/ba58abb7.log +0 -0
  187. package/examples/saucedemo/.waygraph-auto/bb0a0018.log +0 -0
  188. package/examples/saucedemo/.waygraph-auto/bb9fd384.log +0 -0
  189. package/examples/saucedemo/.waygraph-auto/bc0bdd0e.log +0 -0
  190. package/examples/saucedemo/.waygraph-auto/bc7d4a83.log +0 -0
  191. package/examples/saucedemo/.waygraph-auto/bd8e082a.log +0 -0
  192. package/examples/saucedemo/.waygraph-auto/bea0c93e.log +0 -0
  193. package/examples/saucedemo/.waygraph-auto/bf35201a.log +0 -0
  194. package/examples/saucedemo/.waygraph-auto/bffa3a7a.log +0 -0
  195. package/examples/saucedemo/.waygraph-auto/c02ea583.log +0 -0
  196. package/examples/saucedemo/.waygraph-auto/c2caf0a8.log +0 -0
  197. package/examples/saucedemo/.waygraph-auto/c3bdc714.log +0 -0
  198. package/examples/saucedemo/.waygraph-auto/c4afb8bc.log +0 -0
  199. package/examples/saucedemo/.waygraph-auto/c916a654.log +0 -0
  200. package/examples/saucedemo/.waygraph-auto/c9b8d69e.log +0 -0
  201. package/examples/saucedemo/.waygraph-auto/cd68bbc4.log +0 -0
  202. package/examples/saucedemo/.waygraph-auto/cdc6db50.log +0 -0
  203. package/examples/saucedemo/.waygraph-auto/d01906a7.log +0 -0
  204. package/examples/saucedemo/.waygraph-auto/d02e5e7e.log +0 -0
  205. package/examples/saucedemo/.waygraph-auto/d09aff71.log +0 -0
  206. package/examples/saucedemo/.waygraph-auto/d0e41396.log +0 -0
  207. package/examples/saucedemo/.waygraph-auto/d1370d76.log +0 -0
  208. package/examples/saucedemo/.waygraph-auto/d3714ae4.log +0 -0
  209. package/examples/saucedemo/.waygraph-auto/d9e5f8a4.log +0 -0
  210. package/examples/saucedemo/.waygraph-auto/da0685dc.log +0 -0
  211. package/examples/saucedemo/.waygraph-auto/da894ad8.log +0 -0
  212. package/examples/saucedemo/.waygraph-auto/daa2f922.log +0 -0
  213. package/examples/saucedemo/.waygraph-auto/daefb614.log +0 -0
  214. package/examples/saucedemo/.waygraph-auto/db97e833.log +0 -0
  215. package/examples/saucedemo/.waygraph-auto/dec3076e.log +0 -0
  216. package/examples/saucedemo/.waygraph-auto/e101d19a.log +0 -0
  217. package/examples/saucedemo/.waygraph-auto/e1973991.log +0 -0
  218. package/examples/saucedemo/.waygraph-auto/e207c989.log +0 -0
  219. package/examples/saucedemo/.waygraph-auto/e633e545.log +0 -0
  220. package/examples/saucedemo/.waygraph-auto/e69aec68.log +0 -0
  221. package/examples/saucedemo/.waygraph-auto/e70e2d06.log +0 -0
  222. package/examples/saucedemo/.waygraph-auto/e8306a4b.log +0 -0
  223. package/examples/saucedemo/.waygraph-auto/ebad3410.log +0 -0
  224. package/examples/saucedemo/.waygraph-auto/ec88b3ef.log +0 -0
  225. package/examples/saucedemo/.waygraph-auto/ecbb0966.log +0 -0
  226. package/examples/saucedemo/.waygraph-auto/ecdee753.log +0 -0
  227. package/examples/saucedemo/.waygraph-auto/ed888783.log +0 -0
  228. package/examples/saucedemo/.waygraph-auto/ed931dac.log +0 -0
  229. package/examples/saucedemo/.waygraph-auto/ef655a3f.log +0 -0
  230. package/examples/saucedemo/.waygraph-auto/f34c9a26.log +0 -0
  231. package/examples/saucedemo/.waygraph-auto/f3c29b21.log +0 -0
  232. package/examples/saucedemo/.waygraph-auto/f53f7cfc.log +0 -0
  233. package/examples/saucedemo/.waygraph-auto/f5525d53.log +0 -0
  234. package/examples/saucedemo/.waygraph-auto/f5ad5830.log +0 -0
  235. package/examples/saucedemo/.waygraph-auto/f90035b3.log +0 -0
  236. package/examples/saucedemo/.waygraph-auto/fa687bc2.log +0 -0
  237. package/examples/saucedemo/.waygraph-auto/faed36dd.log +0 -0
  238. package/examples/saucedemo/.waygraph-auto/fb66fba0.log +0 -0
  239. package/examples/saucedemo/.waygraph-auto/fc48fd76.log +0 -0
  240. package/examples/saucedemo/docs/CONVENTION.md +25 -5
  241. package/examples/saucedemo/docs/HELPERS.md +15 -4
  242. package/examples/saucedemo/scripts/capture-wrong-login.mjs +8 -2
  243. package/examples/saucedemo/scripts/prove-wrong-login-runtime.mjs +8 -2
  244. package/examples/saucedemo/src/blocks/SITE-MAP.md +14 -3
  245. package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +15 -1
  246. package/examples/saucedemo/src/blocks/saucedemo-web/cart/NAV.md +1 -0
  247. package/examples/saucedemo/src/blocks/saucedemo-web/cart/cart.sel.ts +9 -0
  248. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -2
  249. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +2 -1
  250. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/NAV.md +6 -1
  251. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/checkout-info.sel.ts +11 -0
  252. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +22 -0
  253. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +21 -0
  254. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +21 -0
  255. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +6 -7
  256. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/NAV.md +2 -0
  257. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/checkout-overview.sel.ts +9 -0
  258. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +7 -6
  259. package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +7 -2
  260. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/NAV.md +1 -0
  261. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/item-detail.sel.ts +9 -0
  262. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +2 -1
  263. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +2 -1
  264. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +2 -1
  265. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +51 -0
  266. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +69 -0
  267. package/examples/saucedemo/src/blocks/saucedemo-web/methods/login.sel.ts +13 -0
  268. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login-for-flow.ts +4 -4
  269. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +13 -51
  270. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +4 -3
  271. package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +14 -6
  272. package/examples/saucedemo/src/flows/checkout-then-browse-again.flow.ts +15 -0
  273. package/examples/saucedemo/src/flows/checkout.flow.ts +20 -2
  274. package/examples/saucedemo/src/flows/device-showcase.flow.ts +4 -0
  275. package/examples/saucedemo/src/flows/login.flow.ts +3 -1
  276. package/examples/saucedemo/src/flows/shop.flow.ts +6 -0
  277. package/examples/saucedemo/src/flows/smoke.flow.ts +13 -7
  278. package/examples/saucedemo/src/flows/stub-on-error.flow.ts +4 -2
  279. package/examples/saucedemo/src/flows/viewer-blocked.flow.ts +6 -2
  280. package/examples/saucedemo/tests/flow-block-verify.spec.ts +3 -3
  281. package/examples/saucedemo/tests/submit-login-branch.spec.ts +5 -3
  282. package/package.json +2 -1
  283. package/templates/agents/waygraph-author.agent.md +43 -5
  284. package/templates/agents/waygraph-planner.agent.md +33 -2
  285. package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +15 -1
  286. package/templates/quickstart/src/blocks/saucedemo-web/cart/NAV.md +1 -0
  287. package/templates/quickstart/src/blocks/saucedemo-web/cart/cart.sel.ts +9 -0
  288. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +19 -15
  289. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +2 -1
  290. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/NAV.md +6 -1
  291. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/checkout-info.sel.ts +11 -0
  292. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +22 -0
  293. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +21 -0
  294. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +21 -0
  295. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +6 -7
  296. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/NAV.md +2 -0
  297. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/checkout-overview.sel.ts +9 -0
  298. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +7 -6
  299. package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +7 -2
  300. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +24 -16
  301. package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  302. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/NAV.md +1 -0
  303. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/item-detail.sel.ts +9 -0
  304. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +2 -1
  305. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +2 -1
  306. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +2 -1
  307. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +51 -0
  308. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +69 -0
  309. package/templates/quickstart/src/blocks/saucedemo-web/methods/login.sel.ts +13 -0
  310. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login-for-flow.ts +4 -4
  311. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +35 -63
  312. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +4 -3
  313. package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +14 -6
  314. package/templates/quickstart/src/flows/checkout-then-browse-again.flow.ts +15 -0
  315. package/templates/quickstart/src/flows/checkout.flow.ts +29 -2
  316. package/templates/quickstart/src/flows/device-showcase.flow.ts +4 -0
  317. package/templates/quickstart/src/flows/login.flow.ts +3 -1
  318. package/templates/quickstart/src/flows/shop.flow.ts +6 -0
  319. package/templates/quickstart/src/flows/smoke.flow.ts +13 -7
  320. package/templates/quickstart/src/flows/viewer-blocked.flow.ts +6 -2
  321. package/templates/quickstart/tests/chain-flow.spec.ts +8 -1
  322. package/templates/scaffold/STRUCTURE.md +23 -3
  323. package/templates/scaffold/scripts/fixture-server.mjs +11 -2
  324. package/templates/scaffold/src/flows/example.flow.ts +8 -6
  325. package/templates/scaffold/src/flows/mail-verify.flow.ts +85 -0
  326. package/templates/scaffold/src/flows/shop.flow.ts +23 -6
  327. package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +20 -0
  328. package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +15 -0
  329. package/templates/scaffold/src/map/(app_base)/docs/_sel.ts +7 -0
  330. package/templates/scaffold/src/map/(app_base)/docs/docs.html +8 -0
  331. package/templates/scaffold/src/{blocks/demo-web/methods → map/(app_base)/home/_methods}/add-item.effect.block.ts +3 -3
  332. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +46 -0
  333. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +38 -0
  334. package/templates/scaffold/src/{blocks/demo-web/methods → map/(app_base)/home/_methods}/clear-cart.method.block.ts +9 -3
  335. package/templates/scaffold/src/{blocks/demo-web/methods → map/(app_base)/home/_methods}/remove-item.effect.block.ts +3 -3
  336. package/templates/scaffold/src/{blocks/demo-web/nav-home.block.ts → map/(app_base)/home/_nav.block.ts} +2 -2
  337. package/templates/scaffold/src/{blocks/demo-web/home.page.block.ts → map/(app_base)/home/_page.block.ts} +7 -7
  338. package/templates/scaffold/src/{blocks/demo-web/demo-sel.ts → map/(app_base)/home/_sel.ts} +1 -0
  339. package/templates/scaffold/src/{blocks/demo-web → map/(app_base)/home}/home.html +4 -0
  340. package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +34 -0
  341. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +48 -0
  342. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +49 -0
  343. package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +41 -0
  344. package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +39 -0
  345. package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +20 -0
  346. package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +30 -0
  347. package/templates/scaffold/src/map/(external)/mailpit/_sel.ts +5 -0
  348. package/templates/scaffold/src/states/demo.mem-keys.ts +25 -1
  349. package/templates/scaffold/src/states/demo.states.ts +11 -0
  350. package/templates/scaffold/test-results/.last-run.json +4 -0
  351. package/templates/scaffold/tests/example.spec.ts +2 -2
  352. package/templates/scaffold/tests/mail-verify.spec.ts +191 -0
  353. package/templates/skills/waygraph-blind-pilot.skill.md +61 -0
  354. package/templates/skills/waygraph-pilot.skill.md +108 -0
  355. package/templates/quickstart/README-saucedemo-commands.md +0 -72
  356. package/templates/scaffold/src/blocks/SITE-MAP.md +0 -12
  357. package/templates/scaffold/src/blocks/demo-web/NAV.md +0 -29
  358. package/templates/scaffold/src/blocks/demo-web/methods/assert-hello.method.block.ts +0 -50
Binary file
@@ -0,0 +1,32 @@
1
+ %PDF-1.4
2
+ 1 0 obj
3
+ << /Type /Catalog /Pages 2 0 R >>
4
+ endobj
5
+ 2 0 obj
6
+ << /Type /Pages /Kids [3 0 R] /Count 1 >>
7
+ endobj
8
+ 3 0 obj
9
+ << /Type /Page /Parent 2 0 R /MediaBox [0 0 200 200] /Resources << /Font << /F1 4 0 R >> >> /Contents 5 0 R >>
10
+ endobj
11
+ 4 0 obj
12
+ << /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>
13
+ endobj
14
+ 5 0 obj
15
+ << /Length 44 >>
16
+ stream
17
+ BT /F1 18 Tf 20 100 Td (waygraph stub) Tj ET
18
+ endstream
19
+ endobj
20
+ xref
21
+ 0 6
22
+ 0000000000 65535 f
23
+ 0000000009 00000 n
24
+ 0000000058 00000 n
25
+ 0000000115 00000 n
26
+ 0000000241 00000 n
27
+ 0000000311 00000 n
28
+ trailer
29
+ << /Size 6 /Root 1 0 R >>
30
+ startxref
31
+ 405
32
+ %%EOF
Binary file
@@ -10,6 +10,15 @@ export interface AgentSpec {
10
10
  /** Minimal YAML-ish frontmatter parser for `*.agent.md` templates. */
11
11
  export declare function parseAgentSpec(filePath: string): AgentSpec;
12
12
  export declare function loadAgentSpecs(): AgentSpec[];
13
+ /**
14
+ * Claude Code Skills (`.claude/skills/<name>/SKILL.md`) - a different
15
+ * mechanism than the agent persona files above: loadable instructions
16
+ * triggered by task shape, not a persona. Claude-Code-specific (no
17
+ * equivalent in the opencode/cursor/vscode loops), additive to the
18
+ * `claude` loop only. Reuses the same `name: .../description: ...` +
19
+ * body frontmatter shape `parseAgentSpec` already parses.
20
+ */
21
+ export declare function loadSkillSpecs(): AgentSpec[];
13
22
  export interface AgentDiveOptions {
14
23
  loop: AgentDiveLoop;
15
24
  projectDir: string;
@@ -12,6 +12,9 @@ function packageRoot() {
12
12
  function agentsTemplateDir() {
13
13
  return join(packageRoot(), "templates", "agents");
14
14
  }
15
+ function skillsTemplateDir() {
16
+ return join(packageRoot(), "templates", "skills");
17
+ }
15
18
  /** Minimal YAML-ish frontmatter parser for `*.agent.md` templates. */
16
19
  export function parseAgentSpec(filePath) {
17
20
  const raw = readFileSync(filePath, "utf-8");
@@ -65,6 +68,23 @@ export function loadAgentSpecs() {
65
68
  .sort()
66
69
  .map((f) => parseAgentSpec(join(dir, f)));
67
70
  }
71
+ /**
72
+ * Claude Code Skills (`.claude/skills/<name>/SKILL.md`) - a different
73
+ * mechanism than the agent persona files above: loadable instructions
74
+ * triggered by task shape, not a persona. Claude-Code-specific (no
75
+ * equivalent in the opencode/cursor/vscode loops), additive to the
76
+ * `claude` loop only. Reuses the same `name: .../description: ...` +
77
+ * body frontmatter shape `parseAgentSpec` already parses.
78
+ */
79
+ export function loadSkillSpecs() {
80
+ const dir = skillsTemplateDir();
81
+ if (!existsSync(dir))
82
+ return [];
83
+ return readdirSync(dir)
84
+ .filter((f) => f.endsWith(".skill.md"))
85
+ .sort()
86
+ .map((f) => parseAgentSpec(join(dir, f)));
87
+ }
68
88
  function writeFileLogged(path, content, kind) {
69
89
  mkdirSync(dirname(path), { recursive: true });
70
90
  writeFileSync(path, content.endsWith("\n") ? content : content + "\n");
@@ -104,6 +124,10 @@ ${agent.instructions}
104
124
  function vscodeAgentMd(agent) {
105
125
  return claudeAgentMd(agent);
106
126
  }
127
+ function claudeSkillMd(skill) {
128
+ const lines = ["---", `name: ${skill.name}`, `description: ${skill.description}`, "---", "", skill.instructions, ""];
129
+ return lines.join("\n");
130
+ }
107
131
  export function runAgentDive(opts) {
108
132
  const agents = loadAgentSpecs();
109
133
  const root = opts.projectDir;
@@ -116,6 +140,14 @@ export function runAgentDive(opts) {
116
140
  for (const a of agents) {
117
141
  writeFileLogged(join(dir, `${a.name}.md`), claudeAgentMd(a), "claude agent");
118
142
  }
143
+ const skills = loadSkillSpecs();
144
+ if (skills.length > 0) {
145
+ console.log(` ${skills.length} skill(s) from package templates`);
146
+ const skillsRoot = join(root, ".claude", "skills");
147
+ for (const s of skills) {
148
+ writeFileLogged(join(skillsRoot, s.name, "SKILL.md"), claudeSkillMd(s), "claude skill");
149
+ }
150
+ }
119
151
  break;
120
152
  }
121
153
  case "opencode": {
@@ -1,3 +1,7 @@
1
+ import type { Page, BrowserContext } from "@playwright/test";
2
+ import { Engine, MemPage } from "./index.js";
3
+ import { type BlockEntry } from "./auto-explore.js";
4
+ import type { Checkpoint } from "./types.js";
1
5
  export interface AutoExploreOptions {
2
6
  /** Terminal menu (browser still runs for act()). Default false = headful picker panel. */
3
7
  cli?: boolean;
@@ -7,11 +11,25 @@ export interface AutoExploreOptions {
7
11
  /** Phase C: glob / regex / bare `--blocks` file select for discovery. */
8
12
  blocksSelect?: import("./blocks-select.js").BlocksSelect;
9
13
  }
14
+ export declare function resolveBaseUrl(projectDir: string): string | undefined;
15
+ export declare function detectHere(page: Page, navBlocks: BlockEntry[]): Promise<string | null>;
16
+ export declare function ensureLivePage(context: BrowserContext, page: Page, startUrl: string | undefined): Promise<Page>;
10
17
  /**
11
- * Saucedemo-only defaults. Exact key names only — never substring `"login"`
12
- * (PIA `login-email` string must stay unset; see docs/proposals/auto-login-email-seed-bug.md).
18
+ * Saucedemo-only defaults. Exact key names only — never substring `"login"`.
19
+ * A consumer's own `key<string>("login-email")` must stay unset here, or it
20
+ * silently gets a saucedemo credentials object instead of its own default.
13
21
  */
14
22
  export declare function defaultMemValueForKey(keyName: string): unknown | undefined;
23
+ /** Pre-seed known demo keys (saucedemo creds) so headful/cli do not stop for mem forms. */
24
+ export declare function seedDefaultMem(library: Map<string, BlockEntry>, mem: MemPage): void;
25
+ export declare function ensureMem(entry: BlockEntry, mem: MemPage, cli: boolean): Promise<void>;
26
+ export declare function runOneBlock(engine: Engine, entry: BlockEntry, context: BrowserContext, page: Page, mem: MemPage, headful: boolean): Promise<Checkpoint<string>>;
27
+ export type PickResult = {
28
+ type: "pick";
29
+ index: number;
30
+ } | {
31
+ type: "quit";
32
+ };
15
33
  /**
16
34
  * Interactive waygraph auto: locate current Checkpoint, list runnable Blocks, pick one, repeat.
17
35
  */
@@ -5,7 +5,7 @@ import { join } from "node:path";
5
5
  import { Engine, start, end, locate, MemPage } from "./index.js";
6
6
  import { buildExploreContext, buildExploreMenu, } from "./auto-explore.js";
7
7
  import { installDemoChrome, instrumentInteractionHighlighting } from "./step-overlay.js";
8
- function resolveBaseUrl(projectDir) {
8
+ export function resolveBaseUrl(projectDir) {
9
9
  const pkgPath = join(projectDir, "package.json");
10
10
  if (existsSync(pkgPath)) {
11
11
  try {
@@ -55,14 +55,14 @@ async function inferCheckpointFromUrl(page) {
55
55
  }
56
56
  return null;
57
57
  }
58
- async function detectHere(page, navBlocks) {
58
+ export async function detectHere(page, navBlocks) {
59
59
  const fromUrl = await inferCheckpointFromUrl(page);
60
60
  if (fromUrl)
61
61
  return fromUrl;
62
62
  const tags = navBlocks.map((n) => n.block);
63
63
  return locate(page, tags, { timeoutMs: 1500 });
64
64
  }
65
- async function ensureLivePage(context, page, startUrl) {
65
+ export async function ensureLivePage(context, page, startUrl) {
66
66
  if (!page.isClosed())
67
67
  return page;
68
68
  const fresh = await context.newPage();
@@ -78,8 +78,9 @@ function missingMemKeys(entry, mem) {
78
78
  }
79
79
  const DEFAULT_CREDENTIALS = { username: "standard_user", password: "secret_sauce" };
80
80
  /**
81
- * Saucedemo-only defaults. Exact key names only — never substring `"login"`
82
- * (PIA `login-email` string must stay unset; see docs/proposals/auto-login-email-seed-bug.md).
81
+ * Saucedemo-only defaults. Exact key names only — never substring `"login"`.
82
+ * A consumer's own `key<string>("login-email")` must stay unset here, or it
83
+ * silently gets a saucedemo credentials object instead of its own default.
83
84
  */
84
85
  export function defaultMemValueForKey(keyName) {
85
86
  if (keyName === "login-credentials" ||
@@ -112,7 +113,7 @@ function seedMemFromEnv(mem, entry) {
112
113
  }
113
114
  }
114
115
  /** Pre-seed known demo keys (saucedemo creds) so headful/cli do not stop for mem forms. */
115
- function seedDefaultMem(library, mem) {
116
+ export function seedDefaultMem(library, mem) {
116
117
  const raw = process.env.WAYGRAPH_DATA ?? process.env.WAYGRAPH_AUTO_MEM;
117
118
  let envParsed = {};
118
119
  if (raw) {
@@ -151,7 +152,7 @@ async function promptMemCli(entry, mem) {
151
152
  rl.close();
152
153
  }
153
154
  }
154
- async function ensureMem(entry, mem, cli) {
155
+ export async function ensureMem(entry, mem, cli) {
155
156
  if (missingMemKeys(entry, mem).length === 0)
156
157
  return;
157
158
  if (seedMemFromEnv(mem, entry))
@@ -193,7 +194,7 @@ async function setAutoPanelRunning(page, label) {
193
194
  }, label)
194
195
  .catch(() => { });
195
196
  }
196
- async function runOneBlock(engine, entry, context, page, mem, headful) {
197
+ export async function runOneBlock(engine, entry, context, page, mem, headful) {
197
198
  const navClick = entry.block.__waygraphNavClick;
198
199
  if (entry.kind === "nav" && navClick !== undefined) {
199
200
  await page
@@ -1,4 +1,4 @@
1
- import { readdirSync } from "node:fs";
1
+ import { readdirSync, statSync } from "node:fs";
2
2
  import { join, relative, resolve } from "node:path";
3
3
  import { discoverGraph } from "./graph.js";
4
4
  function walkDir(dir, pattern) {
@@ -23,8 +23,28 @@ function walkDir(dir, pattern) {
23
23
  }
24
24
  return results;
25
25
  }
26
+ /**
27
+ * Real, confirmed bug this fixes: a bare `import(url.href)` is permanently
28
+ * cached by Node's ESM loader for the lifetime of the process, keyed on the
29
+ * exact specifier. `AutoSession.reloadLibrary()` exists specifically so a
30
+ * Block edited on disk mid-session takes effect without restarting the
31
+ * session - but a SECOND `reload` of a file already imported once in this
32
+ * process silently kept returning the FIRST version's content, no matter
33
+ * how many times the file changed on disk after that. A one-shot CLI
34
+ * process (`waygraph graph`, etc.) never hits this - it only ever imports
35
+ * each file once anyway - but a long-running `--detach` session calling
36
+ * `reloadLibrary()` repeatedly does.
37
+ *
38
+ * Fix: bust the cache with the file's own mtime as a query param - a
39
+ * genuinely changed file gets a new specifier (forcing a fresh import); an
40
+ * UNCHANGED file between two reloads keeps hitting the SAME specifier (no
41
+ * unbounded accumulation of dead module instances across many reloads).
42
+ */
26
43
  async function importModule(filePath) {
27
- const url = new URL(`file://${resolve(filePath)}`);
44
+ const resolved = resolve(filePath);
45
+ const url = new URL(`file://${resolved}`);
46
+ const mtimeMs = statSync(resolved).mtimeMs;
47
+ url.searchParams.set("t", String(mtimeMs));
28
48
  return (await import(url.href));
29
49
  }
30
50
  function isBlockLike(val) {
@@ -0,0 +1,123 @@
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
+ export interface SessionMeta {
3
+ sessionId: string;
4
+ socketPath: string;
5
+ pid: number;
6
+ projectDir: string;
7
+ startedAt: string;
8
+ headless: boolean;
9
+ }
10
+ export type StatusOrSendResponse = {
11
+ ok: true;
12
+ snapshot: SessionSnapshot;
13
+ quit: boolean;
14
+ } | {
15
+ ok: false;
16
+ error: string;
17
+ };
18
+ export type DomResponse = {
19
+ ok: true;
20
+ snapshot: DomSnapshot;
21
+ } | {
22
+ ok: false;
23
+ error: string;
24
+ };
25
+ export type TraceResponse = {
26
+ ok: true;
27
+ trace: TraceStep[];
28
+ } | {
29
+ ok: false;
30
+ error: string;
31
+ };
32
+ export type ConsoleResponse = {
33
+ ok: true;
34
+ consoleLog: ConsoleLogEntry[];
35
+ } | {
36
+ ok: false;
37
+ error: string;
38
+ };
39
+ export type StorageResponse = ({
40
+ ok: true;
41
+ } & StorageSnapshot) | {
42
+ ok: false;
43
+ error: string;
44
+ };
45
+ export type ReachResponse = ApplyPathResult;
46
+ /**
47
+ * Client-side: sends one request to a running session and returns its
48
+ * response. Reports a stale/unreachable session as an error within
49
+ * `timeoutMs`, never hangs indefinitely.
50
+ */
51
+ export declare function requestSession(projectDir: string, sessionId: string, request: {
52
+ op: "status";
53
+ } | {
54
+ op: "send";
55
+ pick: string;
56
+ } | {
57
+ op: "click";
58
+ selector: string;
59
+ } | {
60
+ op: "type";
61
+ selector: string;
62
+ text: string;
63
+ } | {
64
+ op: "press";
65
+ selector: string;
66
+ key: string;
67
+ } | {
68
+ op: "goto";
69
+ url: string;
70
+ } | {
71
+ op: "reload";
72
+ } | {
73
+ op: "resync";
74
+ } | {
75
+ op: "upload";
76
+ selector: string;
77
+ stub: StubFileKind | {
78
+ filePath: string;
79
+ };
80
+ }, timeoutMs?: number): Promise<StatusOrSendResponse>;
81
+ export declare function requestSession(projectDir: string, sessionId: string, request: {
82
+ op: "dom";
83
+ } & InspectDomOptions, timeoutMs?: number): Promise<DomResponse>;
84
+ export declare function requestSession(projectDir: string, sessionId: string, request: {
85
+ op: "trace";
86
+ }, timeoutMs?: number): Promise<TraceResponse>;
87
+ export declare function requestSession(projectDir: string, sessionId: string, request: {
88
+ op: "console";
89
+ }, timeoutMs?: number): Promise<ConsoleResponse>;
90
+ export declare function requestSession(projectDir: string, sessionId: string, request: {
91
+ op: "storage";
92
+ }, timeoutMs?: number): Promise<StorageResponse>;
93
+ export declare function requestSession(projectDir: string, sessionId: string, request: {
94
+ op: "reach";
95
+ checkpoint: string;
96
+ }, timeoutMs?: number): Promise<ReachResponse>;
97
+ /**
98
+ * Server-side: runs `session` behind a unix socket at
99
+ * `.waygraph-auto/<sessionId>.sock`, writing session metadata only once the
100
+ * socket is actually listening (the metadata file's existence is the
101
+ * "session is ready" signal a spawning parent polls for). Requests are
102
+ * processed one at a time via a queue - Node's single-threaded event loop
103
+ * already prevents true parallelism, but two overlapping `await`-heavy
104
+ * handlers could still interleave against the same page/mem.
105
+ */
106
+ export declare function serveSession(session: AutoSession, projectDir: string, sessionId: string, headless?: boolean): Promise<void>;
107
+ /** Entry point for the hidden `__auto-serve` CLI command (runs in the detached child). */
108
+ export declare function runAutoServeCommand(init: AutoSessionInit, sessionId: string): Promise<void>;
109
+ /**
110
+ * Parent-side: spawns a detached background process running the same
111
+ * explore session as a socket server, waits for it to signal readiness (its
112
+ * metadata file appearing), and returns its identity. Recurses through the
113
+ * existing `bin/waygraph` launcher (same tsx/esm registration every other
114
+ * invocation already gets) with the hidden `__auto-serve` command, rather
115
+ * than re-implementing that resolution here.
116
+ */
117
+ export declare function spawnDetachedSession(init: AutoSessionInit, readyTimeoutMs?: number): Promise<SessionMeta>;
118
+ /**
119
+ * Client-only interactive loop against a running detached session - reopens
120
+ * the same rendering/parsing the foreground `--cli` loop uses, driven purely
121
+ * through `status`/`send`. No server-side support beyond those two ops.
122
+ */
123
+ export declare function runAttachLoop(projectDir: string, sessionId: string): Promise<void>;