waygraph 0.15.54 → 0.16.1
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/cli/commands/browser.d.ts +2 -0
- package/dist/cli/commands/browser.js +109 -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/cli/commands/pilot.d.ts +2 -0
- package/dist/cli/commands/pilot.js +102 -0
- package/dist/{commands → cli/commands}/run.d.ts +0 -1
- package/dist/cli/commands/run.js +64 -0
- package/dist/cli/commands/session-ops.d.ts +3 -0
- package/dist/cli/commands/session-ops.js +257 -0
- package/dist/cli/commands/session.js +132 -0
- 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 +4 -12
- package/dist/{highlights → demo/narration}/demo-pace.js +5 -11
- package/dist/{highlights → demo/narration}/device.d.ts +4 -4
- package/dist/{highlights → demo/narration}/device.js +1 -1
- package/dist/demo/narration/merge.d.ts +10 -0
- package/dist/demo/narration/merge.js +67 -0
- package/dist/demo/narration/narration.d.ts +39 -0
- 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 +8 -8
- 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 +19 -0
- package/dist/demo/overlay/cursor.js +142 -0
- package/dist/demo/overlay/device-stage.d.ts +26 -0
- package/dist/demo/overlay/device-stage.js +396 -0
- package/dist/demo/overlay/inpage/banner.d.ts +2 -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 +2 -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 +10 -0
- package/dist/demo/overlay/inpage/network.js +189 -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 +2 -0
- package/dist/demo/overlay/inpage/todos.js +293 -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 +31 -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 +61 -0
- package/dist/demo/overlay/rings.js +422 -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 +103 -0
- package/dist/demo/stepper/banner-log.d.ts +35 -0
- package/dist/demo/stepper/banner-log.js +65 -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 +48 -0
- package/dist/demo/stepper/demo-log.js +292 -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 +4 -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/panel-after.d.ts +17 -0
- package/dist/demo/stepper/panel-after.js +166 -0
- package/dist/demo/stepper/panel-before.d.ts +12 -0
- package/dist/demo/stepper/panel-before.js +241 -0
- package/dist/demo/stepper/slides.d.ts +23 -0
- package/dist/demo/stepper/slides.js +233 -0
- package/dist/demo/stepper/step-panels.d.ts +69 -0
- package/dist/demo/stepper/step-panels.js +172 -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 +47 -0
- package/dist/demo/stepper/teardown.js +178 -0
- package/dist/demo/stepper/todo-advance.d.ts +15 -0
- package/dist/demo/stepper/todo-advance.js +110 -0
- package/dist/demo/stepper/view.d.ts +58 -0
- package/dist/demo/stepper/view.js +31 -0
- package/dist/demo/types.d.ts +85 -0
- package/dist/demo/verbose-log.js +15 -0
- package/dist/engine/block/action-page.d.ts +53 -0
- package/dist/engine/block/action-page.js +1 -0
- package/dist/{types.d.ts → engine/block/block.d.ts} +102 -142
- package/dist/{core → engine/block}/block.js +12 -130
- package/dist/engine/block/branch.d.ts +17 -0
- package/dist/engine/block/branch.js +40 -0
- package/dist/{core → engine/block}/compose.d.ts +9 -7
- package/dist/{core → engine/block}/compose.js +1 -1
- package/dist/engine/block/dialog.d.ts +13 -0
- package/dist/engine/block/dialog.js +37 -0
- 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/engine/flow/map-branch.d.ts +9 -0
- package/dist/engine/flow/map-branch.js +57 -0
- package/dist/{core → engine/flow}/map-builder.d.ts +34 -54
- package/dist/engine/flow/map-builder.js +242 -0
- package/dist/engine/flow/map-steps.d.ts +30 -0
- package/dist/engine/flow/map-steps.js +87 -0
- 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/{trait.js → engine/trait/trait.js} +1 -1
- package/dist/index.d.ts +88 -36
- package/dist/index.js +46 -19
- package/dist/live/auto/auto.d.ts +22 -0
- package/dist/live/auto/auto.js +207 -0
- 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/live/auto/mem.d.ts +11 -0
- package/dist/live/auto/mem.js +85 -0
- package/dist/live/auto/menu.d.ts +30 -0
- package/dist/live/auto/menu.js +335 -0
- package/dist/live/auto-session/auto-session.d.ts +113 -0
- package/dist/live/auto-session/auto-session.js +452 -0
- package/dist/live/auto-session/console.d.ts +4 -0
- package/dist/live/auto-session/console.js +41 -0
- package/dist/live/auto-session/files.d.ts +44 -0
- package/dist/live/auto-session/files.js +145 -0
- package/dist/{auto-session → live/auto-session}/helpers.d.ts +9 -5
- package/dist/{auto-session → live/auto-session}/helpers.js +18 -1
- package/dist/live/auto-session/inspect.d.ts +4 -0
- package/dist/live/auto-session/inspect.js +75 -0
- package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +8 -25
- package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +36 -161
- package/dist/live/auto-session/open-browser.d.ts +6 -0
- package/dist/live/auto-session/open-browser.js +47 -0
- 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 +5 -4
- package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +1 -1
- package/dist/live/traverse/traverse.js +212 -0
- package/dist/live/traverse/worker.d.ts +37 -0
- package/dist/live/traverse/worker.js +200 -0
- 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 +14 -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/session.d.ts +0 -193
- package/dist/auto-session/session.js +0 -719
- 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/session.js +0 -600
- 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/map-builder.js +0 -383
- 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/run-phase.d.ts +0 -43
- 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/auto-explore-run.d.ts +0 -40
- package/dist/session/auto-explore-run.js +0 -707
- package/dist/session/step-overlay.d.ts +0 -37
- package/dist/session/step-overlay.js +0 -244
- package/dist/traverse/run.js +0 -423
- 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/{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
|
@@ -5,17 +5,7 @@ import config from "../config/waygraph.config.js";
|
|
|
5
5
|
import { hoppscotchGetFlow } from "../src/flows/(external)/hoppscotch/get.flow.js";
|
|
6
6
|
import { hoppscotchAuthFlow } from "../src/flows/(external)/hoppscotch/auth.flow.js";
|
|
7
7
|
import { hoppscotchPostFlow } from "../src/flows/(external)/hoppscotch/post.flow.js";
|
|
8
|
-
import {
|
|
9
|
-
ExpectedResponseHeader,
|
|
10
|
-
ExpectedResponseText,
|
|
11
|
-
ExpectedStatus,
|
|
12
|
-
RequestBearerToken,
|
|
13
|
-
RequestBody,
|
|
14
|
-
RequestHeaders,
|
|
15
|
-
RequestMethod,
|
|
16
|
-
RequestParams,
|
|
17
|
-
RequestUrl,
|
|
18
|
-
} from "../src/states/demo.mem-keys.js";
|
|
8
|
+
import { ExpectedResponseHeader, ExpectedResponseText, ExpectedStatus, RequestBearerToken, RequestBody, RequestHeaders, RequestMethod, RequestParams, RequestUrl } from "../src/map/(external)/hoppscotch/_keys.js";
|
|
19
9
|
|
|
20
10
|
// The API under test: no CORS headers, so only the extension can reach it from hoppscotch.io.
|
|
21
11
|
let server: Server;
|
|
@@ -3,7 +3,7 @@ import { spawnSync } from "node:child_process";
|
|
|
3
3
|
import net from "node:net";
|
|
4
4
|
import { MemPage, checkpoint } from "waygraph";
|
|
5
5
|
import { emailVerificationFlow } from "../src/flows/(user-stories)/email-verification.flow.js";
|
|
6
|
-
import { ExpectedRecipient, ExpectedLinkPattern, ExpectedEmailContent } from "../src/
|
|
6
|
+
import { ExpectedRecipient, ExpectedLinkPattern, ExpectedEmailContent } from "../src/map/(external)/mailpit/_keys.js";
|
|
7
7
|
import { HOME_URL } from "../src/map/(app_base)/home/_sel.js";
|
|
8
8
|
|
|
9
9
|
// Plays "the app sent a verification email": starts a throwaway Mailpit container, sends a real SMTP message,
|
|
@@ -144,7 +144,7 @@ test("assert-email-received fails loud, naming itself, when no email ever arrive
|
|
|
144
144
|
mem.set(ExpectedRecipient({ email: "nobody-sent-this-one@example.com" }));
|
|
145
145
|
mem.set(ExpectedLinkPattern, "verified=1");
|
|
146
146
|
mem.set(ExpectedEmailContent, VERIFICATION_CONTENT);
|
|
147
|
-
// A
|
|
147
|
+
// A flow's verify-failure error names the whole path taken so
|
|
148
148
|
// far (each composed Block's own name accumulates through connect()),
|
|
149
149
|
// not just the leaf Block - real, useful QA context, not a bug - so this
|
|
150
150
|
// matches the accumulated name ending at assert-email-received, not an
|
|
@@ -52,12 +52,8 @@ Session control works as `browser …` or `auto …` with the same `<sessionId>`
|
|
|
52
52
|
Block file can simply vanish from the graph with no error printed anywhere obvious - if a
|
|
53
53
|
Block you just wrote doesn't show up after `browser reload`, check `waygraph graph`'s own
|
|
54
54
|
`skipped` list and the file's syntax directly, don't assume it just needs more time.
|
|
55
|
-
-
|
|
56
|
-
|
|
57
|
-
rely on parsing an explicit generic from source text. If a freshly-written
|
|
58
|
-
`defineAssertBlock` Block is missing from `waygraph graph`'s edges (silently, no error),
|
|
59
|
-
check whether this package's own `graph.ts` has the matching-marker fix for it, or add an
|
|
60
|
-
explicit generic type argument as a workaround.
|
|
55
|
+
- **Pass Checkpoint values** (`checkpoint: X`, `from: X, to: Y`) so a freshly-written Block shows up in the graph from its
|
|
56
|
+
runtime route. The graph reads routes at runtime, never from source text.
|
|
61
57
|
- **A `<p>`/text-based selector often needs scoping**, not just a class name - a sibling
|
|
62
58
|
"chat list item" and "message preview" frequently share the exact same CSS classes in real
|
|
63
59
|
apps, distinguished only by DOM position (first vs second child of a specific wrapper).
|
|
@@ -45,13 +45,15 @@ against a live site, use `--skill-pilot-blind`.
|
|
|
45
45
|
hand-supplied every time, `registerMemStub(key, fake)` + `memStub: true` on the flow (or
|
|
46
46
|
`--mem-stub`) fills it from a registry instead - a key with no registration still fails
|
|
47
47
|
preflight exactly as before, so this narrows what needs real input, never removes the guard.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
`
|
|
48
|
+
Put those `registerMemStub` calls in a `*.mem-stubs.ts` file (`src/states/demo.mem-stubs.ts`): live sessions (`auto`,
|
|
49
|
+
`pilot`, `traverse`) load every one and use them as the default for a Block's `requires`.
|
|
50
|
+
6. **Checkpoints are values.** Declare each once in `src/states/`: `export const Home = checkpoint("Home");
|
|
51
|
+
export type Home = typeof Home;` (a union: `export const CanAddItem = [Home, CartEmpty] as const`). Blocks take
|
|
52
|
+
the values, never tag strings or `<In, Out>` type arguments: `defineNavBlock({ checkpoint: Home, … })`,
|
|
53
|
+
`defineAssertBlock({ checkpoint: ItemInCart, … })`, `defineMethodBlock({ from: CanAddItem, to: ItemInCart, … })`
|
|
54
|
+
(leave `from` out for "from anywhere"; `resolve` is implied when `to` is one Checkpoint). The Block then carries its
|
|
55
|
+
route at runtime, so `waygraph graph`, `auto` and the manifest read it exactly. Older projects:
|
|
56
|
+
`waygraph upgrade --codemod checkpoints`.
|
|
55
57
|
7. **One input/action per Method Block.** No block that `.fill()`s two fields or `.fill()` + `.click()` in one
|
|
56
58
|
`act()` — split like saucedemo login (`fill-username`, `fill-password`, `submit-login`). Opt out per file:
|
|
57
59
|
`// waygraph-ignore: multi-input` or `// waygraph-ignore-practices`.
|
|
@@ -69,22 +71,23 @@ against a live site, use `--skill-pilot-blind`.
|
|
|
69
71
|
## Flows, stubs and config (the scaffold's shape)
|
|
70
72
|
|
|
71
73
|
- **Build flows with `map()`** (`engine.map({ memStub }).start().gotoPage(Nav).method(B, { pace }).assert(A).end()`;
|
|
72
|
-
`.gotoExternal` for another origin)
|
|
73
|
-
and `.end()` takes nothing. The flow's title is `ctx.title(...)` in a stub. **Nest flows with `.flow(sub, { reset: true })
|
|
74
|
-
|
|
74
|
+
`.gotoExternal` for another origin); it is the only way to build one. Flow settings (`memStub`, `expectedFailure`, `demoPace`, `sessionReset`) go in `map({ … })` before the chain
|
|
75
|
+
and `.end()` takes nothing. The flow's title is `ctx.title(...)` in a stub. **Nest flows with `.flow(sub, { reset: true })`**.
|
|
76
|
+
`defineFlow`, `chainFlow` and the `with*` flow wrappers were removed in 0.16.0; `waygraph upgrade --codemod flows` converts them.
|
|
75
77
|
- **`src/flows/` holds use cases and mirrors the front end's endpoints**: a folder per page (`flows/auth/login/`) with one
|
|
76
78
|
file per scenario named for its outcome (`success.flow.ts`, `wrong-password.flow.ts`, `empty-fields.flow.ts`), and
|
|
77
79
|
`(user-stories)/` (any `(group)`) for flows that cross pages. Export names are `<page><Outcome>Flow`. Not one file per
|
|
78
80
|
Block chain, not a flat folder of unrelated flows.
|
|
79
81
|
- **Blocks carry no stubs; the flow does.** Demo highlights are ctx stubs chained on the Block where the flow uses it:
|
|
80
82
|
`AddItemBlock.stubAfter((ctx) => { ctx.ring("cart", { selector: DemoSel.cartCount, label: "AC · item in cart" }); })`.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
That chained function is the only form: a Block's definition (its options or `instruction`) takes no stub, and a stub
|
|
84
|
+
is never a slot map. A Block used twice gets one `const AddShown = AddItemBlock.stubAfter(...)`. A stub that throws
|
|
85
|
+
fails its step in the demo, named.
|
|
83
86
|
- **Reading a value into `mem` happens in `act`** (`mem.set(Key, value)`), like Mailpit's `extract-email-link`.
|
|
84
87
|
`observe` is only for a Block that branches (it feeds `resolve`); an empty `act(){}` plus an `observe` that
|
|
85
88
|
writes `mem` is a misuse.
|
|
86
89
|
- **Demo pace is a map option or config, never a wrapper.** `.method(SetBearerTokenBlock, { pace: "blitz" })` speeds one step,
|
|
87
|
-
`map({ demoPace: "fast" })` a flow, `demo: { pace, typingMs, slowMo }` in the config the whole project.
|
|
90
|
+
`map({ demoPace: "fast" })` a flow, `demo: { pace, typingMs, slowMo }` in the config the whole project.
|
|
88
91
|
- **Per-environment values** (a different `baseUrl` for staging) come from `.env` files read in the config function:
|
|
89
92
|
`defineConfig(({ env }) => ({ baseUrl: env.BASE_URL }))`; `--env staging` loads `.env.staging`. Never edit the config to switch.
|
|
90
93
|
- **More than one config** (staging, another app) is another file, `config/waygraph.<name>.config.ts`, chosen with `--config <name>`.
|
|
@@ -93,7 +96,7 @@ against a live site, use `--skill-pilot-blind`.
|
|
|
93
96
|
Block's `act`; the click Block stays a plain click.
|
|
94
97
|
- **Project settings live in `config/waygraph.config.ts`** (`defineConfig({ baseUrl, testDir, webServer,
|
|
95
98
|
extensions, playwright: {...} })`). The config file also exports `engine = new Engine(config)`; flows `import { engine } from "../../config/waygraph.config.js"`; a project needs no
|
|
96
|
-
`playwright.config.ts` - `waygraph test` builds one from it
|
|
99
|
+
`playwright.config.ts` - `waygraph test` builds one from it (a project's own `playwright.config.*` is not read).
|
|
97
100
|
- **Another origin the test needs is a Map external** under `src/map/(external)/<tool>/`. For REST API
|
|
98
101
|
tests, `(external)/hoppscotch` (list `extensions: ["hoppscotch"]` in the config) drives hoppscotch.io's client
|
|
99
102
|
with the extension, so requests skip CORS: `set-method`, `set-url`, `set-headers`, `set-json-body`,
|
|
@@ -110,6 +113,7 @@ against a live site, use `--skill-pilot-blind`.
|
|
|
110
113
|
| Effect | `*.effect.block.ts` in `methods/` / `_methods/` | `defineEffectBlock` | No |
|
|
111
114
|
| Method | `*.method.block.ts` in `methods/` / `_methods/` | `defineMethodBlock` | No |
|
|
112
115
|
| Assert | with Method/Effect peers | `defineAssertBlock` | No |
|
|
116
|
+
| API | `*.api.block.ts` in `methods/` | `defineApiBlock({ from, to, call })` (a real HTTP request; `map().method(...)`) | No |
|
|
113
117
|
|
|
114
118
|
Effects that appear in `waygraph auto` menus need `instanceOptions` that scan the live DOM
|
|
115
119
|
(or mem) for labeled rows.
|
|
@@ -165,9 +169,14 @@ npx waygraph check --no-practices . # skip bad-practice scan only
|
|
|
165
169
|
npx waygraph map . # exit 1 if src/map/ folder path != real static url
|
|
166
170
|
npx waygraph validate . # every .flow.ts loads
|
|
167
171
|
npx waygraph graph . # nodes/edges/skipped/orphans - counts should make sense
|
|
172
|
+
npx waygraph manifest . # JSON of every Block (kind, from/to, requires), Flow and Checkpoint
|
|
173
|
+
npx waygraph map pack <group> # a src/map/ group with its own _states.ts/_keys.ts -> installable package
|
|
168
174
|
npm run typecheck # when the consumer has it
|
|
169
175
|
```
|
|
170
176
|
|
|
177
|
+
Every `run`/`demo`/`test` also writes `.waygraph/runs/<runId>.jsonl` (step start/end/error, artifacts): read the
|
|
178
|
+
newest one to see which Block failed and with what error, instead of re-running.
|
|
179
|
+
|
|
171
180
|
`waygraph check` should report zero nav warnings. Orphan Blocks (not in any `.flow.ts`)
|
|
172
181
|
are still runnable in Pilot's live menu - orphan status only blocks
|
|
173
182
|
`auto --blocks <From> <To>` pathfinding.
|
|
@@ -50,6 +50,11 @@ waygraph auto highlight <sessionId> '<json>' # paint rings/todos on the live pa
|
|
|
50
50
|
just what's reachable from here - use it to plan several steps ahead before you start
|
|
51
51
|
sending picks.
|
|
52
52
|
|
|
53
|
+
A Block's `requires` are filled from `--data '{...}'` first, then from the project's mem stubs: the session loads
|
|
54
|
+
every `*.mem-stubs.ts` and uses each `registerMemStub` fake as that key's default. A start URL that can't be opened
|
|
55
|
+
(server down, DNS) fails `browser start` / `pilot start` with the reason; it never starts a blank session silently.
|
|
56
|
+
An unknown flag is an error, not a project path.
|
|
57
|
+
|
|
53
58
|
## Bad practices (`waygraph check` / `waygraph typecheck`)
|
|
54
59
|
|
|
55
60
|
Run `waygraph typecheck .` (or `npm run typecheck`) — runs `tsc --noEmit` then bad-practice warnings.
|
|
@@ -58,8 +63,6 @@ Use `--no-practices` on either command to skip the practice scan.
|
|
|
58
63
|
|
|
59
64
|
Patterns warned (does not fail `check`; fails `typecheck` only when `tsc` fails):
|
|
60
65
|
|
|
61
|
-
- **`Checkpoint<string>` as a Block's output** — e.g. `defineMethodBlock<…, Checkpoint<string>>` instead of a project Checkpoint type from `src/states/` (a wildcard *input* means "reachable from anywhere" and is allowed).
|
|
62
|
-
- **`defineAssertBlock({…})` without an explicit type arg** — use `defineAssertBlock<YourCheckpoint>({…})` so `defineFlow` typing stays honest.
|
|
63
66
|
- **Multiple `.fill()` in one Method** — split into one Block per input (fill-username, fill-password, …).
|
|
64
67
|
- **`.fill()` + `.click()` in one Method** — split fill and submit into separate Blocks.
|
|
65
68
|
|
|
@@ -105,7 +108,7 @@ thing that differs from demo is *who* triggers the paint:
|
|
|
105
108
|
| Mode | Who paints | How |
|
|
106
109
|
|------|------------|-----|
|
|
107
110
|
| `waygraph demo` | Engine, automatically | ctx stubs chained in the flow run each step |
|
|
108
|
-
| Pilot / `
|
|
111
|
+
| Pilot / `browser start` session | **You (the agent)** | `waygraph auto highlight <sessionId> '<json>'` before (or between) sends |
|
|
109
112
|
|
|
110
113
|
The ctx stubs a flow chains onto Blocks show up in Pilot's `auto trace` as metadata, but they do **not**
|
|
111
114
|
auto-draw. You re-express the same intent with `auto highlight` (copy selectors/labels from the flow's stubs or
|
|
@@ -133,7 +136,7 @@ waygraph auto highlight <sessionId> '{"clear":true}'
|
|
|
133
136
|
Supported fields (demo parity):
|
|
134
137
|
- `rings[]`: `selector`, `label`, `detail`, `tag`, `tone`, `size`, `weight`, `color`, `zoom`, `zoomOut`, `focus`
|
|
135
138
|
- `todos` / `todoIndex` / `todoTitle` / `todoPos` (`right` default | `left`)
|
|
136
|
-
- `todoUi`: `{ compact?, cap?, expandCap?, collision?, behindRing? }` — same dock UX as demo (defaults smart-on; see docs/
|
|
139
|
+
- `todoUi`: `{ compact?, cap?, expandCap?, collision?, behindRing? }` — same dock UX as demo (defaults smart-on; see docs/reference/cli.md "Todo dock UI")
|
|
137
140
|
- `zoom` / `zoomSelector` / `zoomOut` - scroll + zoom badge (not CSS page scale)
|
|
138
141
|
- `device`: `mobile` | `tablet` | `desktop` (Playwright viewport)
|
|
139
142
|
- `holdMs`: ms to keep fixtures; `0` = until the next highlight / clear (default 30000)
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import type { ApplyPathResult, ApplyPickResult, AutoSessionInit, ConsoleLogEntry, InspectDomOptions, InspectDomResult, SessionSnapshot, StorageSnapshot, StubFileKind, TraceStep } from "./helpers.js";
|
|
2
|
-
import type { PilotHighlightFixtures } from "../pilot-overlay.js";
|
|
3
|
-
/**
|
|
4
|
-
* Non-interactive explore session: same graph/library/mem/browser setup
|
|
5
|
-
* `runAutoExplore` runs in `--cli` mode, driven by `applyPick` instead of a
|
|
6
|
-
* blocking `readline` loop. Headless by default (matching
|
|
7
|
-
* `runAutoExplore`'s own `cli` branch), optionally visible via
|
|
8
|
-
* `AutoSessionInit.headless: false` - this type only ever backs the `--cli`
|
|
9
|
-
* picker, never the headful page-embedded panel, headless or not.
|
|
10
|
-
*/
|
|
11
|
-
export declare class AutoSession {
|
|
12
|
-
private readonly projectDir;
|
|
13
|
-
private readonly inject;
|
|
14
|
-
private readonly blocksSelect;
|
|
15
|
-
private graph;
|
|
16
|
-
private library;
|
|
17
|
-
private readonly mem;
|
|
18
|
-
private readonly engine;
|
|
19
|
-
private readonly closeBrowser;
|
|
20
|
-
private readonly context;
|
|
21
|
-
private page;
|
|
22
|
-
private readonly startUrl;
|
|
23
|
-
private readonly sessionId;
|
|
24
|
-
private here;
|
|
25
|
-
private lastRunNote;
|
|
26
|
-
private readonly trace;
|
|
27
|
-
private readonly consoleLog;
|
|
28
|
-
private readonly knownInteractionSelectors;
|
|
29
|
-
private readonly headless;
|
|
30
|
-
private lastOverlayInfo;
|
|
31
|
-
private constructor();
|
|
32
|
-
static start(init: AutoSessionInit): Promise<AutoSession>;
|
|
33
|
-
/** Pure getter - returns a copy, not the live array. */
|
|
34
|
-
getTrace(): TraceStep[];
|
|
35
|
-
private pushTrace;
|
|
36
|
-
/** Pure getter - returns a copy, not the live array. */
|
|
37
|
-
getConsoleLog(): ConsoleLogEntry[];
|
|
38
|
-
private pushConsoleLog;
|
|
39
|
-
private currentMenu;
|
|
40
|
-
/** Paint the overlay on about:blank / immediately after session start (headful browser). */
|
|
41
|
-
private bootstrapOverlay;
|
|
42
|
-
/** Re-apply cached overlay state after navigation (init script restores shell only). */
|
|
43
|
-
private repaintOverlayAfterNavigation;
|
|
44
|
-
/**
|
|
45
|
-
* Flags same-origin `<a href>` paths and visible buttons with no NavBlock
|
|
46
|
-
* URL / Block selector in the loaded library — read via `auto console`.
|
|
47
|
-
* Deduped per page load so repeated status/send calls stay quiet.
|
|
48
|
-
*/
|
|
49
|
-
private warnUnmappedInteractions;
|
|
50
|
-
/** Pure getter - no Block runs, no mem/page mutation. */
|
|
51
|
-
currentSnapshot(): Promise<SessionSnapshot>;
|
|
52
|
-
/**
|
|
53
|
-
* Pure getter - reads the live page's structure at the requested fidelity.
|
|
54
|
-
* No Block runs, no mem/page mutation. `selector` scopes either mode to one
|
|
55
|
-
* element's subtree; it is a modifier, not a third mode.
|
|
56
|
-
*/
|
|
57
|
-
inspectDom(opts: InspectDomOptions): Promise<InspectDomResult>;
|
|
58
|
-
/**
|
|
59
|
-
* Pure getter - reads the live page's client-side state: localStorage,
|
|
60
|
-
* sessionStorage, and registered service workers (scope/active URL/state).
|
|
61
|
-
* Real, direct follow-up to `auto console`'s own gap: a site doing web
|
|
62
|
-
* push (this target has a real `NOTIFICATION_VAPID` config, confirmed via
|
|
63
|
-
* `auto dom` earlier) keeps push-subscription/auth state in these places,
|
|
64
|
-
* not in the rendered DOM `inspectDom` reads.
|
|
65
|
-
*/
|
|
66
|
-
inspectStorage(): Promise<StorageSnapshot>;
|
|
67
|
-
/**
|
|
68
|
-
* Runs one already-resolved Block entry for real - the shared core both
|
|
69
|
-
* `applyPick` (resolved via a live-menu index) and `applyPath` (resolved
|
|
70
|
-
* directly by name, bypassing live-menu-visibility entirely - see
|
|
71
|
-
* `applyPath`'s own comment for why) call. `expectedTo` is only used as a
|
|
72
|
-
* fallback when a Block's own `resolve()` doesn't set `__state` - same
|
|
73
|
-
* behavior `applyPick` always had, just factored out, not changed.
|
|
74
|
-
*/
|
|
75
|
-
/** Paint + log a Block's authored waygraph overlay fixtures (same as demo does), best-effort. */
|
|
76
|
-
private paintStubPhase;
|
|
77
|
-
private runNamedBlock;
|
|
78
|
-
/** Applies exactly one pick: runs at most one Block, returns the resulting state. */
|
|
79
|
-
applyPick(raw: string): Promise<ApplyPickResult>;
|
|
80
|
-
/**
|
|
81
|
-
* Re-discovers the project's Block library and graph from disk, using the
|
|
82
|
-
* exact same call `start()` itself makes - not a duplicated read - and
|
|
83
|
-
* replaces `this.library`/`this.graph` in place. Leaves the live page,
|
|
84
|
-
* mem, browser/context, and current Checkpoint (`here`) untouched, so a
|
|
85
|
-
* Block written to disk mid-session becomes pickable via a later
|
|
86
|
-
* `applyPick` without restarting the session. See
|
|
87
|
-
* openspec/changes/waygraph-blind-pilot/design.md.
|
|
88
|
-
*/
|
|
89
|
-
reloadLibrary(): Promise<void>;
|
|
90
|
-
/**
|
|
91
|
-
* Forces `here` to be re-detected from the real live page, discarding
|
|
92
|
-
* whatever was cached - the fix for a real, confirmed gap: `here` is only
|
|
93
|
-
* ever updated by an action this class itself ran (`applyPick`/`applyPath`
|
|
94
|
-
* set it to a Block's own resolved Checkpoint; `rawClick`/`rawType`/
|
|
95
|
-
* `rawGoto` reset it to `null` because *they* just changed the page). If a
|
|
96
|
-
* human co-driving the same visible session clicks/types/navigates
|
|
97
|
-
* directly - a real scenario for a headful Pilot session someone is
|
|
98
|
-
* watching, not hypothetical - none of that goes through this class at
|
|
99
|
-
* all, so `here` silently goes stale: `currentMenu()`'s own lazy check
|
|
100
|
-
* (`if (this.here === null)`, just above) only re-detects when `here` is
|
|
101
|
-
* already unknown, never to confirm a *known* value is still correct.
|
|
102
|
-
* This does not crash the session (the process/socket/page all stay
|
|
103
|
-
* alive) but subsequent `send`/`reach` calls would act on a menu built
|
|
104
|
-
* from the wrong Checkpoint until something forces re-detection - this
|
|
105
|
-
* method is that: unconditionally re-run the same `detectHere` logic the
|
|
106
|
-
* lazy path already uses, regardless of what `here` currently holds.
|
|
107
|
-
*/
|
|
108
|
-
resync(): Promise<ApplyPickResult>;
|
|
109
|
-
/**
|
|
110
|
-
* Raw interaction primitives for a page no Block covers yet (Blind Pilot -
|
|
111
|
-
* see openspec/changes/waygraph-blind-pilot). Unlike `applyPick`, the
|
|
112
|
-
* resulting Checkpoint isn't known ahead of time from a Block's own
|
|
113
|
-
* `resolve()`, so each of these invalidates the cached `here` (forcing
|
|
114
|
-
* `currentMenu()`'s existing lazy `detectHere` call to run again) rather
|
|
115
|
-
* than assuming the page didn't move anywhere a Block now recognizes.
|
|
116
|
-
* A selector matching nothing is a reported failure, not a silent no-op.
|
|
117
|
-
*/
|
|
118
|
-
rawClick(selector: string): Promise<ApplyPickResult>;
|
|
119
|
-
rawType(selector: string, text: string): Promise<ApplyPickResult>;
|
|
120
|
-
/**
|
|
121
|
-
* Presses a real key on a real focused element - a real gap found live:
|
|
122
|
-
* many real inline-edit inputs (no visible Save button at all) commit on
|
|
123
|
-
* Enter, not on blur/click-elsewhere. `key` is a Playwright key name
|
|
124
|
-
* (e.g. "Enter", "Escape", "Tab") - same vocabulary as
|
|
125
|
-
* `page.keyboard.press`, which this wraps.
|
|
126
|
-
*/
|
|
127
|
-
rawPress(selector: string, key: string): Promise<ApplyPickResult>;
|
|
128
|
-
rawGoto(url: string): Promise<ApplyPickResult>;
|
|
129
|
-
/**
|
|
130
|
-
* Fills a real `<input type="file">` - a built-in stub kind
|
|
131
|
-
* ("image"/"pdf"/"video", see `stubFilePath`) or a caller-supplied
|
|
132
|
-
* `filePath` for anything else ("whatever", per the real request this
|
|
133
|
-
* responds to). Same raw-primitive shape as click/type/goto: works with
|
|
134
|
-
* zero Blocks, invalidates `here` since the app may react to the upload.
|
|
135
|
-
*/
|
|
136
|
-
rawUpload(selector: string, stub: StubFileKind | {
|
|
137
|
-
filePath: string;
|
|
138
|
-
}): Promise<ApplyPickResult>;
|
|
139
|
-
/**
|
|
140
|
-
* Agent-sent highlight fixtures (rings + optional todos) on the live page -
|
|
141
|
-
* the Pilot equivalent of Block `stubBefore` narration in `waygraph demo`.
|
|
142
|
-
* Does not run a Block; paint-only. Missing selectors are reported, not fatal.
|
|
143
|
-
*/
|
|
144
|
-
applyHighlight(fixtures: PilotHighlightFixtures): Promise<{
|
|
145
|
-
ok: true;
|
|
146
|
-
painted: number;
|
|
147
|
-
missing: string[];
|
|
148
|
-
snapshot: SessionSnapshot;
|
|
149
|
-
} | {
|
|
150
|
-
ok: false;
|
|
151
|
-
error: string;
|
|
152
|
-
}>;
|
|
153
|
-
/**
|
|
154
|
-
* Runs a whole multi-step route to `targetCheckpoint` in one call, instead
|
|
155
|
-
* of an agent hand-picking one index at a time across many separate
|
|
156
|
-
* `applyPick` round trips - real, reported pain for any non-trivial task
|
|
157
|
-
* on a rich graph ("the entire prompts of the day" driving one step per
|
|
158
|
-
* call).
|
|
159
|
-
*
|
|
160
|
-
* Two other designs were tried and rejected by direct reproduction against
|
|
161
|
-
* live saucedemo.com before this one, both undone by the same root cause:
|
|
162
|
-
* a `from: "*"` edge (e.g. "Checkout", only clickable once you're actually
|
|
163
|
-
* on the cart page with items) looks globally reachable to
|
|
164
|
-
* `findBlockPath`'s static-graph BFS, which has no live-page access and
|
|
165
|
-
* can't know the edge's real precondition isn't showing yet. Computing the
|
|
166
|
-
* whole route once upfront names a premature wildcard step immediately;
|
|
167
|
-
* scoring each live menu option by its static-graph distance to the
|
|
168
|
-
* target (greedy best-first) doesn't fix it either - a harmless self-loop
|
|
169
|
-
* Method can score just as well as real progress once wildcard "shortcuts"
|
|
170
|
-
* are baked into every distance calculation, and the session gets stuck
|
|
171
|
-
* repeating it.
|
|
172
|
-
*
|
|
173
|
-
* The fix that actually works: stop trying to be clever about live-menu
|
|
174
|
-
* visibility per step, and reuse `auto --blocks <From> <To>`'s own already
|
|
175
|
-
* -proven approach instead - compute the path ONCE (via
|
|
176
|
-
* `findBlockPathDetailed`, the same BFS `findBlockPath`/`runChainAuto`
|
|
177
|
-
* already use, extended to also return each hop's specific edge - see its
|
|
178
|
-
* own doc comment for why that extra detail is load-bearing, not cosmetic),
|
|
179
|
-
* then run each Block in it directly via `runNamedBlock`, trusting the
|
|
180
|
-
* graph the same way `runChain`'s own flow execution already does, not
|
|
181
|
-
* gated on live-menu visibility at all. The one real difference from
|
|
182
|
-
* `runChainAuto`: this runs against the session's own already-live
|
|
183
|
-
* page/context/mem, not a freshly spawned browser - the whole point of
|
|
184
|
-
* staying in one session. A step whose real precondition genuinely isn't
|
|
185
|
-
* met still fails loud, naming that step, exactly the way a mis-ordered
|
|
186
|
-
* `runChain` spec would - and a step that runs without throwing but lands
|
|
187
|
-
* somewhere other than what its own edge promised (a real, observed case,
|
|
188
|
-
* not hypothetical - see this method's own test suite) fails loud too,
|
|
189
|
-
* rather than reporting false success.
|
|
190
|
-
*/
|
|
191
|
-
applyPath(targetCheckpoint: string): Promise<ApplyPathResult>;
|
|
192
|
-
close(): Promise<void>;
|
|
193
|
-
}
|