waygraph 0.15.54 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -3
- package/bin/waygraph +2 -2
- package/dist/analysis/check.d.ts +38 -0
- package/dist/analysis/check.js +87 -0
- package/dist/analysis/coverage-gap.d.ts +1 -1
- package/dist/analysis/coverage-gap.js +14 -37
- package/dist/analysis/flow-source.d.ts +9 -0
- package/dist/analysis/flow-source.js +25 -0
- package/dist/analysis/graph.d.ts +10 -14
- package/dist/analysis/graph.js +48 -371
- package/dist/analysis/map-check.js +4 -39
- package/dist/analysis/practices-check.d.ts +1 -1
- package/dist/analysis/practices-check.js +24 -45
- package/dist/cli/args.d.ts +23 -0
- package/dist/cli/args.js +20 -0
- package/dist/{cli.d.ts → cli/cli.d.ts} +0 -1
- package/dist/{cli.js → cli/cli.js} +10 -9
- package/dist/{commands → cli/commands}/agent-dive-scaffold.js +35 -64
- package/dist/cli/commands/agent-dive.js +42 -0
- package/dist/{commands → cli/commands}/check.d.ts +0 -1
- package/dist/cli/commands/check.js +104 -0
- package/dist/cli/commands/codemod-checkpoints.d.ts +18 -0
- package/dist/cli/commands/codemod-checkpoints.js +186 -0
- package/dist/cli/commands/codemod-flows.d.ts +18 -0
- package/dist/cli/commands/codemod-flows.js +284 -0
- package/dist/cli/commands/codemod-stubs.d.ts +10 -0
- package/dist/cli/commands/codemod-stubs.js +187 -0
- package/dist/{commands → cli/commands}/extensions.js +5 -4
- package/dist/{commands → cli/commands}/init.js +1 -2
- package/dist/{commands → cli/commands}/list.js +9 -7
- package/dist/cli/commands/manifest.d.ts +2 -0
- package/dist/cli/commands/manifest.js +20 -0
- package/dist/cli/commands/map.js +57 -0
- package/dist/{commands → cli/commands}/run.d.ts +0 -1
- package/dist/cli/commands/run.js +64 -0
- package/dist/{commands → cli/commands}/session.js +61 -88
- package/dist/{commands → cli/commands}/test.js +11 -14
- package/dist/cli/commands/traverse.js +105 -0
- package/dist/{commands → cli/commands}/try.js +29 -25
- package/dist/{commands → cli/commands}/upgrade.js +40 -4
- package/dist/cli/flags.d.ts +193 -16
- package/dist/cli/flags.js +179 -234
- package/dist/cli/run-chain.d.ts +1 -0
- package/dist/cli/run-chain.js +42 -7
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +21 -53
- package/dist/cli/util.d.ts +2 -2
- package/dist/cli/util.js +2 -3
- package/dist/{highlights → demo/narration}/css.d.ts +1 -1
- package/dist/{highlights → demo/narration}/css.js +2 -3
- package/dist/{highlights → demo/narration}/demo-pace.d.ts +3 -11
- package/dist/{highlights → demo/narration}/demo-pace.js +5 -11
- package/dist/{highlights → demo/narration}/device.d.ts +2 -2
- package/dist/{highlights → demo/narration}/device.js +1 -1
- package/dist/demo/narration/merge.d.ts +8 -0
- package/dist/demo/narration/merge.js +71 -0
- package/dist/{highlights/run-phase.d.ts → demo/narration/narration.d.ts} +10 -14
- package/dist/{highlights/run-phase.js → demo/narration/narration.js} +25 -94
- package/dist/{highlights → demo/narration}/shorthand.d.ts +1 -1
- package/dist/demo/narration/stub-ctx.d.ts +8 -0
- package/dist/demo/narration/stub-ctx.js +164 -0
- package/dist/{highlights → demo/narration}/style.d.ts +1 -7
- package/dist/{highlights → demo/narration}/style.js +1 -41
- package/dist/{highlights → demo/narration}/todo-dock.d.ts +3 -3
- package/dist/{highlights → demo/narration}/todo-dock.js +13 -30
- package/dist/demo/overlay/auto-chrome.d.ts +7 -0
- package/dist/demo/overlay/auto-chrome.js +97 -0
- package/dist/demo/overlay/cursor.d.ts +12 -0
- package/dist/demo/overlay/cursor.js +142 -0
- package/dist/demo/overlay/device-stage.d.ts +13 -0
- package/dist/demo/overlay/device-stage.js +396 -0
- package/dist/demo/overlay/inpage/banner.d.ts +1 -0
- package/dist/demo/overlay/inpage/banner.js +160 -0
- package/dist/demo/overlay/inpage/caption.d.ts +2 -0
- package/dist/demo/overlay/inpage/caption.js +24 -0
- package/dist/demo/overlay/inpage/core.d.ts +1 -0
- package/dist/demo/overlay/inpage/core.js +345 -0
- package/dist/demo/overlay/inpage/device-chip.d.ts +1 -0
- package/dist/demo/overlay/inpage/device-chip.js +191 -0
- package/dist/demo/overlay/inpage/network.d.ts +9 -0
- package/dist/demo/overlay/inpage/network.js +200 -0
- package/dist/demo/overlay/inpage/panel-chrome.d.ts +1 -0
- package/dist/demo/overlay/inpage/panel-chrome.js +203 -0
- package/dist/demo/overlay/inpage/stamp.d.ts +1 -0
- package/dist/demo/overlay/inpage/stamp.js +46 -0
- package/dist/demo/overlay/inpage/swipe-zoom.d.ts +1 -0
- package/dist/demo/overlay/inpage/swipe-zoom.js +220 -0
- package/dist/demo/overlay/inpage/todos.d.ts +1 -0
- package/dist/demo/overlay/inpage/todos.js +294 -0
- package/dist/demo/overlay/locator-theater.d.ts +25 -0
- package/dist/demo/overlay/locator-theater.js +76 -0
- package/dist/demo/overlay/network-capture.d.ts +22 -0
- package/dist/demo/overlay/network-capture.js +127 -0
- package/dist/demo/overlay/overlay-css.d.ts +3 -0
- package/dist/demo/overlay/overlay-css.js +369 -0
- package/dist/demo/overlay/overlay-stage.d.ts +23 -0
- package/dist/demo/overlay/overlay-stage.js +106 -0
- package/dist/demo/overlay/overlay.d.ts +10 -0
- package/dist/demo/overlay/overlay.js +89 -0
- package/dist/{pilot-overlay/overlay-fixtures.d.ts → demo/overlay/phase-fixtures.d.ts} +2 -2
- package/dist/{pilot-overlay/overlay-fixtures.js → demo/overlay/phase-fixtures.js} +2 -2
- package/dist/{pilot-overlay/action-ring.js → demo/overlay/pilot/actions.js} +2 -1
- package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.d.ts +6 -5
- package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.js +19 -18
- package/dist/{pilot-overlay → demo/overlay/pilot}/shell.d.ts +2 -2
- package/dist/{pilot-overlay → demo/overlay/pilot}/shell.js +13 -22
- package/dist/demo/overlay/reattach.d.ts +7 -0
- package/dist/demo/overlay/reattach.js +23 -0
- package/dist/demo/overlay/rings.d.ts +33 -0
- package/dist/demo/overlay/rings.js +448 -0
- package/dist/{ui → demo/overlay/ui}/components/ring.js +2 -2
- package/dist/{ui → demo/overlay/ui}/overlay.css +4 -4
- package/dist/{ui → demo/overlay/ui}/shadow.d.ts +1 -1
- package/dist/{ui → demo/overlay/ui}/shadow.js +39 -2
- package/dist/demo/stepper/after.d.ts +3 -0
- package/dist/demo/stepper/after.js +113 -0
- package/dist/demo/stepper/banner-log.d.ts +37 -0
- package/dist/demo/stepper/banner-log.js +63 -0
- package/dist/demo/stepper/before.d.ts +4 -0
- package/dist/demo/stepper/before.js +110 -0
- package/dist/demo/stepper/demo-log.d.ts +31 -0
- package/dist/demo/stepper/demo-log.js +309 -0
- package/dist/demo/stepper/gate.d.ts +11 -0
- package/dist/demo/stepper/gate.js +78 -0
- package/dist/demo/stepper/interaction-patch.d.ts +3 -0
- package/dist/demo/stepper/interaction-patch.js +323 -0
- package/dist/demo/stepper/pacing.d.ts +21 -0
- package/dist/demo/stepper/pacing.js +23 -0
- package/dist/demo/stepper/slides.d.ts +11 -0
- package/dist/demo/stepper/slides.js +233 -0
- package/dist/demo/stepper/step-panels.d.ts +21 -0
- package/dist/demo/stepper/step-panels.js +589 -0
- package/dist/demo/stepper/stepper.d.ts +24 -0
- package/dist/demo/stepper/stepper.js +122 -0
- package/dist/demo/stepper/teardown.d.ts +48 -0
- package/dist/demo/stepper/teardown.js +179 -0
- package/dist/demo/stepper/todo-advance.d.ts +14 -0
- package/dist/demo/stepper/todo-advance.js +110 -0
- package/dist/demo/stepper/view.d.ts +68 -0
- package/dist/demo/stepper/view.js +31 -0
- package/dist/demo/types.d.ts +17 -0
- package/dist/demo/verbose-log.js +15 -0
- package/dist/{types.d.ts → engine/block/block.d.ts} +106 -91
- package/dist/{core → engine/block}/block.js +10 -53
- package/dist/{core → engine/block}/compose.d.ts +9 -7
- package/dist/{core → engine/block}/compose.js +1 -1
- package/dist/{core/blocks → engine/block/kinds}/api.d.ts +16 -12
- package/dist/{core/blocks → engine/block/kinds}/api.js +26 -18
- package/dist/{core/blocks → engine/block/kinds}/effect.d.ts +13 -18
- package/dist/engine/block/kinds/effect.js +17 -0
- package/dist/{core/blocks → engine/block/kinds}/method.d.ts +17 -29
- package/dist/{core/blocks → engine/block/kinds}/method.js +6 -21
- package/dist/{core/blocks → engine/block/kinds}/nav.d.ts +21 -31
- package/dist/{core/blocks → engine/block/kinds}/nav.js +6 -12
- package/dist/{core/blocks → engine/block/kinds}/page.d.ts +14 -20
- package/dist/{core/blocks → engine/block/kinds}/page.js +5 -7
- package/dist/engine/checkpoint/checkpoint.d.ts +22 -0
- package/dist/engine/checkpoint/checkpoint.js +8 -0
- package/dist/engine/checkpoint/route.d.ts +28 -0
- package/dist/engine/checkpoint/route.js +28 -0
- package/dist/{core → engine}/config.d.ts +7 -2
- package/dist/engine/config.js +6 -0
- package/dist/engine/engine.d.ts +45 -0
- package/dist/{core → engine}/engine.js +6 -10
- package/dist/engine/env.d.ts +59 -0
- package/dist/engine/env.js +83 -0
- package/dist/{errors.d.ts → engine/errors.d.ts} +22 -22
- package/dist/{errors.js → engine/errors.js} +22 -22
- package/dist/{core → engine/flow}/branch-regression.d.ts +7 -7
- package/dist/{core → engine/flow}/branch-regression.js +4 -3
- package/dist/engine/flow/flow.d.ts +162 -0
- package/dist/engine/flow/flow.js +244 -0
- package/dist/{core → engine/flow}/map-builder.d.ts +34 -39
- package/dist/{core → engine/flow}/map-builder.js +45 -47
- package/dist/{core → engine}/locate.d.ts +1 -1
- package/dist/{core → engine}/locate.js +1 -2
- package/dist/{mem-stub.d.ts → engine/mem/mem-stub.d.ts} +9 -8
- package/dist/{mem-stub.js → engine/mem/mem-stub.js} +2 -2
- package/dist/{mem-page.d.ts → engine/mem/mem.d.ts} +1 -1
- package/dist/{mem-page.js → engine/mem/mem.js} +2 -1
- package/dist/engine/page-gone.d.ts +5 -0
- package/dist/engine/page-gone.js +20 -0
- package/dist/engine/run/connect.d.ts +28 -0
- package/dist/{types.js → engine/run/connect.js} +11 -10
- package/dist/engine/run/events.d.ts +67 -0
- package/dist/engine/run/events.js +90 -0
- package/dist/engine/run/hooks.d.ts +16 -0
- package/dist/engine/run/hooks.js +8 -0
- package/dist/engine/run/launch.d.ts +13 -0
- package/dist/engine/run/launch.js +27 -0
- package/dist/{core/run-graph.d.ts → engine/run/run.d.ts} +8 -12
- package/dist/{core/run-graph.js → engine/run/run.js} +22 -12
- package/dist/engine/stub/pace.d.ts +12 -0
- package/dist/engine/stub/pace.js +2 -0
- package/dist/engine/stub/ring.d.ts +130 -0
- package/dist/engine/stub/ring.js +41 -0
- package/dist/engine/stub/stub.d.ts +268 -0
- package/dist/engine/stub/stub.js +1 -0
- package/dist/engine/stub/todos.d.ts +104 -0
- package/dist/engine/stub/todos.js +2 -0
- package/dist/engine/stub/viewport.d.ts +26 -0
- package/dist/engine/stub/viewport.js +2 -0
- package/dist/{trait.d.ts → engine/trait/trait.d.ts} +1 -1
- package/dist/index.d.ts +84 -36
- package/dist/index.js +44 -19
- package/dist/{session/auto-explore-run.d.ts → live/auto/auto.d.ts} +10 -16
- package/dist/{session/auto-explore-run.js → live/auto/auto.js} +164 -254
- package/dist/{session/auto-explore.d.ts → live/auto/explore.d.ts} +4 -14
- package/dist/{session/auto-explore.js → live/auto/explore.js} +21 -127
- package/dist/{auto-session/session.d.ts → live/auto-session/auto-session.d.ts} +1 -1
- package/dist/{auto-session/session.js → live/auto-session/auto-session.js} +27 -24
- package/dist/{auto-session → live/auto-session}/helpers.d.ts +6 -5
- package/dist/{auto-session → live/auto-session}/helpers.js +1 -1
- package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +7 -5
- package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +31 -16
- package/dist/{session/browser.d.ts → live/auto-session/start.d.ts} +1 -2
- package/dist/{session/browser.js → live/auto-session/start.js} +2 -3
- package/dist/{pilot-overlay → live/pilot}/panel.d.ts +1 -1
- package/dist/{pilot-overlay → live/pilot}/panel.js +23 -31
- package/dist/{session → live/pilot}/pilot.d.ts +3 -3
- package/dist/{session → live/pilot}/pilot.js +4 -4
- package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +1 -1
- package/dist/{traverse/run.js → live/traverse/traverse.js} +26 -43
- package/dist/manifest/manifest.d.ts +52 -0
- package/dist/manifest/manifest.js +93 -0
- package/dist/manifest/map-imports.d.ts +7 -0
- package/dist/manifest/map-imports.js +22 -0
- package/dist/manifest/maps.d.ts +33 -0
- package/dist/manifest/maps.js +62 -0
- package/dist/manifest/pack.d.ts +21 -0
- package/dist/manifest/pack.js +109 -0
- package/dist/manifest/project.d.ts +60 -0
- package/dist/manifest/project.js +101 -0
- package/dist/{session/block-inject.js → manifest/roots.js} +1 -18
- package/dist/manifest/scan.d.ts +19 -0
- package/dist/manifest/scan.js +57 -0
- package/dist/manifest/source.d.ts +23 -0
- package/dist/manifest/source.js +86 -0
- package/dist/runner/mode.d.ts +71 -0
- package/dist/runner/mode.js +1 -0
- package/dist/runner/modes/branches.d.ts +5 -0
- package/dist/runner/modes/branches.js +37 -0
- package/dist/runner/modes/demo.d.ts +3 -0
- package/dist/runner/modes/demo.js +13 -0
- package/dist/runner/modes/report.d.ts +2 -0
- package/dist/runner/modes/report.js +54 -0
- package/dist/runner/modes/run.d.ts +2 -0
- package/dist/runner/modes/run.js +3 -0
- package/dist/runner/options.d.ts +31 -0
- package/dist/runner/options.js +42 -0
- package/dist/runner/plan/find.d.ts +18 -0
- package/dist/runner/plan/find.js +65 -0
- package/dist/runner/plan/plan.d.ts +11 -0
- package/dist/runner/plan/plan.js +97 -0
- package/dist/runner/plan/seed-mem.d.ts +12 -0
- package/dist/runner/plan/seed-mem.js +98 -0
- package/dist/runner/plan/spec.d.ts +5 -0
- package/dist/runner/plan/spec.js +17 -0
- package/dist/runner/play-steps.d.ts +2 -0
- package/dist/runner/play-steps.js +59 -0
- package/dist/runner/runner.d.ts +4 -0
- package/dist/runner/runner.js +64 -0
- package/dist/runner/session.d.ts +9 -0
- package/dist/runner/session.js +87 -0
- package/dist/{browser.js → runtime/browser.js} +4 -2
- package/dist/{env-file.js → runtime/env-file.js} +7 -12
- package/dist/{extensions.d.ts → runtime/extensions.d.ts} +1 -5
- package/dist/{extensions.js → runtime/extensions.js} +2 -1
- package/dist/runtime/full-launch.d.ts +1 -0
- package/dist/runtime/full-launch.js +34 -0
- package/dist/runtime/global-flag.d.ts +5 -0
- package/dist/runtime/global-flag.js +18 -0
- package/dist/{playwright-config.d.ts → runtime/playwright-config.d.ts} +1 -1
- package/dist/{playwright.config.js → runtime/playwright.config.js} +3 -2
- package/dist/runtime/run-log.d.ts +2 -0
- package/dist/runtime/run-log.js +17 -0
- package/dist/{video-dir.js → runtime/video-dir.js} +3 -2
- package/dist/{config.d.ts → runtime/waygraph-config.d.ts} +6 -9
- package/dist/{config.js → runtime/waygraph-config.js} +21 -51
- package/dist/{webserver.js → runtime/webserver.js} +5 -30
- package/examples/routed-demo/config/waygraph.config.ts +20 -0
- package/examples/routed-demo/package.json +1 -4
- package/examples/routed-demo/scripts/fixture-server.mjs +1 -1
- package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +2 -4
- package/examples/routed-demo/src/flows/routed-demo.flow.ts +1 -2
- package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +5 -4
- package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +3 -3
- package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +3 -3
- package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +3 -3
- package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +3 -3
- package/examples/routed-demo/src/states/routed-demo.states.ts +5 -3
- package/examples/routed-demo/tests/routed-demo.spec.ts +4 -4
- package/examples/routed-demo/tsconfig.json +1 -1
- package/examples/saucedemo/docs/CONVENTION.md +4 -5
- package/examples/saucedemo/docs/HELPERS.md +11 -11
- package/examples/saucedemo/src/blocks/SITE-MAP.md +0 -1
- package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +1 -5
- package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
- package/examples/saucedemo/src/flows/api-demo.flow.ts +12 -10
- package/examples/saucedemo/src/states/checkout.states.ts +21 -11
- package/examples/saucedemo/src/stubs/device-showcase.ts +8 -10
- package/examples/saucedemo/tests/auto-graph.spec.ts +4 -12
- package/package.json +10 -6
- package/templates/agents/waygraph-planner.agent.md +2 -2
- package/templates/quickstart/docs/CONVENTION.md +4 -4
- package/templates/quickstart/docs/HELPERS.md +10 -8
- package/templates/quickstart/package.json +0 -3
- package/templates/quickstart/src/blocks/SITE-MAP.md +0 -1
- package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +1 -5
- package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
- package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
- package/templates/quickstart/src/flows/api-demo.flow.ts +12 -10
- package/templates/quickstart/src/states/checkout.states.ts +21 -11
- package/templates/quickstart/src/stubs/device-showcase.ts +8 -10
- package/templates/scaffold/README.md +2 -1
- package/templates/scaffold/STRUCTURE.md +5 -4
- package/templates/scaffold/config/waygraph.config.ts +1 -0
- package/templates/scaffold/gitignore +1 -0
- package/templates/scaffold/src/flows/README.md +2 -2
- package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_methods/add-item.effect.block.ts +4 -4
- package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_methods/clear-cart.method.block.ts +5 -4
- package/templates/scaffold/src/map/(app_base)/home/_methods/remove-item.effect.block.ts +4 -4
- package/templates/scaffold/src/map/(app_base)/home/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_keys.ts +21 -0
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-body.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-header.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-status.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/pick-extension-interceptor.method.block.ts +5 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-body.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-headers.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/send-request.method.block.ts +5 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-bearer-token.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-headers.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-json-body.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-method.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-query-params.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-url.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/hoppscotch/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/hoppscotch/_states.ts +6 -0
- package/templates/scaffold/src/map/(external)/hoppscotch/settings/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/mailpit/_keys.ts +13 -0
- package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/mailpit/_states.ts +9 -0
- package/templates/scaffold/src/map/README.md +7 -0
- package/templates/scaffold/src/states/README.md +4 -1
- package/templates/scaffold/src/states/demo.mem-keys.ts +1 -29
- package/templates/scaffold/src/states/demo.states.ts +14 -20
- package/templates/scaffold/tests/hoppscotch.spec.ts +1 -11
- package/templates/scaffold/tests/mail-verify.spec.ts +2 -2
- package/templates/skills/waygraph-blind-pilot.skill.md +2 -6
- package/templates/skills/waygraph-convention.skill.md +23 -14
- package/templates/skills/waygraph-pilot.skill.md +7 -4
- package/dist/auto-session/verbose-log.js +0 -16
- package/dist/auto-session.d.ts +0 -2
- package/dist/auto-session.js +0 -3
- package/dist/cli/discover.d.ts +0 -40
- package/dist/cli/discover.js +0 -148
- package/dist/commands/agent-dive.js +0 -52
- package/dist/commands/check.js +0 -192
- package/dist/commands/map.js +0 -29
- package/dist/commands/run.js +0 -104
- package/dist/commands/traverse.js +0 -177
- package/dist/core/block.d.ts +0 -109
- package/dist/core/blocks/effect.js +0 -23
- package/dist/core/config.js +0 -17
- package/dist/core/engine.d.ts +0 -198
- package/dist/core/flow.d.ts +0 -294
- package/dist/core/flow.js +0 -432
- package/dist/core.d.ts +0 -14
- package/dist/core.js +0 -15
- package/dist/highlights/merge.d.ts +0 -8
- package/dist/highlights/merge.js +0 -173
- package/dist/highlights/stub-ctx.d.ts +0 -10
- package/dist/highlights/stub-ctx.js +0 -331
- package/dist/highlights/types.d.ts +0 -613
- package/dist/highlights.d.ts +0 -9
- package/dist/highlights.js +0 -10
- package/dist/pilot-overlay.d.ts +0 -5
- package/dist/pilot-overlay.js +0 -6
- package/dist/runner/banner-log.js +0 -63
- package/dist/runner/chain-run.js +0 -102
- package/dist/runner/cursor.js +0 -140
- package/dist/runner/demo-log.js +0 -316
- package/dist/runner/device-stage.d.ts +0 -9
- package/dist/runner/device-stage.js +0 -420
- package/dist/runner/discovery.js +0 -105
- package/dist/runner/index.js +0 -2
- package/dist/runner/inpage/banner.d.ts +0 -21
- package/dist/runner/inpage/banner.js +0 -156
- package/dist/runner/inpage/caption.d.ts +0 -3
- package/dist/runner/inpage/caption.js +0 -23
- package/dist/runner/inpage/core.d.ts +0 -4
- package/dist/runner/inpage/core.js +0 -316
- package/dist/runner/inpage/device.d.ts +0 -3
- package/dist/runner/inpage/device.js +0 -211
- package/dist/runner/inpage/network.d.ts +0 -15
- package/dist/runner/inpage/network.js +0 -217
- package/dist/runner/inpage/panel-chrome.js +0 -192
- package/dist/runner/inpage/stamp.js +0 -46
- package/dist/runner/inpage/swipe-zoom.js +0 -220
- package/dist/runner/inpage/todos.js +0 -337
- package/dist/runner/interaction-patch.js +0 -384
- package/dist/runner/main.js +0 -469
- package/dist/runner/network-capture.d.ts +0 -9
- package/dist/runner/network-capture.js +0 -126
- package/dist/runner/overlay-css.d.ts +0 -3
- package/dist/runner/overlay-css.js +0 -377
- package/dist/runner/overlay-install.js +0 -90
- package/dist/runner/overlay-stage.js +0 -110
- package/dist/runner/rings.js +0 -514
- package/dist/runner/seed-mem.js +0 -110
- package/dist/runner/slides.js +0 -278
- package/dist/runner/step-mode.js +0 -703
- package/dist/runner/step-panels.js +0 -729
- package/dist/runner/teardown.js +0 -202
- package/dist/runner/todo-dock.js +0 -142
- package/dist/session/step-overlay.d.ts +0 -37
- package/dist/session/step-overlay.js +0 -244
- package/examples/routed-demo/playwright.config.ts +0 -21
- package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
- package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
- /package/dist/{commands → cli/commands}/agent-dive-scaffold.d.ts +0 -0
- /package/dist/{commands → cli/commands}/agent-dive.d.ts +0 -0
- /package/dist/{commands → cli/commands}/extensions.d.ts +0 -0
- /package/dist/{commands → cli/commands}/init.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/map.d.ts +0 -0
- /package/dist/{commands → cli/commands}/session.d.ts +0 -0
- /package/dist/{commands → cli/commands}/test.d.ts +0 -0
- /package/dist/{commands → cli/commands}/traverse.d.ts +0 -0
- /package/dist/{commands → cli/commands}/try.d.ts +0 -0
- /package/dist/{commands → cli/commands}/upgrade.d.ts +0 -0
- /package/dist/{highlights → demo/narration}/shorthand.js +0 -0
- /package/dist/{session/overlay-beacon.d.ts → demo/overlay/beacon.d.ts} +0 -0
- /package/dist/{session/overlay-beacon.js → demo/overlay/beacon.js} +0 -0
- /package/dist/{pilot-overlay/action-ring.d.ts → demo/overlay/pilot/actions.d.ts} +0 -0
- /package/dist/{ui → demo/overlay/ui}/components/ring.d.ts +0 -0
- /package/dist/{ui → demo/overlay/ui}/stylesheet.d.ts +0 -0
- /package/dist/{ui → demo/overlay/ui}/stylesheet.js +0 -0
- /package/dist/{ui → demo/overlay/ui}/tokens.d.ts +0 -0
- /package/dist/{ui → demo/overlay/ui}/tokens.js +0 -0
- /package/dist/{highlights → demo}/types.js +0 -0
- /package/dist/{auto-session → demo}/verbose-log.d.ts +0 -0
- /package/dist/{selector.d.ts → engine/trait/selector.d.ts} +0 -0
- /package/dist/{selector.js → engine/trait/selector.js} +0 -0
- /package/dist/{trait.js → engine/trait/trait.js} +0 -0
- /package/dist/{traverse → live/traverse}/coverage.d.ts +0 -0
- /package/dist/{traverse → live/traverse}/coverage.js +0 -0
- /package/dist/{traverse → live/traverse}/lease.d.ts +0 -0
- /package/dist/{traverse → live/traverse}/lease.js +0 -0
- /package/dist/{session/block-inject.d.ts → manifest/roots.d.ts} +0 -0
- /package/dist/{blocks-select.d.ts → manifest/select.d.ts} +0 -0
- /package/dist/{blocks-select.js → manifest/select.js} +0 -0
- /package/dist/{browser.d.ts → runtime/browser.d.ts} +0 -0
- /package/dist/{env-file.d.ts → runtime/env-file.d.ts} +0 -0
- /package/dist/{playwright-config.js → runtime/playwright-config.js} +0 -0
- /package/dist/{playwright.config.d.ts → runtime/playwright.config.d.ts} +0 -0
- /package/dist/{video-dir.d.ts → runtime/video-dir.d.ts} +0 -0
- /package/dist/{webserver.d.ts → runtime/webserver.d.ts} +0 -0
|
@@ -1,420 +0,0 @@
|
|
|
1
|
-
// Moved verbatim from the former CHAIN_RUNNER_SCRIPT template string in cli.ts (see src/ARCHITECTURE.md).
|
|
2
|
-
// Runs inside the target project's own waygraph copy - keep it dependency-light and self-contained.
|
|
3
|
-
import { resolveDeviceState } from "../highlights.js";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Fit + center the OS browser window on the device viewport so mobile/tablet
|
|
7
|
-
* is not stuck top-left inside a maximized frame (Dan 0.13.4).
|
|
8
|
-
* Desktop clear restores maximized.
|
|
9
|
-
*/
|
|
10
|
-
async function fitWindowToDeviceViewport(page, viewport, opts) {
|
|
11
|
-
const maximize = !!(opts && opts.maximize);
|
|
12
|
-
let client;
|
|
13
|
-
try {
|
|
14
|
-
client = await page.context().newCDPSession(page);
|
|
15
|
-
const { windowId } = await client.send("Browser.getWindowForTarget");
|
|
16
|
-
if (maximize) {
|
|
17
|
-
await client.send("Browser.setWindowBounds", {
|
|
18
|
-
windowId,
|
|
19
|
-
bounds: { windowState: "maximized" },
|
|
20
|
-
});
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
if (!viewport || !viewport.width || !viewport.height) return;
|
|
24
|
-
const metrics = await page
|
|
25
|
-
.evaluate(() => {
|
|
26
|
-
const chromeW = Math.max(0, (window.outerWidth || 0) - (window.innerWidth || 0));
|
|
27
|
-
const chromeH = Math.max(0, (window.outerHeight || 0) - (window.innerHeight || 0));
|
|
28
|
-
return {
|
|
29
|
-
chromeW: Number.isFinite(chromeW) ? chromeW : 0,
|
|
30
|
-
// First paint after maximize often reports 0 chrome - use a floor.
|
|
31
|
-
chromeH: chromeH > 20 ? chromeH : 88,
|
|
32
|
-
screenW: window.screen.availWidth || 1920,
|
|
33
|
-
screenH: window.screen.availHeight || 1080,
|
|
34
|
-
};
|
|
35
|
-
})
|
|
36
|
-
.catch(() => ({ chromeW: 0, chromeH: 88, screenW: 1920, screenH: 1080 }));
|
|
37
|
-
// Leave maximized before setting pixel bounds (Chromium ignores size while max).
|
|
38
|
-
await client.send("Browser.setWindowBounds", {
|
|
39
|
-
windowId,
|
|
40
|
-
bounds: { windowState: "normal" },
|
|
41
|
-
});
|
|
42
|
-
const winW = Math.min(
|
|
43
|
-
metrics.screenW,
|
|
44
|
-
Math.max(320, Math.floor(viewport.width + metrics.chromeW)),
|
|
45
|
-
);
|
|
46
|
-
const winH = Math.min(
|
|
47
|
-
metrics.screenH,
|
|
48
|
-
Math.max(320, Math.floor(viewport.height + metrics.chromeH)),
|
|
49
|
-
);
|
|
50
|
-
const left = Math.max(0, Math.floor((metrics.screenW - winW) / 2));
|
|
51
|
-
const top = Math.max(0, Math.floor((metrics.screenH - winH) / 2));
|
|
52
|
-
await client.send("Browser.setWindowBounds", {
|
|
53
|
-
windowId,
|
|
54
|
-
bounds: {
|
|
55
|
-
windowState: "normal",
|
|
56
|
-
left,
|
|
57
|
-
top,
|
|
58
|
-
width: winW,
|
|
59
|
-
height: winH,
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
} catch {
|
|
63
|
-
/* headless / no window - ignore */
|
|
64
|
-
} finally {
|
|
65
|
-
if (client) await client.detach().catch(() => {});
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Video recording locks Playwright viewport to recordVideo.size. Shrinking
|
|
72
|
-
* setViewportSize to mobile/tablet letterboxes the .webm top-left. Instead keep
|
|
73
|
-
* the stage size and center a device-sized #wg-device-shell inside the frame.
|
|
74
|
-
*/
|
|
75
|
-
export async function applyVideoDeviceStage(page, target, stage, opts) {
|
|
76
|
-
const clear = !!(opts && opts.clear);
|
|
77
|
-
const shutterOut = !!(opts && opts.shutterOut);
|
|
78
|
-
const enterIn = !!(opts && opts.enterIn);
|
|
79
|
-
const desktopFlat = !!(opts && (opts.desktopFlat || opts.shutterOut));
|
|
80
|
-
const result = await page
|
|
81
|
-
.evaluate(
|
|
82
|
-
({ tw, th, sw, sh, clear, shutterOut, enterIn, desktopFlat }) => {
|
|
83
|
-
const MATTE = "#0b1220";
|
|
84
|
-
const unwrap = () => {
|
|
85
|
-
const shell = document.getElementById("wg-device-shell");
|
|
86
|
-
if (shell) {
|
|
87
|
-
const parent = shell.parentNode;
|
|
88
|
-
if (parent) {
|
|
89
|
-
while (shell.firstChild) parent.insertBefore(shell.firstChild, shell);
|
|
90
|
-
}
|
|
91
|
-
shell.remove();
|
|
92
|
-
}
|
|
93
|
-
document.documentElement.classList.remove("wg-video-device-stage");
|
|
94
|
-
document.documentElement.style.removeProperty("background");
|
|
95
|
-
const b = document.body;
|
|
96
|
-
if (b) {
|
|
97
|
-
b.style.margin = "";
|
|
98
|
-
b.style.minHeight = "";
|
|
99
|
-
b.style.display = "";
|
|
100
|
-
b.style.alignItems = "";
|
|
101
|
-
b.style.justifyContent = "";
|
|
102
|
-
b.style.background = "";
|
|
103
|
-
b.style.overflow = "";
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
if (clear) {
|
|
107
|
-
unwrap();
|
|
108
|
-
return { waitMs: 0 };
|
|
109
|
-
}
|
|
110
|
-
if (!document.body) return { waitMs: 0 };
|
|
111
|
-
document.documentElement.classList.add("wg-video-device-stage");
|
|
112
|
-
document.documentElement.style.background = MATTE;
|
|
113
|
-
document.body.style.margin = "0";
|
|
114
|
-
document.body.style.minHeight = "100vh";
|
|
115
|
-
document.body.style.display = "flex";
|
|
116
|
-
document.body.style.alignItems = "center";
|
|
117
|
-
document.body.style.justifyContent = "center";
|
|
118
|
-
document.body.style.background = MATTE;
|
|
119
|
-
document.body.style.overflow = "hidden";
|
|
120
|
-
|
|
121
|
-
let shell = document.getElementById("wg-device-shell");
|
|
122
|
-
const created = !shell;
|
|
123
|
-
if (!shell) {
|
|
124
|
-
shell = document.createElement("div");
|
|
125
|
-
shell.id = "wg-device-shell";
|
|
126
|
-
const move = [];
|
|
127
|
-
for (const child of [...document.body.childNodes]) {
|
|
128
|
-
if (
|
|
129
|
-
child.nodeType === 1 &&
|
|
130
|
-
child.getAttribute &&
|
|
131
|
-
child.getAttribute("data-wg-ui") === "1"
|
|
132
|
-
) {
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
if (child.nodeType === 1 && child.id === "wg-device-shell") continue;
|
|
136
|
-
move.push(child);
|
|
137
|
-
}
|
|
138
|
-
for (const n of move) shell.appendChild(n);
|
|
139
|
-
document.body.appendChild(shell);
|
|
140
|
-
}
|
|
141
|
-
// Desktop flat: always full-bleed, never reintroduce bezel on overlay rebuild.
|
|
142
|
-
if (desktopFlat) {
|
|
143
|
-
shell.classList.remove("wg-shell-enter");
|
|
144
|
-
shell.classList.add("wg-shell-shutter-out");
|
|
145
|
-
shell.classList.add("wg-shell-desktop-flat");
|
|
146
|
-
shell.style.width = sw + "px";
|
|
147
|
-
shell.style.height = sh + "px";
|
|
148
|
-
shell.style.maxWidth = sw + "px";
|
|
149
|
-
shell.style.maxHeight = sh + "px";
|
|
150
|
-
shell.style.transform = "scale(1)";
|
|
151
|
-
shell.style.transformOrigin = "center center";
|
|
152
|
-
shell.style.borderRadius = "0";
|
|
153
|
-
shell.style.boxShadow = "none";
|
|
154
|
-
shell.style.border = "none";
|
|
155
|
-
shell.style.outline = "none";
|
|
156
|
-
return { waitMs: shutterOut ? 480 : 0 };
|
|
157
|
-
}
|
|
158
|
-
// Leaving desktop-flat: clear INLINE radius/shadow overrides so CSS
|
|
159
|
-
// border-radius:16px applies evenly on all corners again.
|
|
160
|
-
shell.style.removeProperty("border-radius");
|
|
161
|
-
shell.style.removeProperty("box-shadow");
|
|
162
|
-
shell.style.removeProperty("border");
|
|
163
|
-
shell.style.removeProperty("outline");
|
|
164
|
-
if (enterIn && (created || shell.classList.contains("wg-shell-shutter-out"))) {
|
|
165
|
-
shell.classList.remove("wg-shell-shutter-out");
|
|
166
|
-
shell.classList.remove("wg-shell-desktop-flat");
|
|
167
|
-
shell.classList.add("wg-shell-enter");
|
|
168
|
-
void shell.offsetWidth;
|
|
169
|
-
}
|
|
170
|
-
const scale = Math.min(sw / tw, sh / th) * 0.92;
|
|
171
|
-
shell.style.width = tw + "px";
|
|
172
|
-
shell.style.height = th + "px";
|
|
173
|
-
shell.style.maxWidth = tw + "px";
|
|
174
|
-
shell.style.maxHeight = th + "px";
|
|
175
|
-
shell.style.transform = "scale(" + scale + ")";
|
|
176
|
-
shell.style.transformOrigin = "center center";
|
|
177
|
-
shell.classList.remove("wg-shell-shutter-out");
|
|
178
|
-
shell.classList.remove("wg-shell-desktop-flat");
|
|
179
|
-
if (enterIn && shell.classList.contains("wg-shell-enter")) {
|
|
180
|
-
requestAnimationFrame(() => {
|
|
181
|
-
shell.classList.remove("wg-shell-enter");
|
|
182
|
-
});
|
|
183
|
-
return { waitMs: 520 };
|
|
184
|
-
}
|
|
185
|
-
shell.classList.remove("wg-shell-enter");
|
|
186
|
-
return { waitMs: 0 };
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
tw: target.width,
|
|
190
|
-
th: target.height,
|
|
191
|
-
sw: stage.width,
|
|
192
|
-
sh: stage.height,
|
|
193
|
-
clear,
|
|
194
|
-
shutterOut,
|
|
195
|
-
enterIn,
|
|
196
|
-
desktopFlat,
|
|
197
|
-
},
|
|
198
|
-
)
|
|
199
|
-
.catch(() => ({ waitMs: 0 }));
|
|
200
|
-
const waitMs = result && result.waitMs ? Number(result.waitMs) : 0;
|
|
201
|
-
if (waitMs > 0) await new Promise((r) => setTimeout(r, waitMs));
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Apply authored device fixture to the live page (0.13+).
|
|
207
|
-
* Seamless viewport lerp + centered window + toast on set/clear.
|
|
208
|
-
* With --video: keep recordVideo stage size and center a device shell in-frame.
|
|
209
|
-
*/
|
|
210
|
-
export async function applyDeviceToPage(page, device, sync) {
|
|
211
|
-
const mode = sync || (device ? "set" : "keep");
|
|
212
|
-
if (mode === "keep" && !device) return;
|
|
213
|
-
const d =
|
|
214
|
-
device ||
|
|
215
|
-
resolveDeviceState("desktop", false) || {
|
|
216
|
-
preset: "desktop",
|
|
217
|
-
viewport: { width: 1280, height: 720, deviceScaleFactor: 1 },
|
|
218
|
-
isMobile: false,
|
|
219
|
-
hasTouch: false,
|
|
220
|
-
touchMode: false,
|
|
221
|
-
};
|
|
222
|
-
const realSet =
|
|
223
|
-
typeof page.__wgRealSetViewportSize === "function"
|
|
224
|
-
? page.__wgRealSetViewportSize
|
|
225
|
-
: page.setViewportSize.bind(page);
|
|
226
|
-
const target = {
|
|
227
|
-
width: Math.max(200, Math.floor(d.viewport.width)),
|
|
228
|
-
height: Math.max(200, Math.floor(d.viewport.height)),
|
|
229
|
-
};
|
|
230
|
-
const videoStage =
|
|
231
|
-
page.__wgVideoViewport &&
|
|
232
|
-
page.__wgVideoViewport.width > 0 &&
|
|
233
|
-
page.__wgVideoViewport.height > 0
|
|
234
|
-
? {
|
|
235
|
-
width: Math.floor(page.__wgVideoViewport.width),
|
|
236
|
-
height: Math.floor(page.__wgVideoViewport.height),
|
|
237
|
-
}
|
|
238
|
-
: null;
|
|
239
|
-
let from = null;
|
|
240
|
-
try {
|
|
241
|
-
from = page.viewportSize();
|
|
242
|
-
} catch {
|
|
243
|
-
from = null;
|
|
244
|
-
}
|
|
245
|
-
// Non-headless (no --video) used to literally resize the real OS browser window/viewport to
|
|
246
|
-
// each device's pixel size - a real, confirmed complaint: it didn't look like the same animated
|
|
247
|
-
// device-shell bezel the --video path already has, just a plain resize. Both now use the exact
|
|
248
|
-
// same applyVideoDeviceStage bezel technique - the "stage" (the fixed outer viewport the shell is
|
|
249
|
-
// centered within) is the recordVideo canvas size when recording, or the window's own size at
|
|
250
|
-
// the FIRST device switch when not (captured once, persisted on the page - the window itself is
|
|
251
|
-
// only really resized that one time, to establish a stable stage; every device switch after that
|
|
252
|
-
// paints the animated shell inside it instead of resizing the window again).
|
|
253
|
-
let establishingHeadedStage = false;
|
|
254
|
-
if (!videoStage && !page.__wgHeadedStage) {
|
|
255
|
-
page.__wgHeadedStage =
|
|
256
|
-
from && from.width > 0 && from.height > 0 ? { width: from.width, height: from.height } : { width: 1280, height: 720 };
|
|
257
|
-
establishingHeadedStage = true;
|
|
258
|
-
}
|
|
259
|
-
const stage = videoStage || page.__wgHeadedStage;
|
|
260
|
-
const announce = mode === "set" || mode === "clear";
|
|
261
|
-
const toDesktop =
|
|
262
|
-
mode === "clear" || (d.preset === "desktop" && !d.touchMode);
|
|
263
|
-
const shouldAnimate =
|
|
264
|
-
announce &&
|
|
265
|
-
from &&
|
|
266
|
-
from.width > 0 &&
|
|
267
|
-
from.height > 0 &&
|
|
268
|
-
(from.width !== target.width || from.height !== target.height);
|
|
269
|
-
|
|
270
|
-
// Always clear camera zoom when returning to desktop (video + headed).
|
|
271
|
-
if (toDesktop) {
|
|
272
|
-
page.__wgDesktopFlat = true;
|
|
273
|
-
await page
|
|
274
|
-
.evaluate(() => {
|
|
275
|
-
window.__wgZoomOutOnHide = true;
|
|
276
|
-
if (window.__wgClearZoom) window.__wgClearZoom();
|
|
277
|
-
})
|
|
278
|
-
.catch(() => {});
|
|
279
|
-
} else if (announce) {
|
|
280
|
-
page.__wgDesktopFlat = false;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// Swipe trail is for scrolling (see ensureLocatorInView), not device morph.
|
|
284
|
-
const nextOrient =
|
|
285
|
-
d.orientation === "landscape" || d.orientation === "portrait"
|
|
286
|
-
? d.orientation
|
|
287
|
-
: target.height > target.width
|
|
288
|
-
? "portrait"
|
|
289
|
-
: "landscape";
|
|
290
|
-
page.__wgDeviceOrient = nextOrient;
|
|
291
|
-
page.__wgDevicePreset = toDesktop ? "desktop" : d.preset || "";
|
|
292
|
-
|
|
293
|
-
if (stage) {
|
|
294
|
-
// Lock the Playwright viewport to the stage size so frames/window fill it; center the device
|
|
295
|
-
// shell inside (OS window centering alone does not). Do NOT fitWindow to the device size -
|
|
296
|
-
// that shrinks the viewport below the stage and (when recording) pads the .webm with grey
|
|
297
|
-
// (top-left bias). Headed-without-video reuses this exact technique (see `stage`'s own
|
|
298
|
-
// comment above) - the real OS window is only ever resized once, right here, to establish the
|
|
299
|
-
// stage itself; every device switch after that paints the animated shell inside it instead.
|
|
300
|
-
if (!videoStage && establishingHeadedStage) {
|
|
301
|
-
await fitWindowToDeviceViewport(page, stage, { maximize: false }).catch(() => {});
|
|
302
|
-
}
|
|
303
|
-
try {
|
|
304
|
-
await realSet(stage);
|
|
305
|
-
} catch {
|
|
306
|
-
/* ignore */
|
|
307
|
-
}
|
|
308
|
-
const shellFrom = page.__wgDeviceShell || target;
|
|
309
|
-
if (toDesktop) {
|
|
310
|
-
// Zoom already cleared above. Full-bleed desktop shell (no matte frame).
|
|
311
|
-
// Shutter-out: soft rounded -> radius 0, then flat edge-to-edge.
|
|
312
|
-
const desk = {
|
|
313
|
-
width: stage.width,
|
|
314
|
-
height: stage.height,
|
|
315
|
-
};
|
|
316
|
-
page.__wgDeviceShell = { ...desk };
|
|
317
|
-
await applyVideoDeviceStage(page, desk, stage, {
|
|
318
|
-
clear: false,
|
|
319
|
-
shutterOut: true,
|
|
320
|
-
desktopFlat: true,
|
|
321
|
-
});
|
|
322
|
-
try {
|
|
323
|
-
await realSet(stage);
|
|
324
|
-
} catch {
|
|
325
|
-
/* ignore */
|
|
326
|
-
}
|
|
327
|
-
} else {
|
|
328
|
-
// Lerp shell size when switching mobile <-> tablet mid-run.
|
|
329
|
-
const firstDevice = !page.__wgDeviceShell;
|
|
330
|
-
if (
|
|
331
|
-
announce &&
|
|
332
|
-
shellFrom &&
|
|
333
|
-
(shellFrom.width !== target.width || shellFrom.height !== target.height)
|
|
334
|
-
) {
|
|
335
|
-
const steps = 14;
|
|
336
|
-
const ms = Number(process.env.WAYGRAPH_DEVICE_TRANSITION_MS || 520);
|
|
337
|
-
const stepMs = Math.max(12, Math.floor(ms / steps));
|
|
338
|
-
for (let i = 1; i <= steps; i++) {
|
|
339
|
-
const t = i / steps;
|
|
340
|
-
const e = t * t * (3 - 2 * t);
|
|
341
|
-
const mid = {
|
|
342
|
-
width: Math.round(shellFrom.width + (target.width - shellFrom.width) * e),
|
|
343
|
-
height: Math.round(shellFrom.height + (target.height - shellFrom.height) * e),
|
|
344
|
-
};
|
|
345
|
-
await applyVideoDeviceStage(page, mid, stage, {
|
|
346
|
-
clear: false,
|
|
347
|
-
enterIn: i === 1 && firstDevice,
|
|
348
|
-
});
|
|
349
|
-
if (i < steps) await new Promise((r) => setTimeout(r, stepMs));
|
|
350
|
-
}
|
|
351
|
-
} else {
|
|
352
|
-
await applyVideoDeviceStage(page, target, stage, {
|
|
353
|
-
clear: false,
|
|
354
|
-
enterIn: firstDevice || announce,
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
page.__wgDeviceShell = { ...target };
|
|
358
|
-
// Re-assert stage size after any prior fitWindow.
|
|
359
|
-
try {
|
|
360
|
-
await realSet(stage);
|
|
361
|
-
} catch {
|
|
362
|
-
/* ignore */
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
} else {
|
|
366
|
-
// Unmaximize + center early so the lerp does not sit in the corner of a
|
|
367
|
-
// maximized frame. Desktop clear maximizes at the end instead.
|
|
368
|
-
if (!toDesktop) {
|
|
369
|
-
await fitWindowToDeviceViewport(page, from && from.width ? from : target, {
|
|
370
|
-
maximize: false,
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
try {
|
|
375
|
-
if (shouldAnimate) {
|
|
376
|
-
const steps = 14;
|
|
377
|
-
const ms = Number(process.env.WAYGRAPH_DEVICE_TRANSITION_MS || 520);
|
|
378
|
-
const stepMs = Math.max(12, Math.floor(ms / steps));
|
|
379
|
-
for (let i = 1; i <= steps; i++) {
|
|
380
|
-
const t = i / steps;
|
|
381
|
-
const e = t * t * (3 - 2 * t); // smoothstep
|
|
382
|
-
const mid = {
|
|
383
|
-
width: Math.round(from.width + (target.width - from.width) * e),
|
|
384
|
-
height: Math.round(from.height + (target.height - from.height) * e),
|
|
385
|
-
};
|
|
386
|
-
await realSet(mid);
|
|
387
|
-
if (!toDesktop && (i === 1 || i === steps || i % 3 === 0)) {
|
|
388
|
-
await fitWindowToDeviceViewport(page, mid, { maximize: false });
|
|
389
|
-
}
|
|
390
|
-
if (i < steps) await new Promise((r) => setTimeout(r, stepMs));
|
|
391
|
-
}
|
|
392
|
-
} else {
|
|
393
|
-
await realSet(target);
|
|
394
|
-
}
|
|
395
|
-
} catch {
|
|
396
|
-
/* maximized / null viewport hosts may reject - toast still updates */
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
if (toDesktop) {
|
|
400
|
-
await fitWindowToDeviceViewport(page, target, { maximize: true });
|
|
401
|
-
} else {
|
|
402
|
-
await fitWindowToDeviceViewport(page, target, { maximize: false });
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
// Fire toast near the end of the lerp so it reads as one seamless beat.
|
|
407
|
-
await page
|
|
408
|
-
.evaluate(
|
|
409
|
-
(payload) => {
|
|
410
|
-
if (window.__wgSyncDevice) window.__wgSyncDevice(payload);
|
|
411
|
-
},
|
|
412
|
-
{
|
|
413
|
-
sync: mode,
|
|
414
|
-
device: d,
|
|
415
|
-
remain: mode === "keep" || mode === "set",
|
|
416
|
-
announce,
|
|
417
|
-
},
|
|
418
|
-
)
|
|
419
|
-
.catch(() => {});
|
|
420
|
-
}
|
package/dist/runner/discovery.js
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
// Moved verbatim from the former CHAIN_RUNNER_SCRIPT template string in cli.ts (see src/ARCHITECTURE.md).
|
|
2
|
-
// Runs inside the target project's own waygraph copy - keep it dependency-light and self-contained.
|
|
3
|
-
import { readdirSync } from "node:fs";
|
|
4
|
-
import { join } from "node:path";
|
|
5
|
-
|
|
6
|
-
function walkDir(dir, pattern) {
|
|
7
|
-
const results = [];
|
|
8
|
-
let entries;
|
|
9
|
-
try {
|
|
10
|
-
entries = readdirSync(dir, { withFileTypes: true });
|
|
11
|
-
} catch {
|
|
12
|
-
return results;
|
|
13
|
-
}
|
|
14
|
-
for (const entry of entries) {
|
|
15
|
-
const full = join(dir, entry.name);
|
|
16
|
-
if (entry.isDirectory()) {
|
|
17
|
-
if (entry.name === "node_modules" || entry.name === "dist" || entry.name === ".git") continue;
|
|
18
|
-
results.push(...walkDir(full, pattern));
|
|
19
|
-
} else if (pattern.test(entry.name)) {
|
|
20
|
-
results.push(full);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return results;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
function isBlockLike(val) {
|
|
28
|
-
if (val === null || typeof val !== "object") return false;
|
|
29
|
-
if (typeof val.name !== "string") return false;
|
|
30
|
-
if (val.instruction === null || typeof val.instruction !== "object") return false;
|
|
31
|
-
return typeof val.instruction.act === "function";
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
export async function findBlock(projectDir, ref) {
|
|
36
|
-
const files = walkDir(projectDir, /\.block\.ts$/);
|
|
37
|
-
const byRuntimeName = [];
|
|
38
|
-
for (const file of files) {
|
|
39
|
-
let mod;
|
|
40
|
-
try {
|
|
41
|
-
mod = await import("file://" + file);
|
|
42
|
-
} catch {
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
for (const [exportName, exported] of Object.entries(mod)) {
|
|
46
|
-
if (!isBlockLike(exported)) continue;
|
|
47
|
-
if (exportName === ref) return { block: exported, exportName, file };
|
|
48
|
-
if (exported.name === ref) byRuntimeName.push({ block: exported, exportName, file });
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
if (byRuntimeName.length === 1) return byRuntimeName[0];
|
|
52
|
-
if (byRuntimeName.length > 1) {
|
|
53
|
-
throw new Error(
|
|
54
|
-
"waygraph chain: \"" + ref + "\" matches " + byRuntimeName.length + " Blocks by name - " +
|
|
55
|
-
byRuntimeName.map((b) => b.exportName + " (" + b.file + ")").join(", ") +
|
|
56
|
-
". Use the export name to disambiguate.",
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
throw new Error("waygraph chain: no Block named \"" + ref + "\" found under " + projectDir);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Finds an already-defined Flow by its export name (e.g. loginFlow) among
|
|
65
|
-
* the project's *.flow.ts files - "I already have this wired up, just point
|
|
66
|
-
* the stepper at it, no chain spec to hand-write." Flows have no runtime
|
|
67
|
-
* .name of their own (unlike Blocks), so this only matches by export
|
|
68
|
-
* identifier. Returns null (not a throw) when nothing matches - the caller
|
|
69
|
-
* falls back to ordinary block-chain spec parsing.
|
|
70
|
-
*/
|
|
71
|
-
export async function findFlow(projectDir, flowName) {
|
|
72
|
-
const files = walkDir(projectDir, /\.flow\.ts$/);
|
|
73
|
-
for (const file of files) {
|
|
74
|
-
let mod;
|
|
75
|
-
try {
|
|
76
|
-
mod = await import("file://" + file);
|
|
77
|
-
} catch {
|
|
78
|
-
continue;
|
|
79
|
-
}
|
|
80
|
-
const candidate = mod[flowName];
|
|
81
|
-
if (candidate && typeof candidate.run === "function") {
|
|
82
|
-
return candidate;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
export function parseChainSpec(spec) {
|
|
90
|
-
return spec
|
|
91
|
-
.split(/\bthen\b/)
|
|
92
|
-
.map((s) => s.trim())
|
|
93
|
-
.filter((s) => s.length > 0)
|
|
94
|
-
.map((s) => {
|
|
95
|
-
const m = /^([A-Za-z_$][\w-]*)\s*(?:\(([\s\S]*)\))?$/.exec(s);
|
|
96
|
-
if (!m) {
|
|
97
|
-
throw new Error(
|
|
98
|
-
"waygraph chain: could not parse segment \"" + s + "\" - expected \"blockName\" or \"blockName({...json...})\"",
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
const ref = m[1];
|
|
102
|
-
const json = m[2] ? m[2].trim() : undefined;
|
|
103
|
-
return json ? { ref, json } : { ref };
|
|
104
|
-
});
|
|
105
|
-
}
|
package/dist/runner/index.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/** In-page installer (page.evaluate target) - see banner.js's own header. Creates/updates #wg-banner
|
|
2
|
-
* (click-to-move position, localStorage-persisted, authored titlePos/bannerUi support). `tag`
|
|
3
|
-
* overrides the small caption above the title (default "waygraph demo"). */
|
|
4
|
-
export function installBanner(args: {
|
|
5
|
-
title?: string | undefined;
|
|
6
|
-
favicon?: string | undefined;
|
|
7
|
-
bannerPos?: string | undefined;
|
|
8
|
-
todoPos?: string | undefined;
|
|
9
|
-
envAutoplay?: boolean | undefined;
|
|
10
|
-
todoDockUi?: unknown;
|
|
11
|
-
bannerUi?:
|
|
12
|
-
| {
|
|
13
|
-
hidden?: boolean | undefined;
|
|
14
|
-
collision?: boolean | undefined;
|
|
15
|
-
pos?: string | undefined;
|
|
16
|
-
/** Title-change fade duration in ms (default 220); 0 = instant swap, no fade. */
|
|
17
|
-
captionFadeMs?: number | undefined;
|
|
18
|
-
}
|
|
19
|
-
| undefined;
|
|
20
|
-
tag?: string | undefined;
|
|
21
|
-
}): void;
|