opendevbrowser 0.0.17 → 0.0.18
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 +171 -73
- package/dist/annotate/agent-inbox-store.d.ts +58 -0
- package/dist/annotate/agent-inbox-store.d.ts.map +1 -0
- package/dist/annotate/agent-inbox.d.ts +25 -0
- package/dist/annotate/agent-inbox.d.ts.map +1 -0
- package/dist/annotate/direct-annotator.d.ts.map +1 -1
- package/dist/annotate/timeout-messages.d.ts +4 -0
- package/dist/annotate/timeout-messages.d.ts.map +1 -0
- package/dist/automation/coordinator.d.ts +55 -0
- package/dist/automation/coordinator.d.ts.map +1 -0
- package/dist/browser/annotation-manager.d.ts +4 -1
- package/dist/browser/annotation-manager.d.ts.map +1 -1
- package/dist/browser/browser-manager.d.ts +147 -47
- package/dist/browser/browser-manager.d.ts.map +1 -1
- package/dist/browser/canvas-client.d.ts +1 -0
- package/dist/browser/canvas-client.d.ts.map +1 -1
- package/dist/browser/canvas-code-sync-manager.d.ts +9 -1
- package/dist/browser/canvas-code-sync-manager.d.ts.map +1 -1
- package/dist/browser/canvas-manager.d.ts +29 -1
- package/dist/browser/canvas-manager.d.ts.map +1 -1
- package/dist/browser/global-challenge-coordinator.d.ts +27 -0
- package/dist/browser/global-challenge-coordinator.d.ts.map +1 -0
- package/dist/browser/manager-types.d.ts +167 -1
- package/dist/browser/manager-types.d.ts.map +1 -1
- package/dist/browser/ops-browser-manager.d.ts +103 -3
- package/dist/browser/ops-browser-manager.d.ts.map +1 -1
- package/dist/browser/ops-client.d.ts +17 -1
- package/dist/browser/ops-client.d.ts.map +1 -1
- package/dist/browser/playwright-runtime.d.ts +4 -0
- package/dist/browser/playwright-runtime.d.ts.map +1 -0
- package/dist/browser/review-surface.d.ts +9 -0
- package/dist/browser/review-surface.d.ts.map +1 -0
- package/dist/browser/screencast-recorder.d.ts +57 -0
- package/dist/browser/screencast-recorder.d.ts.map +1 -0
- package/dist/browser/session-inspector.d.ts +71 -0
- package/dist/browser/session-inspector.d.ts.map +1 -0
- package/dist/browser/session-store.d.ts +5 -1
- package/dist/browser/session-store.d.ts.map +1 -1
- package/dist/browser/system-chrome-cookies.d.ts +46 -0
- package/dist/browser/system-chrome-cookies.d.ts.map +1 -0
- package/dist/browser/target-manager.d.ts +1 -0
- package/dist/browser/target-manager.d.ts.map +1 -1
- package/dist/cache/chrome-locator.d.ts.map +1 -1
- package/dist/cache/chrome-user-data.d.ts +17 -0
- package/dist/cache/chrome-user-data.d.ts.map +1 -0
- package/dist/canvas/adapter-plugins/loader.d.ts +13 -0
- package/dist/canvas/adapter-plugins/loader.d.ts.map +1 -0
- package/dist/canvas/adapter-plugins/manifest.d.ts +146 -0
- package/dist/canvas/adapter-plugins/manifest.d.ts.map +1 -0
- package/dist/canvas/adapter-plugins/types.d.ts +83 -0
- package/dist/canvas/adapter-plugins/types.d.ts.map +1 -0
- package/dist/canvas/adapter-plugins/validator.d.ts +10 -0
- package/dist/canvas/adapter-plugins/validator.d.ts.map +1 -0
- package/dist/canvas/code-sync/apply-tsx.d.ts +3 -1
- package/dist/canvas/code-sync/apply-tsx.d.ts.map +1 -1
- package/dist/canvas/code-sync/import.d.ts +1 -0
- package/dist/canvas/code-sync/import.d.ts.map +1 -1
- package/dist/canvas/code-sync/manifest.d.ts +2 -1
- package/dist/canvas/code-sync/manifest.d.ts.map +1 -1
- package/dist/canvas/code-sync/tsx-adapter.d.ts.map +1 -1
- package/dist/canvas/code-sync/types.d.ts +102 -10
- package/dist/canvas/code-sync/types.d.ts.map +1 -1
- package/dist/canvas/document-store.d.ts +11 -1
- package/dist/canvas/document-store.d.ts.map +1 -1
- package/dist/canvas/export.d.ts.map +1 -1
- package/dist/canvas/framework-adapters/custom-elements-v1.d.ts +3 -0
- package/dist/canvas/framework-adapters/custom-elements-v1.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/html-static-v1.d.ts +3 -0
- package/dist/canvas/framework-adapters/html-static-v1.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/markup.d.ts +9 -0
- package/dist/canvas/framework-adapters/markup.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/react-tsx-v2.d.ts +3 -0
- package/dist/canvas/framework-adapters/react-tsx-v2.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/registry.d.ts +12 -0
- package/dist/canvas/framework-adapters/registry.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/svelte-sfc-v1.d.ts +3 -0
- package/dist/canvas/framework-adapters/svelte-sfc-v1.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/types.d.ts +57 -0
- package/dist/canvas/framework-adapters/types.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/vue-sfc-v1.d.ts +3 -0
- package/dist/canvas/framework-adapters/vue-sfc-v1.d.ts.map +1 -0
- package/dist/canvas/kits/catalog.d.ts +5 -0
- package/dist/canvas/kits/catalog.d.ts.map +1 -0
- package/dist/canvas/library-adapters/react/index.d.ts +3 -0
- package/dist/canvas/library-adapters/react/index.d.ts.map +1 -0
- package/dist/canvas/library-adapters/registry.d.ts +11 -0
- package/dist/canvas/library-adapters/registry.d.ts.map +1 -0
- package/dist/canvas/library-adapters/types.d.ts +43 -0
- package/dist/canvas/library-adapters/types.d.ts.map +1 -0
- package/dist/canvas/repo-store.d.ts +2 -0
- package/dist/canvas/repo-store.d.ts.map +1 -1
- package/dist/canvas/starters/catalog.d.ts +34 -0
- package/dist/canvas/starters/catalog.d.ts.map +1 -0
- package/dist/canvas/token-references.d.ts +22 -0
- package/dist/canvas/token-references.d.ts.map +1 -0
- package/dist/canvas/types.d.ts +345 -6
- package/dist/canvas/types.d.ts.map +1 -1
- package/dist/challenges/action-loop.d.ts +13 -0
- package/dist/challenges/action-loop.d.ts.map +1 -0
- package/dist/challenges/capability-matrix.d.ts +3 -0
- package/dist/challenges/capability-matrix.d.ts.map +1 -0
- package/dist/challenges/evidence-bundle.d.ts +48 -0
- package/dist/challenges/evidence-bundle.d.ts.map +1 -0
- package/dist/challenges/governed-adapter-gateway.d.ts +4 -0
- package/dist/challenges/governed-adapter-gateway.d.ts.map +1 -0
- package/dist/challenges/human-yield-gate.d.ts +20 -0
- package/dist/challenges/human-yield-gate.d.ts.map +1 -0
- package/dist/challenges/index.d.ts +15 -0
- package/dist/challenges/index.d.ts.map +1 -0
- package/dist/challenges/interpreter.d.ts +3 -0
- package/dist/challenges/interpreter.d.ts.map +1 -0
- package/dist/challenges/optional-computer-use-bridge.d.ts +9 -0
- package/dist/challenges/optional-computer-use-bridge.d.ts.map +1 -0
- package/dist/challenges/orchestrator.d.ts +32 -0
- package/dist/challenges/orchestrator.d.ts.map +1 -0
- package/dist/challenges/outcome-recorder.d.ts +8 -0
- package/dist/challenges/outcome-recorder.d.ts.map +1 -0
- package/dist/challenges/owned-environment-lane.d.ts +3 -0
- package/dist/challenges/owned-environment-lane.d.ts.map +1 -0
- package/dist/challenges/policy-gate.d.ts +9 -0
- package/dist/challenges/policy-gate.d.ts.map +1 -0
- package/dist/challenges/sanctioned-identity-lane.d.ts +3 -0
- package/dist/challenges/sanctioned-identity-lane.d.ts.map +1 -0
- package/dist/challenges/service-adapter-lane.d.ts +3 -0
- package/dist/challenges/service-adapter-lane.d.ts.map +1 -0
- package/dist/challenges/strategy-selector.d.ts +10 -0
- package/dist/challenges/strategy-selector.d.ts.map +1 -0
- package/dist/challenges/types.d.ts +277 -0
- package/dist/challenges/types.d.ts.map +1 -0
- package/dist/challenges/verification-gate.d.ts +15 -0
- package/dist/challenges/verification-gate.d.ts.map +1 -0
- package/dist/chunk-5FZQJRBQ.js +15256 -0
- package/dist/chunk-5FZQJRBQ.js.map +1 -0
- package/dist/chunk-L57D35TB.js +33513 -0
- package/dist/chunk-L57D35TB.js.map +1 -0
- package/dist/chunk-YBQECXZX.js +409 -0
- package/dist/chunk-YBQECXZX.js.map +1 -0
- package/dist/cli/args.d.ts +4 -4
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/commands/artifacts.d.ts.map +1 -1
- package/dist/cli/commands/canvas.d.ts +7 -7
- package/dist/cli/commands/canvas.d.ts.map +1 -1
- package/dist/cli/commands/daemon.d.ts +7 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/desktop/accessibility-snapshot.d.ts +3 -0
- package/dist/cli/commands/desktop/accessibility-snapshot.d.ts.map +1 -0
- package/dist/cli/commands/desktop/active-window.d.ts +3 -0
- package/dist/cli/commands/desktop/active-window.d.ts.map +1 -0
- package/dist/cli/commands/desktop/capture-desktop.d.ts +3 -0
- package/dist/cli/commands/desktop/capture-desktop.d.ts.map +1 -0
- package/dist/cli/commands/desktop/capture-window.d.ts +3 -0
- package/dist/cli/commands/desktop/capture-window.d.ts.map +1 -0
- package/dist/cli/commands/desktop/shared.d.ts +19 -0
- package/dist/cli/commands/desktop/shared.d.ts.map +1 -0
- package/dist/cli/commands/desktop/status.d.ts +3 -0
- package/dist/cli/commands/desktop/status.d.ts.map +1 -0
- package/dist/cli/commands/desktop/windows.d.ts +3 -0
- package/dist/cli/commands/desktop/windows.d.ts.map +1 -0
- package/dist/cli/commands/devtools/dialog.d.ts +19 -0
- package/dist/cli/commands/devtools/dialog.d.ts.map +1 -0
- package/dist/cli/commands/devtools/screencast-start.d.ts +20 -0
- package/dist/cli/commands/devtools/screencast-start.d.ts.map +1 -0
- package/dist/cli/commands/devtools/screencast-stop.d.ts +17 -0
- package/dist/cli/commands/devtools/screencast-stop.d.ts.map +1 -0
- package/dist/cli/commands/devtools/screenshot.d.ts +2 -0
- package/dist/cli/commands/devtools/screenshot.d.ts.map +1 -1
- package/dist/cli/commands/interact/click.d.ts.map +1 -1
- package/dist/cli/commands/interact/pointer-down.d.ts +7 -0
- package/dist/cli/commands/interact/pointer-down.d.ts.map +1 -0
- package/dist/cli/commands/interact/pointer-drag.d.ts +7 -0
- package/dist/cli/commands/interact/pointer-drag.d.ts.map +1 -0
- package/dist/cli/commands/interact/pointer-move.d.ts +7 -0
- package/dist/cli/commands/interact/pointer-move.d.ts.map +1 -0
- package/dist/cli/commands/interact/pointer-shared.d.ts +6 -0
- package/dist/cli/commands/interact/pointer-shared.d.ts.map +1 -0
- package/dist/cli/commands/interact/pointer-up.d.ts +7 -0
- package/dist/cli/commands/interact/pointer-up.d.ts.map +1 -0
- package/dist/cli/commands/interact/upload.d.ts +18 -0
- package/dist/cli/commands/interact/upload.d.ts.map +1 -0
- package/dist/cli/commands/macro-resolve.d.ts +2 -0
- package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
- package/dist/cli/commands/native.d.ts +10 -7
- package/dist/cli/commands/native.d.ts.map +1 -1
- package/dist/cli/commands/nav/review.d.ts +7 -0
- package/dist/cli/commands/nav/review.d.ts.map +1 -0
- package/dist/cli/commands/nav/snapshot.d.ts.map +1 -1
- package/dist/cli/commands/pages/open.d.ts.map +1 -1
- package/dist/cli/commands/product-video.d.ts +2 -0
- package/dist/cli/commands/product-video.d.ts.map +1 -1
- package/dist/cli/commands/research.d.ts +3 -0
- package/dist/cli/commands/research.d.ts.map +1 -1
- package/dist/cli/commands/run.d.ts +14 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/serve.d.ts +1 -26
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/session/connect.d.ts.map +1 -1
- package/dist/cli/commands/session/disconnect.d.ts.map +1 -1
- package/dist/cli/commands/session/inspector.d.ts +21 -0
- package/dist/cli/commands/session/inspector.d.ts.map +1 -0
- package/dist/cli/commands/session/launch.d.ts.map +1 -1
- package/dist/cli/commands/shopping.d.ts +5 -0
- package/dist/cli/commands/shopping.d.ts.map +1 -1
- package/dist/cli/commands/status.d.ts +2 -14
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/targets/new.d.ts.map +1 -1
- package/dist/cli/daemon-autostart.d.ts +11 -0
- package/dist/cli/daemon-autostart.d.ts.map +1 -1
- package/dist/cli/daemon-client.d.ts +3 -0
- package/dist/cli/daemon-client.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/daemon-state.d.ts +16 -0
- package/dist/cli/daemon-state.d.ts.map +1 -1
- package/dist/cli/daemon-status.d.ts +7 -2
- package/dist/cli/daemon-status.d.ts.map +1 -1
- package/dist/cli/daemon.d.ts +1 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/help.d.ts +15 -4
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +2467 -1033
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/install-autostart-output.d.ts +6 -0
- package/dist/cli/install-autostart-output.d.ts.map +1 -0
- package/dist/cli/install-autostart-reconciliation.d.ts +23 -0
- package/dist/cli/install-autostart-reconciliation.d.ts.map +1 -0
- package/dist/cli/installers/skills.d.ts +42 -6
- package/dist/cli/installers/skills.d.ts.map +1 -1
- package/dist/cli/output.d.ts +3 -0
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/remote-desktop-runtime.d.ts +15 -0
- package/dist/cli/remote-desktop-runtime.d.ts.map +1 -0
- package/dist/cli/remote-manager.d.ts +24 -2
- package/dist/cli/remote-manager.d.ts.map +1 -1
- package/dist/cli/transport-timeouts.d.ts +8 -0
- package/dist/cli/transport-timeouts.d.ts.map +1 -0
- package/dist/cli/utils/http.d.ts +9 -0
- package/dist/cli/utils/http.d.ts.map +1 -1
- package/dist/cli/utils/parse.d.ts +2 -0
- package/dist/cli/utils/parse.d.ts.map +1 -1
- package/dist/cli/utils/skills.d.ts +1 -2
- package/dist/cli/utils/skills.d.ts.map +1 -1
- package/dist/cli/utils/workflow-message.d.ts +2 -0
- package/dist/cli/utils/workflow-message.d.ts.map +1 -0
- package/dist/config.d.ts +47 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/logging.d.ts +3 -1
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/runtime-assemblies.d.ts +22 -0
- package/dist/core/runtime-assemblies.d.ts.map +1 -0
- package/dist/core/types.d.ts +15 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/desktop/audit.d.ts +37 -0
- package/dist/desktop/audit.d.ts.map +1 -0
- package/dist/desktop/errors.d.ts +7 -0
- package/dist/desktop/errors.d.ts.map +1 -0
- package/dist/desktop/index.d.ts +6 -0
- package/dist/desktop/index.d.ts.map +1 -0
- package/dist/desktop/runtime.d.ts +26 -0
- package/dist/desktop/runtime.d.ts.map +1 -0
- package/dist/desktop/types.d.ts +76 -0
- package/dist/desktop/types.d.ts.map +1 -0
- package/dist/extension-extractor.d.ts +6 -0
- package/dist/extension-extractor.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1103 -467
- package/dist/index.js.map +1 -1
- package/dist/integrations/figma/assets.d.ts +13 -0
- package/dist/integrations/figma/assets.d.ts.map +1 -0
- package/dist/integrations/figma/auth.d.ts +3 -0
- package/dist/integrations/figma/auth.d.ts.map +1 -0
- package/dist/integrations/figma/client.d.ts +42 -0
- package/dist/integrations/figma/client.d.ts.map +1 -0
- package/dist/integrations/figma/mappers.d.ts +23 -0
- package/dist/integrations/figma/mappers.d.ts.map +1 -0
- package/dist/integrations/figma/normalize.d.ts +99 -0
- package/dist/integrations/figma/normalize.d.ts.map +1 -0
- package/dist/integrations/figma/url.d.ts +17 -0
- package/dist/integrations/figma/url.d.ts.map +1 -0
- package/dist/integrations/figma/variables.d.ts +21 -0
- package/dist/integrations/figma/variables.d.ts.map +1 -0
- package/dist/macros/execute-runtime.d.ts +19 -0
- package/dist/macros/execute-runtime.d.ts.map +1 -0
- package/dist/macros/execute.d.ts +3 -1
- package/dist/macros/execute.d.ts.map +1 -1
- package/dist/opendevbrowser.d.ts.map +1 -1
- package/dist/opendevbrowser.js +1103 -467
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/blocker.d.ts.map +1 -1
- package/dist/providers/browser-fallback.d.ts +30 -0
- package/dist/providers/browser-fallback.d.ts.map +1 -0
- package/dist/providers/constraint.d.ts +45 -0
- package/dist/providers/constraint.d.ts.map +1 -0
- package/dist/providers/index.d.ts +11 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/policy.d.ts.map +1 -1
- package/dist/providers/product-video-compiler.d.ts +92 -0
- package/dist/providers/product-video-compiler.d.ts.map +1 -0
- package/dist/providers/registry.d.ts +37 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/renderer.d.ts.map +1 -1
- package/dist/providers/research-compiler.d.ts +64 -0
- package/dist/providers/research-compiler.d.ts.map +1 -0
- package/dist/providers/research-executor.d.ts +27 -0
- package/dist/providers/research-executor.d.ts.map +1 -0
- package/dist/providers/runtime-bundle.d.ts +26 -0
- package/dist/providers/runtime-bundle.d.ts.map +1 -0
- package/dist/providers/runtime-factory.d.ts +6 -1
- package/dist/providers/runtime-factory.d.ts.map +1 -1
- package/dist/providers/runtime-policy.d.ts +24 -0
- package/dist/providers/runtime-policy.d.ts.map +1 -0
- package/dist/providers/shared/anti-bot-policy.d.ts +3 -2
- package/dist/providers/shared/anti-bot-policy.d.ts.map +1 -1
- package/dist/providers/shopping/index.d.ts +11 -1
- package/dist/providers/shopping/index.d.ts.map +1 -1
- package/dist/providers/shopping-compiler.d.ts +51 -0
- package/dist/providers/shopping-compiler.d.ts.map +1 -0
- package/dist/providers/shopping-executor.d.ts +18 -0
- package/dist/providers/shopping-executor.d.ts.map +1 -0
- package/dist/providers/shopping-postprocess.d.ts +46 -0
- package/dist/providers/shopping-postprocess.d.ts.map +1 -0
- package/dist/providers/shopping-workflow.d.ts +33 -0
- package/dist/providers/shopping-workflow.d.ts.map +1 -0
- package/dist/providers/social/platform.d.ts +2 -1
- package/dist/providers/social/platform.d.ts.map +1 -1
- package/dist/providers/social/search-quality.d.ts +16 -0
- package/dist/providers/social/search-quality.d.ts.map +1 -0
- package/dist/providers/social/youtube-resolver.d.ts +2 -1
- package/dist/providers/social/youtube-resolver.d.ts.map +1 -1
- package/dist/providers/social/youtube.d.ts.map +1 -1
- package/dist/providers/types.d.ts +116 -4
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/web/crawl-worker.d.ts.map +1 -1
- package/dist/providers/web/extract.d.ts +16 -0
- package/dist/providers/web/extract.d.ts.map +1 -1
- package/dist/providers/web/index.d.ts.map +1 -1
- package/dist/providers/workflow-contracts.d.ts +53 -0
- package/dist/providers/workflow-contracts.d.ts.map +1 -0
- package/dist/providers/workflows.d.ts +30 -6
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-G3LRHQXX.js → providers-G36AM3Z2.js} +2 -2
- package/dist/public-surface/generated-manifest.d.ts +1168 -0
- package/dist/public-surface/generated-manifest.d.ts.map +1 -0
- package/dist/public-surface/source.d.ts +437 -0
- package/dist/public-surface/source.d.ts.map +1 -0
- package/dist/relay/protocol.d.ts +25 -3
- package/dist/relay/protocol.d.ts.map +1 -1
- package/dist/relay/relay-endpoints.d.ts +21 -0
- package/dist/relay/relay-endpoints.d.ts.map +1 -1
- package/dist/relay/relay-server.d.ts +18 -0
- package/dist/relay/relay-server.d.ts.map +1 -1
- package/dist/skills/bundled-skill-directories.d.ts +8 -0
- package/dist/skills/bundled-skill-directories.d.ts.map +1 -0
- package/dist/skills/skill-loader.d.ts +9 -1
- package/dist/skills/skill-loader.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +7 -0
- package/dist/skills/skill-nudge.d.ts.map +1 -1
- package/dist/skills/types.d.ts +31 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/snapshot/ops-snapshot.d.ts +1 -1
- package/dist/snapshot/ops-snapshot.d.ts.map +1 -1
- package/dist/snapshot/refs.d.ts +6 -1
- package/dist/snapshot/refs.d.ts.map +1 -1
- package/dist/snapshot/snapshotter.d.ts.map +1 -1
- package/dist/tools/connect.d.ts.map +1 -1
- package/dist/tools/deps.d.ts +4 -0
- package/dist/tools/deps.d.ts.map +1 -1
- package/dist/tools/desktop-shared.d.ts +6 -0
- package/dist/tools/desktop-shared.d.ts.map +1 -0
- package/dist/tools/desktop_accessibility_snapshot.d.ts +4 -0
- package/dist/tools/desktop_accessibility_snapshot.d.ts.map +1 -0
- package/dist/tools/desktop_active_window.d.ts +4 -0
- package/dist/tools/desktop_active_window.d.ts.map +1 -0
- package/dist/tools/desktop_capture_desktop.d.ts +4 -0
- package/dist/tools/desktop_capture_desktop.d.ts.map +1 -0
- package/dist/tools/desktop_capture_window.d.ts +4 -0
- package/dist/tools/desktop_capture_window.d.ts.map +1 -0
- package/dist/tools/desktop_status.d.ts +4 -0
- package/dist/tools/desktop_status.d.ts.map +1 -0
- package/dist/tools/desktop_windows.d.ts +4 -0
- package/dist/tools/desktop_windows.d.ts.map +1 -0
- package/dist/tools/dialog.d.ts +4 -0
- package/dist/tools/dialog.d.ts.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/launch.d.ts.map +1 -1
- package/dist/tools/macro_resolve.d.ts.map +1 -1
- package/dist/tools/pointer_down.d.ts +4 -0
- package/dist/tools/pointer_down.d.ts.map +1 -0
- package/dist/tools/pointer_drag.d.ts +4 -0
- package/dist/tools/pointer_drag.d.ts.map +1 -0
- package/dist/tools/pointer_move.d.ts +4 -0
- package/dist/tools/pointer_move.d.ts.map +1 -0
- package/dist/tools/pointer_up.d.ts +4 -0
- package/dist/tools/pointer_up.d.ts.map +1 -0
- package/dist/tools/product_video_run.d.ts.map +1 -1
- package/dist/tools/prompting_guide.d.ts.map +1 -1
- package/dist/tools/research_run.d.ts.map +1 -1
- package/dist/tools/review.d.ts +4 -0
- package/dist/tools/review.d.ts.map +1 -0
- package/dist/tools/screencast_start.d.ts +4 -0
- package/dist/tools/screencast_start.d.ts.map +1 -0
- package/dist/tools/screencast_stop.d.ts +4 -0
- package/dist/tools/screencast_stop.d.ts.map +1 -0
- package/dist/tools/screenshot.d.ts.map +1 -1
- package/dist/tools/session_inspector.d.ts +4 -0
- package/dist/tools/session_inspector.d.ts.map +1 -0
- package/dist/tools/shopping_run.d.ts.map +1 -1
- package/dist/tools/skill_list.d.ts.map +1 -1
- package/dist/tools/skill_load.d.ts.map +1 -1
- package/dist/tools/upload.d.ts +4 -0
- package/dist/tools/upload.d.ts.map +1 -0
- package/dist/tools/workflow-runtime.d.ts +4 -1
- package/dist/tools/workflow-runtime.d.ts.map +1 -1
- package/dist/utils/package-assets.d.ts +4 -0
- package/dist/utils/package-assets.d.ts.map +1 -0
- package/extension/canvas.html +379 -9
- package/extension/dist/annotate-content.js +62 -32
- package/extension/dist/annotation-payload.js +57 -21
- package/extension/dist/background.js +406 -61
- package/extension/dist/canvas/canvas-runtime.js +481 -52
- package/extension/dist/canvas/model.js +129 -1
- package/extension/dist/canvas-page.js +1882 -74
- package/extension/dist/ops/dom-bridge.js +139 -0
- package/extension/dist/ops/ops-runtime.js +2854 -295
- package/extension/dist/ops/ops-session-store.js +83 -5
- package/extension/dist/ops/snapshot-builder.js +2 -2
- package/extension/dist/ops/snapshot-shared.js +2 -2
- package/extension/dist/ops/target-session-coordinator.js +5 -3
- package/extension/dist/popup.js +50 -15
- package/extension/dist/services/CDPRouter.js +1567 -63
- package/extension/dist/services/ConnectionManager.js +436 -78
- package/extension/dist/services/RelayClient.js +70 -30
- package/extension/dist/services/TabManager.js +83 -10
- package/extension/dist/services/TargetSessionMap.js +127 -3
- package/extension/dist/services/attach-errors.js +20 -0
- package/extension/dist/services/cdp-router-commands.js +135 -8
- package/extension/dist/services/url-restrictions.js +9 -13
- package/extension/manifest.json +2 -2
- package/extension/popup.html +7 -6
- package/package.json +15 -7
- package/skills/AGENTS.md +9 -8
- package/skills/opendevbrowser-best-practices/SKILL.md +118 -9
- package/skills/opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md +1 -0
- package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +26 -12
- package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +9 -2
- package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +6 -0
- package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +58 -0
- package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json +674 -0
- package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +9 -4
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +89 -20
- package/skills/opendevbrowser-best-practices/scripts/resolve-odb-cli.sh +100 -0
- package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +1 -0
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +256 -116
- package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +208 -0
- package/skills/opendevbrowser-continuity-ledger/SKILL.md +14 -1
- package/skills/opendevbrowser-continuity-ledger/scripts/validate-skill-assets.sh +61 -0
- package/skills/opendevbrowser-data-extraction/SKILL.md +6 -0
- package/skills/opendevbrowser-data-extraction/scripts/validate-skill-assets.sh +112 -0
- package/skills/opendevbrowser-design-agent/SKILL.md +275 -0
- package/skills/opendevbrowser-design-agent/artifacts/app-shell-and-state-wiring.md +84 -0
- package/skills/opendevbrowser-design-agent/artifacts/async-search-state-ownership.md +58 -0
- package/skills/opendevbrowser-design-agent/artifacts/component-pattern-index.md +130 -0
- package/skills/opendevbrowser-design-agent/artifacts/design-contract-playbook.md +157 -0
- package/skills/opendevbrowser-design-agent/artifacts/design-release-gate.md +40 -0
- package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +153 -0
- package/skills/opendevbrowser-design-agent/artifacts/existing-surface-adaptation.md +56 -0
- package/skills/opendevbrowser-design-agent/artifacts/external-pattern-synthesis.md +103 -0
- package/skills/opendevbrowser-design-agent/artifacts/frontend-evaluation-rubric.md +61 -0
- package/skills/opendevbrowser-design-agent/artifacts/implementation-anti-patterns.md +163 -0
- package/skills/opendevbrowser-design-agent/artifacts/isolated-preview-validation.md +68 -0
- package/skills/opendevbrowser-design-agent/artifacts/loading-and-feedback-surfaces.md +56 -0
- package/skills/opendevbrowser-design-agent/artifacts/opendevbrowser-ui-example-map.md +44 -0
- package/skills/opendevbrowser-design-agent/artifacts/performance-audit-playbook.md +70 -0
- package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +81 -0
- package/skills/opendevbrowser-design-agent/artifacts/scroll-reveal-surface-planning.md +64 -0
- package/skills/opendevbrowser-design-agent/artifacts/state-ownership-matrix.md +36 -0
- package/skills/opendevbrowser-design-agent/artifacts/theming-and-token-ownership.md +43 -0
- package/skills/opendevbrowser-design-agent/assets/templates/canvas-generation-plan.design.v1.json +58 -0
- package/skills/opendevbrowser-design-agent/assets/templates/design-audit-report.v1.md +34 -0
- package/skills/opendevbrowser-design-agent/assets/templates/design-brief.v1.md +40 -0
- package/skills/opendevbrowser-design-agent/assets/templates/design-contract.v1.json +226 -0
- package/skills/opendevbrowser-design-agent/assets/templates/design-release-gate.v1.json +35 -0
- package/skills/opendevbrowser-design-agent/assets/templates/design-review-checklist.json +57 -0
- package/skills/opendevbrowser-design-agent/assets/templates/real-surface-design-matrix.json +32 -0
- package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +31 -0
- package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +171 -0
- package/skills/opendevbrowser-design-agent/scripts/extract-canvas-plan.sh +56 -0
- package/skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh +223 -0
- package/skills/opendevbrowser-form-testing/SKILL.md +19 -3
- package/skills/opendevbrowser-form-testing/artifacts/form-workflows.md +5 -4
- package/skills/opendevbrowser-form-testing/assets/templates/challenge-decision-tree.json +2 -0
- package/skills/opendevbrowser-form-testing/scripts/validate-skill-assets.sh +109 -0
- package/skills/opendevbrowser-login-automation/SKILL.md +21 -3
- package/skills/opendevbrowser-login-automation/artifacts/login-workflows.md +5 -4
- package/skills/opendevbrowser-login-automation/assets/templates/auth-signals.json +5 -0
- package/skills/opendevbrowser-login-automation/assets/templates/login-scenario-matrix.json +3 -2
- package/skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh +17 -1
- package/skills/opendevbrowser-login-automation/scripts/validate-skill-assets.sh +133 -0
- package/skills/opendevbrowser-product-presentation-asset/SKILL.md +23 -11
- package/skills/opendevbrowser-product-presentation-asset/artifacts/asset-pack-assembly.md +5 -3
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/shot-list.md +2 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/video-assembly.md +3 -2
- package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +5 -1
- package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +6 -2
- package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +5 -1
- package/skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh +20 -7
- package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +39 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +5 -1
- package/skills/opendevbrowser-research/SKILL.md +14 -6
- package/skills/opendevbrowser-research/scripts/render-output.sh +5 -1
- package/skills/opendevbrowser-research/scripts/run-research.sh +5 -1
- package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +45 -0
- package/skills/opendevbrowser-research/scripts/write-artifacts.sh +5 -1
- package/skills/opendevbrowser-shopping/SKILL.md +20 -1
- package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +6 -2
- package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +5 -1
- package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +5 -1
- package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +54 -0
- package/dist/chunk-5J3IFL3X.js +0 -16706
- package/dist/chunk-5J3IFL3X.js.map +0 -1
- package/dist/chunk-D633UO34.js +0 -8149
- package/dist/chunk-D633UO34.js.map +0 -1
- package/dist/chunk-V7KUDHDG.js +0 -276
- package/dist/chunk-V7KUDHDG.js.map +0 -1
- package/dist/runtime-factory-BICHDPE7.js +0 -13
- /package/dist/{providers-G3LRHQXX.js.map → providers-G36AM3Z2.js.map} +0 -0
- /package/dist/{runtime-factory-BICHDPE7.js.map → skills/skill-loader.js.map} +0 -0
|
@@ -16,6 +16,16 @@ required=(
|
|
|
16
16
|
|
|
17
17
|
status=0
|
|
18
18
|
|
|
19
|
+
require_marker() {
|
|
20
|
+
local label="$1"
|
|
21
|
+
local output="$2"
|
|
22
|
+
local marker="$3"
|
|
23
|
+
if [[ "$output" != *"$marker"* ]]; then
|
|
24
|
+
echo "$label missing marker: $marker" >&2
|
|
25
|
+
status=1
|
|
26
|
+
fi
|
|
27
|
+
}
|
|
28
|
+
|
|
19
29
|
for rel in "${required[@]}"; do
|
|
20
30
|
if [[ ! -f "$root/$rel" ]]; then
|
|
21
31
|
echo "Missing required asset: $rel" >&2
|
|
@@ -43,6 +53,129 @@ for rel in assets/templates/login-scenario-matrix.json assets/templates/auth-sig
|
|
|
43
53
|
fi
|
|
44
54
|
done
|
|
45
55
|
|
|
56
|
+
list_output="$("$root/scripts/run-login-workflow.sh" list)"
|
|
57
|
+
for workflow_name in \
|
|
58
|
+
password \
|
|
59
|
+
mfa \
|
|
60
|
+
sso-popup \
|
|
61
|
+
challenge-checkpoint \
|
|
62
|
+
pointer-checkpoint \
|
|
63
|
+
challenge-loop-guard \
|
|
64
|
+
lockout-recovery \
|
|
65
|
+
session-persistence
|
|
66
|
+
do
|
|
67
|
+
require_marker "workflow list" "$list_output" "$workflow_name"
|
|
68
|
+
done
|
|
69
|
+
|
|
70
|
+
password_output="$("$root/scripts/run-login-workflow.sh" password)"
|
|
71
|
+
require_marker "password workflow" "$password_output" "opendevbrowser_type"
|
|
72
|
+
require_marker "password workflow" "$password_output" "opendevbrowser_network_poll"
|
|
73
|
+
|
|
74
|
+
mfa_output="$("$root/scripts/run-login-workflow.sh" mfa)"
|
|
75
|
+
require_marker "mfa workflow" "$mfa_output" "opendevbrowser_type"
|
|
76
|
+
require_marker "mfa workflow" "$mfa_output" "mfa-input-ref"
|
|
77
|
+
|
|
78
|
+
challenge_output="$("$root/scripts/run-login-workflow.sh" challenge-checkpoint)"
|
|
79
|
+
require_marker "challenge-checkpoint workflow" "$challenge_output" "manual checkpoint required"
|
|
80
|
+
require_marker "challenge-checkpoint workflow" "$challenge_output" "opendevbrowser_click"
|
|
81
|
+
|
|
82
|
+
pointer_output="$("$root/scripts/run-login-workflow.sh" pointer-checkpoint)"
|
|
83
|
+
require_marker "pointer-checkpoint workflow" "$pointer_output" "opendevbrowser_pointer_drag"
|
|
84
|
+
require_marker "pointer-checkpoint workflow" "$pointer_output" "steps=12"
|
|
85
|
+
|
|
86
|
+
challenge_loop_output="$("$root/scripts/run-login-workflow.sh" challenge-loop-guard)"
|
|
87
|
+
require_marker "challenge-loop-guard workflow" "$challenge_loop_output" "Retry-After"
|
|
88
|
+
require_marker "challenge-loop-guard workflow" "$challenge_loop_output" "opendevbrowser_network_poll"
|
|
89
|
+
|
|
90
|
+
lockout_output="$("$root/scripts/run-login-workflow.sh" lockout-recovery)"
|
|
91
|
+
require_marker "lockout-recovery workflow" "$lockout_output" "lockout/rate-limit banner"
|
|
92
|
+
require_marker "lockout-recovery workflow" "$lockout_output" "opendevbrowser_network_poll"
|
|
93
|
+
|
|
94
|
+
session_persistence_output="$("$root/scripts/run-login-workflow.sh" session-persistence)"
|
|
95
|
+
require_marker "session-persistence workflow" "$session_persistence_output" "persistProfile=true"
|
|
96
|
+
require_marker "session-persistence workflow" "$session_persistence_output" "profile=\"auth-test\""
|
|
97
|
+
|
|
98
|
+
tmpdir="$(mktemp -d)"
|
|
99
|
+
trap 'rm -rf "$tmpdir"' EXIT
|
|
100
|
+
signals_output="$tmpdir/auth-signals.json"
|
|
101
|
+
"$root/scripts/record-auth-signals.sh" "$root/examples/sample-auth-signals.json" "$signals_output" >/dev/null
|
|
102
|
+
if ! cmp -s "$root/examples/sample-auth-signals.json" "$signals_output"; then
|
|
103
|
+
echo "record-auth-signals.sh did not preserve the auth-signals fixture." >&2
|
|
104
|
+
status=1
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
if ! node - "$root" <<'NODE'
|
|
108
|
+
const fs = require("node:fs");
|
|
109
|
+
const path = require("node:path");
|
|
110
|
+
|
|
111
|
+
const [root] = process.argv.slice(2);
|
|
112
|
+
const failures = [];
|
|
113
|
+
|
|
114
|
+
const matrix = JSON.parse(fs.readFileSync(path.join(root, "assets/templates/login-scenario-matrix.json"), "utf8"));
|
|
115
|
+
const authSignals = JSON.parse(fs.readFileSync(path.join(root, "assets/templates/auth-signals.json"), "utf8"));
|
|
116
|
+
const sampleSignals = JSON.parse(fs.readFileSync(path.join(root, "examples/sample-auth-signals.json"), "utf8"));
|
|
117
|
+
|
|
118
|
+
if (!Array.isArray(matrix.issue_ids) || matrix.issue_ids.length < 7) {
|
|
119
|
+
failures.push("login-scenario-matrix.json must enumerate the workflow issue ids.");
|
|
120
|
+
}
|
|
121
|
+
for (const marker of ["url_changed", "auth_shell_visible", "auth_network_success", "pointer_gate_complete_when_required"]) {
|
|
122
|
+
if (!Array.isArray(matrix.expected_signals) || !matrix.expected_signals.includes(marker)) {
|
|
123
|
+
failures.push(`login-scenario-matrix.json missing expected signal: ${marker}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
for (const marker of ["invalid_credentials_ui_or_network", "anti_bot_challenge", "rate_limited", "lockout"]) {
|
|
127
|
+
if (!Array.isArray(matrix.failure_signals) || !matrix.failure_signals.includes(marker)) {
|
|
128
|
+
failures.push(`login-scenario-matrix.json missing failure signal: ${marker}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (matrix.max_automated_retries !== 2) {
|
|
132
|
+
failures.push("login-scenario-matrix.json must cap automated retries at 2.");
|
|
133
|
+
}
|
|
134
|
+
if (typeof matrix.requires_manual_checkpoint !== "boolean") {
|
|
135
|
+
failures.push("login-scenario-matrix.json must define requires_manual_checkpoint as a boolean.");
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
for (const key of [
|
|
139
|
+
"invalid_credentials_ui_seen",
|
|
140
|
+
"invalid_credentials_network_seen",
|
|
141
|
+
"pointer_gate_detected",
|
|
142
|
+
"pointer_gate_completed",
|
|
143
|
+
"challenge_checkpoint_count",
|
|
144
|
+
"mfa_detected",
|
|
145
|
+
"issue_ids",
|
|
146
|
+
"result"
|
|
147
|
+
]) {
|
|
148
|
+
if (!(key in authSignals)) {
|
|
149
|
+
failures.push(`auth-signals.json missing key: ${key}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (!authSignals.network || typeof authSignals.network.retry_after_seconds !== "number") {
|
|
153
|
+
failures.push("auth-signals.json must define network.retry_after_seconds.");
|
|
154
|
+
}
|
|
155
|
+
if (!Array.isArray(authSignals.network?.status_codes)) {
|
|
156
|
+
failures.push("auth-signals.json must define network.status_codes as an array.");
|
|
157
|
+
}
|
|
158
|
+
if (!Array.isArray(sampleSignals.network?.status_codes) || sampleSignals.network.status_codes[0] !== 200) {
|
|
159
|
+
failures.push("sample-auth-signals.json must retain a successful login status code example.");
|
|
160
|
+
}
|
|
161
|
+
if (sampleSignals.result !== "authenticated") {
|
|
162
|
+
failures.push("sample-auth-signals.json must demonstrate an authenticated result.");
|
|
163
|
+
}
|
|
164
|
+
if (sampleSignals.mfa_detected !== true) {
|
|
165
|
+
failures.push("sample-auth-signals.json must preserve the MFA branch example.");
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (failures.length > 0) {
|
|
169
|
+
for (const failure of failures) {
|
|
170
|
+
console.error(failure);
|
|
171
|
+
}
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
NODE
|
|
175
|
+
then
|
|
176
|
+
status=1
|
|
177
|
+
fi
|
|
178
|
+
|
|
46
179
|
if [[ $status -ne 0 ]]; then
|
|
47
180
|
exit $status
|
|
48
181
|
fi
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: opendevbrowser-product-presentation-asset
|
|
3
|
-
description: Collects product
|
|
3
|
+
description: Collects product metadata, copy, and optional visual assets into a local folder pack for video workflows.
|
|
4
4
|
version: 2.0.0
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -36,16 +36,26 @@ Use this skill to build complete product-video input packs and assembly instruct
|
|
|
36
36
|
./skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh /path/to/manifest.json /tmp/product-video-brief
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
+
## Supporting Surfaces
|
|
40
|
+
|
|
41
|
+
- Use browser replay (`screencast-start` / `screencast-stop`) when a product flow needs temporal UI proof before you decide which screenshots to keep.
|
|
42
|
+
- Use desktop observation only for read-only evidence around external windows or OS-owned dialogs that affected capture.
|
|
43
|
+
- Use `--challenge-automation-mode off|browser|browser_with_helper` for bounded browser-scoped computer use on provider or auth walls; it is not a desktop agent.
|
|
44
|
+
|
|
39
45
|
## Final Assets Produced
|
|
40
46
|
|
|
41
|
-
Expected output pack includes:
|
|
47
|
+
Expected output pack always includes:
|
|
42
48
|
- `manifest.json` with canonical product metadata
|
|
43
49
|
- `product.json` and `pricing.json`
|
|
44
|
-
- `images/` for product stills
|
|
45
|
-
- `screenshots/` for page context and UI proof
|
|
46
50
|
- `copy.md` and `features.md`
|
|
47
51
|
- `raw/source-record.json` for auditability
|
|
48
52
|
|
|
53
|
+
When visual capture succeeds, the pack may also include:
|
|
54
|
+
- `images/` for product stills
|
|
55
|
+
- `screenshots/` for page context and UI proof
|
|
56
|
+
|
|
57
|
+
Metadata-first packs with `0` images and `0` screenshots are still valid intermediate outputs when the workflow captured canonical product data, copy, and pricing. Those packs need additional visual sourcing before final video publication.
|
|
58
|
+
|
|
49
59
|
The `render-video-brief.sh` helper adds:
|
|
50
60
|
- `video-brief.md`
|
|
51
61
|
- `shot-list.md`
|
|
@@ -56,9 +66,10 @@ The `render-video-brief.sh` helper adds:
|
|
|
56
66
|
|
|
57
67
|
1. Pick product URL or product name.
|
|
58
68
|
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
|
-
|
|
69
|
+
3. Review generated manifest/copy/features for accuracy and check whether the pack is visual-ready or metadata-first.
|
|
70
|
+
4. Run `render-video-brief.sh` to generate production instructions and visual sourcing notes.
|
|
71
|
+
Canonical helper path: `scripts/render-video-brief.sh`.
|
|
72
|
+
5. If no visuals were captured, source or capture visuals before handing the brief to the editor/creator pipeline.
|
|
62
73
|
|
|
63
74
|
## Parallel Multitab Alignment
|
|
64
75
|
|
|
@@ -70,10 +81,11 @@ The `render-video-brief.sh` helper adds:
|
|
|
70
81
|
|
|
71
82
|
1. Use `manifest.json` as source of truth.
|
|
72
83
|
2. Build hooks and claims from `copy.md` + `features.md`.
|
|
73
|
-
3. Pair each claim with supporting asset (`images` or `screenshots`).
|
|
74
|
-
4.
|
|
75
|
-
5.
|
|
76
|
-
6. Validate
|
|
84
|
+
3. Pair each claim with supporting asset (`images` or `screenshots`) when available.
|
|
85
|
+
4. If the pack is metadata-first, source visuals before final edit and update `shot-list.md` plus `claims-evidence-map.md` with the new asset paths.
|
|
86
|
+
5. Sequence assets using `shot-list.md`.
|
|
87
|
+
6. Validate pricing/availability freshness before publishing.
|
|
88
|
+
7. Validate every claim appears in `claims-evidence-map.md` before publish.
|
|
77
89
|
|
|
78
90
|
## Robustness Coverage (Known-Issue Matrix)
|
|
79
91
|
|
|
@@ -9,15 +9,17 @@
|
|
|
9
9
|
## Build sequence
|
|
10
10
|
|
|
11
11
|
1. Collect base product pack (`collect-product.sh`)
|
|
12
|
-
2.
|
|
12
|
+
2. Inspect the capture summary and classify the pack as visual-ready or metadata-first
|
|
13
13
|
3. Validate manifest schema fields
|
|
14
14
|
4. Generate video brief (`render-video-brief.sh`)
|
|
15
15
|
5. Review claim-to-evidence mapping (`claims-evidence-map.md`)
|
|
16
|
-
6.
|
|
16
|
+
6. If visuals are missing, source or capture them before final publication
|
|
17
|
+
7. Review shot sequence and CTA consistency
|
|
17
18
|
|
|
18
19
|
## Release checks
|
|
19
20
|
|
|
20
21
|
- pricing timestamp is recent
|
|
21
|
-
- screenshot/image files are
|
|
22
|
+
- screenshot/image files are readable when present
|
|
23
|
+
- metadata-first packs are marked for additional visual sourcing before publish
|
|
22
24
|
- copy claims map to feature evidence
|
|
23
25
|
- every promoted claim is backed by a concrete asset path
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Shot List
|
|
2
2
|
|
|
3
|
+
Use captured screenshots or images when present. For metadata-first packs, replace the sample asset paths with sourced visuals before publishing.
|
|
4
|
+
|
|
3
5
|
| Scene | Goal | Asset | Voiceover | Duration |
|
|
4
6
|
|---|---|---|---|---:|
|
|
5
7
|
| 1 | Hook | screenshots/screenshot-01.png | | 2s |
|
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
- Product metadata: `product.json`
|
|
7
7
|
- Pricing: `pricing.json`
|
|
8
8
|
- Copy and features: `copy.md`, `features.md`
|
|
9
|
-
- Visuals: `images/*`, `screenshots/*`
|
|
9
|
+
- Visuals: `images/*`, `screenshots/*` when capture succeeds
|
|
10
10
|
- Claim evidence map: `claims-evidence-map.md`
|
|
11
11
|
|
|
12
12
|
## Assembly Steps
|
|
13
13
|
|
|
14
14
|
1. Build script from top 3 verified benefits.
|
|
15
|
-
2. Match each line to one visual asset.
|
|
15
|
+
2. Match each line to one visual asset when visuals exist.
|
|
16
16
|
3. Create sequence: hook -> proof -> CTA.
|
|
17
17
|
4. Verify all price/discount statements against `pricing.json`.
|
|
18
18
|
5. Mark `claims-evidence-map.md` rows as verified before publishing.
|
|
19
|
+
6. If the pack is metadata-first, source visuals and update the shot list before final edit.
|
|
@@ -6,4 +6,8 @@ if [[ $# -lt 1 ]]; then
|
|
|
6
6
|
exit 1
|
|
7
7
|
fi
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
+
# shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
|
|
11
|
+
source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
|
|
12
|
+
|
|
13
|
+
"${ODB_CLI[@]}" product-video run --product-url "$1" --include-screenshots --include-all-images=false
|
|
@@ -7,8 +7,12 @@ if [[ $# -lt 1 ]]; then
|
|
|
7
7
|
fi
|
|
8
8
|
|
|
9
9
|
VALUE="$1"
|
|
10
|
+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
|
+
# shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
|
|
12
|
+
source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
|
|
13
|
+
|
|
10
14
|
if [[ "$VALUE" == http* ]]; then
|
|
11
|
-
|
|
15
|
+
"${ODB_CLI[@]}" product-video run --product-url "$VALUE"
|
|
12
16
|
else
|
|
13
|
-
|
|
17
|
+
"${ODB_CLI[@]}" product-video run --product-name "$VALUE"
|
|
14
18
|
fi
|
|
@@ -6,4 +6,8 @@ if [[ $# -lt 1 ]]; then
|
|
|
6
6
|
exit 1
|
|
7
7
|
fi
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
+
# shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
|
|
11
|
+
source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
|
|
12
|
+
|
|
13
|
+
"${ODB_CLI[@]}" product-video run --product-url "$1" --include-all-images --include-screenshots=false
|
|
@@ -29,9 +29,18 @@ const features = Array.isArray(product.features) ? product.features.slice(0, 5)
|
|
|
29
29
|
const copy = typeof product.copy === "string" ? product.copy.trim().slice(0, 600) : "";
|
|
30
30
|
const images = Array.isArray(data?.assets?.images) ? data.assets.images : [];
|
|
31
31
|
const screenshots = Array.isArray(data?.assets?.screenshots) ? data.assets.screenshots : [];
|
|
32
|
+
const noVisualAsset = "metadata-only-pack:no-captured-visual";
|
|
33
|
+
const hasVisuals = images.length > 0 || screenshots.length > 0;
|
|
34
|
+
const featureClaims = features.length > 0
|
|
35
|
+
? features
|
|
36
|
+
: ["Review manifest data and add only evidence-backed feature claims"];
|
|
32
37
|
|
|
33
|
-
|
|
34
|
-
|
|
38
|
+
function pickVisual(...candidates) {
|
|
39
|
+
return candidates.find((entry) => typeof entry === "string" && entry.length > 0) || noVisualAsset;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const claimRows = featureClaims.map((claim, index) => {
|
|
43
|
+
const evidence = pickVisual(screenshots[index], images[index], images[0], screenshots[0]);
|
|
35
44
|
return `| ${claim} | ${evidence} | product.features[${index}] | no |`;
|
|
36
45
|
});
|
|
37
46
|
|
|
@@ -41,12 +50,15 @@ const videoBrief = [
|
|
|
41
50
|
`- Product: ${title}`,
|
|
42
51
|
`- Brand: ${brand}`,
|
|
43
52
|
`- Price: ${amount} ${currency}`,
|
|
53
|
+
`- Visual capture status: ${hasVisuals ? "visual-ready" : "metadata-first"}`,
|
|
44
54
|
"",
|
|
45
55
|
"## Verified Features",
|
|
46
|
-
...
|
|
56
|
+
...featureClaims.map((entry) => `- ${entry}`),
|
|
47
57
|
"",
|
|
48
58
|
"## Suggested Hook",
|
|
49
|
-
|
|
59
|
+
hasVisuals
|
|
60
|
+
? `- "${title} from ${brand} should open on its strongest verified benefit and immediate proof."`
|
|
61
|
+
: `- "${title} from ${brand}: finalize visuals first, then lead with the strongest verified benefit."`,
|
|
50
62
|
"",
|
|
51
63
|
"## Copy Input",
|
|
52
64
|
copy ? copy : "(No copy captured)",
|
|
@@ -54,6 +66,7 @@ const videoBrief = [
|
|
|
54
66
|
"## Assets",
|
|
55
67
|
`- Images: ${images.length}`,
|
|
56
68
|
`- Screenshots: ${screenshots.length}`,
|
|
69
|
+
`- Additional visual sourcing required: ${hasVisuals ? "no" : "yes"}`,
|
|
57
70
|
"- Claims evidence map: claims-evidence-map.md"
|
|
58
71
|
].join("\n");
|
|
59
72
|
|
|
@@ -62,9 +75,9 @@ const shotList = [
|
|
|
62
75
|
"",
|
|
63
76
|
"| Scene | Goal | Asset | Voiceover | Duration |",
|
|
64
77
|
"|---|---|---|---|---:|",
|
|
65
|
-
`| 1 | Hook | ${screenshots[0]
|
|
66
|
-
`| 2 | Feature demo | ${images[0]
|
|
67
|
-
`| 3 | Outcome + CTA | ${images[1]
|
|
78
|
+
`| 1 | Hook | ${pickVisual(screenshots[0], images[0])} | Problem + promise | 2s |`,
|
|
79
|
+
`| 2 | Feature demo | ${pickVisual(images[0], screenshots[0])} | Show proof | 4s |`,
|
|
80
|
+
`| 3 | Outcome + CTA | ${pickVisual(images[1], screenshots[1], images[0], screenshots[0])} | Benefit + CTA | 4s |`
|
|
68
81
|
].join("\n");
|
|
69
82
|
|
|
70
83
|
const ugcBrief = [
|
|
@@ -24,6 +24,16 @@ required=(
|
|
|
24
24
|
)
|
|
25
25
|
|
|
26
26
|
status=0
|
|
27
|
+
tmpdir="$(mktemp -d)"
|
|
28
|
+
trap 'rm -rf "$tmpdir"' EXIT
|
|
29
|
+
|
|
30
|
+
metadata_manifest="$tmpdir/metadata-only-manifest.json"
|
|
31
|
+
node -e '
|
|
32
|
+
const fs = require("fs");
|
|
33
|
+
const input = JSON.parse(fs.readFileSync(process.argv[1], "utf8"));
|
|
34
|
+
input.assets = { images: [], screenshots: [], raw: input.assets?.raw || [] };
|
|
35
|
+
fs.writeFileSync(process.argv[2], JSON.stringify(input, null, 2));
|
|
36
|
+
' "$root/examples/sample-manifest.json" "$metadata_manifest"
|
|
27
37
|
for rel in "${required[@]}"; do
|
|
28
38
|
if [[ ! -f "$root/$rel" ]]; then
|
|
29
39
|
echo "Missing required asset: $rel" >&2
|
|
@@ -42,6 +52,19 @@ for rel in scripts/collect-product.sh scripts/capture-screenshots.sh scripts/dow
|
|
|
42
52
|
fi
|
|
43
53
|
done
|
|
44
54
|
|
|
55
|
+
for rel in scripts/collect-product.sh scripts/capture-screenshots.sh scripts/download-images.sh scripts/write-manifest.sh; do
|
|
56
|
+
if [[ -f "$root/$rel" ]]; then
|
|
57
|
+
if ! grep -Fq "resolve-odb-cli.sh" "$root/$rel"; then
|
|
58
|
+
echo "Workflow wrapper missing shared CLI resolver: $rel" >&2
|
|
59
|
+
status=1
|
|
60
|
+
fi
|
|
61
|
+
if ! grep -Fq "ODB_CLI" "$root/$rel"; then
|
|
62
|
+
echo "Workflow wrapper missing ODB_CLI invocation: $rel" >&2
|
|
63
|
+
status=1
|
|
64
|
+
fi
|
|
65
|
+
fi
|
|
66
|
+
done
|
|
67
|
+
|
|
45
68
|
if [[ -f "$root/assets/templates/manifest.schema.json" ]]; then
|
|
46
69
|
if ! node -e 'const fs=require("fs"); JSON.parse(fs.readFileSync(process.argv[1], "utf8"));' "$root/assets/templates/manifest.schema.json" >/dev/null 2>&1; then
|
|
47
70
|
echo "Invalid JSON template: assets/templates/manifest.schema.json" >&2
|
|
@@ -49,6 +72,22 @@ if [[ -f "$root/assets/templates/manifest.schema.json" ]]; then
|
|
|
49
72
|
fi
|
|
50
73
|
fi
|
|
51
74
|
|
|
75
|
+
"$root/scripts/render-video-brief.sh" "$metadata_manifest" "$tmpdir/brief" >/dev/null
|
|
76
|
+
for generated in video-brief.md shot-list.md ugc-brief.md claims-evidence-map.md; do
|
|
77
|
+
if [[ ! -f "$tmpdir/brief/$generated" ]]; then
|
|
78
|
+
echo "render-video-brief.sh missing generated file: $generated" >&2
|
|
79
|
+
status=1
|
|
80
|
+
fi
|
|
81
|
+
done
|
|
82
|
+
if [[ -f "$tmpdir/brief/video-brief.md" ]] && ! grep -Fq "metadata-first" "$tmpdir/brief/video-brief.md"; then
|
|
83
|
+
echo "render-video-brief.sh did not preserve metadata-first output when visuals are absent." >&2
|
|
84
|
+
status=1
|
|
85
|
+
fi
|
|
86
|
+
if [[ -f "$tmpdir/brief/claims-evidence-map.md" ]] && ! grep -Fq "metadata-only-pack:no-captured-visual" "$tmpdir/brief/claims-evidence-map.md"; then
|
|
87
|
+
echo "render-video-brief.sh did not emit the metadata-only evidence placeholder." >&2
|
|
88
|
+
status=1
|
|
89
|
+
fi
|
|
90
|
+
|
|
52
91
|
if [[ $status -ne 0 ]]; then
|
|
53
92
|
exit $status
|
|
54
93
|
fi
|
|
@@ -10,7 +10,11 @@ VALUE="$1"
|
|
|
10
10
|
OUTDIR="$2"
|
|
11
11
|
mkdir -p "$OUTDIR"
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
14
|
+
# shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
|
|
15
|
+
source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
|
|
16
|
+
|
|
17
|
+
cmd=("${ODB_CLI[@]}" product-video run --output-dir "$OUTDIR" --output-format json)
|
|
14
18
|
if [[ "$VALUE" == http* ]]; then
|
|
15
19
|
cmd+=(--product-url "$VALUE")
|
|
16
20
|
else
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: opendevbrowser-research
|
|
3
3
|
description: Deterministic multi-source research workflow with strict timebox and artifact outputs.
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.1.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Research Skill
|
|
8
8
|
|
|
9
|
-
Use this skill when you need benchmark-style research across `web|community|social
|
|
9
|
+
Use this skill when you need benchmark-style research across public `web|community|social` sources by default, with explicit shopping opt-in only for commercial comparison tasks.
|
|
10
10
|
|
|
11
11
|
## Pack Contents
|
|
12
12
|
|
|
@@ -28,6 +28,12 @@ Use this skill when you need benchmark-style research across `web|community|soci
|
|
|
28
28
|
./skills/opendevbrowser-research/scripts/render-output.sh "browser automation" compact
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
+
## Supporting Surfaces
|
|
32
|
+
|
|
33
|
+
- Use browser replay (`screencast-start` / `screencast-stop`) when claim review needs temporal UI evidence or parity proof from browser-backed runs.
|
|
34
|
+
- Use desktop observation only for read-only external-window or native-dialog evidence that materially affects the research artifact chain.
|
|
35
|
+
- Use `--challenge-automation-mode off|browser|browser_with_helper` for bounded browser-scoped computer use in research workflows; it is not a desktop agent.
|
|
36
|
+
|
|
31
37
|
## Core Rules
|
|
32
38
|
|
|
33
39
|
- Define timebox first (`--days` or `--from/--to`).
|
|
@@ -61,13 +67,15 @@ Matrix source: `../opendevbrowser-best-practices/artifacts/browser-agent-known-i
|
|
|
61
67
|
## Commands
|
|
62
68
|
|
|
63
69
|
```bash
|
|
64
|
-
opendevbrowser research run --topic "<topic>" --days 30 --mode context
|
|
65
|
-
opendevbrowser research run --topic "<topic>" --source-selection
|
|
70
|
+
opendevbrowser research run --topic "<topic>" --days 30 --source-selection auto --mode context
|
|
71
|
+
opendevbrowser research run --topic "<topic>" --source-selection auto --mode json
|
|
66
72
|
opendevbrowser research run --topic "<topic>" --sources web,shopping --mode md
|
|
67
73
|
```
|
|
68
74
|
|
|
69
75
|
## Notes
|
|
70
76
|
|
|
71
|
-
- `auto`
|
|
72
|
-
-
|
|
77
|
+
- `auto` is the recommended default for topical research.
|
|
78
|
+
- In the current contract, both `auto` and `all` resolve to `web|community|social`.
|
|
79
|
+
- Use `--source-selection shopping` or explicit `--sources ...shopping...` to include shopping only when commercial intent is explicit.
|
|
73
80
|
- Use `--mode path` with `scripts/write-artifacts.sh` when you need replayable handoff bundles.
|
|
81
|
+
- For browser-backed release proof and mode sweeps, follow the canonical direct-run evidence policy in `../opendevbrowser-best-practices/SKILL.md`.
|
|
@@ -9,4 +9,8 @@ fi
|
|
|
9
9
|
TOPIC="$1"
|
|
10
10
|
MODE="$2"
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
13
|
+
# shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
|
|
14
|
+
source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
|
|
15
|
+
|
|
16
|
+
"${ODB_CLI[@]}" research run --topic "$TOPIC" --mode "$MODE"
|
|
@@ -12,7 +12,11 @@ MODE="${3:-context}"
|
|
|
12
12
|
SOURCE_SELECTION="${4:-}"
|
|
13
13
|
SOURCES="${5:-}"
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
16
|
+
# shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
|
|
17
|
+
source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
|
|
18
|
+
|
|
19
|
+
cmd=("${ODB_CLI[@]}" research run --topic "$TOPIC" --days "$DAYS" --mode "$MODE")
|
|
16
20
|
if [[ -n "$SOURCE_SELECTION" ]]; then
|
|
17
21
|
cmd+=(--source-selection "$SOURCE_SELECTION")
|
|
18
22
|
fi
|
|
@@ -16,6 +16,18 @@ required=(
|
|
|
16
16
|
)
|
|
17
17
|
|
|
18
18
|
status=0
|
|
19
|
+
validator_cli="$root/../opendevbrowser-best-practices/scripts/validator-fixture-cli.sh"
|
|
20
|
+
export ODB_CLI_VALIDATOR_OVERRIDE="$validator_cli"
|
|
21
|
+
|
|
22
|
+
require_marker() {
|
|
23
|
+
local label="$1"
|
|
24
|
+
local output="$2"
|
|
25
|
+
local marker="$3"
|
|
26
|
+
if [[ "$output" != *"$marker"* ]]; then
|
|
27
|
+
echo "$label missing marker: $marker" >&2
|
|
28
|
+
status=1
|
|
29
|
+
fi
|
|
30
|
+
}
|
|
19
31
|
for rel in "${required[@]}"; do
|
|
20
32
|
if [[ ! -f "$root/$rel" ]]; then
|
|
21
33
|
echo "Missing required asset: $rel" >&2
|
|
@@ -34,6 +46,19 @@ for rel in scripts/run-research.sh scripts/render-output.sh scripts/write-artifa
|
|
|
34
46
|
fi
|
|
35
47
|
done
|
|
36
48
|
|
|
49
|
+
for rel in scripts/run-research.sh scripts/render-output.sh scripts/write-artifacts.sh; do
|
|
50
|
+
if [[ -f "$root/$rel" ]]; then
|
|
51
|
+
if ! grep -Fq "resolve-odb-cli.sh" "$root/$rel"; then
|
|
52
|
+
echo "Workflow wrapper missing shared CLI resolver: $rel" >&2
|
|
53
|
+
status=1
|
|
54
|
+
fi
|
|
55
|
+
if ! grep -Fq "ODB_CLI" "$root/$rel"; then
|
|
56
|
+
echo "Workflow wrapper missing ODB_CLI invocation: $rel" >&2
|
|
57
|
+
status=1
|
|
58
|
+
fi
|
|
59
|
+
fi
|
|
60
|
+
done
|
|
61
|
+
|
|
37
62
|
if [[ -f "$root/assets/templates/context.json" ]]; then
|
|
38
63
|
if ! node -e 'const fs=require("fs"); JSON.parse(fs.readFileSync(process.argv[1], "utf8"));' "$root/assets/templates/context.json" >/dev/null 2>&1; then
|
|
39
64
|
echo "Invalid JSON template: assets/templates/context.json" >&2
|
|
@@ -41,6 +66,26 @@ if [[ -f "$root/assets/templates/context.json" ]]; then
|
|
|
41
66
|
fi
|
|
42
67
|
fi
|
|
43
68
|
|
|
69
|
+
context_output="$("$root/scripts/run-research.sh" "ai browser automation" 30 context auto "web,docs")"
|
|
70
|
+
require_marker "run-research context" "$context_output" "# Research Context"
|
|
71
|
+
require_marker "run-research context" "$context_output" "ISSUE-09"
|
|
72
|
+
|
|
73
|
+
report_output="$("$root/scripts/render-output.sh" "ai browser automation" report)"
|
|
74
|
+
require_marker "render-output report" "$report_output" "# Research Report"
|
|
75
|
+
require_marker "render-output report" "$report_output" "Source selection"
|
|
76
|
+
|
|
77
|
+
tmpdir="$(mktemp -d)"
|
|
78
|
+
trap 'rm -rf "$tmpdir"' EXIT
|
|
79
|
+
artifact_output="$("$root/scripts/write-artifacts.sh" "ai browser automation" "$tmpdir")"
|
|
80
|
+
artifact_path="$(printf '%s\n' "$artifact_output" | node -e 'const fs=require("fs");const lines=fs.readFileSync(0,"utf8").split(/\r?\n/).map((line)=>line.trim()).filter(Boolean);let payload=null;for(const line of lines){try{payload=JSON.parse(line);}catch{}}const value=payload?.data?.path; if(typeof value==="string") process.stdout.write(value);')"
|
|
81
|
+
if [[ -z "$artifact_path" || ! -d "$artifact_path" ]]; then
|
|
82
|
+
echo "write-artifacts.sh did not produce a valid artifact directory." >&2
|
|
83
|
+
status=1
|
|
84
|
+
elif [[ ! -f "$artifact_path/bundle-manifest.json" || ! -f "$artifact_path/report.md" ]]; then
|
|
85
|
+
echo "write-artifacts.sh did not write the expected research bundle files." >&2
|
|
86
|
+
status=1
|
|
87
|
+
fi
|
|
88
|
+
|
|
44
89
|
if [[ $status -ne 0 ]]; then
|
|
45
90
|
exit $status
|
|
46
91
|
fi
|
|
@@ -9,7 +9,11 @@ fi
|
|
|
9
9
|
TOPIC="$1"
|
|
10
10
|
OUTDIR="$2"
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
13
|
+
# shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
|
|
14
|
+
source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
|
|
15
|
+
|
|
16
|
+
json_output="$("${ODB_CLI[@]}" research run --topic "$TOPIC" --mode path --output-dir "$OUTDIR" --output-format json)"
|
|
13
17
|
printf '%s\n' "$json_output"
|
|
14
18
|
|
|
15
19
|
artifact_path="$(printf '%s\n' "$json_output" | node -e 'const fs=require("fs");const lines=fs.readFileSync(0,"utf8").split(/\r?\n/).map((line)=>line.trim()).filter(Boolean);let payload=null;for(const line of lines){try{payload=JSON.parse(line);}catch{}}const p=payload?.data?.path; if(typeof p==="string") process.stdout.write(p);')"
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: opendevbrowser-shopping
|
|
3
3
|
description: Deterministic multi-provider shopping and deal-comparison workflow.
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.1.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Shopping Skill
|
|
8
8
|
|
|
9
9
|
Use this skill for robust deal hunting across providers with market-baseline validation and savings analysis.
|
|
10
10
|
|
|
11
|
+
Reliable defaults:
|
|
12
|
+
- start with explicit providers for reproducible reruns
|
|
13
|
+
- prefer `--browser-mode managed` unless relay-backed session state is required
|
|
14
|
+
- treat `--region` as advisory unless workflow output reports `meta.selection.region_authoritative=true`
|
|
15
|
+
|
|
11
16
|
## Pack Contents
|
|
12
17
|
|
|
13
18
|
- `artifacts/deal-hunting-workflows.md`
|
|
@@ -31,6 +36,12 @@ Use this skill for robust deal hunting across providers with market-baseline val
|
|
|
31
36
|
./skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh "wireless earbuds" "shopping/amazon,shopping/walmart"
|
|
32
37
|
```
|
|
33
38
|
|
|
39
|
+
## Supporting Surfaces
|
|
40
|
+
|
|
41
|
+
- Use browser replay (`screencast-start` / `screencast-stop`) when offer churn, price changes, or challenge timing needs temporal evidence.
|
|
42
|
+
- Use desktop observation only for read-only evidence around sibling desktop surfaces; provider collection stays browser-first.
|
|
43
|
+
- Use `--challenge-automation-mode off|browser|browser_with_helper` for bounded browser-scoped computer use on provider challenge branches; it is not desktop automation.
|
|
44
|
+
|
|
34
45
|
## Deal-Hunting Model
|
|
35
46
|
|
|
36
47
|
Use a two-layer check for each offer:
|
|
@@ -48,6 +59,7 @@ Use a two-layer check for each offer:
|
|
|
48
59
|
- Apply shared concurrency policy from `../opendevbrowser-best-practices/SKILL.md` ("Parallel Operations").
|
|
49
60
|
- Validate shopping workflows across `managed`, `extension`, and `cdpConnect` when browser-backed provider paths are exercised.
|
|
50
61
|
- Keep one session per worker for parallel offer collection and avoid session-level target contention.
|
|
62
|
+
- For browser-backed release proof and mode sweeps, follow the canonical direct-run evidence policy in `../opendevbrowser-best-practices/SKILL.md`.
|
|
51
63
|
|
|
52
64
|
## Savings Math
|
|
53
65
|
|
|
@@ -85,8 +97,15 @@ Matrix source: `../opendevbrowser-best-practices/artifacts/browser-agent-known-i
|
|
|
85
97
|
|
|
86
98
|
```bash
|
|
87
99
|
opendevbrowser shopping run --query "<query>" --providers shopping/amazon,shopping/walmart --mode json --output-format json
|
|
100
|
+
opendevbrowser shopping run --query "wireless ergonomic mouse" --providers shopping/bestbuy,shopping/ebay --budget 150 --browser-mode managed --mode json --output-format json
|
|
101
|
+
opendevbrowser shopping run --query "27 inch 4k monitor" --providers shopping/bestbuy,shopping/ebay --budget 350 --sort lowest_price --browser-mode managed --mode json --output-format json
|
|
88
102
|
```
|
|
89
103
|
|
|
104
|
+
Diagnostics rules:
|
|
105
|
+
- inspect `meta.primaryConstraintSummary` before classifying a zero-offer run as a provider failure
|
|
106
|
+
- inspect `meta.offerFilterDiagnostics` to see whether zero price, budget, or region-currency filters removed the candidate offers
|
|
107
|
+
- if `meta.alerts` includes `reasonCode=region_unenforced`, do not present the output as a trustworthy regional comparison
|
|
108
|
+
|
|
90
109
|
## Classification Heuristics
|
|
91
110
|
|
|
92
111
|
Default tags from analysis script:
|