waygraph 0.15.26 → 0.15.28
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/dist/auto-session/helpers.d.ts +203 -0
- package/dist/auto-session/helpers.js +148 -0
- package/dist/auto-session/session.d.ts +191 -0
- package/dist/auto-session/session.js +697 -0
- package/dist/auto-session.d.ts +2 -369
- package/dist/auto-session.js +3 -843
- package/dist/highlights/css.js +2 -44
- package/dist/pilot-overlay.d.ts +0 -18
- package/dist/pilot-overlay.js +27 -32
- package/dist/runner/overlay-css.js +7 -18
- package/dist/step-overlay.js +2 -46
- package/dist/ui/components/banner.d.ts +2 -0
- package/dist/ui/components/banner.js +10 -0
- package/dist/ui/components/cursor.d.ts +2 -0
- package/dist/ui/components/cursor.js +19 -0
- package/dist/ui/components/ring.d.ts +4 -0
- package/dist/ui/components/ring.js +44 -0
- package/dist/ui/compose.d.ts +4 -0
- package/dist/ui/compose.js +7 -0
- package/dist/ui/tokens.d.ts +31 -0
- package/dist/ui/tokens.js +21 -0
- package/package.json +1 -1
- package/examples/saucedemo/.waygraph-auto/0b937f26.log +0 -4
- package/examples/saucedemo/.waygraph-auto/11c497cd.log +0 -44
- 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/179dde38.log +0 -0
- package/examples/saucedemo/.waygraph-auto/17ede493.log +0 -0
- package/examples/saucedemo/.waygraph-auto/19b9eee5.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1a7d471e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1d266123.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1e33a93d.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/22fefa13.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/29d11a49.log +0 -44
- package/examples/saucedemo/.waygraph-auto/2b608ed3.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2bb6c4e8.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2c13567b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2c7e8edd.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2c9a4003.log +0 -44
- package/examples/saucedemo/.waygraph-auto/2d425004.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2d45a578.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2d9622a5.log +0 -4
- package/examples/saucedemo/.waygraph-auto/2f5b3ea6.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2fbf6b8d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/301ff7e3.log +0 -0
- package/examples/saucedemo/.waygraph-auto/305f6e5b.log +0 -4
- package/examples/saucedemo/.waygraph-auto/309c107f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/3178c318.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/32e2c26f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/32ef32a8.log +0 -44
- package/examples/saucedemo/.waygraph-auto/36551ec1.log +0 -0
- package/examples/saucedemo/.waygraph-auto/36a1c274.log +0 -0
- package/examples/saucedemo/.waygraph-auto/36ba01f7.log +0 -44
- 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/39f352c7.log +0 -4
- package/examples/saucedemo/.waygraph-auto/3ab7c7bd.log +0 -44
- package/examples/saucedemo/.waygraph-auto/3b8b77b9.log +0 -0
- package/examples/saucedemo/.waygraph-auto/3eb1df41.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/418befbf.log +0 -4
- package/examples/saucedemo/.waygraph-auto/422d4390.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4258d26d.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/45864828.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/483bd763.log +0 -4
- package/examples/saucedemo/.waygraph-auto/4890da1c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4893a63b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/48e3596a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/49edc885.log +0 -4
- package/examples/saucedemo/.waygraph-auto/4a85f496.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4af71440.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4c6b9e15.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4d68438c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4f0e33e7.log +0 -4
- package/examples/saucedemo/.waygraph-auto/4f7496d1.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5030cca5.log +0 -0
- package/examples/saucedemo/.waygraph-auto/50e8baaa.log +0 -0
- package/examples/saucedemo/.waygraph-auto/51a5387a.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/537af83d.log +0 -44
- package/examples/saucedemo/.waygraph-auto/5391ce40.log +0 -0
- package/examples/saucedemo/.waygraph-auto/55df2b0f.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/5a4374f7.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5adfacd5.log +0 -44
- package/examples/saucedemo/.waygraph-auto/5b511794.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5bd8fedf.log +0 -4
- 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/5dde8331.log +0 -4
- package/examples/saucedemo/.waygraph-auto/5eafc682.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/605d965b.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/6443943b.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/68903903.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/6b667734.log +0 -0
- package/examples/saucedemo/.waygraph-auto/6c9f8e10.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/6fc3d553.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/74ce745a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7531b70f.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/76c7d418.log +0 -44
- package/examples/saucedemo/.waygraph-auto/7774f054.log +0 -0
- package/examples/saucedemo/.waygraph-auto/78197960.log +0 -44
- package/examples/saucedemo/.waygraph-auto/7861f38f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/78b21219.log +0 -0
- package/examples/saucedemo/.waygraph-auto/78bbf43c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/79600ead.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7a08e89a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7af224ed.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7c2acbc2.log +0 -44
- package/examples/saucedemo/.waygraph-auto/7c3be585.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7d9f231d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7ed55a2c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7eded669.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7efa646f.log +0 -4
- package/examples/saucedemo/.waygraph-auto/80086ba2.log +0 -0
- package/examples/saucedemo/.waygraph-auto/80206369.log +0 -0
- package/examples/saucedemo/.waygraph-auto/844b63ff.log +0 -44
- package/examples/saucedemo/.waygraph-auto/847f1092.log +0 -0
- package/examples/saucedemo/.waygraph-auto/84d6d293.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8557750f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8581abfa.log +0 -0
- package/examples/saucedemo/.waygraph-auto/86a5ff4d.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/88a4200b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/88af2495.log +0 -0
- package/examples/saucedemo/.waygraph-auto/89477e92.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/8c5b1caa.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/90141d7e.log +0 -4
- 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/95bd8371.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/9918377b.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/9c4fd0a0.log +0 -0
- package/examples/saucedemo/.waygraph-auto/9cd2da32.log +0 -0
- package/examples/saucedemo/.waygraph-auto/9cecb0c8.log +0 -4
- 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/a7c3d248.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/aae57d51.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ab26aeb4.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/b0eed995.log +0 -44
- package/examples/saucedemo/.waygraph-auto/b13d08e4.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/b61a08d8.log +0 -0
- package/examples/saucedemo/.waygraph-auto/b7e545f0.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/bb69dc1a.log +0 -44
- package/examples/saucedemo/.waygraph-auto/bb9fd384.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bc0bdd0e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bc4ae56f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bc7d4a83.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bcb9e31a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bd8e082a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/bde6d205.log +0 -0
- package/examples/saucedemo/.waygraph-auto/be0bb35f.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/c10c4038.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c17253b0.log +0 -44
- package/examples/saucedemo/.waygraph-auto/c23b2654.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c2caf0a8.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c31a9465.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/c5ac2393.log +0 -44
- package/examples/saucedemo/.waygraph-auto/c701e3c2.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c8825eda.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c916a654.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c946f66c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c9b8d69e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/cb2726d7.log +0 -0
- package/examples/saucedemo/.waygraph-auto/cd0d5b50.log +0 -4
- package/examples/saucedemo/.waygraph-auto/cd3e528c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/cd5b203c.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/d207a000.log +0 -44
- package/examples/saucedemo/.waygraph-auto/d2c6ed66.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d3714ae4.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d440e60f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d52ce64b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d6e0cb19.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/dce1535d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ddcb4212.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/e280bf20.log +0 -0
- package/examples/saucedemo/.waygraph-auto/e62bdb4a.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/e9b84105.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ea2df316.log +0 -4
- package/examples/saucedemo/.waygraph-auto/ebad3410.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ebc2ebdb.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/ee60ed24.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ef655a3f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f1949241.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f2b6cb1b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f34c9a26.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f392cdc8.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/fa3c5655.log +0 -44
- 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/.waygraph-auto/{008f4e6e.log → 0f0cb120.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{00d5336e.log → 2324269a.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{010dd92b.log → 2e2069e7.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{011ad671.log → 2efd1983.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{01b45645.log → 413d934d.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{03710cfc.log → 42e014d1.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{03764153.log → 6706ead4.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{0593587e.log → 685714af.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{06d12823.log → 7773a809.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{083cc5b9.log → 7f94fd02.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{0ac58118.log → c60cc55e.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{0c00f25f.log → d50e58f0.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{0e480591.log → d934da78.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{104751ef.log → da6ebb31.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{110958b8.log → e03cfd8e.log} +0 -0
- /package/examples/saucedemo/.waygraph-auto/{138107c1.log → f2943898.log} +0 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type { StubPhaseResult } from "../highlights.js";
|
|
2
|
+
import type { BlockEntry, ExploreMenu } from "../auto-explore.js";
|
|
3
|
+
import type { PickResult } from "../auto-explore-run.js";
|
|
4
|
+
/** True when a stub-phase result actually carries authored content worth keeping. */
|
|
5
|
+
export declare function stubPhaseHasContent(r: StubPhaseResult): boolean;
|
|
6
|
+
export interface SessionSnapshotEdge {
|
|
7
|
+
/** 1-based, matching the numbers a human/agent picks by (same as printCliMenu). */
|
|
8
|
+
index: number;
|
|
9
|
+
block: string;
|
|
10
|
+
kind: "nav" | "action";
|
|
11
|
+
to: string;
|
|
12
|
+
label?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface SessionSnapshotSection {
|
|
16
|
+
title: string;
|
|
17
|
+
edges: SessionSnapshotEdge[];
|
|
18
|
+
}
|
|
19
|
+
export interface SessionSnapshot {
|
|
20
|
+
here: string | null;
|
|
21
|
+
sections: SessionSnapshotSection[];
|
|
22
|
+
/** True when there are no runnable moves from `here` right now. */
|
|
23
|
+
done: boolean;
|
|
24
|
+
lastRunNote: string | null;
|
|
25
|
+
}
|
|
26
|
+
/** Plain, JSON-serializable view of a menu - no Block/MemKey/class references. */
|
|
27
|
+
export declare function buildSessionSnapshot(menu: ExploreMenu, library: Map<string, BlockEntry>, here: string | null, lastRunNote: string | null): SessionSnapshot;
|
|
28
|
+
export type ParsedPick = PickResult | {
|
|
29
|
+
type: "invalid";
|
|
30
|
+
reason: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Same number/`q`/range rules `cliPick` already applies, but returning a
|
|
34
|
+
* result instead of looping to re-prompt - one request gets one answer.
|
|
35
|
+
* Also accepts a Block name (exact, case-sensitive) as a shorthand for its
|
|
36
|
+
* menu index - `send <id> "submit-login"` instead of hunting the number.
|
|
37
|
+
* Ambiguous (the same Block name appearing more than once in one menu)
|
|
38
|
+
* refuses rather than guessing which occurrence was meant - a pick runs a
|
|
39
|
+
* real browser action, not something to silently get wrong.
|
|
40
|
+
*/
|
|
41
|
+
export declare function parsePick(raw: string, menu: {
|
|
42
|
+
readonly flat: readonly {
|
|
43
|
+
readonly block: string;
|
|
44
|
+
}[];
|
|
45
|
+
}): ParsedPick;
|
|
46
|
+
export interface DomSnapshot {
|
|
47
|
+
mode: "aria" | "full";
|
|
48
|
+
selector?: string;
|
|
49
|
+
/** Always false for aria mode - Playwright's own ariaSnapshotJSON bounds itself. */
|
|
50
|
+
truncated: boolean;
|
|
51
|
+
tree: unknown;
|
|
52
|
+
}
|
|
53
|
+
export interface InspectDomOptions {
|
|
54
|
+
mode?: "aria" | "full";
|
|
55
|
+
/** Scopes either mode to one element's subtree - a modifier, not a third mode. */
|
|
56
|
+
selector?: string;
|
|
57
|
+
depth?: number;
|
|
58
|
+
}
|
|
59
|
+
export type InspectDomResult = {
|
|
60
|
+
ok: true;
|
|
61
|
+
snapshot: DomSnapshot;
|
|
62
|
+
} | {
|
|
63
|
+
ok: false;
|
|
64
|
+
error: string;
|
|
65
|
+
};
|
|
66
|
+
export declare const FULL_MODE_DEFAULT_DEPTH = 12;
|
|
67
|
+
export declare const FULL_MODE_MAX_NODES = 800;
|
|
68
|
+
export declare const FULL_MODE_MAX_TEXT_LENGTH = 300;
|
|
69
|
+
interface FullDomNode {
|
|
70
|
+
tag: string;
|
|
71
|
+
attrs?: Record<string, string>;
|
|
72
|
+
text?: string;
|
|
73
|
+
children?: FullDomNode[];
|
|
74
|
+
}
|
|
75
|
+
export interface FullDomCaps {
|
|
76
|
+
depth: number;
|
|
77
|
+
maxNodes: number;
|
|
78
|
+
maxTextLength: number;
|
|
79
|
+
}
|
|
80
|
+
/** Runs entirely inside the browser (page.evaluate) - no closures over outer TS state. */
|
|
81
|
+
export declare function walkFullDom(root: Element, caps: FullDomCaps): {
|
|
82
|
+
tree: FullDomNode;
|
|
83
|
+
truncated: boolean;
|
|
84
|
+
};
|
|
85
|
+
export interface AutoSessionInit {
|
|
86
|
+
projectDir: string;
|
|
87
|
+
baseURL?: string;
|
|
88
|
+
startUrl?: string;
|
|
89
|
+
blocksSelect?: import("../blocks-select.js").BlocksSelect;
|
|
90
|
+
/** Absolute paths — merged Block libraries (see `waygraph browser --inject`). */
|
|
91
|
+
inject?: string[];
|
|
92
|
+
/** When true, open about:blank instead of baseURL/startUrl (browser default). */
|
|
93
|
+
skipInitialNavigation?: boolean;
|
|
94
|
+
/** Default true. false launches a real visible browser window. */
|
|
95
|
+
headless?: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Shown on the on-page Pilot overlay badge, when known - purely cosmetic,
|
|
98
|
+
* this class has no other use for it. `auto --cli --detach`'s spawned
|
|
99
|
+
* child (`runAutoServeCommand`) always knows and passes its own generated
|
|
100
|
+
* id; a directly-constructed `AutoSession` (e.g. in a test) simply omits
|
|
101
|
+
* it, and the badge shows "no session id" instead.
|
|
102
|
+
*/
|
|
103
|
+
sessionId?: string;
|
|
104
|
+
}
|
|
105
|
+
export type ApplyPickResult = {
|
|
106
|
+
ok: true;
|
|
107
|
+
snapshot: SessionSnapshot;
|
|
108
|
+
quit: boolean;
|
|
109
|
+
} | {
|
|
110
|
+
ok: false;
|
|
111
|
+
error: string;
|
|
112
|
+
};
|
|
113
|
+
export type ApplyPathResult = {
|
|
114
|
+
ok: true;
|
|
115
|
+
path: string[];
|
|
116
|
+
snapshot: SessionSnapshot;
|
|
117
|
+
} | {
|
|
118
|
+
ok: false;
|
|
119
|
+
error: string;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* One Checkpoint/Block-level step in a session's history - not a raw action
|
|
123
|
+
* recording (no clicks/fills). Kept lean by design: an agent that wants DOM
|
|
124
|
+
* evidence at a specific step already has `inspectDom` to call itself.
|
|
125
|
+
*/
|
|
126
|
+
export interface TraceStep {
|
|
127
|
+
block: string;
|
|
128
|
+
from: string | null;
|
|
129
|
+
to?: string;
|
|
130
|
+
error?: string;
|
|
131
|
+
timestamp: string;
|
|
132
|
+
/**
|
|
133
|
+
* Resolved demo-narration fixtures (highlights/todos/device), when the
|
|
134
|
+
* Block actually authors `stubBefore`/`stubAfter`/`stubOnError` - the same
|
|
135
|
+
* data `waygraph demo`'s lifecycle logging already computes (`runStubPhase`
|
|
136
|
+
* in highlights.ts), reused here for extra context on what a step meant to
|
|
137
|
+
* convey. Omitted when the Block has none, or the result carries nothing.
|
|
138
|
+
*/
|
|
139
|
+
stubBefore?: StubPhaseResult;
|
|
140
|
+
stubAfter?: StubPhaseResult;
|
|
141
|
+
stubOnError?: StubPhaseResult;
|
|
142
|
+
}
|
|
143
|
+
export declare const TRACE_MAX_STEPS = 500;
|
|
144
|
+
export type StubFileKind = "image" | "pdf" | "video";
|
|
145
|
+
/**
|
|
146
|
+
* Real, minimal, valid fixture files bundled at `assets/stubs/` - not
|
|
147
|
+
* placeholder/renamed-empty files: `stub.png` is a real 1x1 PNG,
|
|
148
|
+
* `stub.pdf` a real single-page PDF, `stub.mp4` a real ffmpeg-encoded
|
|
149
|
+
* 1s black clip. Real, direct user request: Blind Pilot hitting a real
|
|
150
|
+
* `<input type="file">` (e.g. an avatar upload) had no way to supply
|
|
151
|
+
* anything without a human handing over a real file each time - these are
|
|
152
|
+
* small enough to ship in the package and pass most apps' basic file-type
|
|
153
|
+
* checks (magic bytes, not just extension).
|
|
154
|
+
*/
|
|
155
|
+
/**
|
|
156
|
+
* Public so a Block a consumer writes can reach the same real fixture files
|
|
157
|
+
* `rawUpload` uses - not just the raw primitive. Needed when a real upload
|
|
158
|
+
* flow has no stable `<input type="file">` to hand a selector to at all
|
|
159
|
+
* (e.g. one created on the fly inside a click handler, then immediately
|
|
160
|
+
* `.click()`'d to open the OS picker and possibly torn down right after) -
|
|
161
|
+
* a Block's own `act()` should pair this with `page.waitForEvent("filechooser")`
|
|
162
|
+
* around the triggering click, not go hunting for a selector that may not
|
|
163
|
+
* exist for more than a moment.
|
|
164
|
+
*/
|
|
165
|
+
export declare function stubFilePath(kind: StubFileKind): string;
|
|
166
|
+
/**
|
|
167
|
+
* Real gap found live (Blind Pilot against veciro.com): a form submit that
|
|
168
|
+
* does nothing observable in the DOM - no navigation, no visible error text -
|
|
169
|
+
* is undiagnosable through `inspectDom` alone, since a silent client-side
|
|
170
|
+
* validation failure or a failed network request never touches the DOM at
|
|
171
|
+
* all. `auto dom` reads what's rendered; this reads what the page/network
|
|
172
|
+
* actually SAID, independent of whether the app chose to show it.
|
|
173
|
+
*/
|
|
174
|
+
export interface ConsoleLogEntry {
|
|
175
|
+
type: "console" | "pageerror" | "response";
|
|
176
|
+
level?: string;
|
|
177
|
+
text: string;
|
|
178
|
+
url?: string;
|
|
179
|
+
status?: number;
|
|
180
|
+
timestamp: string;
|
|
181
|
+
}
|
|
182
|
+
export declare const CONSOLE_LOG_MAX_ENTRIES = 200;
|
|
183
|
+
export interface ServiceWorkerRegistrationInfo {
|
|
184
|
+
scope: string;
|
|
185
|
+
activeUrl?: string;
|
|
186
|
+
state?: string;
|
|
187
|
+
}
|
|
188
|
+
export interface CookieInfo {
|
|
189
|
+
name: string;
|
|
190
|
+
value: string;
|
|
191
|
+
domain: string;
|
|
192
|
+
path: string;
|
|
193
|
+
httpOnly: boolean;
|
|
194
|
+
secure: boolean;
|
|
195
|
+
}
|
|
196
|
+
export interface StorageSnapshot {
|
|
197
|
+
localStorage: Record<string, string>;
|
|
198
|
+
sessionStorage: Record<string, string>;
|
|
199
|
+
cookies: CookieInfo[];
|
|
200
|
+
serviceWorkers: string[];
|
|
201
|
+
serviceWorkerRegistrations: ServiceWorkerRegistrationInfo[];
|
|
202
|
+
}
|
|
203
|
+
export {};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { dirname, join, resolve } from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
/** True when a stub-phase result actually carries authored content worth keeping. */
|
|
4
|
+
export function stubPhaseHasContent(r) {
|
|
5
|
+
return (Object.keys(r.highlights).length > 0 ||
|
|
6
|
+
r.todos.length > 0 ||
|
|
7
|
+
r.device !== undefined ||
|
|
8
|
+
r.todoDock !== undefined);
|
|
9
|
+
}
|
|
10
|
+
/** Plain, JSON-serializable view of a menu - no Block/MemKey/class references. */
|
|
11
|
+
export function buildSessionSnapshot(menu, library, here, lastRunNote) {
|
|
12
|
+
let n = 0;
|
|
13
|
+
const sections = menu.sections.map((section) => ({
|
|
14
|
+
title: section.title,
|
|
15
|
+
edges: section.edges.map((edge) => {
|
|
16
|
+
n++;
|
|
17
|
+
const entry = library.get(edge.block);
|
|
18
|
+
return {
|
|
19
|
+
index: n,
|
|
20
|
+
block: edge.block,
|
|
21
|
+
kind: edge.kind,
|
|
22
|
+
to: edge.to,
|
|
23
|
+
...(edge.label ? { label: edge.label } : {}),
|
|
24
|
+
...(entry?.description ? { description: entry.description } : {}),
|
|
25
|
+
};
|
|
26
|
+
}),
|
|
27
|
+
}));
|
|
28
|
+
return { here, sections, done: menu.flat.length === 0, lastRunNote };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Same number/`q`/range rules `cliPick` already applies, but returning a
|
|
32
|
+
* result instead of looping to re-prompt - one request gets one answer.
|
|
33
|
+
* Also accepts a Block name (exact, case-sensitive) as a shorthand for its
|
|
34
|
+
* menu index - `send <id> "submit-login"` instead of hunting the number.
|
|
35
|
+
* Ambiguous (the same Block name appearing more than once in one menu)
|
|
36
|
+
* refuses rather than guessing which occurrence was meant - a pick runs a
|
|
37
|
+
* real browser action, not something to silently get wrong.
|
|
38
|
+
*/
|
|
39
|
+
export function parsePick(raw, menu) {
|
|
40
|
+
const ans = raw.trim();
|
|
41
|
+
const lower = ans.toLowerCase();
|
|
42
|
+
if (lower === "q" || lower === "quit")
|
|
43
|
+
return { type: "quit" };
|
|
44
|
+
const n = Number(lower);
|
|
45
|
+
if (Number.isInteger(n) && n >= 1 && n <= menu.flat.length) {
|
|
46
|
+
return { type: "pick", index: n - 1 };
|
|
47
|
+
}
|
|
48
|
+
const matches = [];
|
|
49
|
+
menu.flat.forEach((edge, i) => {
|
|
50
|
+
if (edge.block === ans)
|
|
51
|
+
matches.push(i);
|
|
52
|
+
});
|
|
53
|
+
if (matches.length === 1) {
|
|
54
|
+
return { type: "pick", index: matches[0] };
|
|
55
|
+
}
|
|
56
|
+
if (matches.length > 1) {
|
|
57
|
+
return {
|
|
58
|
+
type: "invalid",
|
|
59
|
+
reason: `"${raw}" matches ${matches.length} menu entries - use the numeric index instead of the Block name`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
type: "invalid",
|
|
64
|
+
reason: `"${raw}" is not a valid pick - enter a number from 1 to ${menu.flat.length}, a Block name, or "q" to quit`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export const FULL_MODE_DEFAULT_DEPTH = 12;
|
|
68
|
+
export const FULL_MODE_MAX_NODES = 800;
|
|
69
|
+
export const FULL_MODE_MAX_TEXT_LENGTH = 300;
|
|
70
|
+
/** Runs entirely inside the browser (page.evaluate) - no closures over outer TS state. */
|
|
71
|
+
export function walkFullDom(root, caps) {
|
|
72
|
+
let count = 0;
|
|
73
|
+
let truncated = false;
|
|
74
|
+
function walk(el, depth) {
|
|
75
|
+
if (depth > caps.depth) {
|
|
76
|
+
truncated = true;
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
if (count >= caps.maxNodes) {
|
|
80
|
+
truncated = true;
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
count++;
|
|
84
|
+
const node = { tag: el.tagName.toLowerCase() };
|
|
85
|
+
const attrs = {};
|
|
86
|
+
for (const a of Array.from(el.attributes))
|
|
87
|
+
attrs[a.name] = a.value;
|
|
88
|
+
if (Object.keys(attrs).length > 0)
|
|
89
|
+
node.attrs = attrs;
|
|
90
|
+
const directText = Array.from(el.childNodes)
|
|
91
|
+
.filter((n) => n.nodeType === 3)
|
|
92
|
+
.map((n) => n.textContent ?? "")
|
|
93
|
+
.join("")
|
|
94
|
+
.trim();
|
|
95
|
+
if (directText) {
|
|
96
|
+
node.text =
|
|
97
|
+
directText.length > caps.maxTextLength
|
|
98
|
+
? directText.slice(0, caps.maxTextLength) + "..."
|
|
99
|
+
: directText;
|
|
100
|
+
}
|
|
101
|
+
const children = [];
|
|
102
|
+
for (const child of Array.from(el.children)) {
|
|
103
|
+
if (count >= caps.maxNodes) {
|
|
104
|
+
truncated = true;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
const c = walk(child, depth + 1);
|
|
108
|
+
if (c)
|
|
109
|
+
children.push(c);
|
|
110
|
+
}
|
|
111
|
+
if (children.length > 0)
|
|
112
|
+
node.children = children;
|
|
113
|
+
return node;
|
|
114
|
+
}
|
|
115
|
+
const tree = walk(root, 0) ?? { tag: root.tagName.toLowerCase() };
|
|
116
|
+
return { tree, truncated };
|
|
117
|
+
}
|
|
118
|
+
export const TRACE_MAX_STEPS = 500;
|
|
119
|
+
/**
|
|
120
|
+
* Real, minimal, valid fixture files bundled at `assets/stubs/` - not
|
|
121
|
+
* placeholder/renamed-empty files: `stub.png` is a real 1x1 PNG,
|
|
122
|
+
* `stub.pdf` a real single-page PDF, `stub.mp4` a real ffmpeg-encoded
|
|
123
|
+
* 1s black clip. Real, direct user request: Blind Pilot hitting a real
|
|
124
|
+
* `<input type="file">` (e.g. an avatar upload) had no way to supply
|
|
125
|
+
* anything without a human handing over a real file each time - these are
|
|
126
|
+
* small enough to ship in the package and pass most apps' basic file-type
|
|
127
|
+
* checks (magic bytes, not just extension).
|
|
128
|
+
*/
|
|
129
|
+
/**
|
|
130
|
+
* Public so a Block a consumer writes can reach the same real fixture files
|
|
131
|
+
* `rawUpload` uses - not just the raw primitive. Needed when a real upload
|
|
132
|
+
* flow has no stable `<input type="file">` to hand a selector to at all
|
|
133
|
+
* (e.g. one created on the fly inside a click handler, then immediately
|
|
134
|
+
* `.click()`'d to open the OS picker and possibly torn down right after) -
|
|
135
|
+
* a Block's own `act()` should pair this with `page.waitForEvent("filechooser")`
|
|
136
|
+
* around the triggering click, not go hunting for a selector that may not
|
|
137
|
+
* exist for more than a moment.
|
|
138
|
+
*/
|
|
139
|
+
export function stubFilePath(kind) {
|
|
140
|
+
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
141
|
+
const names = {
|
|
142
|
+
image: "stub.png",
|
|
143
|
+
pdf: "stub.pdf",
|
|
144
|
+
video: "stub.mp4",
|
|
145
|
+
};
|
|
146
|
+
return join(packageRoot, "assets", "stubs", names[kind]);
|
|
147
|
+
}
|
|
148
|
+
export const CONSOLE_LOG_MAX_ENTRIES = 200;
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import type { ApplyPathResult, ApplyPickResult, AutoSessionInit, ConsoleLogEntry, InspectDomOptions, InspectDomResult, SessionSnapshot, StorageSnapshot, StubFileKind, TraceStep } from "./helpers.js";
|
|
2
|
+
import type { PilotHighlightFixtures } from "../pilot-overlay.js";
|
|
3
|
+
/**
|
|
4
|
+
* Non-interactive explore session: same graph/library/mem/browser setup
|
|
5
|
+
* `runAutoExplore` runs in `--cli` mode, driven by `applyPick` instead of a
|
|
6
|
+
* blocking `readline` loop. Headless by default (matching
|
|
7
|
+
* `runAutoExplore`'s own `cli` branch), optionally visible via
|
|
8
|
+
* `AutoSessionInit.headless: false` - this type only ever backs the `--cli`
|
|
9
|
+
* picker, never the headful page-embedded panel, headless or not.
|
|
10
|
+
*/
|
|
11
|
+
export declare class AutoSession {
|
|
12
|
+
private readonly projectDir;
|
|
13
|
+
private readonly inject;
|
|
14
|
+
private readonly blocksSelect;
|
|
15
|
+
private graph;
|
|
16
|
+
private library;
|
|
17
|
+
private readonly mem;
|
|
18
|
+
private readonly engine;
|
|
19
|
+
private readonly browser;
|
|
20
|
+
private readonly context;
|
|
21
|
+
private page;
|
|
22
|
+
private readonly startUrl;
|
|
23
|
+
private readonly sessionId;
|
|
24
|
+
private here;
|
|
25
|
+
private lastRunNote;
|
|
26
|
+
private readonly trace;
|
|
27
|
+
private readonly consoleLog;
|
|
28
|
+
private readonly knownInteractionSelectors;
|
|
29
|
+
private readonly headless;
|
|
30
|
+
private lastOverlayInfo;
|
|
31
|
+
private constructor();
|
|
32
|
+
static start(init: AutoSessionInit): Promise<AutoSession>;
|
|
33
|
+
/** Pure getter - returns a copy, not the live array. */
|
|
34
|
+
getTrace(): TraceStep[];
|
|
35
|
+
private pushTrace;
|
|
36
|
+
/** Pure getter - returns a copy, not the live array. */
|
|
37
|
+
getConsoleLog(): ConsoleLogEntry[];
|
|
38
|
+
private pushConsoleLog;
|
|
39
|
+
private currentMenu;
|
|
40
|
+
/** Paint the overlay on about:blank / immediately after session start (headful browser). */
|
|
41
|
+
private bootstrapOverlay;
|
|
42
|
+
/** Re-apply cached overlay state after navigation (init script restores shell only). */
|
|
43
|
+
private repaintOverlayAfterNavigation;
|
|
44
|
+
/**
|
|
45
|
+
* Flags same-origin `<a href>` paths and visible buttons with no NavBlock
|
|
46
|
+
* URL / Block selector in the loaded library — read via `auto console`.
|
|
47
|
+
* Deduped per page load so repeated status/send calls stay quiet.
|
|
48
|
+
*/
|
|
49
|
+
private warnUnmappedInteractions;
|
|
50
|
+
/** Pure getter - no Block runs, no mem/page mutation. */
|
|
51
|
+
currentSnapshot(): Promise<SessionSnapshot>;
|
|
52
|
+
/**
|
|
53
|
+
* Pure getter - reads the live page's structure at the requested fidelity.
|
|
54
|
+
* No Block runs, no mem/page mutation. `selector` scopes either mode to one
|
|
55
|
+
* element's subtree; it is a modifier, not a third mode.
|
|
56
|
+
*/
|
|
57
|
+
inspectDom(opts: InspectDomOptions): Promise<InspectDomResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Pure getter - reads the live page's client-side state: localStorage,
|
|
60
|
+
* sessionStorage, and registered service workers (scope/active URL/state).
|
|
61
|
+
* Real, direct follow-up to `auto console`'s own gap: a site doing web
|
|
62
|
+
* push (this target has a real `NOTIFICATION_VAPID` config, confirmed via
|
|
63
|
+
* `auto dom` earlier) keeps push-subscription/auth state in these places,
|
|
64
|
+
* not in the rendered DOM `inspectDom` reads.
|
|
65
|
+
*/
|
|
66
|
+
inspectStorage(): Promise<StorageSnapshot>;
|
|
67
|
+
/**
|
|
68
|
+
* Runs one already-resolved Block entry for real - the shared core both
|
|
69
|
+
* `applyPick` (resolved via a live-menu index) and `applyPath` (resolved
|
|
70
|
+
* directly by name, bypassing live-menu-visibility entirely - see
|
|
71
|
+
* `applyPath`'s own comment for why) call. `expectedTo` is only used as a
|
|
72
|
+
* fallback when a Block's own `resolve()` doesn't set `__state` - same
|
|
73
|
+
* behavior `applyPick` always had, just factored out, not changed.
|
|
74
|
+
*/
|
|
75
|
+
private runNamedBlock;
|
|
76
|
+
/** Applies exactly one pick: runs at most one Block, returns the resulting state. */
|
|
77
|
+
applyPick(raw: string): Promise<ApplyPickResult>;
|
|
78
|
+
/**
|
|
79
|
+
* Re-discovers the project's Block library and graph from disk, using the
|
|
80
|
+
* exact same call `start()` itself makes - not a duplicated read - and
|
|
81
|
+
* replaces `this.library`/`this.graph` in place. Leaves the live page,
|
|
82
|
+
* mem, browser/context, and current Checkpoint (`here`) untouched, so a
|
|
83
|
+
* Block written to disk mid-session becomes pickable via a later
|
|
84
|
+
* `applyPick` without restarting the session. See
|
|
85
|
+
* openspec/changes/waygraph-blind-pilot/design.md.
|
|
86
|
+
*/
|
|
87
|
+
reloadLibrary(): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Forces `here` to be re-detected from the real live page, discarding
|
|
90
|
+
* whatever was cached - the fix for a real, confirmed gap: `here` is only
|
|
91
|
+
* ever updated by an action this class itself ran (`applyPick`/`applyPath`
|
|
92
|
+
* set it to a Block's own resolved Checkpoint; `rawClick`/`rawType`/
|
|
93
|
+
* `rawGoto` reset it to `null` because *they* just changed the page). If a
|
|
94
|
+
* human co-driving the same visible session clicks/types/navigates
|
|
95
|
+
* directly - a real scenario for a headful Pilot session someone is
|
|
96
|
+
* watching, not hypothetical - none of that goes through this class at
|
|
97
|
+
* all, so `here` silently goes stale: `currentMenu()`'s own lazy check
|
|
98
|
+
* (`if (this.here === null)`, just above) only re-detects when `here` is
|
|
99
|
+
* already unknown, never to confirm a *known* value is still correct.
|
|
100
|
+
* This does not crash the session (the process/socket/page all stay
|
|
101
|
+
* alive) but subsequent `send`/`reach` calls would act on a menu built
|
|
102
|
+
* from the wrong Checkpoint until something forces re-detection - this
|
|
103
|
+
* method is that: unconditionally re-run the same `detectHere` logic the
|
|
104
|
+
* lazy path already uses, regardless of what `here` currently holds.
|
|
105
|
+
*/
|
|
106
|
+
resync(): Promise<ApplyPickResult>;
|
|
107
|
+
/**
|
|
108
|
+
* Raw interaction primitives for a page no Block covers yet (Blind Pilot -
|
|
109
|
+
* see openspec/changes/waygraph-blind-pilot). Unlike `applyPick`, the
|
|
110
|
+
* resulting Checkpoint isn't known ahead of time from a Block's own
|
|
111
|
+
* `resolve()`, so each of these invalidates the cached `here` (forcing
|
|
112
|
+
* `currentMenu()`'s existing lazy `detectHere` call to run again) rather
|
|
113
|
+
* than assuming the page didn't move anywhere a Block now recognizes.
|
|
114
|
+
* A selector matching nothing is a reported failure, not a silent no-op.
|
|
115
|
+
*/
|
|
116
|
+
rawClick(selector: string): Promise<ApplyPickResult>;
|
|
117
|
+
rawType(selector: string, text: string): Promise<ApplyPickResult>;
|
|
118
|
+
/**
|
|
119
|
+
* Presses a real key on a real focused element - a real gap found live:
|
|
120
|
+
* many real inline-edit inputs (no visible Save button at all) commit on
|
|
121
|
+
* Enter, not on blur/click-elsewhere. `key` is a Playwright key name
|
|
122
|
+
* (e.g. "Enter", "Escape", "Tab") - same vocabulary as
|
|
123
|
+
* `page.keyboard.press`, which this wraps.
|
|
124
|
+
*/
|
|
125
|
+
rawPress(selector: string, key: string): Promise<ApplyPickResult>;
|
|
126
|
+
rawGoto(url: string): Promise<ApplyPickResult>;
|
|
127
|
+
/**
|
|
128
|
+
* Fills a real `<input type="file">` - a built-in stub kind
|
|
129
|
+
* ("image"/"pdf"/"video", see `stubFilePath`) or a caller-supplied
|
|
130
|
+
* `filePath` for anything else ("whatever", per the real request this
|
|
131
|
+
* responds to). Same raw-primitive shape as click/type/goto: works with
|
|
132
|
+
* zero Blocks, invalidates `here` since the app may react to the upload.
|
|
133
|
+
*/
|
|
134
|
+
rawUpload(selector: string, stub: StubFileKind | {
|
|
135
|
+
filePath: string;
|
|
136
|
+
}): Promise<ApplyPickResult>;
|
|
137
|
+
/**
|
|
138
|
+
* Agent-sent highlight fixtures (rings + optional todos) on the live page -
|
|
139
|
+
* the Pilot equivalent of Block `stubBefore` narration in `waygraph demo`.
|
|
140
|
+
* Does not run a Block; paint-only. Missing selectors are reported, not fatal.
|
|
141
|
+
*/
|
|
142
|
+
applyHighlight(fixtures: PilotHighlightFixtures): Promise<{
|
|
143
|
+
ok: true;
|
|
144
|
+
painted: number;
|
|
145
|
+
missing: string[];
|
|
146
|
+
snapshot: SessionSnapshot;
|
|
147
|
+
} | {
|
|
148
|
+
ok: false;
|
|
149
|
+
error: string;
|
|
150
|
+
}>;
|
|
151
|
+
/**
|
|
152
|
+
* Runs a whole multi-step route to `targetCheckpoint` in one call, instead
|
|
153
|
+
* of an agent hand-picking one index at a time across many separate
|
|
154
|
+
* `applyPick` round trips - real, reported pain for any non-trivial task
|
|
155
|
+
* on a rich graph ("the entire prompts of the day" driving one step per
|
|
156
|
+
* call).
|
|
157
|
+
*
|
|
158
|
+
* Two other designs were tried and rejected by direct reproduction against
|
|
159
|
+
* live saucedemo.com before this one, both undone by the same root cause:
|
|
160
|
+
* a `from: "*"` edge (e.g. "Checkout", only clickable once you're actually
|
|
161
|
+
* on the cart page with items) looks globally reachable to
|
|
162
|
+
* `findBlockPath`'s static-graph BFS, which has no live-page access and
|
|
163
|
+
* can't know the edge's real precondition isn't showing yet. Computing the
|
|
164
|
+
* whole route once upfront names a premature wildcard step immediately;
|
|
165
|
+
* scoring each live menu option by its static-graph distance to the
|
|
166
|
+
* target (greedy best-first) doesn't fix it either - a harmless self-loop
|
|
167
|
+
* Method can score just as well as real progress once wildcard "shortcuts"
|
|
168
|
+
* are baked into every distance calculation, and the session gets stuck
|
|
169
|
+
* repeating it.
|
|
170
|
+
*
|
|
171
|
+
* The fix that actually works: stop trying to be clever about live-menu
|
|
172
|
+
* visibility per step, and reuse `auto --blocks <From> <To>`'s own already
|
|
173
|
+
* -proven approach instead - compute the path ONCE (via
|
|
174
|
+
* `findBlockPathDetailed`, the same BFS `findBlockPath`/`runChainAuto`
|
|
175
|
+
* already use, extended to also return each hop's specific edge - see its
|
|
176
|
+
* own doc comment for why that extra detail is load-bearing, not cosmetic),
|
|
177
|
+
* then run each Block in it directly via `runNamedBlock`, trusting the
|
|
178
|
+
* graph the same way `runChain`'s own flow execution already does, not
|
|
179
|
+
* gated on live-menu visibility at all. The one real difference from
|
|
180
|
+
* `runChainAuto`: this runs against the session's own already-live
|
|
181
|
+
* page/context/mem, not a freshly spawned browser - the whole point of
|
|
182
|
+
* staying in one session. A step whose real precondition genuinely isn't
|
|
183
|
+
* met still fails loud, naming that step, exactly the way a mis-ordered
|
|
184
|
+
* `runChain` spec would - and a step that runs without throwing but lands
|
|
185
|
+
* somewhere other than what its own edge promised (a real, observed case,
|
|
186
|
+
* not hypothetical - see this method's own test suite) fails loud too,
|
|
187
|
+
* rather than reporting false success.
|
|
188
|
+
*/
|
|
189
|
+
applyPath(targetCheckpoint: string): Promise<ApplyPathResult>;
|
|
190
|
+
close(): Promise<void>;
|
|
191
|
+
}
|