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.
- package/README.md +970 -232
- package/assets/stubs/stub.mp4 +0 -0
- package/assets/stubs/stub.pdf +32 -0
- package/assets/stubs/stub.png +0 -0
- package/dist/agent-dive.d.ts +9 -0
- package/dist/agent-dive.js +32 -0
- package/dist/auto-explore-run.d.ts +20 -2
- package/dist/auto-explore-run.js +9 -8
- package/dist/auto-explore.js +22 -2
- package/dist/auto-session-ipc.d.ts +123 -0
- package/dist/auto-session-ipc.js +381 -0
- package/dist/auto-session.d.ts +342 -0
- package/dist/auto-session.js +760 -0
- package/dist/cli.js +450 -51
- package/dist/engine.d.ts +201 -1
- package/dist/engine.js +312 -2
- package/dist/graph.d.ts +18 -0
- package/dist/graph.js +65 -2
- package/dist/highlights.d.ts +20 -1
- package/dist/highlights.js +60 -0
- package/dist/index.d.ts +8 -4
- package/dist/index.js +5 -3
- package/dist/map-check.d.ts +18 -0
- package/dist/map-check.js +140 -0
- package/dist/pilot-overlay.d.ts +88 -0
- package/dist/pilot-overlay.js +363 -0
- package/dist/pilot.d.ts +49 -0
- package/dist/pilot.js +53 -0
- package/dist/trait.d.ts +22 -0
- package/dist/trait.js +60 -3
- package/dist/types.d.ts +21 -1
- package/dist/types.js +17 -1
- package/examples/routed-demo/.waygraph-auto/4d4902b7.log +0 -0
- package/examples/routed-demo/.waygraph-auto/51ef462e.log +0 -0
- package/examples/routed-demo/.waygraph-auto/71527ad9.log +0 -0
- package/examples/routed-demo/.waygraph-auto/ca16778e.log +0 -0
- package/examples/routed-demo/package.json +26 -0
- package/examples/routed-demo/playwright.config.ts +20 -0
- package/examples/routed-demo/scripts/fixture-server.mjs +37 -0
- package/examples/routed-demo/scripts/with-fixture.mjs +70 -0
- package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +39 -0
- package/examples/routed-demo/src/flows/routed-demo.flow.ts +12 -0
- package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +23 -0
- package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +18 -0
- package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +22 -0
- package/examples/routed-demo/src/map/(app_base)/dashboard/_sel.ts +10 -0
- package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +21 -0
- package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +15 -0
- package/examples/routed-demo/src/map/(external)/docs/_sel.ts +7 -0
- package/examples/routed-demo/src/pages/dashboard.html +10 -0
- package/examples/routed-demo/src/pages/docs.html +8 -0
- package/examples/routed-demo/src/states/routed-demo.states.ts +10 -0
- package/examples/routed-demo/test-results/.last-run.json +4 -0
- package/examples/routed-demo/tests/routed-demo-map.spec.ts +17 -0
- package/examples/routed-demo/tests/routed-demo.spec.ts +75 -0
- package/examples/routed-demo/tsconfig.json +18 -0
- package/examples/routed-demo-consumer/package.json +18 -0
- package/examples/saucedemo/.waygraph-auto/00d5336e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/010dd92b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/011ad671.log +0 -0
- package/examples/saucedemo/.waygraph-auto/01b45645.log +0 -0
- package/examples/saucedemo/.waygraph-auto/03764153.log +0 -0
- package/examples/saucedemo/.waygraph-auto/0593587e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/06d12823.log +0 -0
- package/examples/saucedemo/.waygraph-auto/083cc5b9.log +0 -0
- package/examples/saucedemo/.waygraph-auto/0b1f5b26.json +8 -0
- package/examples/saucedemo/.waygraph-auto/0c00f25f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/0e480591.log +0 -0
- package/examples/saucedemo/.waygraph-auto/104751ef.log +0 -0
- package/examples/saucedemo/.waygraph-auto/110958b8.log +0 -0
- package/examples/saucedemo/.waygraph-auto/138107c1.log +0 -0
- package/examples/saucedemo/.waygraph-auto/159d541b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/16aa2c01.log +0 -0
- package/examples/saucedemo/.waygraph-auto/16c35dd5.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1706547d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/17537e42.log +0 -0
- package/examples/saucedemo/.waygraph-auto/175655f7.log +0 -0
- package/examples/saucedemo/.waygraph-auto/17ede493.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1fe2414f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1fe2e3b8.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2219f00b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/23e62571.log +0 -0
- package/examples/saucedemo/.waygraph-auto/25f68ada.log +0 -0
- package/examples/saucedemo/.waygraph-auto/26ca9cd8.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2bb6c4e8.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2d425004.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2f5b3ea6.log +0 -0
- package/examples/saucedemo/.waygraph-auto/31bb303d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/31f2042f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/36551ec1.log +0 -0
- package/examples/saucedemo/.waygraph-auto/36a1c274.log +0 -0
- package/examples/saucedemo/.waygraph-auto/381aa338.log +0 -0
- package/examples/saucedemo/.waygraph-auto/3882bce1.log +0 -0
- package/examples/saucedemo/.waygraph-auto/38acd1dc.log +0 -0
- package/examples/saucedemo/.waygraph-auto/3b8b77b9.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4028d2a2.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4168b208.log +0 -0
- package/examples/saucedemo/.waygraph-auto/42cc9113.log +0 -0
- package/examples/saucedemo/.waygraph-auto/439d30aa.log +0 -0
- package/examples/saucedemo/.waygraph-auto/43ab66ce.log +0 -0
- package/examples/saucedemo/.waygraph-auto/43f66838.log +0 -0
- package/examples/saucedemo/.waygraph-auto/442171d4.log +0 -0
- package/examples/saucedemo/.waygraph-auto/453b1ce1.log +0 -0
- package/examples/saucedemo/.waygraph-auto/457322bd.log +0 -0
- package/examples/saucedemo/.waygraph-auto/46197027.log +0 -0
- package/examples/saucedemo/.waygraph-auto/46889468.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4890da1c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4893a63b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4a85f496.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4af71440.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4f7496d1.log +0 -0
- package/examples/saucedemo/.waygraph-auto/50e8baaa.log +0 -0
- package/examples/saucedemo/.waygraph-auto/52b3a455.log +0 -0
- package/examples/saucedemo/.waygraph-auto/532dd9b8.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5391ce40.log +0 -0
- package/examples/saucedemo/.waygraph-auto/57dbddb3.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5897f501.log +0 -0
- package/examples/saucedemo/.waygraph-auto/59c0b57d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5b511794.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5c0eef7f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5c47910f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5d60da77.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5eda8273.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5fc3a33b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/61b6546d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/621518ad.log +0 -0
- package/examples/saucedemo/.waygraph-auto/632b7118.log +0 -0
- package/examples/saucedemo/.waygraph-auto/64314c2b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/650ed066.log +0 -0
- package/examples/saucedemo/.waygraph-auto/66516213.log +0 -0
- package/examples/saucedemo/.waygraph-auto/66c17079.log +0 -0
- package/examples/saucedemo/.waygraph-auto/69bf0b80.log +0 -0
- package/examples/saucedemo/.waygraph-auto/69c2347a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/6d22bdb0.log +0 -0
- package/examples/saucedemo/.waygraph-auto/6d9aaad3.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7103bebb.log +0 -0
- package/examples/saucedemo/.waygraph-auto/740c9faa.log +0 -0
- package/examples/saucedemo/.waygraph-auto/74872fc5.log +0 -0
- package/examples/saucedemo/.waygraph-auto/75846ca9.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7626c85b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/76308eec.log +0 -0
- package/examples/saucedemo/.waygraph-auto/76c1650e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7861f38f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/78b21219.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7af224ed.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7c3be585.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7ed55a2c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/80086ba2.log +0 -0
- package/examples/saucedemo/.waygraph-auto/80206369.log +0 -0
- package/examples/saucedemo/.waygraph-auto/847f1092.log +0 -0
- package/examples/saucedemo/.waygraph-auto/84d6d293.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8581abfa.log +0 -0
- package/examples/saucedemo/.waygraph-auto/87b7e0fd.log +0 -0
- package/examples/saucedemo/.waygraph-auto/87c79256.log +0 -0
- package/examples/saucedemo/.waygraph-auto/88af2495.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8a3eb088.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8c04a403.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8c9ab09e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8cc5db51.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8ea3a69c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/9150f913.log +0 -0
- package/examples/saucedemo/.waygraph-auto/929a4313.log +0 -0
- package/examples/saucedemo/.waygraph-auto/95a599e4.log +0 -0
- package/examples/saucedemo/.waygraph-auto/96c45350.log +0 -0
- package/examples/saucedemo/.waygraph-auto/986030e6.log +0 -0
- package/examples/saucedemo/.waygraph-auto/99787abb.log +0 -0
- package/examples/saucedemo/.waygraph-auto/99ddb62c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/a2dd30dd.log +0 -0
- package/examples/saucedemo/.waygraph-auto/a63a2d20.log +0 -0
- package/examples/saucedemo/.waygraph-auto/a78befb7.log +0 -0
- package/examples/saucedemo/.waygraph-auto/a84d9b79.log +0 -0
- package/examples/saucedemo/.waygraph-auto/a87bb3ee.log +0 -0
- package/examples/saucedemo/.waygraph-auto/a9270890.log +0 -0
- package/examples/saucedemo/.waygraph-auto/aa440153.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ab7561e0.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ac19ae60.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ae21ad8e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/af09042f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/b1684126.log +0 -0
- package/examples/saucedemo/.waygraph-auto/b21e9d12.log +0 -0
- package/examples/saucedemo/.waygraph-auto/b5a838be.log +0 -0
- package/examples/saucedemo/.waygraph-auto/b603549d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/b81e074f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/b83e6259.log +0 -0
- package/examples/saucedemo/.waygraph-auto/b9cb2796.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ba58abb7.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bb0a0018.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bb9fd384.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bc0bdd0e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bc7d4a83.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bd8e082a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bea0c93e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bf35201a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bffa3a7a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c02ea583.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c2caf0a8.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c3bdc714.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c4afb8bc.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c916a654.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c9b8d69e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/cd68bbc4.log +0 -0
- package/examples/saucedemo/.waygraph-auto/cdc6db50.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d01906a7.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d02e5e7e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d09aff71.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d0e41396.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d1370d76.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d3714ae4.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d9e5f8a4.log +0 -0
- package/examples/saucedemo/.waygraph-auto/da0685dc.log +0 -0
- package/examples/saucedemo/.waygraph-auto/da894ad8.log +0 -0
- package/examples/saucedemo/.waygraph-auto/daa2f922.log +0 -0
- package/examples/saucedemo/.waygraph-auto/daefb614.log +0 -0
- package/examples/saucedemo/.waygraph-auto/db97e833.log +0 -0
- package/examples/saucedemo/.waygraph-auto/dec3076e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/e101d19a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/e1973991.log +0 -0
- package/examples/saucedemo/.waygraph-auto/e207c989.log +0 -0
- package/examples/saucedemo/.waygraph-auto/e633e545.log +0 -0
- package/examples/saucedemo/.waygraph-auto/e69aec68.log +0 -0
- package/examples/saucedemo/.waygraph-auto/e70e2d06.log +0 -0
- package/examples/saucedemo/.waygraph-auto/e8306a4b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ebad3410.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ec88b3ef.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ecbb0966.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ecdee753.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ed888783.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ed931dac.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ef655a3f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f34c9a26.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f3c29b21.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f53f7cfc.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f5525d53.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f5ad5830.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f90035b3.log +0 -0
- package/examples/saucedemo/.waygraph-auto/fa687bc2.log +0 -0
- package/examples/saucedemo/.waygraph-auto/faed36dd.log +0 -0
- package/examples/saucedemo/.waygraph-auto/fb66fba0.log +0 -0
- package/examples/saucedemo/.waygraph-auto/fc48fd76.log +0 -0
- package/examples/saucedemo/docs/CONVENTION.md +25 -5
- package/examples/saucedemo/docs/HELPERS.md +15 -4
- package/examples/saucedemo/scripts/capture-wrong-login.mjs +8 -2
- package/examples/saucedemo/scripts/prove-wrong-login-runtime.mjs +8 -2
- package/examples/saucedemo/src/blocks/SITE-MAP.md +14 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +15 -1
- package/examples/saucedemo/src/blocks/saucedemo-web/cart/NAV.md +1 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/cart/cart.sel.ts +9 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -2
- package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +2 -1
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/NAV.md +6 -1
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/checkout-info.sel.ts +11 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +22 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +21 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +21 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +6 -7
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/NAV.md +2 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/checkout-overview.sel.ts +9 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +7 -6
- package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +7 -2
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/NAV.md +1 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/item-detail.sel.ts +9 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +2 -1
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +2 -1
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +2 -1
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +51 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +69 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/login.sel.ts +13 -0
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login-for-flow.ts +4 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +13 -51
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +4 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +14 -6
- package/examples/saucedemo/src/flows/checkout-then-browse-again.flow.ts +15 -0
- package/examples/saucedemo/src/flows/checkout.flow.ts +20 -2
- package/examples/saucedemo/src/flows/device-showcase.flow.ts +4 -0
- package/examples/saucedemo/src/flows/login.flow.ts +3 -1
- package/examples/saucedemo/src/flows/shop.flow.ts +6 -0
- package/examples/saucedemo/src/flows/smoke.flow.ts +13 -7
- package/examples/saucedemo/src/flows/stub-on-error.flow.ts +4 -2
- package/examples/saucedemo/src/flows/viewer-blocked.flow.ts +6 -2
- package/examples/saucedemo/tests/flow-block-verify.spec.ts +3 -3
- package/examples/saucedemo/tests/submit-login-branch.spec.ts +5 -3
- package/package.json +2 -1
- package/templates/agents/waygraph-author.agent.md +43 -5
- package/templates/agents/waygraph-planner.agent.md +33 -2
- package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +15 -1
- package/templates/quickstart/src/blocks/saucedemo-web/cart/NAV.md +1 -0
- package/templates/quickstart/src/blocks/saucedemo-web/cart/cart.sel.ts +9 -0
- package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +19 -15
- package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +2 -1
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/NAV.md +6 -1
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/checkout-info.sel.ts +11 -0
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +22 -0
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +21 -0
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +21 -0
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +6 -7
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/NAV.md +2 -0
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/checkout-overview.sel.ts +9 -0
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +7 -6
- package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +7 -2
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +24 -16
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/NAV.md +1 -0
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/item-detail.sel.ts +9 -0
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +2 -1
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +2 -1
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +2 -1
- package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +51 -0
- package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +69 -0
- package/templates/quickstart/src/blocks/saucedemo-web/methods/login.sel.ts +13 -0
- package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login-for-flow.ts +4 -4
- package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +35 -63
- package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +4 -3
- package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +14 -6
- package/templates/quickstart/src/flows/checkout-then-browse-again.flow.ts +15 -0
- package/templates/quickstart/src/flows/checkout.flow.ts +29 -2
- package/templates/quickstart/src/flows/device-showcase.flow.ts +4 -0
- package/templates/quickstart/src/flows/login.flow.ts +3 -1
- package/templates/quickstart/src/flows/shop.flow.ts +6 -0
- package/templates/quickstart/src/flows/smoke.flow.ts +13 -7
- package/templates/quickstart/src/flows/viewer-blocked.flow.ts +6 -2
- package/templates/quickstart/tests/chain-flow.spec.ts +8 -1
- package/templates/scaffold/STRUCTURE.md +23 -3
- package/templates/scaffold/scripts/fixture-server.mjs +11 -2
- package/templates/scaffold/src/flows/example.flow.ts +8 -6
- package/templates/scaffold/src/flows/mail-verify.flow.ts +85 -0
- package/templates/scaffold/src/flows/shop.flow.ts +23 -6
- package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +20 -0
- package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +15 -0
- package/templates/scaffold/src/map/(app_base)/docs/_sel.ts +7 -0
- package/templates/scaffold/src/map/(app_base)/docs/docs.html +8 -0
- package/templates/scaffold/src/{blocks/demo-web/methods → map/(app_base)/home/_methods}/add-item.effect.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +46 -0
- package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +38 -0
- package/templates/scaffold/src/{blocks/demo-web/methods → map/(app_base)/home/_methods}/clear-cart.method.block.ts +9 -3
- package/templates/scaffold/src/{blocks/demo-web/methods → map/(app_base)/home/_methods}/remove-item.effect.block.ts +3 -3
- package/templates/scaffold/src/{blocks/demo-web/nav-home.block.ts → map/(app_base)/home/_nav.block.ts} +2 -2
- package/templates/scaffold/src/{blocks/demo-web/home.page.block.ts → map/(app_base)/home/_page.block.ts} +7 -7
- package/templates/scaffold/src/{blocks/demo-web/demo-sel.ts → map/(app_base)/home/_sel.ts} +1 -0
- package/templates/scaffold/src/{blocks/demo-web → map/(app_base)/home}/home.html +4 -0
- package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +34 -0
- package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +48 -0
- package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +49 -0
- package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +41 -0
- package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +39 -0
- package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +20 -0
- package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +30 -0
- package/templates/scaffold/src/map/(external)/mailpit/_sel.ts +5 -0
- package/templates/scaffold/src/states/demo.mem-keys.ts +25 -1
- package/templates/scaffold/src/states/demo.states.ts +11 -0
- package/templates/scaffold/test-results/.last-run.json +4 -0
- package/templates/scaffold/tests/example.spec.ts +2 -2
- package/templates/scaffold/tests/mail-verify.spec.ts +191 -0
- package/templates/skills/waygraph-blind-pilot.skill.md +61 -0
- package/templates/skills/waygraph-pilot.skill.md +108 -0
- package/templates/quickstart/README-saucedemo-commands.md +0 -72
- package/templates/scaffold/src/blocks/SITE-MAP.md +0 -12
- package/templates/scaffold/src/blocks/demo-web/NAV.md +0 -29
- 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
|
package/dist/agent-dive.d.ts
CHANGED
|
@@ -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;
|
package/dist/agent-dive.js
CHANGED
|
@@ -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
|
-
*
|
|
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
|
*/
|
package/dist/auto-explore-run.js
CHANGED
|
@@ -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
|
-
*
|
|
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
|
package/dist/auto-explore.js
CHANGED
|
@@ -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
|
|
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>;
|