waygraph 0.15.47 → 0.15.50
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/analysis/graph.js +2 -2
- package/dist/auto-session/session.js +3 -3
- package/dist/cli/discover.d.ts +1 -1
- package/dist/cli/discover.js +1 -1
- package/dist/cli/flags.d.ts +7 -5
- package/dist/cli/flags.js +9 -32
- package/dist/cli/run-chain.js +1 -1
- package/dist/cli.js +1 -1
- package/dist/{agent-dive.js → commands/agent-dive-scaffold.js} +2 -2
- package/dist/commands/agent-dive.js +1 -1
- package/dist/commands/check.js +1 -1
- package/dist/commands/run.js +4 -4
- package/dist/commands/session.js +7 -7
- package/dist/config.d.ts +34 -0
- package/dist/config.js +94 -0
- package/dist/{engine/core.js → core/block.js} +6 -6
- package/dist/core/blocks/api.d.ts +54 -0
- package/dist/core/blocks/api.js +75 -0
- package/dist/{engine → core}/blocks/effect.d.ts +1 -1
- package/dist/{engine → core}/blocks/effect.js +1 -1
- package/dist/{engine → core}/blocks/method.d.ts +1 -1
- package/dist/{engine → core}/blocks/method.js +1 -1
- package/dist/{engine → core}/blocks/nav.js +1 -1
- package/dist/{engine → core}/blocks/page.js +1 -1
- package/dist/{engine → core}/branch-regression.js +2 -3
- package/dist/{engine → core}/compose.js +4 -4
- package/dist/{engine/engine-class.d.ts → core/engine.d.ts} +2 -133
- package/dist/core/engine.js +50 -0
- package/dist/{engine → core}/flow.js +5 -5
- package/dist/core/map-builder.d.ts +171 -0
- package/dist/{engine/engine-class.js → core/map-builder.js} +82 -98
- package/dist/{engine → core}/run-graph.js +4 -6
- package/dist/core.d.ts +14 -0
- package/dist/core.js +15 -0
- package/dist/env-file.d.ts +10 -0
- package/dist/env-file.js +58 -0
- package/dist/errors.d.ts +54 -20
- package/dist/errors.js +67 -20
- package/dist/highlights/run-phase.js +15 -2
- package/dist/highlights/stub-ctx.js +16 -0
- package/dist/highlights/types.d.ts +38 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.js +2 -1
- package/dist/mem-page.js +2 -2
- package/dist/mem-stub.d.ts +1 -1
- package/dist/pilot-overlay/fixtures.js +42 -10
- package/dist/pilot-overlay/shell.js +23 -10
- package/dist/runner/banner-log.js +1 -0
- package/dist/runner/device-stage.js +35 -15
- package/dist/runner/inpage/banner.d.ts +9 -1
- package/dist/runner/inpage/banner.js +27 -2
- package/dist/runner/inpage/caption.d.ts +3 -0
- package/dist/runner/inpage/caption.js +23 -0
- package/dist/runner/inpage/core.js +32 -9
- package/dist/runner/inpage/network.d.ts +15 -0
- package/dist/runner/inpage/network.js +217 -0
- package/dist/runner/inpage/panel-chrome.js +41 -1
- package/dist/runner/inpage/swipe-zoom.js +1 -1
- package/dist/runner/inpage/todos.js +6 -1
- package/dist/runner/main.js +9 -2
- package/dist/runner/network-capture.d.ts +9 -0
- package/dist/runner/network-capture.js +126 -0
- package/dist/runner/overlay-css.js +71 -7
- package/dist/runner/overlay-install.js +39 -2
- package/dist/runner/overlay-stage.js +5 -0
- package/dist/runner/rings.js +69 -45
- package/dist/runner/slides.js +14 -8
- package/dist/runner/step-mode.js +12 -0
- package/dist/runner/step-panels.js +9 -3
- package/dist/runner/teardown.js +16 -9
- package/dist/session/auto-explore-run.d.ts +5 -2
- package/dist/session/auto-explore-run.js +52 -36
- package/dist/{step-overlay.d.ts → session/step-overlay.d.ts} +1 -1
- package/dist/{step-overlay.js → session/step-overlay.js} +1 -1
- package/dist/trait.d.ts +1 -0
- package/dist/trait.js +15 -0
- package/dist/traverse/run.js +3 -22
- package/dist/ui/components/ring.js +4 -2
- package/dist/ui/overlay.css +36 -3
- package/examples/saucedemo/.waygraph-auto/00d147d1.log +21 -0
- package/examples/saucedemo/.waygraph-auto/0402cfcf.log +6 -0
- package/examples/saucedemo/.waygraph-auto/062b581f.log +20 -0
- package/examples/saucedemo/.waygraph-auto/0681582b.log +6 -0
- package/examples/saucedemo/.waygraph-auto/07f3e964.log +6 -0
- package/examples/saucedemo/.waygraph-auto/0868ae4d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/0924ddaa.log +22 -0
- package/examples/saucedemo/.waygraph-auto/092d6173.log +5 -0
- package/examples/saucedemo/.waygraph-auto/09924510.log +0 -0
- package/examples/saucedemo/.waygraph-auto/0998c941.log +21 -0
- package/examples/saucedemo/.waygraph-auto/0bf74300.log +21 -0
- package/examples/saucedemo/.waygraph-auto/0c01fd29.log +4 -0
- package/examples/saucedemo/.waygraph-auto/0c302590.log +0 -0
- package/examples/saucedemo/.waygraph-auto/0dee62d6.log +5 -0
- package/examples/saucedemo/.waygraph-auto/0eb4c081.log +5 -0
- package/examples/saucedemo/.waygraph-auto/10fd431c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/13c6fe3c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1581b677.log +0 -0
- package/examples/saucedemo/.waygraph-auto/161cc8dd.log +22 -0
- package/examples/saucedemo/.waygraph-auto/164761a5.log +6 -0
- package/examples/saucedemo/.waygraph-auto/1905ceb2.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1b1d55c6.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1b80fd24.log +6 -0
- package/examples/saucedemo/.waygraph-auto/1c30a3c2.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1d90aa9a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1de7d889.log +0 -0
- package/examples/saucedemo/.waygraph-auto/1f233a4c.log +6 -0
- package/examples/saucedemo/.waygraph-auto/20e66801.log +0 -0
- package/examples/saucedemo/.waygraph-auto/20ffdb77.log +0 -0
- package/examples/saucedemo/.waygraph-auto/22048fff.log +4 -0
- package/examples/saucedemo/.waygraph-auto/22f1a704.log +5 -0
- package/examples/saucedemo/.waygraph-auto/239cced3.log +20 -0
- package/examples/saucedemo/.waygraph-auto/25204b46.log +4 -0
- package/examples/saucedemo/.waygraph-auto/25e2e90f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2708455e.log +22 -0
- package/examples/saucedemo/.waygraph-auto/272a96fd.log +20 -0
- package/examples/saucedemo/.waygraph-auto/28d7be5d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2a6a8266.log +6 -0
- package/examples/saucedemo/.waygraph-auto/2b3401cf.log +20 -0
- package/examples/saucedemo/.waygraph-auto/2ceccd6d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/2f1b0c13.log +6 -0
- package/examples/saucedemo/.waygraph-auto/2f8d4073.log +6 -0
- package/examples/saucedemo/.waygraph-auto/30739278.log +6 -0
- package/examples/saucedemo/.waygraph-auto/31cb2e80.log +0 -0
- package/examples/saucedemo/.waygraph-auto/322d63cd.log +0 -0
- package/examples/saucedemo/.waygraph-auto/3239aa8a.log +6 -0
- package/examples/saucedemo/.waygraph-auto/326d87b7.log +6 -0
- package/examples/saucedemo/.waygraph-auto/3351c0b6.log +0 -0
- package/examples/saucedemo/.waygraph-auto/33df0770.log +0 -0
- package/examples/saucedemo/.waygraph-auto/340d624d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/36367ccf.log +0 -0
- package/examples/saucedemo/.waygraph-auto/372536a5.log +6 -0
- package/examples/saucedemo/.waygraph-auto/3a412f3c.log +0 -0
- package/examples/saucedemo/.waygraph-auto/3a859bd7.log +0 -0
- package/examples/saucedemo/.waygraph-auto/3cb0add7.log +0 -0
- package/examples/saucedemo/.waygraph-auto/3e42f0d8.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4144071d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4176a3c6.log +0 -0
- package/examples/saucedemo/.waygraph-auto/41d0793d.log +4 -0
- package/examples/saucedemo/.waygraph-auto/424b4d5d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/43253aba.log +0 -0
- package/examples/saucedemo/.waygraph-auto/438c6c53.log +22 -0
- package/examples/saucedemo/.waygraph-auto/4477db12.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4a1258b7.log +0 -0
- package/examples/saucedemo/.waygraph-auto/4adcd179.log +20 -0
- package/examples/saucedemo/.waygraph-auto/4c9d9b16.log +21 -0
- package/examples/saucedemo/.waygraph-auto/4da39c36.log +6 -0
- package/examples/saucedemo/.waygraph-auto/4dbefa7e.log +5 -0
- package/examples/saucedemo/.waygraph-auto/4efa7035.log +6 -0
- package/examples/saucedemo/.waygraph-auto/505affdc.log +4 -0
- package/examples/saucedemo/.waygraph-auto/51bcb60a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5291bc78.log +22 -0
- package/examples/saucedemo/.waygraph-auto/54274c39.log +5 -0
- package/examples/saucedemo/.waygraph-auto/5440ce7e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5738175f.log +22 -0
- package/examples/saucedemo/.waygraph-auto/57ce5643.log +22 -0
- package/examples/saucedemo/.waygraph-auto/5984426b.log +6 -0
- package/examples/saucedemo/.waygraph-auto/5a682e7c.log +22 -0
- package/examples/saucedemo/.waygraph-auto/5b79320c.log +21 -0
- package/examples/saucedemo/.waygraph-auto/5c55aaac.log +21 -0
- package/examples/saucedemo/.waygraph-auto/5d285cd3.log +0 -0
- package/examples/saucedemo/.waygraph-auto/5ed00b16.log +4 -0
- package/examples/saucedemo/.waygraph-auto/60b9c066.log +6 -0
- package/examples/saucedemo/.waygraph-auto/610dd127.log +0 -0
- package/examples/saucedemo/.waygraph-auto/61105500.log +5 -0
- package/examples/saucedemo/.waygraph-auto/6134afe8.log +20 -0
- package/examples/saucedemo/.waygraph-auto/62a0bdc9.log +22 -0
- package/examples/saucedemo/.waygraph-auto/6376fc15.log +0 -0
- package/examples/saucedemo/.waygraph-auto/6599cbca.log +22 -0
- package/examples/saucedemo/.waygraph-auto/67aaca30.log +0 -0
- package/examples/saucedemo/.waygraph-auto/68b10298.log +0 -0
- package/examples/saucedemo/.waygraph-auto/68be5e12.log +0 -0
- package/examples/saucedemo/.waygraph-auto/68df05a6.log +22 -0
- package/examples/saucedemo/.waygraph-auto/693f67c4.log +20 -0
- package/examples/saucedemo/.waygraph-auto/69ae030a.log +6 -0
- package/examples/saucedemo/.waygraph-auto/69e73f35.log +6 -0
- package/examples/saucedemo/.waygraph-auto/6b2333b0.log +5 -0
- package/examples/saucedemo/.waygraph-auto/6c4c3817.log +0 -0
- package/examples/saucedemo/.waygraph-auto/6c954911.log +0 -0
- package/examples/saucedemo/.waygraph-auto/6d65a439.log +5 -0
- package/examples/saucedemo/.waygraph-auto/6d700055.log +0 -0
- package/examples/saucedemo/.waygraph-auto/6ead848f.log +0 -0
- package/examples/saucedemo/.waygraph-auto/72675b2d.log +6 -0
- package/examples/saucedemo/.waygraph-auto/733dd260.log +5 -0
- package/examples/saucedemo/.waygraph-auto/75016486.log +0 -0
- package/examples/saucedemo/.waygraph-auto/752b01c6.log +22 -0
- package/examples/saucedemo/.waygraph-auto/75675227.log +6 -0
- package/examples/saucedemo/.waygraph-auto/75e2e658.log +0 -0
- package/examples/saucedemo/.waygraph-auto/76ac1a86.log +0 -0
- package/examples/saucedemo/.waygraph-auto/77605295.log +0 -0
- package/examples/saucedemo/.waygraph-auto/792671f4.log +22 -0
- package/examples/saucedemo/.waygraph-auto/79915adb.log +20 -0
- package/examples/saucedemo/.waygraph-auto/7a398774.log +6 -0
- package/examples/saucedemo/.waygraph-auto/7a72f66e.log +6 -0
- package/examples/saucedemo/.waygraph-auto/7a984334.log +4 -0
- package/examples/saucedemo/.waygraph-auto/7c6ee793.log +20 -0
- package/examples/saucedemo/.waygraph-auto/7c726dc4.log +22 -0
- package/examples/saucedemo/.waygraph-auto/7c72e8a5.log +4 -0
- package/examples/saucedemo/.waygraph-auto/7dbee625.log +22 -0
- package/examples/saucedemo/.waygraph-auto/7df66956.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7e053160.log +0 -0
- package/examples/saucedemo/.waygraph-auto/7fcb512f.log +22 -0
- package/examples/saucedemo/.waygraph-auto/802a0b5b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/80322e0b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/80a4978e.log +6 -0
- package/examples/saucedemo/.waygraph-auto/81cfe480.log +22 -0
- package/examples/saucedemo/.waygraph-auto/832f5add.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8337b6ad.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8493928e.log +0 -0
- package/examples/saucedemo/.waygraph-auto/84dc6480.log +6 -0
- package/examples/saucedemo/.waygraph-auto/853bde43.log +0 -0
- package/examples/saucedemo/.waygraph-auto/86350ea6.log +22 -0
- package/examples/saucedemo/.waygraph-auto/86bb598a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/86d09876.log +22 -0
- package/examples/saucedemo/.waygraph-auto/878ad01b.log +4 -0
- package/examples/saucedemo/.waygraph-auto/87c88ba5.log +0 -0
- package/examples/saucedemo/.waygraph-auto/87cb80ff.log +0 -0
- package/examples/saucedemo/.waygraph-auto/880b2e78.log +6 -0
- package/examples/saucedemo/.waygraph-auto/88527936.log +5 -0
- package/examples/saucedemo/.waygraph-auto/88eda676.log +0 -0
- package/examples/saucedemo/.waygraph-auto/893023ea.log +5 -0
- package/examples/saucedemo/.waygraph-auto/89416718.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8996a857.log +6 -0
- package/examples/saucedemo/.waygraph-auto/8a08b68d.log +6 -0
- package/examples/saucedemo/.waygraph-auto/8a64ba0f.log +6 -0
- package/examples/saucedemo/.waygraph-auto/8b1cc2aa.log +6 -0
- package/examples/saucedemo/.waygraph-auto/8b73d13e.log +6 -0
- package/examples/saucedemo/.waygraph-auto/8d9e5cd2.log +21 -0
- package/examples/saucedemo/.waygraph-auto/8ec7d260.log +0 -0
- package/examples/saucedemo/.waygraph-auto/8ed43279.log +0 -0
- package/examples/saucedemo/.waygraph-auto/93acae32.log +5 -0
- package/examples/saucedemo/.waygraph-auto/96321a08.log +0 -0
- package/examples/saucedemo/.waygraph-auto/9742b6c2.log +6 -0
- package/examples/saucedemo/.waygraph-auto/99cc93eb.log +6 -0
- package/examples/saucedemo/.waygraph-auto/9cbfbedc.log +0 -0
- package/examples/saucedemo/.waygraph-auto/9dc147d2.log +22 -0
- package/examples/saucedemo/.waygraph-auto/a215a395.log +22 -0
- package/examples/saucedemo/.waygraph-auto/a23b7086.log +4 -0
- package/examples/saucedemo/.waygraph-auto/a35bd5ec.log +0 -0
- package/examples/saucedemo/.waygraph-auto/a68995e9.log +22 -0
- package/examples/saucedemo/.waygraph-auto/a6e4f936.log +22 -0
- package/examples/saucedemo/.waygraph-auto/a7da862b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/a82e2a48.log +0 -0
- package/examples/saucedemo/.waygraph-auto/a952eb91.log +0 -0
- package/examples/saucedemo/.waygraph-auto/a9559653.log +5 -0
- package/examples/saucedemo/.waygraph-auto/aa478de2.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ac350fc7.log +20 -0
- package/examples/saucedemo/.waygraph-auto/acc1b63a.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ad12d191.log +0 -0
- package/examples/saucedemo/.waygraph-auto/b04638f4.log +6 -0
- package/examples/saucedemo/.waygraph-auto/b48863e5.log +22 -0
- package/examples/saucedemo/.waygraph-auto/b56968e1.log +6 -0
- package/examples/saucedemo/.waygraph-auto/b64e0620.log +20 -0
- package/examples/saucedemo/.waygraph-auto/b86a6218.log +6 -0
- package/examples/saucedemo/.waygraph-auto/b8e9e956.log +22 -0
- package/examples/saucedemo/.waygraph-auto/b9b310ff.log +21 -0
- package/examples/saucedemo/.waygraph-auto/bc111745.log +22 -0
- package/examples/saucedemo/.waygraph-auto/bf7a77a2.log +0 -0
- package/examples/saucedemo/.waygraph-auto/c0d6f353.log +21 -0
- package/examples/saucedemo/.waygraph-auto/c0febcf2.log +20 -0
- package/examples/saucedemo/.waygraph-auto/c4c52998.log +6 -0
- package/examples/saucedemo/.waygraph-auto/c809ceb4.log +22 -0
- package/examples/saucedemo/.waygraph-auto/ca6de7e7.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ca8561bc.log +0 -0
- package/examples/saucedemo/.waygraph-auto/cb86d45b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/cb9a1978.log +6 -0
- package/examples/saucedemo/.waygraph-auto/cbbc689c.log +6 -0
- package/examples/saucedemo/.waygraph-auto/cd88364b.log +0 -0
- package/examples/saucedemo/.waygraph-auto/cd919e1d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/cfff9eef.log +20 -0
- package/examples/saucedemo/.waygraph-auto/d0f59b21.log +4 -0
- package/examples/saucedemo/.waygraph-auto/d1195079.log +20 -0
- package/examples/saucedemo/.waygraph-auto/d2ef067a.log +5 -0
- package/examples/saucedemo/.waygraph-auto/d425471f.log +6 -0
- package/examples/saucedemo/.waygraph-auto/d5293921.log +0 -0
- package/examples/saucedemo/.waygraph-auto/d62a22c2.log +21 -0
- package/examples/saucedemo/.waygraph-auto/d6d1761f.log +22 -0
- package/examples/saucedemo/.waygraph-auto/d6d5f411.log +22 -0
- package/examples/saucedemo/.waygraph-auto/d6df2771.log +6 -0
- package/examples/saucedemo/.waygraph-auto/d7075012.log +21 -0
- package/examples/saucedemo/.waygraph-auto/d9ddc297.log +0 -0
- package/examples/saucedemo/.waygraph-auto/db4ac845.log +0 -0
- package/examples/saucedemo/.waygraph-auto/db6d7774.log +0 -0
- package/examples/saucedemo/.waygraph-auto/db839827.log +5 -0
- package/examples/saucedemo/.waygraph-auto/dde5e859.log +22 -0
- package/examples/saucedemo/.waygraph-auto/de8cac58.log +0 -0
- package/examples/saucedemo/.waygraph-auto/dedfcb18.log +0 -0
- package/examples/saucedemo/.waygraph-auto/def4d9b1.log +0 -0
- package/examples/saucedemo/.waygraph-auto/e1549e40.log +0 -0
- package/examples/saucedemo/.waygraph-auto/e1b0676d.log +21 -0
- package/examples/saucedemo/.waygraph-auto/e5111463.log +0 -0
- package/examples/saucedemo/.waygraph-auto/e5fc1d7c.log +5 -0
- package/examples/saucedemo/.waygraph-auto/e6fd2202.log +0 -0
- package/examples/saucedemo/.waygraph-auto/edaa806d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/edaf33de.log +0 -0
- package/examples/saucedemo/.waygraph-auto/edd40cbb.log +20 -0
- package/examples/saucedemo/.waygraph-auto/eddfbffc.log +6 -0
- package/examples/saucedemo/.waygraph-auto/ee9fa1ad.log +5 -0
- package/examples/saucedemo/.waygraph-auto/ef319474.log +22 -0
- package/examples/saucedemo/.waygraph-auto/f28eee8d.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f33bde90.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f6ba7cb4.log +6 -0
- package/examples/saucedemo/.waygraph-auto/f7ac4d62.log +20 -0
- package/examples/saucedemo/.waygraph-auto/f929bb79.log +0 -0
- package/examples/saucedemo/.waygraph-auto/f92d4c6c.log +22 -0
- package/examples/saucedemo/.waygraph-auto/f92faf40.log +5 -0
- package/examples/saucedemo/.waygraph-auto/fa784369.log +21 -0
- package/examples/saucedemo/.waygraph-auto/fb55f723.log +20 -0
- package/examples/saucedemo/.waygraph-auto/fba3b738.log +0 -0
- package/examples/saucedemo/.waygraph-auto/fdf66b74.log +0 -0
- package/examples/saucedemo/.waygraph-auto/ffdf2854.log +6 -0
- package/examples/saucedemo/README.md +13 -2
- package/examples/saucedemo/package.json +4 -0
- package/examples/saucedemo/src/flows/api-demo.flow.ts +37 -0
- package/examples/saucedemo/src/flows/checkout.flow.ts +34 -11
- package/package.json +5 -3
- package/templates/scaffold/src/flows/shop.flow.ts +42 -27
- package/dist/auto-explore-run.d.ts +0 -37
- package/dist/auto-explore-run.js +0 -670
- package/dist/auto-explore.d.ts +0 -57
- package/dist/auto-explore.js +0 -376
- package/dist/auto-session-ipc.d.ts +0 -150
- package/dist/auto-session-ipc.js +0 -497
- package/dist/block-inject.d.ts +0 -15
- package/dist/block-inject.js +0 -91
- package/dist/browser.d.ts +0 -15
- package/dist/browser.js +0 -29
- package/dist/coverage-gap.d.ts +0 -11
- package/dist/coverage-gap.js +0 -119
- package/dist/engine.d.ts +0 -12
- package/dist/engine.js +0 -13
- package/dist/graph.d.ts +0 -92
- package/dist/graph.js +0 -467
- package/dist/highlight-shorthand.d.ts +0 -24
- package/dist/highlight-shorthand.js +0 -30
- package/dist/map-check.d.ts +0 -18
- package/dist/map-check.js +0 -140
- package/dist/overlay-beacon.d.ts +0 -44
- package/dist/overlay-beacon.js +0 -85
- package/dist/pilot.d.ts +0 -54
- package/dist/pilot.js +0 -80
- package/dist/practices-check.d.ts +0 -14
- package/dist/practices-check.js +0 -195
- package/dist/traverse-coverage.d.ts +0 -59
- package/dist/traverse-coverage.js +0 -127
- package/dist/traverse-lease.d.ts +0 -18
- package/dist/traverse-lease.js +0 -62
- package/dist/traverse-run.d.ts +0 -47
- package/dist/traverse-run.js +0 -439
- package/dist/ui/compose.d.ts +0 -4
- package/dist/ui/compose.js +0 -7
- /package/dist/{verbose-log.d.ts → auto-session/verbose-log.d.ts} +0 -0
- /package/dist/{verbose-log.js → auto-session/verbose-log.js} +0 -0
- /package/dist/{agent-dive.d.ts → commands/agent-dive-scaffold.d.ts} +0 -0
- /package/dist/{engine/core.d.ts → core/block.d.ts} +0 -0
- /package/dist/{engine → core}/blocks/nav.d.ts +0 -0
- /package/dist/{engine → core}/blocks/page.d.ts +0 -0
- /package/dist/{engine → core}/branch-regression.d.ts +0 -0
- /package/dist/{engine → core}/compose.d.ts +0 -0
- /package/dist/{engine → core}/config.d.ts +0 -0
- /package/dist/{engine → core}/config.js +0 -0
- /package/dist/{engine → core}/flow.d.ts +0 -0
- /package/dist/{engine → core}/locate.d.ts +0 -0
- /package/dist/{engine → core}/locate.js +0 -0
- /package/dist/{engine → core}/run-graph.d.ts +0 -0
package/dist/errors.js
CHANGED
|
@@ -9,102 +9,102 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export const WAYGRAPH_ERRORS = {
|
|
11
11
|
WG_PREFLIGHT_MISSING_KEY: {
|
|
12
|
-
where: "
|
|
12
|
+
where: "core/run-graph.ts - preflight()",
|
|
13
13
|
means: "A Flow/chain needs a MemKey that mem.set() never received before run() started.",
|
|
14
14
|
fix: "Pass --data / a mem.set() call for that key, or registerMemStub + --mem-stub for a fake value.",
|
|
15
15
|
},
|
|
16
16
|
WG_RUNGRAPH_MAX_STEPS: {
|
|
17
|
-
where: "
|
|
17
|
+
where: "core/run-graph.ts - runGraph()",
|
|
18
18
|
means: "A chain took more steps than maxSteps without reaching a Block with no .next() - almost always an unintended self-loop in branch()/next routing.",
|
|
19
19
|
fix: "Check the Block(s) involved in the loop; raise maxSteps only if the loop is genuinely intended.",
|
|
20
20
|
},
|
|
21
21
|
WG_RUNGRAPH_NOT_TERMINAL: {
|
|
22
|
-
where: "
|
|
22
|
+
where: "core/run-graph.ts - runGraph()",
|
|
23
23
|
means: "A Block with no .next() resolved to a Checkpoint that wasn't in the caller's declared `terminals` set.",
|
|
24
24
|
fix: "Add that Checkpoint to `terminals`, or fix the Block's resolve() - it landed somewhere the caller didn't expect.",
|
|
25
25
|
},
|
|
26
26
|
WG_MAP_WRONG_KIND: {
|
|
27
|
-
where: "
|
|
27
|
+
where: "core/map-builder.ts - MapBuilder.gotoPage/gotoExternal/assert/method()",
|
|
28
28
|
means: "A Block passed to a MapBuilder step method doesn't carry the __waygraphKind a real defineNavBlock/definePageBlock/defineAssertBlock/defineMethodBlock/defineEffectBlock stamps - either the wrong factory was used, or the object was hand-rolled instead of going through one.",
|
|
29
29
|
fix: "Use the factory the error names, or move this Block to the matching .gotoPage()/.assert()/.method() call.",
|
|
30
30
|
},
|
|
31
31
|
WG_MAP_WRONG_SALT: {
|
|
32
|
-
where: "
|
|
32
|
+
where: "core/map-builder.ts - MapBuilder.method()",
|
|
33
33
|
means: "A Block passed to .method() isn't a real Method/Effect Block (missing __waygraphSalt).",
|
|
34
34
|
fix: "Build it with defineMethodBlock/defineEffectBlock, or use .assert() if it's actually a defineAssertBlock.",
|
|
35
35
|
},
|
|
36
36
|
WG_MAP_WRONG_ORIGIN: {
|
|
37
|
-
where: "
|
|
37
|
+
where: "core/map-builder.ts - MapBuilder.gotoPage/gotoExternal()",
|
|
38
38
|
means: "A Block's static `url` origin doesn't match what .gotoPage() (same-origin) or .gotoExternal() (cross-origin) expects, given this map()'s homeOrigin.",
|
|
39
39
|
fix: "Use .gotoExternal() for a genuinely different origin, .gotoPage() for the app's own homeOrigin, or fix the Block's url.",
|
|
40
40
|
},
|
|
41
41
|
WG_MAP_FF_ALREADY_OPEN: {
|
|
42
|
-
where: "
|
|
42
|
+
where: "core/map-builder.ts - MapBuilder.ffStart()",
|
|
43
43
|
means: ".ffStart() was called while a previous .ffStart() window is still open.",
|
|
44
44
|
fix: "Call .ffEnd() before opening another fast-forward window.",
|
|
45
45
|
},
|
|
46
46
|
WG_MAP_FF_EMPTY: {
|
|
47
|
-
where: "
|
|
47
|
+
where: "core/map-builder.ts - MapBuilder.ffEnd()",
|
|
48
48
|
means: ".ffEnd() closed a window with zero steps inside it.",
|
|
49
49
|
fix: "Add at least one .gotoPage()/.method()/.assert() inside the .ffStart()/.ffEnd() window.",
|
|
50
50
|
},
|
|
51
51
|
WG_MAP_FF_NOT_CLOSED: {
|
|
52
|
-
where: "
|
|
52
|
+
where: "core/map-builder.ts - MapBuilder.end()",
|
|
53
53
|
means: ".end() was called while a .ffStart() window was still open.",
|
|
54
54
|
fix: "Call .ffEnd() before .end().",
|
|
55
55
|
},
|
|
56
56
|
WG_MAP_FF_NOT_OPEN: {
|
|
57
|
-
where: "
|
|
57
|
+
where: "core/map-builder.ts - MapBuilder.ffEnd()",
|
|
58
58
|
means: ".ffEnd() was called with no matching .ffStart().",
|
|
59
59
|
fix: "Remove the stray .ffEnd(), or add the .ffStart() it's meant to close.",
|
|
60
60
|
},
|
|
61
61
|
WG_MAP_EMPTY: {
|
|
62
|
-
where: "
|
|
62
|
+
where: "core/map-builder.ts - MapBuilder.end()",
|
|
63
63
|
means: ".end() was called with zero steps added.",
|
|
64
64
|
fix: "Add at least one .gotoPage()/.gotoExternal()/.assert()/.method() before .end().",
|
|
65
65
|
},
|
|
66
66
|
WG_MAP_BRANCH_NO_PRIOR_STEP: {
|
|
67
|
-
where: "
|
|
67
|
+
where: "core/map-builder.ts - MapBuilder.branch()",
|
|
68
68
|
means: ".branch() was called before any step existed to branch FROM.",
|
|
69
69
|
fix: "Add a .gotoPage()/.gotoExternal()/.method()/.assert() before .branch().",
|
|
70
70
|
},
|
|
71
71
|
WG_MAP_BRANCH_SHARED_SESSION_UNSUPPORTED: {
|
|
72
|
-
where: "
|
|
72
|
+
where: "core/map-builder.ts - a .branch()-built Flow's run()",
|
|
73
73
|
means: "run(mem, config) was called on a branched Flow - that convenience form always closes its own browser/page before the branch's tag is known, so the branch can never be reached.",
|
|
74
74
|
fix: "Call run(context, mem[, options]) instead, keeping the same page across the branch.",
|
|
75
75
|
},
|
|
76
76
|
WG_BRANCH_REGRESSION_NO_BROWSER: {
|
|
77
|
-
where: "
|
|
77
|
+
where: "core/branch-regression.ts - runBranchRegression()",
|
|
78
78
|
means: "cloneSession is on (the default) but context.browser() returned null - a persistent context has no Browser to clone a new context from.",
|
|
79
79
|
fix: "Pass { cloneSession: false } to run the single live path in this context instead.",
|
|
80
80
|
},
|
|
81
81
|
WG_COMPOSE_EMPTY: {
|
|
82
|
-
where: "
|
|
82
|
+
where: "core/compose.ts - composeBlock()",
|
|
83
83
|
means: "composeBlock() was called with zero steps.",
|
|
84
84
|
fix: "Pass at least one Block.",
|
|
85
85
|
},
|
|
86
86
|
WG_FASTFORWARD_EMPTY: {
|
|
87
|
-
where: "
|
|
87
|
+
where: "core/compose.ts - fastForwardComposeBlock()",
|
|
88
88
|
means: "A fast-forward window was closed with zero steps inside it.",
|
|
89
89
|
fix: "Add at least one Block between ffStart()/ffEnd() (or the equivalent Map builder call).",
|
|
90
90
|
},
|
|
91
91
|
WG_FLOW_BLOCK_NOT_FOUND: {
|
|
92
|
-
where: "
|
|
92
|
+
where: "core/block.ts - findBlockIndex() (used by withBlockVerify/modBlockVerify/chainFlow)",
|
|
93
93
|
means: "The Block name/index/reference given doesn't exist in this Flow (or chained Flows).",
|
|
94
94
|
fix: "Check the name/index against flow.blocks() - it lists every Block this Flow actually has, tag-prefixed for branches.",
|
|
95
95
|
},
|
|
96
96
|
WG_CHAINFLOW_EMPTY: {
|
|
97
|
-
where: "
|
|
97
|
+
where: "core/flow.ts - chainFlow()",
|
|
98
98
|
means: "chainFlow() was called with zero Flows.",
|
|
99
99
|
fix: "Pass at least one Flow.",
|
|
100
100
|
},
|
|
101
101
|
WG_MODVERIFY_FUNCTION_FORM: {
|
|
102
|
-
where: "
|
|
102
|
+
where: "core/block.ts - modVerify()",
|
|
103
103
|
means: "modVerify() was called on a Block whose verify is a function (tag-driven), which has no fixed list to address an item into.",
|
|
104
104
|
fix: "Use withVerify() to replace the whole verify instead.",
|
|
105
105
|
},
|
|
106
106
|
WG_MODVERIFY_NOT_FOUND: {
|
|
107
|
-
where: "
|
|
107
|
+
where: "core/block.ts - modVerify()",
|
|
108
108
|
means: "The Trait name/index given doesn't exist in this Block's verify list.",
|
|
109
109
|
fix: "Check the Block's actual verify list for the right name/index.",
|
|
110
110
|
},
|
|
@@ -114,6 +114,53 @@ export const WAYGRAPH_ERRORS = {
|
|
|
114
114
|
fix: "Set it first, or use mem.has(key) to check before an optional read.",
|
|
115
115
|
},
|
|
116
116
|
};
|
|
117
|
+
/**
|
|
118
|
+
* The actual text every `throw new WaygraphError(...)` site uses - one named export per throw
|
|
119
|
+
* site (several throw sites can share a `WAYGRAPH_ERRORS` code but always have their own distinct
|
|
120
|
+
* message here, since the same code can legitimately fire from more than one spot with different
|
|
121
|
+
* detail). Plain strings for a message with no runtime values; a function for one that needs them.
|
|
122
|
+
* `grep MSG_ src/errors.ts` finds every fixed string the engine can throw, in one place.
|
|
123
|
+
*/
|
|
124
|
+
export const MSG_PREFLIGHT_MISSING_KEY = (blockName, missingKeys) => `preflight: MemPage is missing required key(s) before "${blockName}" can run: ${missingKeys}`;
|
|
125
|
+
export const MSG_RUNGRAPH_MAX_STEPS = (maxSteps) => `runGraph: exceeded ${maxSteps} steps - check for an unintended self-loop`;
|
|
126
|
+
export const MSG_RUNGRAPH_NOT_TERMINAL = (blockName, state, terminals) => `runGraph: "${blockName}" resolved to "${state}", which is not a registered terminal (expected one of: ${terminals})`;
|
|
127
|
+
export const MSG_FLOW_BLOCK_NOT_FOUND_BY_INDEX = (index, length) => `Flow: no Block at index ${index} in this flow (has ${length})`;
|
|
128
|
+
export const MSG_FLOW_BLOCK_NOT_FOUND_BY_NAME = (blockName, names) => `Flow: no Block named "${blockName}" in this flow (has: ${names})`;
|
|
129
|
+
export const MSG_MODVERIFY_FUNCTION_FORM = (blockName) => `modVerify: "${blockName}" has a function-form verify, which has no fixed list to address into - ` +
|
|
130
|
+
"use withVerify to replace it wholesale instead";
|
|
131
|
+
export const MSG_MODVERIFY_NOT_FOUND_BY_INDEX = (blockName, index, length) => `modVerify: "${blockName}" has no verify trait at index ${index} (has ${length})`;
|
|
132
|
+
export const MSG_MODVERIFY_NOT_FOUND_BY_NAME = (blockName, name, names) => `modVerify: "${blockName}" has no verify trait named "${name}" (has: ${names || "none"})`;
|
|
133
|
+
export const MSG_MAP_WRONG_KIND = (method, blockName, wanted, found) => `Waygraph map: .${method}("${blockName}") requires a Block built with ${wanted} ` +
|
|
134
|
+
`(found ${found} - a hand-built plain object doesn't count). This check is the whole point ` +
|
|
135
|
+
"of the map() builder: only real Blocks from waygraph's own factories can enter a chain.";
|
|
136
|
+
export const MSG_MAP_WRONG_SALT = (method, blockName, wanted, found) => `Waygraph map: .${method}("${blockName}") requires a Block built with ${wanted} ` +
|
|
137
|
+
`(found ${found} - a hand-built plain object doesn't count). This check is the whole point ` +
|
|
138
|
+
"of the map() builder: only real Blocks from waygraph's own factories can enter a chain.";
|
|
139
|
+
export const MSG_MAP_WRONG_ORIGIN_INTERNAL = (blockName, targetOrigin, wantOrigin) => `Waygraph map: .gotoPage("${blockName}") targets ${targetOrigin}, which is NOT this map's ` +
|
|
140
|
+
`home origin (${wantOrigin}) - use .gotoExternal() for a genuinely cross-origin destination.`;
|
|
141
|
+
export const MSG_MAP_WRONG_ORIGIN_EXTERNAL = (blockName, targetOrigin, wantOrigin) => `Waygraph map: .gotoExternal("${blockName}") targets ${targetOrigin}, which IS this map's ` +
|
|
142
|
+
`home origin (${wantOrigin}) - use .gotoPage() for an internal destination.`;
|
|
143
|
+
export const MSG_MAP_BRANCH_SHARED_SESSION_UNSUPPORTED = "Waygraph map: a .branch()-ed Flow can't run via run(mem, config) - that convenience form " +
|
|
144
|
+
"always closes its own browser/page before a branch's tag is even known. Call " +
|
|
145
|
+
"run(context, mem[, options]) instead, keeping the same page across the branch.";
|
|
146
|
+
export const MSG_MAP_FF_ALREADY_OPEN = (ffName) => `Waygraph map: .ffStart() while already inside "${ffName}" - call .ffEnd() first`;
|
|
147
|
+
export const MSG_MAP_FF_NOT_OPEN = "Waygraph map: .ffEnd() with no open .ffStart()";
|
|
148
|
+
export const MSG_MAP_FF_EMPTY = (ffName) => `Waygraph map: .ffEnd() for "${ffName}" has no steps - add .gotoPage/.method/… inside the window`;
|
|
149
|
+
export const MSG_MAP_METHOD_GOT_ASSERT = (blockName) => `Waygraph map: .method("${blockName}") got a defineAssertBlock - use .assert() for ` +
|
|
150
|
+
"self-loop verify steps (Assert Blocks share method salt internally but are not methods).";
|
|
151
|
+
export const MSG_MAP_BRANCH_NO_PRIOR_STEP = "Waygraph map: .branch() needs at least one prior step - nothing to branch from. " +
|
|
152
|
+
"Add .gotoPage()/.gotoExternal()/.method()/.assert() first.";
|
|
153
|
+
export const MSG_MAP_FF_NOT_CLOSED = (ffName) => `Waygraph map: .end() while .ffStart("${ffName}") is still open - call .ffEnd() first`;
|
|
154
|
+
export const MSG_MAP_EMPTY = "Waygraph map: .end() called with zero steps - add at least one .gotoPage()/.gotoExternal()/" +
|
|
155
|
+
".assert()/.method() before .end()";
|
|
156
|
+
export const MSG_BRANCH_REGRESSION_NO_BROWSER = "Waygraph runBranchRegression: cloneSession needs context.browser() (a persistent context " +
|
|
157
|
+
"has none) - pass { cloneSession: false } to run the single live path in this context instead.";
|
|
158
|
+
export const MSG_MEM_READ_BEFORE_SET = (keyName) => `MemPage: "${keyName}" read before it was set`;
|
|
159
|
+
export const MSG_COMPOSE_EMPTY = (name) => `composeBlock: "${name}" needs at least one step`;
|
|
160
|
+
export const MSG_FASTFORWARD_EMPTY = (name) => `fastForwardComposeBlock: "${name}" needs at least one step`;
|
|
161
|
+
export const MSG_CHAINFLOW_BLOCK_NOT_FOUND_BY_INDEX = (index, count) => `chainFlow: no Block at index ${index} across ${count} chained flows`;
|
|
162
|
+
export const MSG_CHAINFLOW_BLOCK_NOT_FOUND_BY_NAME = (blockName) => `chainFlow: no Block named "${blockName}" in any chained flow`;
|
|
163
|
+
export const MSG_CHAINFLOW_EMPTY = "chainFlow: give at least one Flow";
|
|
117
164
|
/** A thrown engine error with a stable, greppable `.code` - see WAYGRAPH_ERRORS for the full list. */
|
|
118
165
|
export class WaygraphError extends Error {
|
|
119
166
|
code;
|
|
@@ -28,8 +28,14 @@ export async function runStubPhase(block, phase, opts) {
|
|
|
28
28
|
catch {
|
|
29
29
|
/* best-effort */
|
|
30
30
|
}
|
|
31
|
-
// Compat: legacy `(out) => map` that expected Checkpoint (__state on arg)
|
|
32
|
-
|
|
31
|
+
// Compat: legacy `(out) => map` that expected Checkpoint (__state on arg). Only worth trying
|
|
32
|
+
// when the real ctx call genuinely did nothing - checked against the WHOLE bag, not just
|
|
33
|
+
// highlights/todos, so a stubBefore that only calls e.g. ctx.caption()/ctx.title()/ctx.zoom()
|
|
34
|
+
// (no highlights, no todos) isn't mistaken for "didn't run" and re-invoked with a bare
|
|
35
|
+
// Checkpoint that has none of StubCtx's methods - a real, previously-triggered bug (caught via
|
|
36
|
+
// examples/saucedemo/src/flows/checkout.flow.ts's own stubBefore(ctx) { ctx.caption(...) }).
|
|
37
|
+
const bagUntouched = Object.keys(bag).length === 1 && Object.keys(bag.highlights).length === 0;
|
|
38
|
+
if (bagUntouched) {
|
|
33
39
|
try {
|
|
34
40
|
const legacyOut = (opts?.out ?? { __state: "" });
|
|
35
41
|
const ret2 = raw(legacyOut);
|
|
@@ -109,6 +115,13 @@ export async function runStubPhase(block, phase, opts) {
|
|
|
109
115
|
...(bag.title !== undefined && bag.title !== "" ? { title: bag.title } : {}),
|
|
110
116
|
...(bag.titlePos !== undefined ? { titlePos: bag.titlePos } : {}),
|
|
111
117
|
...(bag.bannerUi !== undefined ? { bannerUi: bag.bannerUi } : {}),
|
|
118
|
+
// Unlike title, "" is meaningful here (ctx.hideCaption()/caption("")) - forwarded so it can
|
|
119
|
+
// actually hide the bar, not filtered out the way an empty title is (title's own "" means
|
|
120
|
+
// "author didn't touch it this step", handled by simply omitting the field).
|
|
121
|
+
...(bag.caption !== undefined ? { caption: bag.caption } : {}),
|
|
122
|
+
// Boolean, not string - "" isn't a state here, so a plain undefined-check (like zoom/title)
|
|
123
|
+
// is enough; false is real ("author called hideNetworkTab()") and must still be forwarded.
|
|
124
|
+
...(bag.networkTabVisible !== undefined ? { networkTabVisible: bag.networkTabVisible } : {}),
|
|
112
125
|
...(bag.todoPos !== undefined ? { todoPos: bag.todoPos } : {}),
|
|
113
126
|
...(bag.todoDockUi !== undefined ? { todoDockUi: bag.todoDockUi } : {}),
|
|
114
127
|
...(bag.todoParallel === true ? { todoParallel: true } : {}),
|
|
@@ -179,6 +179,18 @@ export function createStubCtx(bag, opts) {
|
|
|
179
179
|
if (p)
|
|
180
180
|
bag.titlePos = p;
|
|
181
181
|
},
|
|
182
|
+
caption(text) {
|
|
183
|
+
bag.caption = String(text ?? "");
|
|
184
|
+
},
|
|
185
|
+
hideCaption() {
|
|
186
|
+
bag.caption = "";
|
|
187
|
+
},
|
|
188
|
+
showNetworkTab() {
|
|
189
|
+
bag.networkTabVisible = true;
|
|
190
|
+
},
|
|
191
|
+
hideNetworkTab() {
|
|
192
|
+
bag.networkTabVisible = false;
|
|
193
|
+
},
|
|
182
194
|
bannerPos(side) {
|
|
183
195
|
const p = normalizeBannerPos(side);
|
|
184
196
|
if (p)
|
|
@@ -280,6 +292,10 @@ export function createStubCtx(bag, opts) {
|
|
|
280
292
|
bag.zoomOut = !!partial.zoomOut;
|
|
281
293
|
if (partial.title !== undefined)
|
|
282
294
|
bag.title = String(partial.title ?? "");
|
|
295
|
+
if (partial.caption !== undefined)
|
|
296
|
+
bag.caption = String(partial.caption ?? "");
|
|
297
|
+
if (partial.networkTabVisible !== undefined)
|
|
298
|
+
bag.networkTabVisible = !!partial.networkTabVisible;
|
|
283
299
|
const bp = normalizeBannerPos(partial.titlePos);
|
|
284
300
|
if (bp)
|
|
285
301
|
bag.titlePos = bp;
|
|
@@ -49,6 +49,11 @@ export interface BannerUiOpts {
|
|
|
49
49
|
collision?: boolean;
|
|
50
50
|
/** Hide the banner entirely for this phase. */
|
|
51
51
|
hidden?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Fade duration (ms) when the banner's title text changes, so a change reads as a deliberate
|
|
54
|
+
* beat instead of an instant flicker. Default 220; 0 disables the fade (instant swap).
|
|
55
|
+
*/
|
|
56
|
+
captionFadeMs?: number;
|
|
52
57
|
}
|
|
53
58
|
/** One titled group in the floating todo dock (FR / Scenarios / ACs, etc.). */
|
|
54
59
|
export type WaygraphTodoGroupInput = {
|
|
@@ -159,6 +164,18 @@ export type StubPhaseFixtures = {
|
|
|
159
164
|
titlePos?: BannerPos;
|
|
160
165
|
/** Banner UX: collision (move away from a ring it overlaps), hidden. See {@link BannerUiOpts}. */
|
|
161
166
|
bannerUi?: BannerUiOpts;
|
|
167
|
+
/**
|
|
168
|
+
* Bottom narration caption - a white rounded card (black text, shadow), bottom-centered above
|
|
169
|
+
* the step pill, distinct from the banner (top, card-shaped). Omit/clear to hide it; set again
|
|
170
|
+
* to change the text, fading out/in.
|
|
171
|
+
*/
|
|
172
|
+
caption?: string;
|
|
173
|
+
/**
|
|
174
|
+
* Network-tab overlay visibility - capture always happens in the background regardless; this
|
|
175
|
+
* only controls whether the panel itself is shown. Intentionally hidden by default (`undefined`
|
|
176
|
+
* on the very first phase); omit to leave whatever the previous step set alone.
|
|
177
|
+
*/
|
|
178
|
+
networkTabVisible?: boolean;
|
|
162
179
|
/**
|
|
163
180
|
* Floating checklist dock side. `left` | `right`.
|
|
164
181
|
* Authored control (also click / WAYGRAPH_TODO_POS / --todo-left|right).
|
|
@@ -403,8 +420,25 @@ export type StubCtx<Out extends Checkpoint<string> = Checkpoint<string>> = {
|
|
|
403
420
|
* @example ctx.bannerUi({ collision: false });
|
|
404
421
|
*/
|
|
405
422
|
bannerUi(opts: BannerUiOpts): void;
|
|
423
|
+
/**
|
|
424
|
+
* Bottom narration caption - a white rounded card (black text, shadow), bottom-centered above
|
|
425
|
+
* the step pill; distinct from {@link StubCtx.title}, which is the top banner card. Fades in/out
|
|
426
|
+
* on change. Pass `""` (or call {@link StubCtx.hideCaption}) to clear.
|
|
427
|
+
* @example ctx.caption("Click Add to cart to continue");
|
|
428
|
+
*/
|
|
429
|
+
caption(text: string): void;
|
|
430
|
+
/** Clears the caption (fades it out). */
|
|
431
|
+
hideCaption(): void;
|
|
406
432
|
/** Shorthand for `bannerUi({ hidden: true })`. */
|
|
407
433
|
hideBanner(): void;
|
|
434
|
+
/**
|
|
435
|
+
* Shows the network-tab overlay (Postman-style inspector of real page traffic + defineApiBlock
|
|
436
|
+
* calls) - capture always runs in the background; this just reveals the panel. Hidden by default.
|
|
437
|
+
* @example ctx.showNetworkTab();
|
|
438
|
+
*/
|
|
439
|
+
showNetworkTab(): void;
|
|
440
|
+
/** Hides the network-tab overlay (capture keeps running - only the panel disappears). */
|
|
441
|
+
hideNetworkTab(): void;
|
|
408
442
|
/**
|
|
409
443
|
* Floating checklist dock side (`left` | `right`). Authors control this in
|
|
410
444
|
* code; click / env / --todo-left|right are fallbacks.
|
|
@@ -463,6 +497,8 @@ export type StubPhaseResult = {
|
|
|
463
497
|
title?: string;
|
|
464
498
|
titlePos?: BannerPos;
|
|
465
499
|
bannerUi?: BannerUiOpts;
|
|
500
|
+
caption?: string;
|
|
501
|
+
networkTabVisible?: boolean;
|
|
466
502
|
todoPos?: "left" | "right";
|
|
467
503
|
/** When true, keep other docks (multi-todo). Default false = replace. */
|
|
468
504
|
todoParallel?: boolean;
|
|
@@ -560,6 +596,8 @@ export type StubBagState = {
|
|
|
560
596
|
title?: string | undefined;
|
|
561
597
|
titlePos?: BannerPos | undefined;
|
|
562
598
|
bannerUi?: BannerUiOpts | undefined;
|
|
599
|
+
caption?: string | undefined;
|
|
600
|
+
networkTabVisible?: boolean | undefined;
|
|
563
601
|
todoPos?: "left" | "right" | undefined;
|
|
564
602
|
/** Author patched todo-dock UX this phase. */
|
|
565
603
|
todoDockUi?: TodoDockUiOpts | undefined;
|
package/dist/index.d.ts
CHANGED
|
@@ -6,11 +6,13 @@ export { css, byText, byRole } from "./selector.js";
|
|
|
6
6
|
export { WaygraphError, WAYGRAPH_ERRORS } from "./errors.js";
|
|
7
7
|
export type { WaygraphErrorCode } from "./errors.js";
|
|
8
8
|
export { Trait, urlMatches, textEquals, visible, disabled, enabled, frameVisible, frameTextEquals, frameContainsText, } from "./trait.js";
|
|
9
|
-
export { runGraph, spawnTab, narrate, Engine, start, end, branch, withVerify, modVerify, modVerifyAll, defineBlock, defineNavBlock, defineNavClickBlock, defineMethodBlock, defineActionBlock, defineAssertBlock, definePageBlock, defineEffectBlock, defineMemEffectBlock, defineMemNavBlock, locate, composeBlock, fastForwardComposeBlock, isFastForwardBlock, preflight, withSessionReset, withTitle, withMemStub, withDemoPace, withBlockPace, withHighlightStyle, withExpectedFailure, withHighlightFixtures, withStubBefore, withStubAfter, withStubOnError, chainFlow, defineLayout, map, MapBuilder, branchRoutes, collectBranchFlows, runBranchRegression, } from "./
|
|
10
|
-
export type { BranchEntry, BranchRunResult, RunBranchRegressionOptions } from "./
|
|
9
|
+
export { runGraph, spawnTab, narrate, Engine, start, end, branch, withVerify, modVerify, modVerifyAll, defineBlock, defineNavBlock, defineNavClickBlock, defineMethodBlock, defineActionBlock, defineAssertBlock, definePageBlock, defineEffectBlock, defineMemEffectBlock, defineMemNavBlock, defineApiBlock, locate, composeBlock, fastForwardComposeBlock, isFastForwardBlock, preflight, withSessionReset, withTitle, withMemStub, withDemoPace, withBlockPace, withHighlightStyle, withExpectedFailure, withHighlightFixtures, withStubBefore, withStubAfter, withStubOnError, chainFlow, defineLayout, map, MapBuilder, branchRoutes, collectBranchFlows, runBranchRegression, } from "./core.js";
|
|
10
|
+
export type { BranchEntry, BranchRunResult, RunBranchRegressionOptions } from "./core/branch-regression.js";
|
|
11
|
+
export type { ApiBlockOptions, ApiCallResult } from "./core/blocks/api.js";
|
|
12
|
+
export type { MapStepOpts } from "./core/map-builder.js";
|
|
11
13
|
export { resolveHighlightSlots, resolveSlides, runStubPhase, resolveFixtureDwellMs, resolveSlideDwellMs, formatHighlightCaption, hasAuthoredStubAfter, hasAuthoredStubOnError, normalizeHighlightTone, normalizeDemoPace, normalizeHighlightSize, normalizeHighlightWeight, applyHighlightStyleDefaults, toneIconPrefix, resolveStepDemoPace, demoPaceScale, demoPaceIsBlitz, demoPaceIsFast, demoPaceIsSlow, demoPaceGateMs, formatDemoPaceBadge, formatDemoPaceLabel, normalizeTodos, normalizeTodoPos, normalizeTodoStyle, buildTodoDock, applyTodoPhase, advanceTodoDock, completeSequentialTodoDock, applyDevicePhase, resolveDeviceState, normalizeDevicePreset, normalizeDeviceOrientation, applyOrientation, orientationFromViewport, DEVICE_PRESETS, resolveTodoDockUi, FIXTURE_DURATION_MS_DEFAULT, FIXTURE_DURATION_FAST_MS_DEFAULT, FIXTURE_DURATION_SLOW_MS_DEFAULT, SLIDE_DURATION_MS_DEFAULT, SLIDE_DURATION_FAST_MS_DEFAULT, WAYGRAPH_RING_CSS, } from "./highlights.js";
|
|
12
14
|
export type { WaygraphHighlightStub, WaygraphHighlightFixture, WaygraphSlide, WaygraphTodoItem, WaygraphTodoInput, WaygraphTodoGroup, WaygraphTodoGroupInput, WaygraphTodosOpts, TodoDockUiOpts, BannerPos, BannerUiOpts, TodoDockUiResolved, TodoDockState, TodoListStyle, FixtureDurationFields, HighlightStubPhase, HighlightStubPhaseName, HighlightFixtureMap, ResolvedHighlight, WaygraphHighlight, HighlightTone, HighlightSize, HighlightWeight, HighlightStyleDefaults, DemoPace, DemoPaceName, StubCtx, StubLifecycleFn, StubPhaseResult, StubPhaseFixtures, DevicePreset, DeviceViewport, DeviceState, DeviceOrientation, } from "./highlights.js";
|
|
13
|
-
export type { Flow, EngineConfig, ComposedBlock, FastForwardComposedBlock, RunGraphOptions, BlockInfo, NavBlock, NavBlockOptions, NavClickBlock, NavClickBlockOptions, MethodBlock, ActionBlock, AssertBlock, AssertBlockOptions, PageBlock, PageBlockOptions, PageMethodEntry, EffectBlock, MemEffectBlock, MemNavBlock, Layout, LayoutOptions, MapBuilderOptions, } from "./
|
|
15
|
+
export type { Flow, EngineConfig, ComposedBlock, FastForwardComposedBlock, RunGraphOptions, BlockInfo, NavBlock, NavBlockOptions, NavClickBlock, NavClickBlockOptions, MethodBlock, ActionBlock, AssertBlock, AssertBlockOptions, PageBlock, PageBlockOptions, PageMethodEntry, EffectBlock, MemEffectBlock, MemNavBlock, Layout, LayoutOptions, MapBuilderOptions, } from "./core.js";
|
|
14
16
|
export type { ActionPage } from "./types.js";
|
|
15
17
|
export { discoverGraph, toMermaid, findOrphanBlocks, findBlockPath } from "./analysis/graph.js";
|
|
16
18
|
export type { WaygraphGraph, WaygraphNode, WaygraphEdge, SkippedBlock, OrphanBlock } from "./analysis/graph.js";
|
|
@@ -27,3 +29,5 @@ export { AutoSession, stubFilePath } from "./auto-session.js";
|
|
|
27
29
|
export type { AutoSessionInit, SessionSnapshot, SessionSnapshotEdge, SessionSnapshotSection, ApplyPickResult, ApplyPathResult, TraceStep, ConsoleLogEntry, StorageSnapshot, ServiceWorkerRegistrationInfo, CookieInfo, StubFileKind, } from "./auto-session.js";
|
|
28
30
|
export { pilotStart } from "./session/pilot.js";
|
|
29
31
|
export type { PilotStartResult } from "./session/pilot.js";
|
|
32
|
+
export { defineConfig, resolveBaseUrl } from "./config.js";
|
|
33
|
+
export type { WaygraphConfig } from "./config.js";
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ export { registerMemStub, seedMemStub, getMemStub } from "./mem-stub.js";
|
|
|
4
4
|
export { css, byText, byRole } from "./selector.js";
|
|
5
5
|
export { WaygraphError, WAYGRAPH_ERRORS } from "./errors.js";
|
|
6
6
|
export { Trait, urlMatches, textEquals, visible, disabled, enabled, frameVisible, frameTextEquals, frameContainsText, } from "./trait.js";
|
|
7
|
-
export { runGraph, spawnTab, narrate, Engine, start, end, branch, withVerify, modVerify, modVerifyAll, defineBlock, defineNavBlock, defineNavClickBlock, defineMethodBlock, defineActionBlock, defineAssertBlock, definePageBlock, defineEffectBlock, defineMemEffectBlock, defineMemNavBlock, locate, composeBlock, fastForwardComposeBlock, isFastForwardBlock, preflight, withSessionReset, withTitle, withMemStub, withDemoPace, withBlockPace, withHighlightStyle, withExpectedFailure, withHighlightFixtures, withStubBefore, withStubAfter, withStubOnError, chainFlow, defineLayout, map, MapBuilder, branchRoutes, collectBranchFlows, runBranchRegression, } from "./
|
|
7
|
+
export { runGraph, spawnTab, narrate, Engine, start, end, branch, withVerify, modVerify, modVerifyAll, defineBlock, defineNavBlock, defineNavClickBlock, defineMethodBlock, defineActionBlock, defineAssertBlock, definePageBlock, defineEffectBlock, defineMemEffectBlock, defineMemNavBlock, defineApiBlock, locate, composeBlock, fastForwardComposeBlock, isFastForwardBlock, preflight, withSessionReset, withTitle, withMemStub, withDemoPace, withBlockPace, withHighlightStyle, withExpectedFailure, withHighlightFixtures, withStubBefore, withStubAfter, withStubOnError, chainFlow, defineLayout, map, MapBuilder, branchRoutes, collectBranchFlows, runBranchRegression, } from "./core.js";
|
|
8
8
|
export { resolveHighlightSlots, resolveSlides, runStubPhase, resolveFixtureDwellMs, resolveSlideDwellMs, formatHighlightCaption, hasAuthoredStubAfter, hasAuthoredStubOnError, normalizeHighlightTone, normalizeDemoPace, normalizeHighlightSize, normalizeHighlightWeight, applyHighlightStyleDefaults, toneIconPrefix, resolveStepDemoPace, demoPaceScale, demoPaceIsBlitz, demoPaceIsFast, demoPaceIsSlow, demoPaceGateMs, formatDemoPaceBadge, formatDemoPaceLabel, normalizeTodos, normalizeTodoPos, normalizeTodoStyle, buildTodoDock, applyTodoPhase, advanceTodoDock, completeSequentialTodoDock, applyDevicePhase, resolveDeviceState, normalizeDevicePreset, normalizeDeviceOrientation, applyOrientation, orientationFromViewport, DEVICE_PRESETS, resolveTodoDockUi, FIXTURE_DURATION_MS_DEFAULT, FIXTURE_DURATION_FAST_MS_DEFAULT, FIXTURE_DURATION_SLOW_MS_DEFAULT, SLIDE_DURATION_MS_DEFAULT, SLIDE_DURATION_FAST_MS_DEFAULT, WAYGRAPH_RING_CSS, } from "./highlights.js";
|
|
9
9
|
export { discoverGraph, toMermaid, findOrphanBlocks, findBlockPath } from "./analysis/graph.js";
|
|
10
10
|
export { isFileSelectToken, parseBlocksSelect, matchBlocksSelect, globToRegExp, } from "./blocks-select.js";
|
|
@@ -14,3 +14,4 @@ export { buildCoverageReport, collectGraphEdgeKeys, defaultCoverageOutPath, form
|
|
|
14
14
|
export { WG_UI_SEL, WG_READY_PANEL_SEL, WG_READY_AUTO_SEL, WG_READY_BANNER_SEL, readWgOverlayBeacon, readWgOverlayBeaconInPage, assertWgOverlayReady, } from "./session/overlay-beacon.js";
|
|
15
15
|
export { AutoSession, stubFilePath } from "./auto-session.js";
|
|
16
16
|
export { pilotStart } from "./session/pilot.js";
|
|
17
|
+
export { defineConfig, resolveBaseUrl } from "./config.js";
|
package/dist/mem-page.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WaygraphError } from "./errors.js";
|
|
1
|
+
import { WaygraphError, MSG_MEM_READ_BEFORE_SET } from "./errors.js";
|
|
2
2
|
/**
|
|
3
3
|
* A typed key into MemPage. The phantom `_phantom` field is never assigned - it
|
|
4
4
|
* exists only so TypeScript can infer `T` at each call site. The store is keyed by
|
|
@@ -52,7 +52,7 @@ export class MemPage {
|
|
|
52
52
|
*/
|
|
53
53
|
get(k) {
|
|
54
54
|
if (!this.store.has(k)) {
|
|
55
|
-
throw new WaygraphError("WG_MEM_READ_BEFORE_SET",
|
|
55
|
+
throw new WaygraphError("WG_MEM_READ_BEFORE_SET", MSG_MEM_READ_BEFORE_SET(k.name));
|
|
56
56
|
}
|
|
57
57
|
return this.store.get(k);
|
|
58
58
|
}
|
package/dist/mem-stub.d.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { MemKey } from "./mem-page.js";
|
|
19
19
|
import type { MemPage } from "./mem-page.js";
|
|
20
|
-
import type { Flow } from "./
|
|
20
|
+
import type { Flow } from "./core.js";
|
|
21
21
|
/**
|
|
22
22
|
* Registers a fake-value generator for one required MemKey.
|
|
23
23
|
* @example registerMemStub(LoginCreds.key, () => ({
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Split out of the former 950-line pilot-overlay.ts (see src/ARCHITECTURE.md). Behavior unchanged.
|
|
2
2
|
import { buildTodoDock, formatHighlightCaption, normalizeHighlightSize, normalizeHighlightTone, normalizeHighlightWeight, resolveDeviceState, resolveTodoDockUi } from "../highlights.js";
|
|
3
3
|
import { ensureInstalled } from "./shell.js";
|
|
4
|
+
import { verboseLog } from "../auto-session/verbose-log.js";
|
|
4
5
|
/**
|
|
5
6
|
* Paint (or clear) agent-authored highlight fixtures on the live page.
|
|
6
7
|
* Multi-ring + optional todo strip + zoom/focus/device - the Pilot equivalent
|
|
@@ -117,8 +118,34 @@ export async function showPilotFixtures(page, fixtures) {
|
|
|
117
118
|
})
|
|
118
119
|
.catch(() => { });
|
|
119
120
|
}
|
|
121
|
+
// Resolve every ring's box (and the zoom target, if any) through Playwright's own locator, not a
|
|
122
|
+
// selector string handed to the page for a raw DOM querySelector to fail silently on - >>
|
|
123
|
+
// piercing / :has-text() / :visible are Playwright-only selector syntax. "Prefer live in-page
|
|
124
|
+
// rect (honors device-shell scale)" still holds: .evaluate() runs the callback bound to the
|
|
125
|
+
// resolved element, in the page's own real JS context, same as before - only the RESOLUTION
|
|
126
|
+
// step moved from an in-page querySelector to Playwright's full selector engine. count() gate:
|
|
127
|
+
// Locator.evaluate() has no timeout option and auto-waits ~30s for a match to appear - count()
|
|
128
|
+
// never waits, so a genuinely-missing selector (a real, expected case - see `missing` below)
|
|
129
|
+
// still resolves immediately instead of hanging.
|
|
130
|
+
const ringBoxes = await Promise.all(rings.map(async (r) => {
|
|
131
|
+
const loc = page.locator(r.selector).first();
|
|
132
|
+
if ((await loc.count().catch(() => 0)) === 0)
|
|
133
|
+
return null;
|
|
134
|
+
return loc
|
|
135
|
+
.evaluate((el) => {
|
|
136
|
+
const rect = el.getBoundingClientRect();
|
|
137
|
+
if (rect.width === 0 && rect.height === 0)
|
|
138
|
+
return null;
|
|
139
|
+
return { x: rect.left, y: rect.top, width: rect.width, height: rect.height };
|
|
140
|
+
})
|
|
141
|
+
.catch(() => null);
|
|
142
|
+
}));
|
|
143
|
+
const resolvedZoomSelector = zoomSelector ?? "";
|
|
144
|
+
const zoomHandle = zoom > 1.001 && resolvedZoomSelector
|
|
145
|
+
? await page.locator(resolvedZoomSelector).first().elementHandle({ timeout: 100 }).catch(() => null)
|
|
146
|
+
: null;
|
|
120
147
|
return page
|
|
121
|
-
.evaluate(({ rings, todoGroups, todoPos, holdMs, zoom, zoomSelector, zoomOut, clearAll, todoUi, }) => {
|
|
148
|
+
.evaluate(({ rings, ringBoxes, todoGroups, todoPos, holdMs, zoom, zoomSelector, zoomEl, zoomOut, clearAll, todoUi, }) => {
|
|
122
149
|
const w = window;
|
|
123
150
|
if (w.__wgPilotFxHideTimer)
|
|
124
151
|
clearTimeout(w.__wgPilotFxHideTimer);
|
|
@@ -193,17 +220,11 @@ export async function showPilotFixtures(page, fixtures) {
|
|
|
193
220
|
// (window.__wgPaintRingAt, installed by runner/inpage/core.js's installCore - see
|
|
194
221
|
// ensureInstalled) - one ring implementation, not a separate DOM-building copy here.
|
|
195
222
|
rings.forEach((ring, i) => {
|
|
196
|
-
const
|
|
197
|
-
if (!
|
|
198
|
-
missing.push(ring.selector);
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
const rect = el.getBoundingClientRect();
|
|
202
|
-
if (rect.width === 0 && rect.height === 0) {
|
|
223
|
+
const box = ringBoxes[i];
|
|
224
|
+
if (!box) {
|
|
203
225
|
missing.push(ring.selector);
|
|
204
226
|
return;
|
|
205
227
|
}
|
|
206
|
-
const box = { x: rect.left, y: rect.top, width: rect.width, height: rect.height };
|
|
207
228
|
const ringId = `wg-fx-ring-${i}`;
|
|
208
229
|
const labelId = `wg-fx-ring-${i}-label`;
|
|
209
230
|
if (window.__wgPaintRingAt) {
|
|
@@ -294,7 +315,7 @@ export async function showPilotFixtures(page, fixtures) {
|
|
|
294
315
|
}
|
|
295
316
|
}
|
|
296
317
|
if (zoom > 1.001 && zoomSelector) {
|
|
297
|
-
const target =
|
|
318
|
+
const target = zoomEl;
|
|
298
319
|
if (target) {
|
|
299
320
|
target.scrollIntoView({
|
|
300
321
|
block: "center",
|
|
@@ -322,14 +343,25 @@ export async function showPilotFixtures(page, fixtures) {
|
|
|
322
343
|
return { painted, missing };
|
|
323
344
|
}, {
|
|
324
345
|
rings,
|
|
346
|
+
ringBoxes,
|
|
325
347
|
todoGroups,
|
|
326
348
|
todoPos,
|
|
327
349
|
holdMs,
|
|
328
350
|
zoom,
|
|
329
351
|
zoomSelector: zoomSelector ?? "",
|
|
352
|
+
zoomEl: zoomHandle,
|
|
330
353
|
zoomOut,
|
|
331
354
|
clearAll: fixtures.clear === true,
|
|
332
355
|
todoUi,
|
|
356
|
+
})
|
|
357
|
+
.then((result) => {
|
|
358
|
+
// Debuggability: a demo/pilot run is a sequential list of steps - when a ring silently
|
|
359
|
+
// doesn't render, "where in the flow" and "which selector" are exactly what's needed to fix
|
|
360
|
+
// it, not a quiet no-op. See rings.js/slides.js/teardown.js for the same fix, same reason.
|
|
361
|
+
for (const sel of result.missing) {
|
|
362
|
+
verboseLog("pilot", `ring not painted - selector matched nothing (or a zero-size element): ${sel}`);
|
|
363
|
+
}
|
|
364
|
+
return result;
|
|
333
365
|
})
|
|
334
366
|
.catch(() => ({ painted: 0, missing: rings.map((r) => r.selector) }));
|
|
335
367
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Split out of the former 950-line pilot-overlay.ts (see src/ARCHITECTURE.md). Behavior unchanged.
|
|
2
2
|
import { SURFACE } from "../ui/tokens.js";
|
|
3
3
|
import { ensureShadowRoot, installShadowRoot } from "../ui/shadow.js";
|
|
4
|
+
import { verboseLog } from "../auto-session/verbose-log.js";
|
|
4
5
|
// Real, direct user request: this overlay's own colors were an improvised
|
|
5
6
|
// purple/white scheme (#a78bfa / #1a1033) that didn't match anything else -
|
|
6
7
|
// "our design here seems like barely shares with the ui on the stepper
|
|
@@ -216,8 +217,26 @@ export async function showPilotActivity(page, text) {
|
|
|
216
217
|
*/
|
|
217
218
|
export async function showPilotVision(page, selector, label, tone = "auto") {
|
|
218
219
|
await ensureInstalled(page);
|
|
220
|
+
// Resolved through Playwright's own locator (>> piercing / :has-text() / :visible support), not
|
|
221
|
+
// a raw querySelector string - see rings.js's showRing for the same fix, same reason. count()
|
|
222
|
+
// gate: Locator.evaluate() has no timeout option and auto-waits ~30s for a match to appear -
|
|
223
|
+
// count() never waits, keeping this an immediate "does it exist right now" check.
|
|
224
|
+
const visionLoc = page.locator(selector).first();
|
|
225
|
+
const box = (await visionLoc.count().catch(() => 0)) > 0
|
|
226
|
+
? await visionLoc
|
|
227
|
+
.evaluate((el) => {
|
|
228
|
+
const rect = el.getBoundingClientRect();
|
|
229
|
+
if (rect.width === 0 && rect.height === 0)
|
|
230
|
+
return null;
|
|
231
|
+
return { left: rect.left, top: rect.top, width: rect.width, height: rect.height };
|
|
232
|
+
})
|
|
233
|
+
.catch(() => null)
|
|
234
|
+
: null;
|
|
235
|
+
if (!box) {
|
|
236
|
+
verboseLog("pilot", `vision ring not painted - selector matched nothing (or a zero-size element): ${selector}`);
|
|
237
|
+
}
|
|
219
238
|
await page
|
|
220
|
-
.evaluate(({
|
|
239
|
+
.evaluate(({ box, label, tone }) => {
|
|
221
240
|
const ring = __wgById("wg-ring");
|
|
222
241
|
const tag = __wgById("wg-ring-label");
|
|
223
242
|
if (!ring || !tag)
|
|
@@ -225,18 +244,12 @@ export async function showPilotVision(page, selector, label, tone = "auto") {
|
|
|
225
244
|
const w = window;
|
|
226
245
|
if (w.__wgVisionHideTimer)
|
|
227
246
|
clearTimeout(w.__wgVisionHideTimer);
|
|
228
|
-
|
|
229
|
-
if (!el) {
|
|
230
|
-
ring.style.opacity = "0";
|
|
231
|
-
tag.style.opacity = "0";
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
const rect = el.getBoundingClientRect();
|
|
235
|
-
if (rect.width === 0 && rect.height === 0) {
|
|
247
|
+
if (!box) {
|
|
236
248
|
ring.style.opacity = "0";
|
|
237
249
|
tag.style.opacity = "0";
|
|
238
250
|
return;
|
|
239
251
|
}
|
|
252
|
+
const rect = box;
|
|
240
253
|
ring.dataset.tone = tone;
|
|
241
254
|
ring.dataset.size = "md";
|
|
242
255
|
tag.dataset.tone = tone;
|
|
@@ -262,6 +275,6 @@ export async function showPilotVision(page, selector, label, tone = "auto") {
|
|
|
262
275
|
ring.style.opacity = "0";
|
|
263
276
|
tag.style.opacity = "0";
|
|
264
277
|
}, 4_000);
|
|
265
|
-
}, {
|
|
278
|
+
}, { box, label, tone })
|
|
266
279
|
.catch(() => { });
|
|
267
280
|
}
|
|
@@ -9,6 +9,7 @@ export function bannerUiFromPhase(phase) {
|
|
|
9
9
|
if (phase && phase.bannerUi) {
|
|
10
10
|
if (phase.bannerUi.collision !== undefined) ui.collision = !!phase.bannerUi.collision;
|
|
11
11
|
if (phase.bannerUi.hidden !== undefined) ui.hidden = !!phase.bannerUi.hidden;
|
|
12
|
+
if (phase.bannerUi.captionFadeMs !== undefined) ui.captionFadeMs = Number(phase.bannerUi.captionFadeMs);
|
|
12
13
|
}
|
|
13
14
|
return ui;
|
|
14
15
|
}
|