opendevbrowser 0.0.12 → 0.0.16
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/LICENSE +21 -0
- package/README.md +425 -42
- package/dist/annotate/direct-annotator.d.ts +22 -0
- package/dist/annotate/direct-annotator.d.ts.map +1 -0
- package/dist/annotate/output.d.ts +10 -0
- package/dist/annotate/output.d.ts.map +1 -0
- package/dist/browser/annotation-manager.d.ts +30 -0
- package/dist/browser/annotation-manager.d.ts.map +1 -0
- package/dist/browser/browser-manager.d.ts +397 -0
- package/dist/browser/browser-manager.d.ts.map +1 -0
- package/dist/browser/fingerprint/adapters.d.ts +26 -0
- package/dist/browser/fingerprint/adapters.d.ts.map +1 -0
- package/dist/browser/fingerprint/canary.d.ts +25 -0
- package/dist/browser/fingerprint/canary.d.ts.map +1 -0
- package/dist/browser/fingerprint/profiles.d.ts +16 -0
- package/dist/browser/fingerprint/profiles.d.ts.map +1 -0
- package/dist/browser/fingerprint/tier1-coherence.d.ts +36 -0
- package/dist/browser/fingerprint/tier1-coherence.d.ts.map +1 -0
- package/dist/browser/fingerprint/tier2-runtime.d.ts +40 -0
- package/dist/browser/fingerprint/tier2-runtime.d.ts.map +1 -0
- package/dist/browser/fingerprint/tier3-adaptive.d.ts +30 -0
- package/dist/browser/fingerprint/tier3-adaptive.d.ts.map +1 -0
- package/dist/browser/manager-types.d.ts +3 -0
- package/dist/browser/manager-types.d.ts.map +1 -0
- package/dist/browser/ops-browser-manager.d.ts +131 -0
- package/dist/browser/ops-browser-manager.d.ts.map +1 -0
- package/dist/browser/ops-client.d.ts +56 -0
- package/dist/browser/ops-client.d.ts.map +1 -0
- package/dist/browser/parallelism-governor.d.ts +31 -0
- package/dist/browser/parallelism-governor.d.ts.map +1 -0
- package/dist/browser/script-runner.d.ts +23 -0
- package/dist/browser/script-runner.d.ts.map +1 -0
- package/dist/browser/session-store.d.ts +63 -0
- package/dist/browser/session-store.d.ts.map +1 -0
- package/dist/browser/target-manager.d.ts +36 -0
- package/dist/browser/target-manager.d.ts.map +1 -0
- package/dist/cache/chrome-locator.d.ts +2 -0
- package/dist/cache/chrome-locator.d.ts.map +1 -0
- package/dist/cache/downloader.d.ts +6 -0
- package/dist/cache/downloader.d.ts.map +1 -0
- package/dist/cache/paths.d.ts +9 -0
- package/dist/cache/paths.d.ts.map +1 -0
- package/dist/chunk-7W3SPXIB.js +166 -0
- package/dist/chunk-7W3SPXIB.js.map +1 -0
- package/dist/chunk-ST7CO5FA.js +18668 -0
- package/dist/chunk-ST7CO5FA.js.map +1 -0
- package/dist/cli/args.d.ts +25 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/client.d.ts +2 -0
- package/dist/cli/client.d.ts.map +1 -0
- package/dist/cli/commands/annotate.d.ts +27 -0
- package/dist/cli/commands/annotate.d.ts.map +1 -0
- package/dist/cli/commands/artifacts.d.ts +24 -0
- package/dist/cli/commands/artifacts.d.ts.map +1 -0
- package/dist/cli/commands/daemon.d.ts +35 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/devtools/console-poll.d.ts +7 -0
- package/dist/cli/commands/devtools/console-poll.d.ts.map +1 -0
- package/dist/cli/commands/devtools/debug-trace-snapshot.d.ts +20 -0
- package/dist/cli/commands/devtools/debug-trace-snapshot.d.ts.map +1 -0
- package/dist/cli/commands/devtools/network-poll.d.ts +7 -0
- package/dist/cli/commands/devtools/network-poll.d.ts.map +1 -0
- package/dist/cli/commands/devtools/perf.d.ts +7 -0
- package/dist/cli/commands/devtools/perf.d.ts.map +1 -0
- package/dist/cli/commands/devtools/screenshot.d.ts +17 -0
- package/dist/cli/commands/devtools/screenshot.d.ts.map +1 -0
- package/dist/cli/commands/dom/attr.d.ts +7 -0
- package/dist/cli/commands/dom/attr.d.ts.map +1 -0
- package/dist/cli/commands/dom/checked.d.ts +7 -0
- package/dist/cli/commands/dom/checked.d.ts.map +1 -0
- package/dist/cli/commands/dom/enabled.d.ts +7 -0
- package/dist/cli/commands/dom/enabled.d.ts.map +1 -0
- package/dist/cli/commands/dom/html.d.ts +7 -0
- package/dist/cli/commands/dom/html.d.ts.map +1 -0
- package/dist/cli/commands/dom/text.d.ts +7 -0
- package/dist/cli/commands/dom/text.d.ts.map +1 -0
- package/dist/cli/commands/dom/value.d.ts +7 -0
- package/dist/cli/commands/dom/value.d.ts.map +1 -0
- package/dist/cli/commands/dom/visible.d.ts +7 -0
- package/dist/cli/commands/dom/visible.d.ts.map +1 -0
- package/dist/cli/commands/export/clone-component.d.ts +7 -0
- package/dist/cli/commands/export/clone-component.d.ts.map +1 -0
- package/dist/cli/commands/export/clone-page.d.ts +7 -0
- package/dist/cli/commands/export/clone-page.d.ts.map +1 -0
- package/dist/cli/commands/interact/check.d.ts +7 -0
- package/dist/cli/commands/interact/check.d.ts.map +1 -0
- package/dist/cli/commands/interact/click.d.ts +7 -0
- package/dist/cli/commands/interact/click.d.ts.map +1 -0
- package/dist/cli/commands/interact/hover.d.ts +7 -0
- package/dist/cli/commands/interact/hover.d.ts.map +1 -0
- package/dist/cli/commands/interact/press.d.ts +7 -0
- package/dist/cli/commands/interact/press.d.ts.map +1 -0
- package/dist/cli/commands/interact/scroll-into-view.d.ts +7 -0
- package/dist/cli/commands/interact/scroll-into-view.d.ts.map +1 -0
- package/dist/cli/commands/interact/scroll.d.ts +7 -0
- package/dist/cli/commands/interact/scroll.d.ts.map +1 -0
- package/dist/cli/commands/interact/select.d.ts +7 -0
- package/dist/cli/commands/interact/select.d.ts.map +1 -0
- package/dist/cli/commands/interact/type.d.ts +7 -0
- package/dist/cli/commands/interact/type.d.ts.map +1 -0
- package/dist/cli/commands/interact/uncheck.d.ts +7 -0
- package/dist/cli/commands/interact/uncheck.d.ts.map +1 -0
- package/dist/cli/commands/macro-resolve.d.ts +18 -0
- package/dist/cli/commands/macro-resolve.d.ts.map +1 -0
- package/dist/cli/commands/native.d.ts +82 -0
- package/dist/cli/commands/native.d.ts.map +1 -0
- package/dist/cli/commands/nav/goto.d.ts +7 -0
- package/dist/cli/commands/nav/goto.d.ts.map +1 -0
- package/dist/cli/commands/nav/snapshot.d.ts +7 -0
- package/dist/cli/commands/nav/snapshot.d.ts.map +1 -0
- package/dist/cli/commands/nav/wait.d.ts +7 -0
- package/dist/cli/commands/nav/wait.d.ts.map +1 -0
- package/dist/cli/commands/pages/close.d.ts +6 -0
- package/dist/cli/commands/pages/close.d.ts.map +1 -0
- package/dist/cli/commands/pages/list.d.ts +7 -0
- package/dist/cli/commands/pages/list.d.ts.map +1 -0
- package/dist/cli/commands/pages/open.d.ts +7 -0
- package/dist/cli/commands/pages/open.d.ts.map +1 -0
- package/dist/cli/commands/product-video.d.ts +25 -0
- package/dist/cli/commands/product-video.d.ts.map +1 -0
- package/dist/cli/commands/registry.d.ts +5 -0
- package/dist/cli/commands/registry.d.ts.map +1 -0
- package/dist/cli/commands/research.d.ts +27 -0
- package/dist/cli/commands/research.d.ts.map +1 -0
- package/dist/cli/commands/rpc.d.ts +28 -0
- package/dist/cli/commands/rpc.d.ts.map +1 -0
- package/dist/cli/commands/run.d.ts +17 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/serve.d.ts +59 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/session/connect.d.ts +9 -0
- package/dist/cli/commands/session/connect.d.ts.map +1 -0
- package/dist/cli/commands/session/cookie-import.d.ts +31 -0
- package/dist/cli/commands/session/cookie-import.d.ts.map +1 -0
- package/dist/cli/commands/session/cookie-list.d.ts +17 -0
- package/dist/cli/commands/session/cookie-list.d.ts.map +1 -0
- package/dist/cli/commands/session/disconnect.d.ts +6 -0
- package/dist/cli/commands/session/disconnect.d.ts.map +1 -0
- package/dist/cli/commands/session/launch.d.ts +29 -0
- package/dist/cli/commands/session/launch.d.ts.map +1 -0
- package/dist/cli/commands/session/status.d.ts +7 -0
- package/dist/cli/commands/session/status.d.ts.map +1 -0
- package/dist/cli/commands/shopping.d.ts +25 -0
- package/dist/cli/commands/shopping.d.ts.map +1 -0
- package/dist/cli/commands/status.d.ts +19 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/targets/close.d.ts +6 -0
- package/dist/cli/commands/targets/close.d.ts.map +1 -0
- package/dist/cli/commands/targets/list.d.ts +7 -0
- package/dist/cli/commands/targets/list.d.ts.map +1 -0
- package/dist/cli/commands/targets/new.d.ts +7 -0
- package/dist/cli/commands/targets/new.d.ts.map +1 -0
- package/dist/cli/commands/targets/use.d.ts +7 -0
- package/dist/cli/commands/targets/use.d.ts.map +1 -0
- package/dist/cli/commands/types.d.ts +13 -0
- package/dist/cli/commands/types.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +14 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/update.d.ts +7 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/daemon-autostart.d.ts +46 -0
- package/dist/cli/daemon-autostart.d.ts.map +1 -0
- package/dist/cli/daemon-client.d.ts +33 -0
- package/dist/cli/daemon-client.d.ts.map +1 -0
- package/dist/cli/daemon-commands.d.ts +7 -0
- package/dist/cli/daemon-commands.d.ts.map +1 -0
- package/dist/cli/daemon-state.d.ts +56 -0
- package/dist/cli/daemon-state.d.ts.map +1 -0
- package/dist/cli/daemon-status.d.ts +19 -0
- package/dist/cli/daemon-status.d.ts.map +1 -0
- package/dist/cli/daemon.d.ts +29 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/errors.d.ts +20 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/help.d.ts +28 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +4604 -769
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installers/global.d.ts +9 -0
- package/dist/cli/installers/global.d.ts.map +1 -0
- package/dist/cli/installers/local.d.ts +9 -0
- package/dist/cli/installers/local.d.ts.map +1 -0
- package/dist/cli/installers/skills.d.ts +19 -0
- package/dist/cli/installers/skills.d.ts.map +1 -0
- package/dist/cli/output.d.ts +7 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/remote-manager.d.ts +96 -0
- package/dist/cli/remote-manager.d.ts.map +1 -0
- package/dist/cli/remote-relay.d.ts +17 -0
- package/dist/cli/remote-relay.d.ts.map +1 -0
- package/dist/cli/templates/config.d.ts +7 -0
- package/dist/cli/templates/config.d.ts.map +1 -0
- package/dist/cli/utils/config.d.ts +20 -0
- package/dist/cli/utils/config.d.ts.map +1 -0
- package/dist/cli/utils/http.d.ts +5 -0
- package/dist/cli/utils/http.d.ts.map +1 -0
- package/dist/cli/utils/parse.d.ts +8 -0
- package/dist/cli/utils/parse.d.ts.map +1 -0
- package/dist/cli/utils/skills.d.ts +12 -0
- package/dist/cli/utils/skills.d.ts.map +1 -0
- package/dist/config.d.ts +208 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/core/bootstrap.d.ts +3 -0
- package/dist/core/bootstrap.d.ts.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/logging.d.ts +34 -0
- package/dist/core/logging.d.ts.map +1 -0
- package/dist/core/types.d.ts +34 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/devtools/console-tracker.d.ts +44 -0
- package/dist/devtools/console-tracker.d.ts.map +1 -0
- package/dist/devtools/exception-tracker.d.ts +42 -0
- package/dist/devtools/exception-tracker.d.ts.map +1 -0
- package/dist/devtools/network-tracker.d.ts +34 -0
- package/dist/devtools/network-tracker.d.ts.map +1 -0
- package/dist/export/css-extract.d.ts +5 -0
- package/dist/export/css-extract.d.ts.map +1 -0
- package/dist/export/dom-capture.d.ts +15 -0
- package/dist/export/dom-capture.d.ts.map +1 -0
- package/dist/export/react-emitter.d.ts +11 -0
- package/dist/export/react-emitter.d.ts.map +1 -0
- package/dist/extension-extractor.d.ts +3 -0
- package/dist/extension-extractor.d.ts.map +1 -0
- package/dist/index.d.ts +3 -4
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1905 -262
- package/dist/index.js.map +1 -1
- package/dist/macros/execute.d.ts +44 -0
- package/dist/macros/execute.d.ts.map +1 -0
- package/dist/macros/index.d.ts +9 -0
- package/dist/macros/index.d.ts.map +1 -0
- package/dist/macros/packs/core.d.ts +3 -0
- package/dist/macros/packs/core.d.ts.map +1 -0
- package/dist/macros/registry.d.ts +48 -0
- package/dist/macros/registry.d.ts.map +1 -0
- package/dist/macros-NUBRM44Y.js +399 -0
- package/dist/macros-NUBRM44Y.js.map +1 -0
- package/dist/opendevbrowser.d.ts +3 -4
- package/dist/opendevbrowser.d.ts.map +1 -0
- package/dist/opendevbrowser.js +1905 -262
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/adaptive-concurrency.d.ts +42 -0
- package/dist/providers/adaptive-concurrency.d.ts.map +1 -0
- package/dist/providers/artifacts.d.ts +34 -0
- package/dist/providers/artifacts.d.ts.map +1 -0
- package/dist/providers/blocker.d.ts +47 -0
- package/dist/providers/blocker.d.ts.map +1 -0
- package/dist/providers/community/index.d.ts +44 -0
- package/dist/providers/community/index.d.ts.map +1 -0
- package/dist/providers/enrichment.d.ts +33 -0
- package/dist/providers/enrichment.d.ts.map +1 -0
- package/dist/providers/errors.d.ts +41 -0
- package/dist/providers/errors.d.ts.map +1 -0
- package/dist/providers/index.d.ts +121 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/normalize.d.ts +39 -0
- package/dist/providers/normalize.d.ts.map +1 -0
- package/dist/providers/policy.d.ts +5 -0
- package/dist/providers/policy.d.ts.map +1 -0
- package/dist/providers/registry.d.ts +22 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/renderer.d.ts +49 -0
- package/dist/providers/renderer.d.ts.map +1 -0
- package/dist/providers/runtime-factory.d.ts +20 -0
- package/dist/providers/runtime-factory.d.ts.map +1 -0
- package/dist/providers/safety/prompt-guard.d.ts +34 -0
- package/dist/providers/safety/prompt-guard.d.ts.map +1 -0
- package/dist/providers/shared/anti-bot-policy.d.ts +51 -0
- package/dist/providers/shared/anti-bot-policy.d.ts.map +1 -0
- package/dist/providers/shared/post-policy.d.ts +31 -0
- package/dist/providers/shared/post-policy.d.ts.map +1 -0
- package/dist/providers/shared/request-headers.d.ts +5 -0
- package/dist/providers/shared/request-headers.d.ts.map +1 -0
- package/dist/providers/shared/traversal-url.d.ts +2 -0
- package/dist/providers/shared/traversal-url.d.ts.map +1 -0
- package/dist/providers/shopping/index.d.ts +63 -0
- package/dist/providers/shopping/index.d.ts.map +1 -0
- package/dist/providers/social/bluesky.d.ts +3 -0
- package/dist/providers/social/bluesky.d.ts.map +1 -0
- package/dist/providers/social/facebook.d.ts +3 -0
- package/dist/providers/social/facebook.d.ts.map +1 -0
- package/dist/providers/social/index.d.ts +31 -0
- package/dist/providers/social/index.d.ts.map +1 -0
- package/dist/providers/social/instagram.d.ts +3 -0
- package/dist/providers/social/instagram.d.ts.map +1 -0
- package/dist/providers/social/linkedin.d.ts +3 -0
- package/dist/providers/social/linkedin.d.ts.map +1 -0
- package/dist/providers/social/platform.d.ts +40 -0
- package/dist/providers/social/platform.d.ts.map +1 -0
- package/dist/providers/social/reddit.d.ts +3 -0
- package/dist/providers/social/reddit.d.ts.map +1 -0
- package/dist/providers/social/threads.d.ts +3 -0
- package/dist/providers/social/threads.d.ts.map +1 -0
- package/dist/providers/social/tiktok.d.ts +3 -0
- package/dist/providers/social/tiktok.d.ts.map +1 -0
- package/dist/providers/social/x.d.ts +3 -0
- package/dist/providers/social/x.d.ts.map +1 -0
- package/dist/providers/social/youtube-resolver.d.ts +78 -0
- package/dist/providers/social/youtube-resolver.d.ts.map +1 -0
- package/dist/providers/social/youtube.d.ts +34 -0
- package/dist/providers/social/youtube.d.ts.map +1 -0
- package/dist/providers/tier-router.d.ts +30 -0
- package/dist/providers/tier-router.d.ts.map +1 -0
- package/dist/providers/timebox.d.ts +20 -0
- package/dist/providers/timebox.d.ts.map +1 -0
- package/dist/providers/types.d.ts +344 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/web/crawl-worker.d.ts +36 -0
- package/dist/providers/web/crawl-worker.d.ts.map +1 -0
- package/dist/providers/web/crawler.d.ts +101 -0
- package/dist/providers/web/crawler.d.ts.map +1 -0
- package/dist/providers/web/extract.d.ts +11 -0
- package/dist/providers/web/extract.d.ts.map +1 -0
- package/dist/providers/web/index.d.ts +24 -0
- package/dist/providers/web/index.d.ts.map +1 -0
- package/dist/providers/web/policy.d.ts +14 -0
- package/dist/providers/web/policy.d.ts.map +1 -0
- package/dist/providers/workflows.d.ts +67 -0
- package/dist/providers/workflows.d.ts.map +1 -0
- package/dist/relay/protocol.d.ts +317 -0
- package/dist/relay/protocol.d.ts.map +1 -0
- package/dist/relay/relay-endpoints.d.ts +16 -0
- package/dist/relay/relay-endpoints.d.ts.map +1 -0
- package/dist/relay/relay-server.d.ts +111 -0
- package/dist/relay/relay-server.d.ts.map +1 -0
- package/dist/relay/relay-types.d.ts +9 -0
- package/dist/relay/relay-types.d.ts.map +1 -0
- package/dist/skills/continuity-nudge.d.ts +12 -0
- package/dist/skills/continuity-nudge.d.ts.map +1 -0
- package/dist/skills/skill-loader.d.ts +20 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-nudge.d.ts +18 -0
- package/dist/skills/skill-nudge.d.ts.map +1 -0
- package/dist/skills/types.d.ts +12 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/snapshot/ops-snapshot.d.ts +16 -0
- package/dist/snapshot/ops-snapshot.d.ts.map +1 -0
- package/dist/snapshot/refs.d.ts +23 -0
- package/dist/snapshot/refs.d.ts.map +1 -0
- package/dist/snapshot/snapshotter.d.ts +27 -0
- package/dist/snapshot/snapshotter.d.ts.map +1 -0
- package/dist/tools/annotate.d.ts +4 -0
- package/dist/tools/annotate.d.ts.map +1 -0
- package/dist/tools/check.d.ts +4 -0
- package/dist/tools/check.d.ts.map +1 -0
- package/dist/tools/click.d.ts +4 -0
- package/dist/tools/click.d.ts.map +1 -0
- package/dist/tools/clone_component.d.ts +4 -0
- package/dist/tools/clone_component.d.ts.map +1 -0
- package/dist/tools/clone_page.d.ts +4 -0
- package/dist/tools/clone_page.d.ts.map +1 -0
- package/dist/tools/close.d.ts +4 -0
- package/dist/tools/close.d.ts.map +1 -0
- package/dist/tools/connect.d.ts +4 -0
- package/dist/tools/connect.d.ts.map +1 -0
- package/dist/tools/console_poll.d.ts +4 -0
- package/dist/tools/console_poll.d.ts.map +1 -0
- package/dist/tools/cookie_import.d.ts +25 -0
- package/dist/tools/cookie_import.d.ts.map +1 -0
- package/dist/tools/cookie_list.d.ts +9 -0
- package/dist/tools/cookie_list.d.ts.map +1 -0
- package/dist/tools/debug_trace_snapshot.d.ts +4 -0
- package/dist/tools/debug_trace_snapshot.d.ts.map +1 -0
- package/dist/tools/deps.d.ts +26 -0
- package/dist/tools/deps.d.ts.map +1 -0
- package/dist/tools/disconnect.d.ts +4 -0
- package/dist/tools/disconnect.d.ts.map +1 -0
- package/dist/tools/dom_get_html.d.ts +4 -0
- package/dist/tools/dom_get_html.d.ts.map +1 -0
- package/dist/tools/dom_get_text.d.ts +4 -0
- package/dist/tools/dom_get_text.d.ts.map +1 -0
- package/dist/tools/get_attr.d.ts +4 -0
- package/dist/tools/get_attr.d.ts.map +1 -0
- package/dist/tools/get_value.d.ts +4 -0
- package/dist/tools/get_value.d.ts.map +1 -0
- package/dist/tools/goto.d.ts +4 -0
- package/dist/tools/goto.d.ts.map +1 -0
- package/dist/tools/hover.d.ts +4 -0
- package/dist/tools/hover.d.ts.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/is_checked.d.ts +4 -0
- package/dist/tools/is_checked.d.ts.map +1 -0
- package/dist/tools/is_enabled.d.ts +4 -0
- package/dist/tools/is_enabled.d.ts.map +1 -0
- package/dist/tools/is_visible.d.ts +4 -0
- package/dist/tools/is_visible.d.ts.map +1 -0
- package/dist/tools/launch.d.ts +4 -0
- package/dist/tools/launch.d.ts.map +1 -0
- package/dist/tools/list.d.ts +4 -0
- package/dist/tools/list.d.ts.map +1 -0
- package/dist/tools/macro_resolve.d.ts +25 -0
- package/dist/tools/macro_resolve.d.ts.map +1 -0
- package/dist/tools/network_poll.d.ts +4 -0
- package/dist/tools/network_poll.d.ts.map +1 -0
- package/dist/tools/page.d.ts +4 -0
- package/dist/tools/page.d.ts.map +1 -0
- package/dist/tools/perf.d.ts +4 -0
- package/dist/tools/perf.d.ts.map +1 -0
- package/dist/tools/press.d.ts +4 -0
- package/dist/tools/press.d.ts.map +1 -0
- package/dist/tools/product_video_run.d.ts +4 -0
- package/dist/tools/product_video_run.d.ts.map +1 -0
- package/dist/tools/prompting_guide.d.ts +4 -0
- package/dist/tools/prompting_guide.d.ts.map +1 -0
- package/dist/tools/research_run.d.ts +4 -0
- package/dist/tools/research_run.d.ts.map +1 -0
- package/dist/tools/response.d.ts +16 -0
- package/dist/tools/response.d.ts.map +1 -0
- package/dist/tools/run.d.ts +4 -0
- package/dist/tools/run.d.ts.map +1 -0
- package/dist/tools/screenshot.d.ts +4 -0
- package/dist/tools/screenshot.d.ts.map +1 -0
- package/dist/tools/scroll.d.ts +4 -0
- package/dist/tools/scroll.d.ts.map +1 -0
- package/dist/tools/scroll_into_view.d.ts +4 -0
- package/dist/tools/scroll_into_view.d.ts.map +1 -0
- package/dist/tools/select.d.ts +4 -0
- package/dist/tools/select.d.ts.map +1 -0
- package/dist/tools/shopping_run.d.ts +4 -0
- package/dist/tools/shopping_run.d.ts.map +1 -0
- package/dist/tools/skill_list.d.ts +4 -0
- package/dist/tools/skill_list.d.ts.map +1 -0
- package/dist/tools/skill_load.d.ts +4 -0
- package/dist/tools/skill_load.d.ts.map +1 -0
- package/dist/tools/snapshot.d.ts +4 -0
- package/dist/tools/snapshot.d.ts.map +1 -0
- package/dist/tools/status.d.ts +4 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/target_close.d.ts +4 -0
- package/dist/tools/target_close.d.ts.map +1 -0
- package/dist/tools/target_new.d.ts +4 -0
- package/dist/tools/target_new.d.ts.map +1 -0
- package/dist/tools/target_use.d.ts +4 -0
- package/dist/tools/target_use.d.ts.map +1 -0
- package/dist/tools/targets_list.d.ts +4 -0
- package/dist/tools/targets_list.d.ts.map +1 -0
- package/dist/tools/type.d.ts +4 -0
- package/dist/tools/type.d.ts.map +1 -0
- package/dist/tools/uncheck.d.ts +4 -0
- package/dist/tools/uncheck.d.ts.map +1 -0
- package/dist/tools/wait.d.ts +4 -0
- package/dist/tools/wait.d.ts.map +1 -0
- package/dist/tools/workflow-runtime.d.ts +4 -0
- package/dist/tools/workflow-runtime.d.ts.map +1 -0
- package/dist/utils/crypto.d.ts +2 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/endpoint-validation.d.ts +2 -0
- package/dist/utils/endpoint-validation.d.ts.map +1 -0
- package/dist/utils/fs.d.ts +5 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/hub-enabled.d.ts +3 -0
- package/dist/utils/hub-enabled.d.ts.map +1 -0
- package/extension/dist/annotate-content.css +237 -0
- package/extension/dist/annotate-content.js +934 -0
- package/extension/dist/background.js +1203 -35
- package/extension/dist/logging.js +50 -0
- package/extension/dist/ops/dom-bridge.js +355 -0
- package/extension/dist/ops/ops-runtime.js +1751 -0
- package/extension/dist/ops/ops-session-store.js +203 -0
- package/extension/dist/ops/parallelism-governor.js +117 -0
- package/extension/dist/ops/redaction.js +52 -0
- package/extension/dist/ops/snapshot-builder.js +4 -0
- package/extension/dist/ops/snapshot-shared.js +236 -0
- package/extension/dist/popup.js +370 -25
- package/extension/dist/relay-settings.js +1 -0
- package/extension/dist/services/CDPRouter.js +567 -104
- package/extension/dist/services/ConnectionManager.js +469 -60
- package/extension/dist/services/NativePortManager.js +182 -0
- package/extension/dist/services/RelayClient.js +227 -26
- package/extension/dist/services/TabManager.js +81 -0
- package/extension/dist/services/TargetSessionMap.js +146 -0
- package/extension/dist/services/cdp-router-commands.js +203 -0
- package/extension/dist/services/url-restrictions.js +41 -0
- package/extension/dist/types.js +3 -1
- package/extension/icons/icon128.png +0 -0
- package/extension/icons/icon16.png +0 -0
- package/extension/icons/icon32.png +0 -0
- package/extension/icons/icon48.png +0 -0
- package/extension/manifest.json +17 -3
- package/extension/popup.html +144 -0
- package/package.json +26 -17
- package/scripts/native/host.cjs +230 -0
- package/scripts/native/install.ps1 +73 -0
- package/scripts/native/install.sh +66 -0
- package/scripts/native/uninstall.ps1 +25 -0
- package/scripts/native/uninstall.sh +26 -0
- package/skills/AGENTS.md +47 -66
- package/skills/opendevbrowser-best-practices/SKILL.md +196 -49
- package/skills/opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md +44 -0
- package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +95 -0
- package/skills/opendevbrowser-best-practices/artifacts/debug-trace-playbook.md +36 -0
- package/skills/opendevbrowser-best-practices/artifacts/fingerprint-tiers.md +36 -0
- package/skills/opendevbrowser-best-practices/artifacts/macro-workflows.md +43 -0
- package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +36 -0
- package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +89 -0
- package/skills/opendevbrowser-best-practices/assets/templates/cdp-forward-envelope.json +11 -0
- package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +56 -0
- package/skills/opendevbrowser-best-practices/assets/templates/ops-request-envelope.json +9 -0
- package/skills/opendevbrowser-best-practices/assets/templates/robustness-checklist.json +79 -0
- package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +24 -0
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +144 -0
- package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +83 -0
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +93 -0
- package/skills/opendevbrowser-continuity-ledger/SKILL.md +67 -23
- package/skills/opendevbrowser-data-extraction/SKILL.md +126 -0
- package/skills/opendevbrowser-data-extraction/artifacts/extraction-workflows.md +31 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/compliance-checklist.md +7 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/extraction-schema.json +17 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/pagination-state.json +11 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/quality-gates.json +10 -0
- package/skills/opendevbrowser-data-extraction/examples/sample-schema.json +19 -0
- package/skills/opendevbrowser-data-extraction/scripts/run-extraction-workflow.sh +83 -0
- package/skills/opendevbrowser-data-extraction/scripts/validate-skill-assets.sh +49 -0
- package/skills/opendevbrowser-form-testing/SKILL.md +143 -0
- package/skills/opendevbrowser-form-testing/artifacts/form-workflows.md +37 -0
- package/skills/opendevbrowser-form-testing/assets/templates/a11y-assertions.md +7 -0
- package/skills/opendevbrowser-form-testing/assets/templates/challenge-decision-tree.json +16 -0
- package/skills/opendevbrowser-form-testing/assets/templates/multi-step-state.json +11 -0
- package/skills/opendevbrowser-form-testing/assets/templates/validation-matrix.json +24 -0
- package/skills/opendevbrowser-form-testing/examples/sample-validation-matrix.json +29 -0
- package/skills/opendevbrowser-form-testing/scripts/run-form-workflow.sh +82 -0
- package/skills/opendevbrowser-form-testing/scripts/validate-skill-assets.sh +49 -0
- package/skills/opendevbrowser-login-automation/SKILL.md +159 -0
- package/skills/opendevbrowser-login-automation/artifacts/login-workflows.md +39 -0
- package/skills/opendevbrowser-login-automation/assets/templates/auth-signals.json +21 -0
- package/skills/opendevbrowser-login-automation/assets/templates/challenge-checkpoint.md +10 -0
- package/skills/opendevbrowser-login-automation/assets/templates/login-scenario-matrix.json +26 -0
- package/skills/opendevbrowser-login-automation/examples/sample-auth-signals.json +14 -0
- package/skills/opendevbrowser-login-automation/scripts/record-auth-signals.sh +18 -0
- package/skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh +99 -0
- package/skills/opendevbrowser-login-automation/scripts/validate-skill-assets.sh +50 -0
- package/skills/opendevbrowser-product-presentation-asset/SKILL.md +98 -0
- package/skills/opendevbrowser-product-presentation-asset/artifacts/asset-pack-assembly.md +23 -0
- package/skills/opendevbrowser-product-presentation-asset/artifacts/ugc-creative-guide.md +21 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/claims-evidence-map.md +5 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/copy.md +5 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/features.md +4 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/manifest.schema.json +14 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/shot-list.md +7 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/ugc-concepts.md +17 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/user-actions.md +7 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/video-assembly.md +18 -0
- package/skills/opendevbrowser-product-presentation-asset/examples/sample-input.json +6 -0
- package/skills/opendevbrowser-product-presentation-asset/examples/sample-manifest.json +18 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +9 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +14 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +9 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh +96 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +56 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +43 -0
- package/skills/opendevbrowser-research/SKILL.md +73 -0
- package/skills/opendevbrowser-research/artifacts/research-workflows.md +29 -0
- package/skills/opendevbrowser-research/assets/templates/compact.md +7 -0
- package/skills/opendevbrowser-research/assets/templates/context.json +18 -0
- package/skills/opendevbrowser-research/assets/templates/report.md +9 -0
- package/skills/opendevbrowser-research/examples/sample-input.json +6 -0
- package/skills/opendevbrowser-research/examples/sample-output.md +4 -0
- package/skills/opendevbrowser-research/scripts/render-output.sh +12 -0
- package/skills/opendevbrowser-research/scripts/run-research.sh +23 -0
- package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +48 -0
- package/skills/opendevbrowser-research/scripts/write-artifacts.sh +29 -0
- package/skills/opendevbrowser-shopping/SKILL.md +118 -0
- package/skills/opendevbrowser-shopping/artifacts/deal-hunting-workflows.md +37 -0
- package/skills/opendevbrowser-shopping/assets/templates/deal-thresholds.json +8 -0
- package/skills/opendevbrowser-shopping/assets/templates/deals-context.json +9 -0
- package/skills/opendevbrowser-shopping/assets/templates/deals-table.md +4 -0
- package/skills/opendevbrowser-shopping/assets/templates/market-analysis.json +30 -0
- package/skills/opendevbrowser-shopping/examples/sample-deals.md +4 -0
- package/skills/opendevbrowser-shopping/examples/sample-query.json +5 -0
- package/skills/opendevbrowser-shopping/scripts/analyze-market.sh +307 -0
- package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +28 -0
- package/skills/opendevbrowser-shopping/scripts/render-deals.sh +13 -0
- package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +32 -0
- package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +19 -0
- package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +53 -0
- package/dist/chunk-WTFSMBVH.js +0 -2815
- package/dist/chunk-WTFSMBVH.js.map +0 -1
- package/extension/dist/popup.jsx +0 -150
- package/skills/data-extraction/SKILL.md +0 -136
- package/skills/form-testing/SKILL.md +0 -113
- package/skills/login-automation/SKILL.md +0 -98
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
print_help() {
|
|
5
|
+
cat <<'HELP'
|
|
6
|
+
Form testing workflow router
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
./skills/opendevbrowser-form-testing/scripts/run-form-workflow.sh <workflow>
|
|
10
|
+
|
|
11
|
+
Workflows:
|
|
12
|
+
discovery
|
|
13
|
+
validation
|
|
14
|
+
multi-step
|
|
15
|
+
dynamic-required
|
|
16
|
+
file-upload
|
|
17
|
+
challenge-checkpoint
|
|
18
|
+
list
|
|
19
|
+
HELP
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
workflow="${1:-list}"
|
|
23
|
+
|
|
24
|
+
case "$workflow" in
|
|
25
|
+
list)
|
|
26
|
+
print_help
|
|
27
|
+
;;
|
|
28
|
+
discovery)
|
|
29
|
+
cat <<'FLOW'
|
|
30
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
31
|
+
# map refs for all inputs, toggles, and submit controls
|
|
32
|
+
FLOW
|
|
33
|
+
;;
|
|
34
|
+
validation)
|
|
35
|
+
cat <<'FLOW'
|
|
36
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
37
|
+
opendevbrowser_type sessionId="<session-id>" ref="<field-ref>" text=""
|
|
38
|
+
opendevbrowser_click sessionId="<session-id>" ref="<submit-ref>"
|
|
39
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="outline"
|
|
40
|
+
opendevbrowser_dom_get_text sessionId="<session-id>" ref="<error-ref>"
|
|
41
|
+
opendevbrowser_get_attr sessionId="<session-id>" ref="<field-ref>" name="aria-invalid"
|
|
42
|
+
FLOW
|
|
43
|
+
;;
|
|
44
|
+
multi-step)
|
|
45
|
+
cat <<'FLOW'
|
|
46
|
+
# validate each step, then continue
|
|
47
|
+
opendevbrowser_click sessionId="<session-id>" ref="<next-step-ref>"
|
|
48
|
+
opendevbrowser_wait sessionId="<session-id>" ref="<step-container-ref>" state="visible"
|
|
49
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
50
|
+
FLOW
|
|
51
|
+
;;
|
|
52
|
+
dynamic-required)
|
|
53
|
+
cat <<'FLOW'
|
|
54
|
+
# Trigger conditional branch then re-snapshot for updated requirements.
|
|
55
|
+
opendevbrowser_click sessionId="<session-id>" ref="<toggle-ref>"
|
|
56
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
57
|
+
opendevbrowser_click sessionId="<session-id>" ref="<submit-ref>"
|
|
58
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="outline"
|
|
59
|
+
FLOW
|
|
60
|
+
;;
|
|
61
|
+
file-upload)
|
|
62
|
+
cat <<'FLOW'
|
|
63
|
+
# Validate upload constraints and submission behavior.
|
|
64
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
65
|
+
opendevbrowser_click sessionId="<session-id>" ref="<file-input-ref>"
|
|
66
|
+
opendevbrowser_network_poll sessionId="<session-id>" max=50
|
|
67
|
+
FLOW
|
|
68
|
+
;;
|
|
69
|
+
challenge-checkpoint)
|
|
70
|
+
cat <<'FLOW'
|
|
71
|
+
# if challenge is detected, pause automation and resume after manual completion
|
|
72
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="outline"
|
|
73
|
+
opendevbrowser_wait sessionId="<session-id>" until="networkidle"
|
|
74
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
75
|
+
FLOW
|
|
76
|
+
;;
|
|
77
|
+
*)
|
|
78
|
+
echo "Unknown workflow: $workflow" >&2
|
|
79
|
+
print_help
|
|
80
|
+
exit 2
|
|
81
|
+
;;
|
|
82
|
+
esac
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
|
+
skill_file="$root/SKILL.md"
|
|
6
|
+
|
|
7
|
+
required=(
|
|
8
|
+
"artifacts/form-workflows.md"
|
|
9
|
+
"assets/templates/validation-matrix.json"
|
|
10
|
+
"assets/templates/challenge-decision-tree.json"
|
|
11
|
+
"assets/templates/a11y-assertions.md"
|
|
12
|
+
"assets/templates/multi-step-state.json"
|
|
13
|
+
"scripts/run-form-workflow.sh"
|
|
14
|
+
"scripts/validate-skill-assets.sh"
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
status=0
|
|
18
|
+
for rel in "${required[@]}"; do
|
|
19
|
+
if [[ ! -f "$root/$rel" ]]; then
|
|
20
|
+
echo "Missing required asset: $rel" >&2
|
|
21
|
+
status=1
|
|
22
|
+
fi
|
|
23
|
+
if ! grep -Fq "$rel" "$skill_file"; then
|
|
24
|
+
echo "SKILL.md missing reference: $rel" >&2
|
|
25
|
+
status=1
|
|
26
|
+
fi
|
|
27
|
+
done
|
|
28
|
+
|
|
29
|
+
for rel in scripts/run-form-workflow.sh scripts/validate-skill-assets.sh; do
|
|
30
|
+
if [[ -f "$root/$rel" && ! -x "$root/$rel" ]]; then
|
|
31
|
+
echo "Script is not executable: $rel" >&2
|
|
32
|
+
status=1
|
|
33
|
+
fi
|
|
34
|
+
done
|
|
35
|
+
|
|
36
|
+
for rel in assets/templates/validation-matrix.json assets/templates/challenge-decision-tree.json assets/templates/multi-step-state.json; do
|
|
37
|
+
if [[ -f "$root/$rel" ]]; then
|
|
38
|
+
if ! node -e 'const fs=require("fs"); JSON.parse(fs.readFileSync(process.argv[1], "utf8"));' "$root/$rel" >/dev/null 2>&1; then
|
|
39
|
+
echo "Invalid JSON template: $rel" >&2
|
|
40
|
+
status=1
|
|
41
|
+
fi
|
|
42
|
+
fi
|
|
43
|
+
done
|
|
44
|
+
|
|
45
|
+
if [[ $status -ne 0 ]]; then
|
|
46
|
+
exit $status
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
echo "Form testing skill assets validated."
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opendevbrowser-login-automation
|
|
3
|
+
description: This skill should be used when the user asks to "automate login", "test authentication", "sign in programmatically", "validate login errors", or "verify session persistence" with OpenDevBrowser.
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Login Automation Skill
|
|
8
|
+
|
|
9
|
+
Use this skill for deterministic auth testing that handles MFA and anti-bot checkpoints without unsafe bypass patterns.
|
|
10
|
+
|
|
11
|
+
## Pack Contents
|
|
12
|
+
|
|
13
|
+
- `artifacts/login-workflows.md`
|
|
14
|
+
- `assets/templates/login-scenario-matrix.json`
|
|
15
|
+
- `assets/templates/challenge-checkpoint.md`
|
|
16
|
+
- `assets/templates/auth-signals.json`
|
|
17
|
+
- `scripts/run-login-workflow.sh`
|
|
18
|
+
- `scripts/record-auth-signals.sh`
|
|
19
|
+
- `scripts/validate-skill-assets.sh`
|
|
20
|
+
- Shared robustness matrix: `../opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md`
|
|
21
|
+
|
|
22
|
+
## Fast Start
|
|
23
|
+
|
|
24
|
+
1. Validate pack integrity.
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
./skills/opendevbrowser-login-automation/scripts/validate-skill-assets.sh
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
2. Print a ready workflow.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
./skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh password
|
|
34
|
+
./skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh mfa
|
|
35
|
+
./skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh challenge-checkpoint
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Core Rules
|
|
39
|
+
|
|
40
|
+
- Use snapshot refs, not ad-hoc selectors.
|
|
41
|
+
- Run one decision loop at a time: snapshot -> action -> snapshot.
|
|
42
|
+
- Never store credentials in skill files, logs, screenshots, or committed fixtures.
|
|
43
|
+
- Treat anti-bot challenges as checkpoints (manual solve or approved test keys), not bypass targets.
|
|
44
|
+
- Keep a bounded retry budget (max 2 automated retries) and honor `Retry-After` when present.
|
|
45
|
+
|
|
46
|
+
## Parallel Multitab Alignment
|
|
47
|
+
|
|
48
|
+
- Apply shared concurrency policy from `../opendevbrowser-best-practices/SKILL.md` ("Parallel Operations").
|
|
49
|
+
- Validate login paths across `managed`, `extension`, and `cdpConnect` before parity sign-off.
|
|
50
|
+
- Treat extension headless attempts as expected `unsupported_mode`; do not force unsupported auth runs.
|
|
51
|
+
|
|
52
|
+
## Robustness Coverage (Known-Issue Matrix)
|
|
53
|
+
|
|
54
|
+
Matrix source: `../opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md`
|
|
55
|
+
|
|
56
|
+
- `ISSUE-01`: stale refs / DOM churn
|
|
57
|
+
- `ISSUE-02`: challenge or SSO iframe boundaries
|
|
58
|
+
- `ISSUE-03`: popup/new-tab SSO redirects
|
|
59
|
+
- `ISSUE-04`: MFA/session step-up branching
|
|
60
|
+
- `ISSUE-05`: anti-bot challenge loops
|
|
61
|
+
- `ISSUE-06`: 429/backoff discipline
|
|
62
|
+
- `ISSUE-07`: extension readiness on resume
|
|
63
|
+
|
|
64
|
+
## Challenge-Aware Flow
|
|
65
|
+
|
|
66
|
+
1. Preflight: goto login page, wait, snapshot actionables.
|
|
67
|
+
2. Enter identifier and password.
|
|
68
|
+
3. Submit once.
|
|
69
|
+
4. Branch by observed state:
|
|
70
|
+
- authenticated shell appears -> success validation
|
|
71
|
+
- MFA prompt appears -> continue MFA branch
|
|
72
|
+
- popup/new-tab SSO appears -> switch target and continue auth branch
|
|
73
|
+
- anti-bot challenge appears -> checkpoint branch
|
|
74
|
+
- invalid credentials or lockout message -> failure branch
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
opendevbrowser_goto sessionId="<session-id>" url="https://example.com/login"
|
|
78
|
+
opendevbrowser_wait sessionId="<session-id>" until="networkidle"
|
|
79
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
80
|
+
opendevbrowser_type sessionId="<session-id>" ref="<identifier-ref>" text="<resolved-identifier>"
|
|
81
|
+
opendevbrowser_type sessionId="<session-id>" ref="<password-ref>" text="<resolved-password>"
|
|
82
|
+
opendevbrowser_click sessionId="<session-id>" ref="<submit-ref>"
|
|
83
|
+
opendevbrowser_wait sessionId="<session-id>" until="networkidle"
|
|
84
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="outline"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Anti-Bot Checkpoint Pattern
|
|
88
|
+
|
|
89
|
+
Use this when CAPTCHA/turnstile/challenge pages appear.
|
|
90
|
+
|
|
91
|
+
1. Detect challenge UI from snapshot refs or page text.
|
|
92
|
+
2. Pause automation and mark checkpoint in run log.
|
|
93
|
+
3. Complete challenge manually (or with provider-approved test key in non-production).
|
|
94
|
+
4. Resume from a fresh snapshot and continue auth validation.
|
|
95
|
+
|
|
96
|
+
Signals to monitor:
|
|
97
|
+
- challenge iframe/widget visible
|
|
98
|
+
- error copy like "verify you are human"
|
|
99
|
+
- repeated 403/429 responses on auth endpoints
|
|
100
|
+
- repeated challenge pages after resume (loop condition)
|
|
101
|
+
|
|
102
|
+
Challenge loop guardrail:
|
|
103
|
+
- After 2 challenge checkpoints without success, stop automation and escalate.
|
|
104
|
+
- If `Retry-After` is available, wait at least that duration before any retry.
|
|
105
|
+
|
|
106
|
+
## MFA Pattern
|
|
107
|
+
|
|
108
|
+
1. Submit primary credentials.
|
|
109
|
+
2. Wait for OTP/passkey/TOTP ref visibility.
|
|
110
|
+
3. Enter second factor.
|
|
111
|
+
4. Submit and validate authenticated state.
|
|
112
|
+
|
|
113
|
+
```text
|
|
114
|
+
opendevbrowser_wait sessionId="<session-id>" ref="<mfa-input-ref>" state="visible"
|
|
115
|
+
opendevbrowser_type sessionId="<session-id>" ref="<mfa-input-ref>" text="<resolved-otp>"
|
|
116
|
+
opendevbrowser_click sessionId="<session-id>" ref="<mfa-submit-ref>"
|
|
117
|
+
opendevbrowser_wait sessionId="<session-id>" until="networkidle"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Validation Signals
|
|
121
|
+
|
|
122
|
+
Validate at least two independent signals:
|
|
123
|
+
|
|
124
|
+
- URL/route transition to authenticated area.
|
|
125
|
+
- Auth-only element visible (`opendevbrowser_is_visible`).
|
|
126
|
+
- Auth request success from `opendevbrowser_network_poll`.
|
|
127
|
+
|
|
128
|
+
```text
|
|
129
|
+
opendevbrowser_network_poll sessionId="<session-id>" max=50
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Session Persistence and Reauth
|
|
133
|
+
|
|
134
|
+
Use persistent profiles for remember-me checks:
|
|
135
|
+
|
|
136
|
+
```text
|
|
137
|
+
opendevbrowser_launch profile="auth-test" persistProfile=true noExtension=true
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Close and relaunch, then confirm one of:
|
|
141
|
+
- still authenticated without credential prompt
|
|
142
|
+
- intentionally forced reauth policy was applied
|
|
143
|
+
|
|
144
|
+
## Failure Modes
|
|
145
|
+
|
|
146
|
+
- Invalid credentials: assert explicit field/banner errors.
|
|
147
|
+
- Rate limit/lockout: stop retries, apply cooldown, rotate test account.
|
|
148
|
+
- Challenge loop: escalate as anti-bot pressure issue.
|
|
149
|
+
- MFA unavailable for test account: mark incomplete test prerequisite.
|
|
150
|
+
|
|
151
|
+
## References
|
|
152
|
+
|
|
153
|
+
Use these sources when tuning login automation behavior:
|
|
154
|
+
- Playwright auth guide: https://playwright.dev/docs/auth
|
|
155
|
+
- OWASP Authentication Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html
|
|
156
|
+
- NIST SP 800-63B (Digital Identity): https://pages.nist.gov/800-63-4/sp800-63b.html
|
|
157
|
+
- Cloudflare Turnstile testing keys: https://developers.cloudflare.com/turnstile/tutorials/testing/
|
|
158
|
+
- reCAPTCHA v2 testing keys: https://developers.google.com/recaptcha/docs/faq
|
|
159
|
+
- hCaptcha test keys: https://docs.hcaptcha.com/
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Login Workflows
|
|
2
|
+
|
|
3
|
+
## Password-only workflow
|
|
4
|
+
|
|
5
|
+
1. Preflight snapshot
|
|
6
|
+
2. Type identifier/password
|
|
7
|
+
3. Submit
|
|
8
|
+
4. Validate URL + auth-only ref + network status
|
|
9
|
+
5. Re-snapshot before any follow-up action
|
|
10
|
+
|
|
11
|
+
## MFA workflow
|
|
12
|
+
|
|
13
|
+
1. Run password-only steps
|
|
14
|
+
2. Wait for MFA field
|
|
15
|
+
3. Submit second factor
|
|
16
|
+
4. Validate session issuance
|
|
17
|
+
|
|
18
|
+
## SSO popup/new-tab workflow
|
|
19
|
+
|
|
20
|
+
1. Trigger SSO action from login page
|
|
21
|
+
2. Detect target/page change
|
|
22
|
+
3. Continue auth on active SSO target
|
|
23
|
+
4. Validate return to original app shell
|
|
24
|
+
5. Rebind refs from fresh snapshot
|
|
25
|
+
|
|
26
|
+
## Challenge checkpoint workflow
|
|
27
|
+
|
|
28
|
+
1. Detect challenge state
|
|
29
|
+
2. Record checkpoint with timestamp and trigger
|
|
30
|
+
3. Pause automated actions
|
|
31
|
+
4. Resume after challenge completion from fresh snapshot
|
|
32
|
+
5. If challenge repeats twice, stop and escalate as anti-bot pressure
|
|
33
|
+
|
|
34
|
+
## Lockout recovery workflow
|
|
35
|
+
|
|
36
|
+
1. Detect lockout or throttling banner
|
|
37
|
+
2. Stop retry loop
|
|
38
|
+
3. Record cooldown window/account status and `Retry-After` if present
|
|
39
|
+
4. Resume with different account or after wait window
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_id": "",
|
|
3
|
+
"url_before": "",
|
|
4
|
+
"url_after": "",
|
|
5
|
+
"auth_element_ref": "",
|
|
6
|
+
"auth_element_visible": false,
|
|
7
|
+
"network": {
|
|
8
|
+
"login_request_seen": false,
|
|
9
|
+
"status_codes": [],
|
|
10
|
+
"retry_after_seconds": 0
|
|
11
|
+
},
|
|
12
|
+
"frames_seen": 0,
|
|
13
|
+
"popup_detected": false,
|
|
14
|
+
"challenge_detected": false,
|
|
15
|
+
"challenge_type": "none",
|
|
16
|
+
"challenge_checkpoint_count": 0,
|
|
17
|
+
"mfa_detected": false,
|
|
18
|
+
"mfa_method": "unknown",
|
|
19
|
+
"issue_ids": [],
|
|
20
|
+
"result": "unknown"
|
|
21
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"scenario": "",
|
|
3
|
+
"steps": [],
|
|
4
|
+
"issue_ids": [
|
|
5
|
+
"ISSUE-01",
|
|
6
|
+
"ISSUE-02",
|
|
7
|
+
"ISSUE-03",
|
|
8
|
+
"ISSUE-04",
|
|
9
|
+
"ISSUE-05",
|
|
10
|
+
"ISSUE-06",
|
|
11
|
+
"ISSUE-07"
|
|
12
|
+
],
|
|
13
|
+
"expected_signals": [
|
|
14
|
+
"url_changed",
|
|
15
|
+
"auth_shell_visible",
|
|
16
|
+
"auth_network_success"
|
|
17
|
+
],
|
|
18
|
+
"failure_signals": [
|
|
19
|
+
"invalid_credentials",
|
|
20
|
+
"anti_bot_challenge",
|
|
21
|
+
"rate_limited",
|
|
22
|
+
"lockout"
|
|
23
|
+
],
|
|
24
|
+
"max_automated_retries": 2,
|
|
25
|
+
"requires_manual_checkpoint": false
|
|
26
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_id": "session-123",
|
|
3
|
+
"url_before": "https://example.com/login",
|
|
4
|
+
"url_after": "https://example.com/app",
|
|
5
|
+
"auth_element_ref": "r42",
|
|
6
|
+
"auth_element_visible": true,
|
|
7
|
+
"network": {
|
|
8
|
+
"login_request_seen": true,
|
|
9
|
+
"status_codes": [200]
|
|
10
|
+
},
|
|
11
|
+
"challenge_detected": false,
|
|
12
|
+
"mfa_detected": true,
|
|
13
|
+
"result": "authenticated"
|
|
14
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
if [[ $# -lt 2 ]]; then
|
|
5
|
+
echo "Usage: record-auth-signals.sh <template-json> <output-json>" >&2
|
|
6
|
+
exit 1
|
|
7
|
+
fi
|
|
8
|
+
|
|
9
|
+
template="$1"
|
|
10
|
+
output="$2"
|
|
11
|
+
|
|
12
|
+
if [[ ! -f "$template" ]]; then
|
|
13
|
+
echo "Missing template: $template" >&2
|
|
14
|
+
exit 1
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
cp "$template" "$output"
|
|
18
|
+
echo "Auth signal template copied to $output"
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
print_help() {
|
|
5
|
+
cat <<'HELP'
|
|
6
|
+
Login automation workflow router
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
./skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh <workflow>
|
|
10
|
+
|
|
11
|
+
Workflows:
|
|
12
|
+
password
|
|
13
|
+
mfa
|
|
14
|
+
sso-popup
|
|
15
|
+
challenge-checkpoint
|
|
16
|
+
challenge-loop-guard
|
|
17
|
+
lockout-recovery
|
|
18
|
+
session-persistence
|
|
19
|
+
list
|
|
20
|
+
HELP
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
workflow="${1:-list}"
|
|
24
|
+
|
|
25
|
+
case "$workflow" in
|
|
26
|
+
list)
|
|
27
|
+
print_help
|
|
28
|
+
;;
|
|
29
|
+
password)
|
|
30
|
+
cat <<'FLOW'
|
|
31
|
+
opendevbrowser_goto sessionId="<session-id>" url="<login-url>"
|
|
32
|
+
opendevbrowser_wait sessionId="<session-id>" until="networkidle"
|
|
33
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
34
|
+
opendevbrowser_type sessionId="<session-id>" ref="<identifier-ref>" text="<identifier>"
|
|
35
|
+
opendevbrowser_type sessionId="<session-id>" ref="<password-ref>" text="<password>"
|
|
36
|
+
opendevbrowser_click sessionId="<session-id>" ref="<submit-ref>"
|
|
37
|
+
opendevbrowser_wait sessionId="<session-id>" until="networkidle"
|
|
38
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="outline"
|
|
39
|
+
opendevbrowser_network_poll sessionId="<session-id>" max=50
|
|
40
|
+
FLOW
|
|
41
|
+
;;
|
|
42
|
+
mfa)
|
|
43
|
+
cat <<'FLOW'
|
|
44
|
+
# Run password workflow first.
|
|
45
|
+
opendevbrowser_wait sessionId="<session-id>" ref="<mfa-input-ref>" state="visible"
|
|
46
|
+
opendevbrowser_type sessionId="<session-id>" ref="<mfa-input-ref>" text="<otp>"
|
|
47
|
+
opendevbrowser_click sessionId="<session-id>" ref="<mfa-submit-ref>"
|
|
48
|
+
opendevbrowser_wait sessionId="<session-id>" until="networkidle"
|
|
49
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="outline"
|
|
50
|
+
FLOW
|
|
51
|
+
;;
|
|
52
|
+
sso-popup)
|
|
53
|
+
cat <<'FLOW'
|
|
54
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
55
|
+
opendevbrowser_click sessionId="<session-id>" ref="<sso-provider-ref>"
|
|
56
|
+
# Rebind to popup/new target before continuing auth steps.
|
|
57
|
+
opendevbrowser_targets_list sessionId="<session-id>"
|
|
58
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
59
|
+
FLOW
|
|
60
|
+
;;
|
|
61
|
+
challenge-checkpoint)
|
|
62
|
+
cat <<'FLOW'
|
|
63
|
+
# Detect challenge state, then pause automated actions.
|
|
64
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="outline"
|
|
65
|
+
# Manual checkpoint required: solve challenge with approved flow/test keys.
|
|
66
|
+
# Resume only after challenge is solved.
|
|
67
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="actionables"
|
|
68
|
+
opendevbrowser_click sessionId="<session-id>" ref="<continue-ref>"
|
|
69
|
+
opendevbrowser_wait sessionId="<session-id>" until="networkidle"
|
|
70
|
+
FLOW
|
|
71
|
+
;;
|
|
72
|
+
challenge-loop-guard)
|
|
73
|
+
cat <<'FLOW'
|
|
74
|
+
# If challenge reappears twice, stop and escalate.
|
|
75
|
+
opendevbrowser_network_poll sessionId="<session-id>" max=100
|
|
76
|
+
# Honor Retry-After before any retry when present.
|
|
77
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="outline"
|
|
78
|
+
FLOW
|
|
79
|
+
;;
|
|
80
|
+
lockout-recovery)
|
|
81
|
+
cat <<'FLOW'
|
|
82
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="outline"
|
|
83
|
+
# If lockout/rate-limit banner present: stop retries and cooldown.
|
|
84
|
+
opendevbrowser_network_poll sessionId="<session-id>" max=50
|
|
85
|
+
FLOW
|
|
86
|
+
;;
|
|
87
|
+
session-persistence)
|
|
88
|
+
cat <<'FLOW'
|
|
89
|
+
opendevbrowser_launch profile="auth-test" persistProfile=true noExtension=true
|
|
90
|
+
# Authenticate once, close, relaunch same profile, then assert auth state.
|
|
91
|
+
opendevbrowser_snapshot sessionId="<session-id>" format="outline"
|
|
92
|
+
FLOW
|
|
93
|
+
;;
|
|
94
|
+
*)
|
|
95
|
+
echo "Unknown workflow: $workflow" >&2
|
|
96
|
+
print_help
|
|
97
|
+
exit 2
|
|
98
|
+
;;
|
|
99
|
+
esac
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
|
+
skill_file="$root/SKILL.md"
|
|
6
|
+
|
|
7
|
+
required=(
|
|
8
|
+
"artifacts/login-workflows.md"
|
|
9
|
+
"assets/templates/login-scenario-matrix.json"
|
|
10
|
+
"assets/templates/challenge-checkpoint.md"
|
|
11
|
+
"assets/templates/auth-signals.json"
|
|
12
|
+
"scripts/run-login-workflow.sh"
|
|
13
|
+
"scripts/record-auth-signals.sh"
|
|
14
|
+
"scripts/validate-skill-assets.sh"
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
status=0
|
|
18
|
+
|
|
19
|
+
for rel in "${required[@]}"; do
|
|
20
|
+
if [[ ! -f "$root/$rel" ]]; then
|
|
21
|
+
echo "Missing required asset: $rel" >&2
|
|
22
|
+
status=1
|
|
23
|
+
fi
|
|
24
|
+
if ! grep -Fq "$rel" "$skill_file"; then
|
|
25
|
+
echo "SKILL.md missing reference: $rel" >&2
|
|
26
|
+
status=1
|
|
27
|
+
fi
|
|
28
|
+
done
|
|
29
|
+
|
|
30
|
+
for rel in scripts/run-login-workflow.sh scripts/record-auth-signals.sh scripts/validate-skill-assets.sh; do
|
|
31
|
+
if [[ -f "$root/$rel" && ! -x "$root/$rel" ]]; then
|
|
32
|
+
echo "Script is not executable: $rel" >&2
|
|
33
|
+
status=1
|
|
34
|
+
fi
|
|
35
|
+
done
|
|
36
|
+
|
|
37
|
+
for rel in assets/templates/login-scenario-matrix.json assets/templates/auth-signals.json; do
|
|
38
|
+
if [[ -f "$root/$rel" ]]; then
|
|
39
|
+
if ! node -e 'const fs=require("fs"); JSON.parse(fs.readFileSync(process.argv[1], "utf8"));' "$root/$rel" >/dev/null 2>&1; then
|
|
40
|
+
echo "Invalid JSON template: $rel" >&2
|
|
41
|
+
status=1
|
|
42
|
+
fi
|
|
43
|
+
fi
|
|
44
|
+
done
|
|
45
|
+
|
|
46
|
+
if [[ $status -ne 0 ]]; then
|
|
47
|
+
exit $status
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
echo "Login automation skill assets validated."
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opendevbrowser-product-presentation-asset
|
|
3
|
+
description: Collects product screenshots, images, copy, and metadata into a local folder pack for video workflows.
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Product Presentation Asset Skill
|
|
8
|
+
|
|
9
|
+
Use this skill to build complete product-video input packs and assembly instructions for UGC-style content production.
|
|
10
|
+
|
|
11
|
+
## Pack Contents
|
|
12
|
+
|
|
13
|
+
- `artifacts/asset-pack-assembly.md`
|
|
14
|
+
- `artifacts/ugc-creative-guide.md`
|
|
15
|
+
- `assets/templates/manifest.schema.json`
|
|
16
|
+
- `assets/templates/copy.md`
|
|
17
|
+
- `assets/templates/features.md`
|
|
18
|
+
- `assets/templates/video-assembly.md`
|
|
19
|
+
- `assets/templates/user-actions.md`
|
|
20
|
+
- `assets/templates/ugc-concepts.md`
|
|
21
|
+
- `assets/templates/shot-list.md`
|
|
22
|
+
- `assets/templates/claims-evidence-map.md`
|
|
23
|
+
- `scripts/collect-product.sh`
|
|
24
|
+
- `scripts/capture-screenshots.sh`
|
|
25
|
+
- `scripts/download-images.sh`
|
|
26
|
+
- `scripts/write-manifest.sh`
|
|
27
|
+
- `scripts/render-video-brief.sh`
|
|
28
|
+
- `scripts/validate-skill-assets.sh`
|
|
29
|
+
- Shared robustness matrix: `../opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md`
|
|
30
|
+
|
|
31
|
+
## Fast Start
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
./skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh
|
|
35
|
+
./skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh "https://example.com/product/123"
|
|
36
|
+
./skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh /path/to/manifest.json /tmp/product-video-brief
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Final Assets Produced
|
|
40
|
+
|
|
41
|
+
Expected output pack includes:
|
|
42
|
+
- `manifest.json` with canonical product metadata
|
|
43
|
+
- `product.json` and `pricing.json`
|
|
44
|
+
- `images/` for product stills
|
|
45
|
+
- `screenshots/` for page context and UI proof
|
|
46
|
+
- `copy.md` and `features.md`
|
|
47
|
+
- `raw/source-record.json` for auditability
|
|
48
|
+
|
|
49
|
+
The `render-video-brief.sh` helper adds:
|
|
50
|
+
- `video-brief.md`
|
|
51
|
+
- `shot-list.md`
|
|
52
|
+
- `ugc-brief.md`
|
|
53
|
+
- `claims-evidence-map.md`
|
|
54
|
+
|
|
55
|
+
## What the User Should Do
|
|
56
|
+
|
|
57
|
+
1. Pick product URL or product name.
|
|
58
|
+
2. Run collection workflow and confirm output pack path.
|
|
59
|
+
3. Review generated manifest/copy/features for accuracy.
|
|
60
|
+
4. Run `render-video-brief.sh` to generate production instructions.
|
|
61
|
+
5. Hand the brief and assets to editor/creator pipeline.
|
|
62
|
+
|
|
63
|
+
## Parallel Multitab Alignment
|
|
64
|
+
|
|
65
|
+
- Apply shared concurrency policy from `../opendevbrowser-best-practices/SKILL.md` ("Parallel Operations").
|
|
66
|
+
- Validate asset capture flows across `managed`, `extension`, and `cdpConnect` when browser capture is involved.
|
|
67
|
+
- Keep one session per worker for concurrent product-page captures; avoid target-switch thrash in one session.
|
|
68
|
+
|
|
69
|
+
## How to Combine the Assets
|
|
70
|
+
|
|
71
|
+
1. Use `manifest.json` as source of truth.
|
|
72
|
+
2. Build hooks and claims from `copy.md` + `features.md`.
|
|
73
|
+
3. Pair each claim with supporting asset (`images` or `screenshots`).
|
|
74
|
+
4. Sequence assets using `shot-list.md`.
|
|
75
|
+
5. Validate pricing/availability freshness before publishing.
|
|
76
|
+
6. Validate every claim appears in `claims-evidence-map.md` before publish.
|
|
77
|
+
|
|
78
|
+
## Robustness Coverage (Known-Issue Matrix)
|
|
79
|
+
|
|
80
|
+
Matrix source: `../opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md`
|
|
81
|
+
|
|
82
|
+
- `ISSUE-10`: normalized price/currency fields for claims
|
|
83
|
+
- `ISSUE-11`: anchor discount context for pricing claims
|
|
84
|
+
- `ISSUE-12`: stale price and unsupported-claim prevention via evidence mapping
|
|
85
|
+
|
|
86
|
+
## UGC Key Concepts
|
|
87
|
+
|
|
88
|
+
- Hook in first 2 seconds with user problem + payoff.
|
|
89
|
+
- Show real product usage context before polished close-ups.
|
|
90
|
+
- Keep claims concrete and verifiable from captured assets.
|
|
91
|
+
- Use one CTA and one primary value proposition per short clip.
|
|
92
|
+
- Preserve authenticity: avoid over-produced voice/style mismatches.
|
|
93
|
+
|
|
94
|
+
## References
|
|
95
|
+
|
|
96
|
+
- FTC pricing guidance (deceptive pricing): https://www.ecfr.gov/current/title-16/chapter-I/subchapter-B/part-233
|
|
97
|
+
- Schema.org Offer metadata: https://schema.org/Offer
|
|
98
|
+
- NIST unit pricing/value comparison guide: https://www.nist.gov/publications/unit-pricing-guide
|