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
package/dist/commands/check.js
DELETED
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
// Split out of the former 8,700-line cli.ts (see src/ARCHITECTURE.md). Behavior unchanged.
|
|
2
|
-
import { INLINE_SELECTOR_CALL, NAV_METHOD_CALLS, discoverBlocks, discoverFlows, importFlowFile, importModule, isBlockLike, isFlowLike, isNavBlockMarked, walkDir } from "../cli/discover.js";
|
|
3
|
-
import { basename, relative, resolve } from "node:path";
|
|
4
|
-
import { discoverGraph, findBlockPath, findOrphanBlocks } from "../analysis/graph.js";
|
|
5
|
-
import { parseRunFlags, resolveBaseUrl } from "../cli/flags.js";
|
|
6
|
-
import { runChain } from "../cli/run-chain.js";
|
|
7
|
-
import { collectPracticeWarnings, practiceKindLabel } from "../analysis/practices-check.js";
|
|
8
|
-
import { readFileSync } from "node:fs";
|
|
9
|
-
async function validateFlows(projectDir) {
|
|
10
|
-
const files = discoverFlows(projectDir);
|
|
11
|
-
const results = [];
|
|
12
|
-
for (const file of files) {
|
|
13
|
-
try {
|
|
14
|
-
const mod = await importFlowFile(file);
|
|
15
|
-
for (const [exportName, exported] of Object.entries(mod)) {
|
|
16
|
-
if (isFlowLike(exported)) {
|
|
17
|
-
results.push({ file, name: exportName, valid: true });
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
catch (err) {
|
|
22
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
23
|
-
results.push({ file, name: basename(file, ".ts"), valid: false, error: msg });
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return results;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Walks every `*.block.ts` file under `projectDir`, imports each to find its
|
|
30
|
-
* exported Blocks, and for any Block NOT built via `defineNavBlock`, scans
|
|
31
|
-
* that file's own source text for a navigation call. Warning only - never
|
|
32
|
-
* throws, never changes the caller's exit code on its own account (a Block
|
|
33
|
-
* file that fails to import for unrelated reasons is silently skipped here;
|
|
34
|
-
* `validate` is the command that reports import failures).
|
|
35
|
-
*/
|
|
36
|
-
function printOrphanReport(projectDir, orphans) {
|
|
37
|
-
if (orphans.length === 0) {
|
|
38
|
-
console.log(`waygraph check: no orphan Blocks (every *.block.ts export is wired into a flow)`);
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
for (const o of orphans) {
|
|
42
|
-
console.warn(`waygraph check: orphan Block ${o.file} (${o.exportName} / "${o.block}") is not referenced in any defineFlow([...]) - wire it into a .flow.ts before chain auto shorthand`);
|
|
43
|
-
}
|
|
44
|
-
console.log(`waygraph check: ${orphans.length} orphan Block${orphans.length === 1 ? "" : "s"}`);
|
|
45
|
-
}
|
|
46
|
-
async function requireNoOrphans(projectDir, forCommand) {
|
|
47
|
-
const orphans = await findOrphanBlocks(projectDir);
|
|
48
|
-
if (orphans.length === 0)
|
|
49
|
-
return true;
|
|
50
|
-
console.error(`waygraph ${forCommand}: ${orphans.length} orphan Block(s) - wire every Block into a .flow.ts before auto shorthand. Run: waygraph check ${projectDir === process.cwd() ? "." : JSON.stringify(projectDir)}`);
|
|
51
|
-
for (const o of orphans) {
|
|
52
|
-
console.error(` - ${o.file} (${o.exportName} / "${o.block}")`);
|
|
53
|
-
}
|
|
54
|
-
process.exitCode = 1;
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
export async function runChainAuto(projectDir, fromTag, toTag) {
|
|
58
|
-
if (!(await requireNoOrphans(projectDir, "chain auto")))
|
|
59
|
-
return;
|
|
60
|
-
const graph = await discoverGraph(projectDir);
|
|
61
|
-
const path = findBlockPath(graph, fromTag, toTag);
|
|
62
|
-
if (!path) {
|
|
63
|
-
console.error(`waygraph chain auto: no Block path from "${fromTag}" to "${toTag}" in the discovered graph`);
|
|
64
|
-
process.exitCode = 1;
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
const spec = path.join(" then ");
|
|
68
|
-
console.error(`waygraph chain auto: ${fromTag} -> ${toTag} via ${spec}`);
|
|
69
|
-
if (!process.env.WAYGRAPH_BASE_URL) {
|
|
70
|
-
const resolved = await resolveBaseUrl(projectDir);
|
|
71
|
-
if (resolved)
|
|
72
|
-
process.env.WAYGRAPH_BASE_URL = resolved;
|
|
73
|
-
}
|
|
74
|
-
await runChain(projectDir, spec);
|
|
75
|
-
}
|
|
76
|
-
function printPracticeReport(projectDir, practiceWarnings) {
|
|
77
|
-
if (practiceWarnings.length === 0) {
|
|
78
|
-
console.log(`waygraph check: no bad-practice patterns under ${projectDir}`);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
for (const w of practiceWarnings) {
|
|
82
|
-
console.warn(`waygraph check: ${w.file} (${practiceKindLabel(w.kind)}) — ${w.detail}`);
|
|
83
|
-
}
|
|
84
|
-
console.log(`waygraph check: ${practiceWarnings.length} bad-practice warning${practiceWarnings.length === 1 ? "" : "s"}`);
|
|
85
|
-
}
|
|
86
|
-
async function checkCommand(projectDir, opts) {
|
|
87
|
-
const files = discoverBlocks(projectDir);
|
|
88
|
-
const navWarnings = [];
|
|
89
|
-
const selWarnings = [];
|
|
90
|
-
for (const file of files) {
|
|
91
|
-
let mod;
|
|
92
|
-
try {
|
|
93
|
-
mod = await importModule(file);
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
let src;
|
|
99
|
-
for (const [exportName, exported] of Object.entries(mod)) {
|
|
100
|
-
if (!isBlockLike(exported))
|
|
101
|
-
continue;
|
|
102
|
-
src ??= readFileSync(file, "utf-8");
|
|
103
|
-
// Nav-escape: NavBlocks are exempt (their generated act() is the one
|
|
104
|
-
// legitimate goto/click call site).
|
|
105
|
-
if (!isNavBlockMarked(exported) &&
|
|
106
|
-
NAV_METHOD_CALLS.some((needle) => src.includes(needle))) {
|
|
107
|
-
navWarnings.push({ file, blockName: exported.name, exportName });
|
|
108
|
-
}
|
|
109
|
-
// Inline selector: applies to every Block kind, including NavBlocks -
|
|
110
|
-
// a Nav's own `verify` array is just as likely to inline a selector.
|
|
111
|
-
if (INLINE_SELECTOR_CALL.test(src)) {
|
|
112
|
-
selWarnings.push({ file, blockName: exported.name, exportName });
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const practiceWarnings = collectPracticeWarnings(projectDir, walkDir, {
|
|
117
|
-
disabled: opts?.noPractices === true,
|
|
118
|
-
});
|
|
119
|
-
return { navWarnings, selWarnings, practiceWarnings };
|
|
120
|
-
}
|
|
121
|
-
async function runTypecheckCommand(projectDir, noPractices) {
|
|
122
|
-
const { spawnSync } = await import("node:child_process");
|
|
123
|
-
const tsc = spawnSync("npx", ["tsc", "--noEmit"], {
|
|
124
|
-
cwd: projectDir,
|
|
125
|
-
stdio: "inherit",
|
|
126
|
-
shell: false,
|
|
127
|
-
});
|
|
128
|
-
if (tsc.status !== 0) {
|
|
129
|
-
process.exit(tsc.status === null ? 1 : tsc.status);
|
|
130
|
-
}
|
|
131
|
-
if (noPractices)
|
|
132
|
-
return;
|
|
133
|
-
const practiceWarnings = collectPracticeWarnings(projectDir, walkDir);
|
|
134
|
-
printPracticeReport(projectDir, practiceWarnings);
|
|
135
|
-
}
|
|
136
|
-
export async function validateCase(args) {
|
|
137
|
-
const proj = resolve(args[1] ?? process.cwd());
|
|
138
|
-
const results = await validateFlows(proj);
|
|
139
|
-
let failed = 0;
|
|
140
|
-
for (const r of results) {
|
|
141
|
-
const rel = relative(proj, r.file);
|
|
142
|
-
if (r.valid) {
|
|
143
|
-
console.log(`OK ${rel} ${r.name}`);
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
failed++;
|
|
147
|
-
console.log(`FAIL ${rel} ${r.name} -- ${r.error}`);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
if (failed > 0)
|
|
151
|
-
process.exitCode = 1;
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
export async function typecheckCase(args) {
|
|
155
|
-
const flags = parseRunFlags(args.slice(1));
|
|
156
|
-
const proj = resolve(flags.positionals[0] ?? process.cwd());
|
|
157
|
-
await runTypecheckCommand(proj, flags.noPractices === true);
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
export async function checkCase(args) {
|
|
161
|
-
const flags = parseRunFlags(args.slice(1));
|
|
162
|
-
const proj = resolve(flags.positionals[0] ?? process.cwd());
|
|
163
|
-
const { navWarnings, selWarnings, practiceWarnings } = await checkCommand(proj, flags.noPractices ? { noPractices: true } : undefined);
|
|
164
|
-
if (navWarnings.length === 0) {
|
|
165
|
-
console.log(`waygraph check: no navigation found outside NavBlocks under ${proj}`);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
for (const w of navWarnings) {
|
|
169
|
-
const rel = relative(proj, w.file);
|
|
170
|
-
console.warn(`waygraph check: ${rel} (${w.blockName}) calls page.goto/reload/goBack/goForward outside a NavBlock - consider defineNavBlock instead`);
|
|
171
|
-
}
|
|
172
|
-
console.log(`waygraph check: ${navWarnings.length} nav warning${navWarnings.length === 1 ? "" : "s"}`);
|
|
173
|
-
}
|
|
174
|
-
if (selWarnings.length === 0) {
|
|
175
|
-
console.log(`waygraph check: no inline selectors found in verify arrays under ${proj}`);
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
for (const w of selWarnings) {
|
|
179
|
-
const rel = relative(proj, w.file);
|
|
180
|
-
console.warn(`waygraph check: ${rel} (${w.blockName}) has an inline selector literal in verify - move it into a *Sel object`);
|
|
181
|
-
}
|
|
182
|
-
console.log(`waygraph check: ${selWarnings.length} inline-selector warning${selWarnings.length === 1 ? "" : "s"}`);
|
|
183
|
-
}
|
|
184
|
-
if (!flags.noPractices) {
|
|
185
|
-
printPracticeReport(proj, practiceWarnings);
|
|
186
|
-
}
|
|
187
|
-
const orphans = await findOrphanBlocks(proj);
|
|
188
|
-
printOrphanReport(proj, orphans);
|
|
189
|
-
// Warnings only - never fail exit code. Orphans are reported for
|
|
190
|
-
// human/agent cleanup; chain auto refuses while any remain.
|
|
191
|
-
return;
|
|
192
|
-
}
|
package/dist/commands/map.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
// Split out of the former 8,700-line cli.ts (see src/ARCHITECTURE.md). Behavior unchanged.
|
|
2
|
-
import { relative, resolve } from "node:path";
|
|
3
|
-
import { checkMap } from "../analysis/map-check.js";
|
|
4
|
-
export async function mapCase(args) {
|
|
5
|
-
const proj = resolve(args[1] ?? process.cwd());
|
|
6
|
-
const result = await checkMap(proj);
|
|
7
|
-
if (!result.hasMapDir) {
|
|
8
|
-
console.log(`waygraph map: no src/map/ directory under ${proj} - nothing to check ` +
|
|
9
|
-
"(this project isn't on the Waygraph Map convention, or hasn't been migrated yet)");
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
console.log(`waygraph map: ${result.nodes.length} node(s) found under ${relative(proj, result.mapRoot)}`);
|
|
13
|
-
if (result.violations.length === 0) {
|
|
14
|
-
console.log("waygraph map: 0 violations - every static Nav/Page url verbatim-matches its folder path");
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
for (const v of result.violations) {
|
|
18
|
-
console.error(`waygraph map: ${v.file} (${v.block}) - ${v.reason}`);
|
|
19
|
-
}
|
|
20
|
-
console.error(`waygraph map: ${result.violations.length} violation${result.violations.length === 1 ? "" : "s"}`);
|
|
21
|
-
// Unlike `check`'s warnings-only stance, a Map violation is exactly
|
|
22
|
-
// the class of bug this command exists to catch (a fabricated
|
|
23
|
-
// folder grouping that never matched the real site, e.g. the real
|
|
24
|
-
// (auth)/signin/ mistake this command's own header comment cites) -
|
|
25
|
-
// fail loud, not just warn.
|
|
26
|
-
process.exitCode = 1;
|
|
27
|
-
}
|
|
28
|
-
return;
|
|
29
|
-
}
|
package/dist/commands/run.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
// Split out of the former 8,700-line cli.ts (see src/ARCHITECTURE.md). Behavior unchanged.
|
|
2
|
-
import { applyDemoDefaults, applyRunFlags, parseRunFlags, resolveBaseUrl, resolveProjectDir, resolveSpec } from "../cli/flags.js";
|
|
3
|
-
import { runChain } from "../cli/run-chain.js";
|
|
4
|
-
import { resolve } from "node:path";
|
|
5
|
-
import { existsSync } from "node:fs";
|
|
6
|
-
import { runChainAuto } from "./check.js";
|
|
7
|
-
export async function runCase(args) {
|
|
8
|
-
const flags = parseRunFlags(args.slice(1));
|
|
9
|
-
applyRunFlags(flags);
|
|
10
|
-
const spec = resolveSpec(flags);
|
|
11
|
-
if (!spec) {
|
|
12
|
-
console.error("waygraph run: missing flow/spec — e.g.\n" +
|
|
13
|
-
" waygraph run src/flows/shop.flow.ts\n" +
|
|
14
|
-
" waygraph run --blocks shopFlow\n" +
|
|
15
|
-
" waygraph list # file → export map\n" +
|
|
16
|
-
" Flags: --blocks --data --mem-stub --non-headless --video [dir] --step/--no-step");
|
|
17
|
-
process.exit(1);
|
|
18
|
-
}
|
|
19
|
-
const proj = flags.blocks
|
|
20
|
-
? resolveProjectDir(flags, 0)
|
|
21
|
-
: resolve(flags.positionals[1] ?? process.cwd());
|
|
22
|
-
if (!existsSync(proj)) {
|
|
23
|
-
console.error(`waygraph: no such directory: ${proj}`);
|
|
24
|
-
process.exit(1);
|
|
25
|
-
}
|
|
26
|
-
if (!process.env.WAYGRAPH_BASE_URL) {
|
|
27
|
-
const resolved = await resolveBaseUrl(proj);
|
|
28
|
-
if (resolved)
|
|
29
|
-
process.env.WAYGRAPH_BASE_URL = resolved;
|
|
30
|
-
}
|
|
31
|
-
await runChain(proj, spec);
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
export async function chainCase(args) {
|
|
35
|
-
// Compat alias: chain auto A B -> auto --blocks A B; else -> run --blocks.
|
|
36
|
-
const flags = parseRunFlags(args.slice(1));
|
|
37
|
-
applyRunFlags(flags);
|
|
38
|
-
const first = flags.positionals[0];
|
|
39
|
-
if (first === "auto") {
|
|
40
|
-
const fromTag = flags.positionals[1];
|
|
41
|
-
const toTag = flags.positionals[2];
|
|
42
|
-
if (!fromTag || !toTag) {
|
|
43
|
-
console.error("waygraph chain auto: missing <fromCheckpoint> <toCheckpoint> [project]");
|
|
44
|
-
console.error(" prefer: waygraph auto --blocks LoggedIn OrderComplete");
|
|
45
|
-
process.exit(1);
|
|
46
|
-
}
|
|
47
|
-
const proj = resolve(flags.positionals[3] ?? process.cwd());
|
|
48
|
-
if (!existsSync(proj)) {
|
|
49
|
-
console.error(`waygraph: no such directory: ${proj}`);
|
|
50
|
-
process.exit(1);
|
|
51
|
-
}
|
|
52
|
-
await runChainAuto(proj, fromTag, toTag);
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
const spec = flags.blocks ?? first;
|
|
56
|
-
if (!spec) {
|
|
57
|
-
console.error('waygraph chain: missing <spec> — prefer: waygraph run --blocks "a then b"\n' +
|
|
58
|
-
" or: waygraph auto --blocks <fromCheckpoint> <toCheckpoint>");
|
|
59
|
-
process.exit(1);
|
|
60
|
-
}
|
|
61
|
-
const proj = resolve(flags.blocks ? (flags.positionals[0] ?? process.cwd()) : (flags.positionals[1] ?? process.cwd()));
|
|
62
|
-
if (!process.env.WAYGRAPH_BASE_URL) {
|
|
63
|
-
const resolved = await resolveBaseUrl(proj);
|
|
64
|
-
if (resolved)
|
|
65
|
-
process.env.WAYGRAPH_BASE_URL = resolved;
|
|
66
|
-
}
|
|
67
|
-
// If caller asked for step overlay, behave like demo; else like run.
|
|
68
|
-
if (flags.step === true || process.env.WAYGRAPH_STEP === "1") {
|
|
69
|
-
await applyDemoDefaults(proj);
|
|
70
|
-
}
|
|
71
|
-
await runChain(proj, spec);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
export async function demoCase(args) {
|
|
75
|
-
const flags = parseRunFlags(args.slice(1));
|
|
76
|
-
applyRunFlags(flags, { allowAutoPlayVideo: true, allowDemoUi: true });
|
|
77
|
-
const spec = resolveSpec(flags);
|
|
78
|
-
if (!spec) {
|
|
79
|
-
console.error("waygraph demo: missing flow/spec — e.g.\n" +
|
|
80
|
-
" waygraph demo src/flows/shop.flow.ts\n" +
|
|
81
|
-
" waygraph demo --blocks shopFlow\n" +
|
|
82
|
-
" Flags: --blocks --data --mem-stub --auto-next --fast --full --mini --ff-expand --ff-disabled --auto-play-video --title --base-url --video");
|
|
83
|
-
process.exit(1);
|
|
84
|
-
}
|
|
85
|
-
const proj = flags.blocks
|
|
86
|
-
? resolveProjectDir(flags, 0)
|
|
87
|
-
: resolve(flags.positionals[1] ?? process.cwd());
|
|
88
|
-
if (!existsSync(proj)) {
|
|
89
|
-
console.error(`waygraph: no such directory: ${proj}`);
|
|
90
|
-
process.exit(1);
|
|
91
|
-
}
|
|
92
|
-
if (flags.step === undefined && process.env.WAYGRAPH_STEP === undefined) {
|
|
93
|
-
process.env.WAYGRAPH_STEP = "1";
|
|
94
|
-
}
|
|
95
|
-
await applyDemoDefaults(proj);
|
|
96
|
-
console.error(`waygraph demo: STEP=${process.env.WAYGRAPH_STEP === "1" ? "on" : "off"}` +
|
|
97
|
-
` AUTO_NEXT=${process.env.WAYGRAPH_AUTOPLAY === "1" ? "on" : "off"}` +
|
|
98
|
-
` HEADED=${process.env.WAYGRAPH_HEADED === "0" ? "off" : "on"}` +
|
|
99
|
-
` BASE_URL=${process.env.WAYGRAPH_BASE_URL ?? "(unset)"}` +
|
|
100
|
-
(process.env.WAYGRAPH_VIDEO ? ` VIDEO=${process.env.WAYGRAPH_VIDEO}` : "") +
|
|
101
|
-
(process.env.WAYGRAPH_TITLE ? ` TITLE=${JSON.stringify(process.env.WAYGRAPH_TITLE)}` : ""));
|
|
102
|
-
await runChain(proj, spec);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
// Split out of the former 8,700-line cli.ts (see src/ARCHITECTURE.md). Behavior unchanged.
|
|
2
|
-
import { resolve } from "node:path";
|
|
3
|
-
import { existsSync, statSync } from "node:fs";
|
|
4
|
-
import { parseBlocksSelect } from "../blocks-select.js";
|
|
5
|
-
import { parseMinEdgeCoverage } from "../traverse/coverage.js";
|
|
6
|
-
import { runTraverse } from "../traverse/run.js";
|
|
7
|
-
export async function traverseCase(args) {
|
|
8
|
-
if (args.includes("--step") || args.includes("--auto-next") || args.includes("--autoplay")) {
|
|
9
|
-
console.error("waygraph traverse: --step / --auto-next not supported (not a demo)");
|
|
10
|
-
process.exit(1);
|
|
11
|
-
}
|
|
12
|
-
const rest = args.slice(1);
|
|
13
|
-
let from;
|
|
14
|
-
let data;
|
|
15
|
-
let maxSteps;
|
|
16
|
-
let maxVisits;
|
|
17
|
-
let maxEdge;
|
|
18
|
-
let headed = false;
|
|
19
|
-
let baseUrl;
|
|
20
|
-
let blocksFilter;
|
|
21
|
-
let parallel;
|
|
22
|
-
let session;
|
|
23
|
-
let minEdgeCoverageRaw;
|
|
24
|
-
let coverageOut;
|
|
25
|
-
let noCoverageReport = false;
|
|
26
|
-
let projectDir = process.cwd();
|
|
27
|
-
for (let i = 0; i < rest.length; i++) {
|
|
28
|
-
const a = rest[i];
|
|
29
|
-
if (a === "--from" || a.startsWith("--from=")) {
|
|
30
|
-
from = a.startsWith("--from=") ? a.slice(7) : rest[++i];
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
if (a === "--data" || a.startsWith("--data=")) {
|
|
34
|
-
data = a.startsWith("--data=") ? a.slice(7) : rest[++i];
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
if (a === "--blocks" || a.startsWith("--blocks=")) {
|
|
38
|
-
if (a.startsWith("--blocks=")) {
|
|
39
|
-
blocksFilter = a.slice("--blocks=".length);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
const v = rest[++i];
|
|
43
|
-
if (!v || v.startsWith("-")) {
|
|
44
|
-
console.error("waygraph traverse: --blocks needs a glob, /regex/, or path substring");
|
|
45
|
-
process.exit(1);
|
|
46
|
-
}
|
|
47
|
-
blocksFilter = v;
|
|
48
|
-
}
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
if (a === "--parallel" || a.startsWith("--parallel=")) {
|
|
52
|
-
const v = a.startsWith("--parallel=") ? a.slice("--parallel=".length) : rest[++i];
|
|
53
|
-
parallel = Number(v);
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
if (a === "--session" || a.startsWith("--session=")) {
|
|
57
|
-
const v = a.startsWith("--session=") ? a.slice("--session=".length) : rest[++i];
|
|
58
|
-
if (v !== "clone" && v !== "inherit") {
|
|
59
|
-
console.error('waygraph traverse: --session must be "clone" or "inherit"');
|
|
60
|
-
process.exit(1);
|
|
61
|
-
}
|
|
62
|
-
session = v;
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
if (a === "--min-edge-coverage" || a.startsWith("--min-edge-coverage=")) {
|
|
66
|
-
minEdgeCoverageRaw = a.startsWith("--min-edge-coverage=")
|
|
67
|
-
? a.slice("--min-edge-coverage=".length)
|
|
68
|
-
: rest[++i];
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (a === "--coverage-out" || a.startsWith("--coverage-out=")) {
|
|
72
|
-
coverageOut = a.startsWith("--coverage-out=")
|
|
73
|
-
? a.slice("--coverage-out=".length)
|
|
74
|
-
: rest[++i];
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
if (a === "--no-coverage-report") {
|
|
78
|
-
noCoverageReport = true;
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
if (a === "--max-steps" || a.startsWith("--max-steps=")) {
|
|
82
|
-
const v = a.startsWith("--max-steps=") ? a.slice(12) : rest[++i];
|
|
83
|
-
maxSteps = Number(v);
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
if (a === "--max-visits" || a.startsWith("--max-visits=")) {
|
|
87
|
-
const v = a.startsWith("--max-visits=") ? a.slice(13) : rest[++i];
|
|
88
|
-
maxVisits = Number(v);
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
if (a === "--max-visits-per-edge" || a.startsWith("--max-visits-per-edge=")) {
|
|
92
|
-
const v = a.startsWith("--max-visits-per-edge=")
|
|
93
|
-
? a.slice("--max-visits-per-edge=".length)
|
|
94
|
-
: rest[++i];
|
|
95
|
-
maxEdge = Number(v);
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
if (a === "--non-headless" || a === "--headed") {
|
|
99
|
-
headed = true;
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
if (a === "--base-url" || a.startsWith("--base-url=")) {
|
|
103
|
-
baseUrl = a.startsWith("--base-url=") ? a.slice(11) : rest[++i];
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
if (a === "--help" || a === "-h") {
|
|
107
|
-
console.log(`waygraph traverse [project] [flags]
|
|
108
|
-
|
|
109
|
-
Graph crawl (RFC Phase B-E). Walks unused legal edges until a leaf,
|
|
110
|
-
budget kill, or first broken edge. --parallel N uses session clone + edge leases.
|
|
111
|
-
|
|
112
|
-
--blocks <glob|/regex/|substr> Phase C: filter *.block.ts discovery
|
|
113
|
-
--parallel N Phase D: N clone workers (default 1, max 4)
|
|
114
|
-
--session clone|inherit Phase D: default clone; inherit refused if parallel>1
|
|
115
|
-
--min-edge-coverage X Phase E: suite gate 0.8 | 80% | 80 (exit 2 if below)
|
|
116
|
-
--coverage-out PATH Phase E: write JSON (default .waygraph-traverse/coverage.json)
|
|
117
|
-
--no-coverage-report Phase E: print Coverage line only (no JSON file)
|
|
118
|
-
--from <Checkpoint> start checkpoint (optional)
|
|
119
|
-
--data '{...}' Mem seed JSON
|
|
120
|
-
--max-steps N default 50 (per worker)
|
|
121
|
-
--max-visits N per-node visit cap (default 2)
|
|
122
|
-
--max-visits-per-edge N default 1
|
|
123
|
-
--non-headless show browser
|
|
124
|
-
--base-url URL
|
|
125
|
-
|
|
126
|
-
Examples:
|
|
127
|
-
waygraph traverse --blocks '**/mailpit/**/*.block.ts'
|
|
128
|
-
waygraph traverse --parallel 2 --session clone --max-steps 20
|
|
129
|
-
waygraph traverse --min-edge-coverage 80% --coverage-out ./cov.json
|
|
130
|
-
|
|
131
|
-
PASS: [Reached Leaf Node[traverse-1] at=... steps=N]
|
|
132
|
-
FAIL: [Broke at edge[traverse-1] block=... from=... to=...]
|
|
133
|
-
COVER: [Coverage edges=H/T ratio=R% min=M% PASS|FAIL]
|
|
134
|
-
`);
|
|
135
|
-
process.exit(0);
|
|
136
|
-
}
|
|
137
|
-
if (!a.startsWith("-")) {
|
|
138
|
-
projectDir = resolve(a);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
if (!existsSync(projectDir) || !statSync(projectDir).isDirectory()) {
|
|
142
|
-
console.error(`waygraph traverse: no such directory: ${projectDir}`);
|
|
143
|
-
process.exit(1);
|
|
144
|
-
}
|
|
145
|
-
const blocksSelect = blocksFilter
|
|
146
|
-
? parseBlocksSelect(blocksFilter)
|
|
147
|
-
: undefined;
|
|
148
|
-
let minEdgeCoverage;
|
|
149
|
-
if (minEdgeCoverageRaw !== undefined) {
|
|
150
|
-
const parsed = parseMinEdgeCoverage(minEdgeCoverageRaw);
|
|
151
|
-
if (parsed === null) {
|
|
152
|
-
console.error(`waygraph traverse: --min-edge-coverage expects 0.8, 80%, or 80 (got ${JSON.stringify(minEdgeCoverageRaw)})`);
|
|
153
|
-
process.exit(1);
|
|
154
|
-
}
|
|
155
|
-
minEdgeCoverage = parsed;
|
|
156
|
-
}
|
|
157
|
-
const code = await runTraverse(projectDir, {
|
|
158
|
-
...(from ? { from } : {}),
|
|
159
|
-
...(data ? { data } : {}),
|
|
160
|
-
...(maxSteps !== undefined && Number.isFinite(maxSteps) ? { maxSteps } : {}),
|
|
161
|
-
...(maxVisits !== undefined && Number.isFinite(maxVisits)
|
|
162
|
-
? { maxVisitsPerNode: maxVisits }
|
|
163
|
-
: {}),
|
|
164
|
-
...(maxEdge !== undefined && Number.isFinite(maxEdge)
|
|
165
|
-
? { maxVisitsPerEdge: maxEdge }
|
|
166
|
-
: {}),
|
|
167
|
-
headed,
|
|
168
|
-
...(baseUrl ? { baseURL: baseUrl } : {}),
|
|
169
|
-
...(blocksSelect ? { blocksSelect } : {}),
|
|
170
|
-
...(parallel !== undefined && Number.isFinite(parallel) ? { parallel } : {}),
|
|
171
|
-
...(session ? { session } : {}),
|
|
172
|
-
...(minEdgeCoverage !== undefined ? { minEdgeCoverage } : {}),
|
|
173
|
-
...(coverageOut ? { coverageOut: resolve(coverageOut) } : {}),
|
|
174
|
-
...(noCoverageReport ? { noCoverageReport: true } : {}),
|
|
175
|
-
});
|
|
176
|
-
process.exit(code);
|
|
177
|
-
}
|
package/dist/core/block.d.ts
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import type { ActionPage, Block, Checkpoint, DefinedBlock, Instruction } from "../types.js";
|
|
2
|
-
import { MemPage } from "../mem-page.js";
|
|
3
|
-
import type { MemKey } from "../mem-page.js";
|
|
4
|
-
import type { Trait } from "../trait.js";
|
|
5
|
-
export declare function findBlockIndex(middle: readonly Block<any, any>[], block: Block<any, any> | string | number): number;
|
|
6
|
-
/**
|
|
7
|
-
* Attaches routing to `block` without touching its act/observe/resolve/verify -
|
|
8
|
-
* `routes` must cover every tag of `block`'s output (a missing route is a compile
|
|
9
|
-
* error), and the returned Block runs exactly as `block` always did, just followed
|
|
10
|
-
* by whichever next Block the resolved tag routes to. `null` for a tag means that
|
|
11
|
-
* tag is terminal - the run stops there, same as a Block with no routing at all.
|
|
12
|
-
* A route pointing back at `block` itself is a self-loop; see `runGraph`'s
|
|
13
|
-
* `maxSteps` for its safety net. The return type is deliberately `Block<In, any>` -
|
|
14
|
-
* a route can lead anywhere, including back through itself, so there is no fixed
|
|
15
|
-
* Out type to express; state the expected outcomes to `runGraph` via `terminals`
|
|
16
|
-
* instead.
|
|
17
|
-
*/
|
|
18
|
-
export declare function branch<In extends Checkpoint<string>, Out extends Checkpoint<string>>(block: Block<In, Out>, routes: {
|
|
19
|
-
[K in Out["__state"]]: Block<Extract<Out, Checkpoint<K>>, any> | null;
|
|
20
|
-
}): DefinedBlock<In, any>;
|
|
21
|
-
/** Copy non-enumerable waygraph markers so decorate/withVerify keep map() kind checks. */
|
|
22
|
-
export declare function copyWaygraphRuntime(from: object, to: object): void;
|
|
23
|
-
/**
|
|
24
|
-
* Builds a Block with `withVerify`/`modVerify`/`modVerifyAll` attached as
|
|
25
|
-
* methods - `LoginBlock.withVerify([...])`, discoverable by typing
|
|
26
|
-
* `LoginBlock.` in an editor, not just callable as `withVerify(LoginBlock, ...)`
|
|
27
|
-
* if you already know it exists. A raw object literal is still a perfectly
|
|
28
|
-
* valid Block (every test fixture in this codebase is one) - it just won't have
|
|
29
|
-
* these attached. The methods are thin: they delegate to the identically-named
|
|
30
|
-
* free functions, which remain the one place this logic actually lives.
|
|
31
|
-
*/
|
|
32
|
-
export declare function defineBlock<In extends Checkpoint<string>, Out extends Checkpoint<string>>(base: {
|
|
33
|
-
name: string;
|
|
34
|
-
description?: Block<In, Out>["description"];
|
|
35
|
-
instruction: Omit<Instruction<In, Out, any>, "act"> & {
|
|
36
|
-
act(page: ActionPage, input: In, mem: MemPage): Promise<void>;
|
|
37
|
-
};
|
|
38
|
-
next?: Block<In, Out>["next"];
|
|
39
|
-
requires?: Block<In, Out>["requires"];
|
|
40
|
-
routes?: Block<In, Out>["routes"];
|
|
41
|
-
instanceOptions?: Block<In, Out>["instanceOptions"];
|
|
42
|
-
}): DefinedBlock<In, Out>;
|
|
43
|
-
/**
|
|
44
|
-
* Returns a new Block that runs exactly like `block` - same act/observe/resolve,
|
|
45
|
-
* same routing - but with `verify` replaced. For giving one flow stricter (or
|
|
46
|
-
* looser, or just different) confirmation on a Block it didn't author, without
|
|
47
|
-
* that Block needing to have been written as a parameterized factory in
|
|
48
|
-
* anticipation. Same move as `branch()`: decorate an existing Block, don't ask
|
|
49
|
-
* every Block to pre-build its own override mechanism.
|
|
50
|
-
*
|
|
51
|
-
* Wrap the one Block you want to change, in place, wherever it already sits in
|
|
52
|
-
* a `defineFlow([...])` array - every other Block stays untouched:
|
|
53
|
-
* `defineFlow([start, LoginBlock, withVerify(AddToCartBlock, [...]), end])`.
|
|
54
|
-
* There is no separate positional array to keep in sync and no `null`
|
|
55
|
-
* placeholder for "skip this one" - `defineFlow` has no per-slot verify
|
|
56
|
-
* argument at all, only whatever `verify` each Block's own `instruction` (or
|
|
57
|
-
* a `withVerify(...)` wrapping it) carries with it.
|
|
58
|
-
*/
|
|
59
|
-
export declare function withVerify<B extends Block<any, any>>(block: B, verify: Trait[] | ((out: any) => Trait[])): B;
|
|
60
|
-
type StubPhaseFn<Out extends Checkpoint<string>> = import("../highlights.js").HighlightStubPhaseOrFn<Out>;
|
|
61
|
-
/**
|
|
62
|
-
* Attach / chain a stubBefore lifecycle on a Block. Prefer
|
|
63
|
-
* `(ctx) => { ctx.ring(...); const x = ctx.mem?.get(Key); }`.
|
|
64
|
-
* @example FillUsernameBlock.stubBefore((ctx) => { ctx.ring("username", { ... }) })
|
|
65
|
-
* @deprecated Use the chained method: `Block.stubBefore((ctx) => …)`.
|
|
66
|
-
*/
|
|
67
|
-
export declare function withStubBefore<B extends Block<any, any>>(block: B, stub: StubPhaseFn<any>): B;
|
|
68
|
-
/** @see {@link withStubBefore} * @deprecated Use the chained method: `Block.stubAfter((ctx) => …)`.
|
|
69
|
-
*/
|
|
70
|
-
export declare function withStubAfter<B extends Block<any, any>>(block: B, stub: StubPhaseFn<any>): B;
|
|
71
|
-
/** @see {@link withStubBefore} * @deprecated Use the chained method: `Block.stubOnError((ctx) => …)`.
|
|
72
|
-
*/
|
|
73
|
-
export declare function withStubOnError<B extends Block<any, any>>(block: B, stub: StubPhaseFn<any>): B;
|
|
74
|
-
/**
|
|
75
|
-
* Answers the browser's own dialog (`confirm`, `alert`, `prompt`, `beforeunload`) that this Block's action
|
|
76
|
-
* triggers. A dialog freezes the page until it is answered, so the answer has to be armed before the click -
|
|
77
|
-
* this does that without folding it into the Block's own `act`. The dialog's text can be kept in mem.
|
|
78
|
-
* @example withDialog(CancelBlock, { accept: true, into: LeaveWarning })
|
|
79
|
-
*/
|
|
80
|
-
export declare function withDialog<B extends Block<any, any>>(block: B, options?: {
|
|
81
|
-
accept?: boolean;
|
|
82
|
-
into?: MemKey<string>;
|
|
83
|
-
promptText?: string;
|
|
84
|
-
}): B;
|
|
85
|
-
/**
|
|
86
|
-
* Replaces one Trait inside `block`'s verify list, leaving every other check
|
|
87
|
-
* untouched - the v1/v2/legacy-variant case, where one check needs a different
|
|
88
|
-
* selector or URL pattern but the rest of the Block is identical. Addressed by
|
|
89
|
-
* the Trait's own `name` (recommended - inserting or reordering other checks
|
|
90
|
-
* can't silently retarget it) or, if you genuinely know the position and don't
|
|
91
|
-
* need that safety, a numeric index. Either way a bad address fails loud
|
|
92
|
-
* immediately instead of quietly doing nothing. `newCheck` can be a bare
|
|
93
|
-
* `check` function (keeps the existing name) or a full `Trait` (to rename too).
|
|
94
|
-
* Only works on a flat `verify` array - a function-form `verify` (from
|
|
95
|
-
* `verify: (out) => Trait[]`) has no fixed list to address into, so this
|
|
96
|
-
* throws rather than guess; use `withVerify` to replace it wholesale instead.
|
|
97
|
-
*/
|
|
98
|
-
export declare function modVerify<In extends Checkpoint<string>, Out extends Checkpoint<string>>(block: Block<In, Out>, nameOrIndex: string | number, newCheck: Trait["check"] | Trait): DefinedBlock<In, Out>;
|
|
99
|
-
/**
|
|
100
|
-
* `modVerify`, but for several named checks in one call - a v2 variant that
|
|
101
|
-
* differs in five ways from v1 shouldn't need five nested `modVerify(modVerify(
|
|
102
|
-
* modVerify(...)))` calls to track by eye. `patches` keys are plain strings (a
|
|
103
|
-
* Trait's `name`, not a `MemKey` instance), so an ordinary object literal is
|
|
104
|
-
* fine here - unlike `MemPage`, there's no identity-collision reason to need
|
|
105
|
-
* `[name, check]` pairs. Applies each patch in turn via `modVerify`, so the
|
|
106
|
-
* same fail-loud-on-unknown-name behavior holds for every entry.
|
|
107
|
-
*/
|
|
108
|
-
export declare function modVerifyAll<In extends Checkpoint<string>, Out extends Checkpoint<string>>(block: Block<In, Out>, patches: Record<string, Trait["check"] | Trait>): DefinedBlock<In, Out>;
|
|
109
|
-
export {};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { defineBlock } from "../block.js";
|
|
2
|
-
/**
|
|
3
|
-
* {@link defineBlock} constrained for effect-style instance menus: `requires` +
|
|
4
|
-
* `instanceOptions` are mandatory. Prefer this when the Block adds / removes /
|
|
5
|
-
* toggles a live instance rather than navigating. Runtime result is an ordinary
|
|
6
|
-
* Block - the helper is TypeScript salt only.
|
|
7
|
-
*/
|
|
8
|
-
export function defineEffectBlock(base) {
|
|
9
|
-
const built = defineBlock(base);
|
|
10
|
-
Object.defineProperty(built, "__waygraphMemKind", {
|
|
11
|
-
value: "effect",
|
|
12
|
-
enumerable: false,
|
|
13
|
-
configurable: false,
|
|
14
|
-
});
|
|
15
|
-
Object.defineProperty(built, "__waygraphSalt", {
|
|
16
|
-
value: "effect",
|
|
17
|
-
enumerable: false,
|
|
18
|
-
configurable: false,
|
|
19
|
-
});
|
|
20
|
-
return built;
|
|
21
|
-
}
|
|
22
|
-
/** @deprecated Prefer {@link defineEffectBlock} - identical helper. */
|
|
23
|
-
export const defineMemEffectBlock = defineEffectBlock;
|
package/dist/core/config.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
// Split out of the former 2,900-line engine.ts (see src/ARCHITECTURE.md). Behavior unchanged.
|
|
2
|
-
import { chromium, firefox, webkit } from "@playwright/test";
|
|
3
|
-
const LAUNCHERS = { chromium, firefox, webkit };
|
|
4
|
-
/**
|
|
5
|
-
* Resolves which `BrowserType` actually launches for a `mem`-only run (no
|
|
6
|
-
* caller-supplied context) - `config.browsers[browserName]` if given,
|
|
7
|
-
* otherwise the real `@playwright/test` export. Waygraph is deliberately
|
|
8
|
-
* "just an opinionated Playwright" - it doesn't own browser automation
|
|
9
|
-
* itself, so it shouldn't force every consumer onto the vanilla launcher.
|
|
10
|
-
* A stealth-patched or otherwise customized launcher (e.g. `playwright-extra`
|
|
11
|
-
* plus a stealth plugin) is a drop-in replacement for `chromium`/`firefox`/
|
|
12
|
-
* `webkit` - same `.launch()` shape - so accepting one here costs nothing for
|
|
13
|
-
* a consumer who never sets it.
|
|
14
|
-
*/
|
|
15
|
-
export function resolveLauncher(browserName, config) {
|
|
16
|
-
return config?.browsers?.[browserName] ?? LAUNCHERS[browserName];
|
|
17
|
-
}
|