harnery 0.36.0 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commander.d.ts +9 -0
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +10 -1
- package/dist/commands/admission.d.ts +21 -0
- package/dist/commands/admission.d.ts.map +1 -0
- package/dist/commands/admission.js +565 -0
- package/dist/commands/agents.d.ts +7 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +148 -47
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +73 -2
- package/dist/commands/browse-ai.d.ts +2 -2
- package/dist/commands/browse-ai.d.ts.map +1 -1
- package/dist/commands/browse-ai.js +6 -4
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +360 -21
- package/dist/commands/diagnostics.d.ts +4 -0
- package/dist/commands/diagnostics.d.ts.map +1 -0
- package/dist/commands/diagnostics.js +229 -0
- package/dist/commands/fetch.js +1 -0
- package/dist/commands/files.d.ts +12 -0
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +54 -1
- package/dist/commands/governor.d.ts.map +1 -1
- package/dist/commands/governor.js +4 -0
- package/dist/commands/ledger-v3.d.ts.map +1 -1
- package/dist/commands/ledger-v3.js +71 -2
- package/dist/commands/qa-record.d.ts +144 -0
- package/dist/commands/qa-record.d.ts.map +1 -0
- package/dist/commands/qa-record.js +0 -0
- package/dist/commands/qa-run.d.ts +8 -0
- package/dist/commands/qa-run.d.ts.map +1 -0
- package/dist/commands/qa-run.js +396 -0
- package/dist/commands/qa-status.d.ts +71 -0
- package/dist/commands/qa-status.d.ts.map +1 -0
- package/dist/commands/qa-status.js +490 -0
- package/dist/commands/qa-verify.d.ts +40 -0
- package/dist/commands/qa-verify.d.ts.map +1 -0
- package/dist/commands/qa-verify.js +180 -0
- package/dist/commands/resources.d.ts +4 -0
- package/dist/commands/resources.d.ts.map +1 -0
- package/dist/commands/resources.js +29 -0
- package/dist/commands/review-pack.d.ts +4 -0
- package/dist/commands/review-pack.d.ts.map +1 -0
- package/dist/commands/review-pack.js +1001 -0
- package/dist/commands/supervisor.d.ts +4 -0
- package/dist/commands/supervisor.d.ts.map +1 -0
- package/dist/commands/supervisor.js +101 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +17 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +4 -0
- package/dist/core/agents/cli.js +7 -3
- package/dist/core/agents/health.d.ts +17 -0
- package/dist/core/agents/health.d.ts.map +1 -0
- package/dist/core/agents/health.js +109 -0
- package/dist/core/agents/mailbox.d.ts +92 -0
- package/dist/core/agents/mailbox.d.ts.map +1 -0
- package/dist/core/agents/mailbox.js +325 -0
- package/dist/core/agents/qa-signal.d.ts +111 -0
- package/dist/core/agents/qa-signal.d.ts.map +1 -0
- package/dist/core/agents/qa-signal.js +231 -0
- package/dist/core/agents/reconcile-coordination-v3.d.ts +44 -0
- package/dist/core/agents/reconcile-coordination-v3.d.ts.map +1 -0
- package/dist/core/agents/reconcile-coordination-v3.js +58 -0
- package/dist/core/agents/render/prompt-context.d.ts +5 -0
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +34 -13
- package/dist/core/agents/render/session-context.d.ts +8 -0
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +34 -3
- package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/commit-conflict.js +50 -1
- package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
- package/dist/core/agents/rules/stop-hook.js +6 -10
- package/dist/core/agents/session-finalizer-v3.js +4 -1
- package/dist/core/agents/session-name-display.d.ts +20 -5
- package/dist/core/agents/session-name-display.d.ts.map +1 -1
- package/dist/core/agents/session-name-display.js +67 -7
- package/dist/core/agents/state/heartbeat-reader.d.ts +7 -0
- package/dist/core/agents/state/heartbeat-reader.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.d.ts +11 -0
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +17 -0
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-view.js +1 -0
- package/dist/core/agents/state/live-coordination-writer.js +5 -0
- package/dist/core/artifacts/constants.d.ts +1 -1
- package/dist/core/artifacts/constants.js +1 -1
- package/dist/core/artifacts/index.d.ts +82 -6
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +410 -15
- package/dist/core/config.d.ts +20 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +59 -0
- package/dist/core/diagnostics/advice.d.ts +9 -0
- package/dist/core/diagnostics/advice.d.ts.map +1 -0
- package/dist/core/diagnostics/advice.js +112 -0
- package/dist/core/diagnostics/bundle.d.ts +51 -0
- package/dist/core/diagnostics/bundle.d.ts.map +1 -0
- package/dist/core/diagnostics/bundle.js +968 -0
- package/dist/core/diagnostics/comparison.d.ts +5 -0
- package/dist/core/diagnostics/comparison.d.ts.map +1 -0
- package/dist/core/diagnostics/comparison.js +444 -0
- package/dist/core/diagnostics/contract.d.ts +245 -0
- package/dist/core/diagnostics/contract.d.ts.map +1 -0
- package/dist/core/diagnostics/contract.js +18 -0
- package/dist/core/diagnostics/identity.d.ts +3 -0
- package/dist/core/diagnostics/identity.d.ts.map +1 -0
- package/dist/core/diagnostics/identity.js +10 -0
- package/dist/core/diagnostics/index.d.ts +8 -0
- package/dist/core/diagnostics/index.d.ts.map +1 -0
- package/dist/core/diagnostics/index.js +7 -0
- package/dist/core/diagnostics/replay.d.ts +8 -0
- package/dist/core/diagnostics/replay.d.ts.map +1 -0
- package/dist/core/diagnostics/replay.js +213 -0
- package/dist/core/diagnostics/sanitize.d.ts +9 -0
- package/dist/core/diagnostics/sanitize.d.ts.map +1 -0
- package/dist/core/diagnostics/sanitize.js +84 -0
- package/dist/core/events/legacy-storage/compression.d.ts +13 -0
- package/dist/core/events/legacy-storage/compression.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/compression.js +107 -0
- package/dist/core/events/legacy-storage/index.d.ts +1 -0
- package/dist/core/events/legacy-storage/index.d.ts.map +1 -1
- package/dist/core/events/legacy-storage/index.js +1 -0
- package/dist/core/events/v3/archive-retention.d.ts +33 -0
- package/dist/core/events/v3/archive-retention.d.ts.map +1 -0
- package/dist/core/events/v3/archive-retention.js +195 -0
- package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
- package/dist/core/events/v3/bootstrap.js +10 -0
- package/dist/core/events/v3/capabilities.d.ts +1 -1
- package/dist/core/events/v3/capabilities.d.ts.map +1 -1
- package/dist/core/events/v3/capabilities.js +1 -0
- package/dist/core/events/v3/coordination-view.d.ts +3 -0
- package/dist/core/events/v3/coordination-view.d.ts.map +1 -1
- package/dist/core/events/v3/coordination-view.js +69 -8
- package/dist/core/events/v3/index.d.ts +1 -0
- package/dist/core/events/v3/index.d.ts.map +1 -1
- package/dist/core/events/v3/index.js +1 -0
- package/dist/core/events/v3/live-routing.d.ts.map +1 -1
- package/dist/core/events/v3/live-routing.js +1 -0
- package/dist/core/events/v3/producers/hook-base.d.ts +1 -1
- package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
- package/dist/core/events/v3/producers/hook-base.js +13 -2
- package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
- package/dist/core/events/v3/producers/intake.js +10 -2
- package/dist/core/events/v3/producers/recorder.d.ts +39 -0
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/recorder.js +350 -17
- package/dist/core/hooks/adapter/output.d.ts +8 -0
- package/dist/core/hooks/adapter/output.d.ts.map +1 -1
- package/dist/core/hooks/adapter/output.js +11 -1
- package/dist/core/hooks/cli.js +303 -219
- package/dist/core/hooks/health.d.ts +59 -0
- package/dist/core/hooks/health.d.ts.map +1 -0
- package/dist/core/hooks/health.js +84 -0
- package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
- package/dist/core/hooks/resolve/transcript.js +10 -3
- package/dist/core/hooks/session-name-presence.d.ts.map +1 -1
- package/dist/core/hooks/session-name-presence.js +4 -1
- package/dist/core/qa-artifacts.d.ts +20 -0
- package/dist/core/qa-artifacts.d.ts.map +1 -0
- package/dist/core/qa-artifacts.js +110 -0
- package/dist/core/resources/contract.d.ts +96 -0
- package/dist/core/resources/contract.d.ts.map +1 -0
- package/dist/core/resources/contract.js +2 -0
- package/dist/core/resources/index.d.ts +6 -0
- package/dist/core/resources/index.d.ts.map +1 -0
- package/dist/core/resources/index.js +5 -0
- package/dist/core/resources/sampler.d.ts +34 -0
- package/dist/core/resources/sampler.d.ts.map +1 -0
- package/dist/core/resources/sampler.js +458 -0
- package/dist/core/resources/service-status.d.ts +3 -0
- package/dist/core/resources/service-status.d.ts.map +1 -0
- package/dist/core/resources/service-status.js +48 -0
- package/dist/core/resources/service.d.ts +26 -0
- package/dist/core/resources/service.d.ts.map +1 -0
- package/dist/core/resources/service.js +292 -0
- package/dist/core/resources/storage.d.ts +13 -0
- package/dist/core/resources/storage.d.ts.map +1 -0
- package/dist/core/resources/storage.js +30 -0
- package/dist/core/storage/atomic-json.d.ts +3 -0
- package/dist/core/storage/atomic-json.d.ts.map +1 -0
- package/dist/core/storage/atomic-json.js +15 -0
- package/dist/core/storage/builtins.d.ts.map +1 -1
- package/dist/core/storage/builtins.js +45 -6
- package/dist/core/storage/logger.d.ts +2 -0
- package/dist/core/storage/logger.d.ts.map +1 -1
- package/dist/core/storage/logger.js +2 -0
- package/dist/core/storage/query.d.ts +14 -0
- package/dist/core/storage/query.d.ts.map +1 -1
- package/dist/core/storage/query.js +51 -0
- package/dist/core/supervisor/activity.d.ts +4 -0
- package/dist/core/supervisor/activity.d.ts.map +1 -0
- package/dist/core/supervisor/activity.js +141 -0
- package/dist/core/supervisor/contract.d.ts +268 -0
- package/dist/core/supervisor/contract.d.ts.map +1 -0
- package/dist/core/supervisor/contract.js +35 -0
- package/dist/core/supervisor/explanations.d.ts +4 -0
- package/dist/core/supervisor/explanations.d.ts.map +1 -0
- package/dist/core/supervisor/explanations.js +71 -0
- package/dist/core/supervisor/findings.d.ts +20 -0
- package/dist/core/supervisor/findings.d.ts.map +1 -0
- package/dist/core/supervisor/findings.js +399 -0
- package/dist/core/supervisor/history.d.ts +9 -0
- package/dist/core/supervisor/history.d.ts.map +1 -0
- package/dist/core/supervisor/history.js +46 -0
- package/dist/core/supervisor/hook-health-alerts.d.ts +14 -0
- package/dist/core/supervisor/hook-health-alerts.d.ts.map +1 -0
- package/dist/core/supervisor/hook-health-alerts.js +70 -0
- package/dist/core/supervisor/hook-health-storage.d.ts +5 -0
- package/dist/core/supervisor/hook-health-storage.d.ts.map +1 -0
- package/dist/core/supervisor/hook-health-storage.js +24 -0
- package/dist/core/supervisor/hook-health.d.ts +72 -0
- package/dist/core/supervisor/hook-health.d.ts.map +1 -0
- package/dist/core/supervisor/hook-health.js +203 -0
- package/dist/core/supervisor/hooks.d.ts +10 -0
- package/dist/core/supervisor/hooks.d.ts.map +1 -0
- package/dist/core/supervisor/hooks.js +28 -0
- package/dist/core/supervisor/index.d.ts +15 -0
- package/dist/core/supervisor/index.d.ts.map +1 -0
- package/dist/core/supervisor/index.js +14 -0
- package/dist/core/supervisor/log-feed.d.ts +9 -0
- package/dist/core/supervisor/log-feed.d.ts.map +1 -0
- package/dist/core/supervisor/log-feed.js +103 -0
- package/dist/core/supervisor/service.d.ts +29 -0
- package/dist/core/supervisor/service.d.ts.map +1 -0
- package/dist/core/supervisor/service.js +450 -0
- package/dist/core/supervisor/services.d.ts +11 -0
- package/dist/core/supervisor/services.d.ts.map +1 -0
- package/dist/core/supervisor/services.js +155 -0
- package/dist/core/supervisor/status.d.ts +3 -0
- package/dist/core/supervisor/status.d.ts.map +1 -0
- package/dist/core/supervisor/status.js +48 -0
- package/dist/core/supervisor/storage.d.ts +30 -0
- package/dist/core/supervisor/storage.d.ts.map +1 -0
- package/dist/core/supervisor/storage.js +73 -0
- package/dist/core/supervisor/timeline.d.ts +3 -0
- package/dist/core/supervisor/timeline.d.ts.map +1 -0
- package/dist/core/supervisor/timeline.js +87 -0
- package/dist/core/workflow/admission.d.ts +23 -0
- package/dist/core/workflow/admission.d.ts.map +1 -0
- package/dist/core/workflow/admission.js +136 -0
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +77 -2
- package/dist/core/workflow/index.d.ts +3 -2
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/index.js +2 -1
- package/dist/core/workflow/proof.d.ts +2 -1
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +39 -1
- package/dist/core/workflow/run-state.d.ts +3 -2
- package/dist/core/workflow/run-state.d.ts.map +1 -1
- package/dist/core/workflow/run-state.js +8 -1
- package/dist/core/workflow/types.d.ts +33 -1
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/core/workflow/types.js +2 -1
- package/dist/lib/admission.d.ts +71 -0
- package/dist/lib/admission.d.ts.map +1 -0
- package/dist/lib/admission.js +264 -0
- package/dist/lib/agent-browser/client.d.ts +1 -1
- package/dist/lib/agent-browser/client.d.ts.map +1 -1
- package/dist/lib/agent-browser/client.js +1 -5
- package/dist/lib/browser/capture-fidelity.d.ts +39 -0
- package/dist/lib/browser/capture-fidelity.d.ts.map +1 -0
- package/dist/lib/browser/capture-fidelity.js +84 -0
- package/dist/lib/browser/client.d.ts +46 -1
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +168 -9
- package/dist/lib/browser/critique.d.ts +38 -1
- package/dist/lib/browser/critique.d.ts.map +1 -1
- package/dist/lib/browser/critique.js +34 -6
- package/dist/lib/browser/index.d.ts +5 -1
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +4 -0
- package/dist/lib/browser/page-review-judge.d.ts +64 -0
- package/dist/lib/browser/page-review-judge.d.ts.map +1 -0
- package/dist/lib/browser/page-review-judge.js +270 -0
- package/dist/lib/browser/page-review-pack.d.ts +613 -0
- package/dist/lib/browser/page-review-pack.d.ts.map +1 -0
- package/dist/lib/browser/page-review-pack.js +1751 -0
- package/dist/lib/browser/qa-run-contracts.d.ts +377 -0
- package/dist/lib/browser/qa-run-contracts.d.ts.map +1 -0
- package/dist/lib/browser/qa-run-contracts.js +361 -0
- package/dist/lib/browser/qa-run.d.ts +141 -0
- package/dist/lib/browser/qa-run.d.ts.map +1 -0
- package/dist/lib/browser/qa-run.js +1283 -0
- package/dist/lib/browser/request-diagnostics.d.ts +13 -0
- package/dist/lib/browser/request-diagnostics.d.ts.map +1 -0
- package/dist/lib/browser/request-diagnostics.js +18 -0
- package/dist/lib/browser/tiling.d.ts +19 -0
- package/dist/lib/browser/tiling.d.ts.map +1 -1
- package/dist/lib/browser/tiling.js +28 -0
- package/dist/lib/cookies/client.d.ts +9 -0
- package/dist/lib/cookies/client.d.ts.map +1 -1
- package/dist/lib/cookies/client.js +197 -44
- package/dist/lib/cookies/extra.d.ts +18 -0
- package/dist/lib/cookies/extra.d.ts.map +1 -0
- package/dist/lib/cookies/extra.js +14 -0
- package/dist/lib/cookies/index.d.ts +2 -1
- package/dist/lib/cookies/index.d.ts.map +1 -1
- package/dist/lib/cookies/index.js +2 -1
- package/dist/lib/coord-root-id.d.ts +9 -0
- package/dist/lib/coord-root-id.d.ts.map +1 -0
- package/dist/lib/coord-root-id.js +17 -0
- package/dist/lib/durable-job.d.ts +124 -0
- package/dist/lib/durable-job.d.ts.map +1 -0
- package/dist/lib/durable-job.js +296 -0
- package/dist/lib/http/client.d.ts +7 -1
- package/dist/lib/http/client.d.ts.map +1 -1
- package/dist/lib/http/client.js +2 -0
- package/dist/lib/instructions/apply.d.ts +3 -1
- package/dist/lib/instructions/apply.d.ts.map +1 -1
- package/dist/lib/instructions/apply.js +74 -3
- package/dist/lib/instructions/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +11 -2
- package/package.json +19 -2
- package/src/commander.ts +75 -1
- package/src/commands/admission.ts +699 -0
- package/src/commands/agents.ts +189 -50
- package/src/commands/artifacts.ts +132 -18
- package/src/commands/browse-ai.ts +10 -5
- package/src/commands/browse.ts +496 -20
- package/src/commands/diagnostics.ts +271 -0
- package/src/commands/fetch.ts +1 -0
- package/src/commands/files.ts +102 -2
- package/src/commands/governor.ts +8 -0
- package/src/commands/ledger-v3.ts +82 -0
- package/src/commands/qa-record.ts +682 -0
- package/src/commands/qa-run.ts +503 -0
- package/src/commands/qa-status.ts +608 -0
- package/src/commands/qa-verify.ts +238 -0
- package/src/commands/resources.ts +38 -0
- package/src/commands/review-pack.ts +1281 -0
- package/src/commands/supervisor.ts +141 -0
- package/src/commands/web.ts +19 -0
- package/src/commands/workflow.ts +8 -0
- package/src/core/agents/cli.ts +7 -3
- package/src/core/agents/health.ts +142 -0
- package/src/core/agents/mailbox.ts +373 -0
- package/src/core/agents/qa-signal.ts +261 -0
- package/src/core/agents/reconcile-coordination-v3.ts +77 -0
- package/src/core/agents/render/prompt-context.ts +42 -12
- package/src/core/agents/render/session-context.ts +37 -3
- package/src/core/agents/rules/commit-conflict.ts +58 -1
- package/src/core/agents/rules/stop-hook.ts +6 -12
- package/src/core/agents/session-finalizer-v3.ts +4 -1
- package/src/core/agents/session-name-display.ts +78 -7
- package/src/core/agents/state/heartbeat-reader.ts +7 -0
- package/src/core/agents/state/heartbeat-writer.ts +23 -0
- package/src/core/agents/state/live-coordination-view.ts +1 -0
- package/src/core/agents/state/live-coordination-writer.ts +5 -0
- package/src/core/artifacts/constants.ts +1 -1
- package/src/core/artifacts/index.ts +565 -30
- package/src/core/config.ts +134 -2
- package/src/core/diagnostics/advice.ts +147 -0
- package/src/core/diagnostics/bundle.ts +1250 -0
- package/src/core/diagnostics/comparison.ts +565 -0
- package/src/core/diagnostics/contract.ts +311 -0
- package/src/core/diagnostics/identity.ts +11 -0
- package/src/core/diagnostics/index.ts +7 -0
- package/src/core/diagnostics/replay.ts +314 -0
- package/src/core/diagnostics/sanitize.ts +97 -0
- package/src/core/events/legacy-storage/compression.ts +130 -0
- package/src/core/events/legacy-storage/index.ts +1 -0
- package/src/core/events/v3/archive-retention.ts +251 -0
- package/src/core/events/v3/bootstrap.ts +10 -0
- package/src/core/events/v3/capabilities.ts +2 -0
- package/src/core/events/v3/coordination-view.ts +100 -11
- package/src/core/events/v3/index.ts +9 -0
- package/src/core/events/v3/live-routing.ts +1 -0
- package/src/core/events/v3/producers/hook-base.ts +14 -2
- package/src/core/events/v3/producers/intake.ts +10 -2
- package/src/core/events/v3/producers/recorder.ts +420 -17
- package/src/core/hooks/adapter/output.ts +12 -1
- package/src/core/hooks/cli.ts +332 -247
- package/src/core/hooks/health.ts +146 -0
- package/src/core/hooks/resolve/transcript.ts +10 -3
- package/src/core/hooks/session-name-presence.ts +6 -1
- package/src/core/qa-artifacts.ts +126 -0
- package/src/core/resources/contract.ts +105 -0
- package/src/core/resources/index.ts +5 -0
- package/src/core/resources/sampler.ts +590 -0
- package/src/core/resources/service-status.ts +62 -0
- package/src/core/resources/service.ts +337 -0
- package/src/core/resources/storage.ts +44 -0
- package/src/core/storage/atomic-json.ts +15 -0
- package/src/core/storage/builtins.ts +62 -6
- package/src/core/storage/logger.ts +2 -0
- package/src/core/storage/query.ts +58 -0
- package/src/core/supervisor/activity.ts +193 -0
- package/src/core/supervisor/contract.ts +312 -0
- package/src/core/supervisor/explanations.ts +104 -0
- package/src/core/supervisor/findings.ts +788 -0
- package/src/core/supervisor/history.ts +61 -0
- package/src/core/supervisor/hook-health-alerts.ts +108 -0
- package/src/core/supervisor/hook-health-storage.ts +25 -0
- package/src/core/supervisor/hook-health.ts +301 -0
- package/src/core/supervisor/hooks.ts +35 -0
- package/src/core/supervisor/index.ts +14 -0
- package/src/core/supervisor/log-feed.ts +131 -0
- package/src/core/supervisor/service.ts +511 -0
- package/src/core/supervisor/services.ts +203 -0
- package/src/core/supervisor/status.ts +59 -0
- package/src/core/supervisor/storage.ts +126 -0
- package/src/core/supervisor/timeline.ts +133 -0
- package/src/core/workflow/admission.ts +215 -0
- package/src/core/workflow/engine.ts +93 -1
- package/src/core/workflow/index.ts +10 -0
- package/src/core/workflow/proof.ts +54 -1
- package/src/core/workflow/run-state.ts +13 -1
- package/src/core/workflow/types.ts +39 -1
- package/src/lib/admission.ts +347 -0
- package/src/lib/agent-browser/client.ts +2 -10
- package/src/lib/browser/capture-fidelity.ts +98 -0
- package/src/lib/browser/client.ts +212 -10
- package/src/lib/browser/critique.ts +62 -7
- package/src/lib/browser/index.ts +65 -0
- package/src/lib/browser/page-review-judge.ts +360 -0
- package/src/lib/browser/page-review-pack.ts +2384 -0
- package/src/lib/browser/qa-run-contracts.ts +743 -0
- package/src/lib/browser/qa-run.ts +1462 -0
- package/src/lib/browser/request-diagnostics.ts +27 -0
- package/src/lib/browser/tiling.ts +32 -0
- package/src/lib/cookies/client.ts +228 -42
- package/src/lib/cookies/extra.ts +28 -0
- package/src/lib/cookies/index.ts +2 -0
- package/src/lib/coord-root-id.ts +23 -0
- package/src/lib/durable-job.ts +407 -0
- package/src/lib/http/client.ts +13 -1
- package/src/lib/instructions/apply.ts +81 -2
- package/src/lib/instructions/templates.ts +11 -2
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
2
|
import { writeFileSync } from "node:fs";
|
|
3
|
-
import { mergeCookies, } from "../cookies/index.js";
|
|
4
3
|
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
5
4
|
export class AgentBrowser {
|
|
6
5
|
opts;
|
|
@@ -154,10 +153,7 @@ export class AgentBrowser {
|
|
|
154
153
|
const cookies = parsed.data?.cookies ?? parsed.cookies ?? [];
|
|
155
154
|
if (!Array.isArray(cookies) || cookies.length === 0)
|
|
156
155
|
return { saved: 0 };
|
|
157
|
-
|
|
158
|
-
const store = jar.load();
|
|
159
|
-
const merged = mergeCookies(store, cookies);
|
|
160
|
-
jar.save(merged);
|
|
156
|
+
this.opts.jar.merge(cookies);
|
|
161
157
|
return { saved: cookies.length };
|
|
162
158
|
}
|
|
163
159
|
catch {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { PNG } from "pngjs";
|
|
2
|
+
import type { PageReviewCaptureFidelity } from "./page-review-pack.js";
|
|
3
|
+
/** The band-diff reuse threshold doubles as the fidelity threshold: a probe
|
|
4
|
+
* that would count as "unchanged" for reuse counts as "agrees" here. */
|
|
5
|
+
export declare const CAPTURE_FIDELITY_MISMATCH_THRESHOLD = 0.001;
|
|
6
|
+
export type FidelityProbe = PageReviewCaptureFidelity["probed"][number];
|
|
7
|
+
/**
|
|
8
|
+
* Pixel-compare a band cropped from the full-page screenshot with the same
|
|
9
|
+
* band captured by scrolling. `mismatch_ratio` is measured over the area the
|
|
10
|
+
* two images share (pixelmatch, anti-aliasing tolerant, the same math as
|
|
11
|
+
* band-diff reuse). `size_mismatch` is set when the two differ by more than a
|
|
12
|
+
* rounding pixel in either dimension; the caller treats that probe as
|
|
13
|
+
* inconclusive rather than as proof the full page is wrong, because a page
|
|
14
|
+
* wider than the viewport cannot be rendered whole by scrolling.
|
|
15
|
+
*/
|
|
16
|
+
export declare function compareBand(fullPageCrop: PNG, scrolledCapture: PNG, threshold?: number): {
|
|
17
|
+
mismatch_ratio: number;
|
|
18
|
+
exceeds: boolean;
|
|
19
|
+
size_mismatch: boolean;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Turn the probe results into the record the context carries. Any probe over
|
|
23
|
+
* the threshold means the full-page screenshot is not trustworthy for this
|
|
24
|
+
* context and the tiles must come from scrolled captures.
|
|
25
|
+
*/
|
|
26
|
+
export declare function decideFidelity(probes: readonly FidelityProbe[], threshold?: number): PageReviewCaptureFidelity;
|
|
27
|
+
/**
|
|
28
|
+
* Join PNG pieces top to bottom into one image. The output takes the first
|
|
29
|
+
* piece's width; a narrower piece leaves transparent pixels on its right, a
|
|
30
|
+
* wider one is cropped. Used to assemble a band taller than the viewport from
|
|
31
|
+
* viewport-height captures (see `Browser.captureRegionByScroll`).
|
|
32
|
+
*/
|
|
33
|
+
export declare function stitchPngRows(pieces: readonly Buffer[]): Buffer;
|
|
34
|
+
/** Width and height from a PNG header, without decoding the image. */
|
|
35
|
+
export declare function pngDimensions(buffer: Buffer): {
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=capture-fidelity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-fidelity.d.ts","sourceRoot":"","sources":["../../../src/lib/browser/capture-fidelity.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAGvE;wEACwE;AACxE,eAAO,MAAM,mCAAmC,QAA+B,CAAC;AAEhF,MAAM,MAAM,aAAa,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,YAAY,EAAE,GAAG,EACjB,eAAe,EAAE,GAAG,EACpB,SAAS,GAAE,MAA4C,GACtD;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAStE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,SAAS,GAAE,MAA4C,GACtD,yBAAyB,CAU3B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAkB/D;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAE/E"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Capture-fidelity probe for page review packs (pure: no browser, no src/core).
|
|
2
|
+
//
|
|
3
|
+
// A full-page screenshot of a very tall page can carry raster artifacts (a
|
|
4
|
+
// blank block, a callout clipped mid-sentence) that a viewport render of the
|
|
5
|
+
// same region does not show. While the capture browser is still open, the
|
|
6
|
+
// capture branch re-shoots every band by scroll-and-clip and pixel compares
|
|
7
|
+
// each with the crop the tiler took from the full-page image. When any band
|
|
8
|
+
// disagrees, the tiles are re-cut from those scrolled captures and the
|
|
9
|
+
// context records `capture_fidelity.source = "scrolled-bands"`.
|
|
10
|
+
//
|
|
11
|
+
// This module owns the parts that need no browser: the comparison, the
|
|
12
|
+
// decision, and the row stitch that joins viewport-height pieces into one
|
|
13
|
+
// band capture. `client.ts` owns the scroll-and-clip itself.
|
|
14
|
+
import { PNG } from "pngjs";
|
|
15
|
+
import { DEFAULT_REUSE_MISMATCH_RATIO, rectMismatch } from "./qa-reuse.js";
|
|
16
|
+
/** The band-diff reuse threshold doubles as the fidelity threshold: a probe
|
|
17
|
+
* that would count as "unchanged" for reuse counts as "agrees" here. */
|
|
18
|
+
export const CAPTURE_FIDELITY_MISMATCH_THRESHOLD = DEFAULT_REUSE_MISMATCH_RATIO;
|
|
19
|
+
/**
|
|
20
|
+
* Pixel-compare a band cropped from the full-page screenshot with the same
|
|
21
|
+
* band captured by scrolling. `mismatch_ratio` is measured over the area the
|
|
22
|
+
* two images share (pixelmatch, anti-aliasing tolerant, the same math as
|
|
23
|
+
* band-diff reuse). `size_mismatch` is set when the two differ by more than a
|
|
24
|
+
* rounding pixel in either dimension; the caller treats that probe as
|
|
25
|
+
* inconclusive rather than as proof the full page is wrong, because a page
|
|
26
|
+
* wider than the viewport cannot be rendered whole by scrolling.
|
|
27
|
+
*/
|
|
28
|
+
export function compareBand(fullPageCrop, scrolledCapture, threshold = CAPTURE_FIDELITY_MISMATCH_THRESHOLD) {
|
|
29
|
+
const width = Math.min(fullPageCrop.width, scrolledCapture.width);
|
|
30
|
+
const height = Math.min(fullPageCrop.height, scrolledCapture.height);
|
|
31
|
+
const size_mismatch = Math.abs(fullPageCrop.width - scrolledCapture.width) > 1 ||
|
|
32
|
+
Math.abs(fullPageCrop.height - scrolledCapture.height) > 1;
|
|
33
|
+
if (width <= 0 || height <= 0)
|
|
34
|
+
return { mismatch_ratio: 1, exceeds: true, size_mismatch: true };
|
|
35
|
+
const cmp = rectMismatch(fullPageCrop, scrolledCapture, { x: 0, y: 0, width, height });
|
|
36
|
+
return { mismatch_ratio: cmp.ratio, exceeds: cmp.ratio > threshold, size_mismatch };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Turn the probe results into the record the context carries. Any probe over
|
|
40
|
+
* the threshold means the full-page screenshot is not trustworthy for this
|
|
41
|
+
* context and the tiles must come from scrolled captures.
|
|
42
|
+
*/
|
|
43
|
+
export function decideFidelity(probes, threshold = CAPTURE_FIDELITY_MISMATCH_THRESHOLD) {
|
|
44
|
+
const mismatched = probes
|
|
45
|
+
.filter((probe) => probe.mismatch_ratio > threshold)
|
|
46
|
+
.map((probe) => probe.tile_id);
|
|
47
|
+
return {
|
|
48
|
+
source: mismatched.length > 0 ? "scrolled-bands" : "full-page",
|
|
49
|
+
probed: probes.map((probe) => ({ ...probe })),
|
|
50
|
+
mismatched,
|
|
51
|
+
mismatch_threshold: threshold,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Join PNG pieces top to bottom into one image. The output takes the first
|
|
56
|
+
* piece's width; a narrower piece leaves transparent pixels on its right, a
|
|
57
|
+
* wider one is cropped. Used to assemble a band taller than the viewport from
|
|
58
|
+
* viewport-height captures (see `Browser.captureRegionByScroll`).
|
|
59
|
+
*/
|
|
60
|
+
export function stitchPngRows(pieces) {
|
|
61
|
+
const first = pieces[0];
|
|
62
|
+
if (!first)
|
|
63
|
+
throw new Error("stitchPngRows: at least one piece is required");
|
|
64
|
+
if (pieces.length === 1)
|
|
65
|
+
return first;
|
|
66
|
+
const decoded = pieces.map((piece) => PNG.sync.read(piece));
|
|
67
|
+
const width = decoded[0].width;
|
|
68
|
+
const height = decoded.reduce((sum, piece) => sum + piece.height, 0);
|
|
69
|
+
const out = new PNG({ width, height });
|
|
70
|
+
let row = 0;
|
|
71
|
+
for (const piece of decoded) {
|
|
72
|
+
const copyWidth = Math.min(width, piece.width);
|
|
73
|
+
for (let y = 0; y < piece.height; y++) {
|
|
74
|
+
const srcStart = y * piece.width * 4;
|
|
75
|
+
piece.data.copy(out.data, (row + y) * width * 4, srcStart, srcStart + copyWidth * 4);
|
|
76
|
+
}
|
|
77
|
+
row += piece.height;
|
|
78
|
+
}
|
|
79
|
+
return PNG.sync.write(out);
|
|
80
|
+
}
|
|
81
|
+
/** Width and height from a PNG header, without decoding the image. */
|
|
82
|
+
export function pngDimensions(buffer) {
|
|
83
|
+
return { width: buffer.readUInt32BE(16), height: buffer.readUInt32BE(20) };
|
|
84
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Page, type Cookie as PWCookie } from "playwright";
|
|
2
|
-
import type
|
|
2
|
+
import { type CookieJar } from "../cookies/index.js";
|
|
3
3
|
import { type AssertResult, type AssertSpec } from "./asserts.js";
|
|
4
4
|
import { type ContentAnnotationBox, type ContentChecksRequest, type ContentChecksResult } from "./content-checks.js";
|
|
5
5
|
import { type LayoutLintRequest, type LayoutLintResult } from "./geometry.js";
|
|
@@ -33,6 +33,17 @@ export interface BrowserOptions {
|
|
|
33
33
|
width: number;
|
|
34
34
|
height: number;
|
|
35
35
|
};
|
|
36
|
+
/**
|
|
37
|
+
* Device scale factor (DPR) for the context. Unset keeps Playwright's
|
|
38
|
+
* default of 1, so screenshots are CSS-pixel sized. A higher value renders
|
|
39
|
+
* every screenshot at that multiple (2 doubles both dimensions).
|
|
40
|
+
*/
|
|
41
|
+
deviceScaleFactor?: number;
|
|
42
|
+
/**
|
|
43
|
+
* Emulated `prefers-color-scheme` for the context. Unset keeps Playwright's
|
|
44
|
+
* default (light), byte-identical to prior behavior.
|
|
45
|
+
*/
|
|
46
|
+
colorScheme?: "light" | "dark";
|
|
36
47
|
/** Default navigation timeout in ms. Default 30000. */
|
|
37
48
|
navigationTimeout?: number;
|
|
38
49
|
/**
|
|
@@ -262,6 +273,40 @@ export declare class Browser {
|
|
|
262
273
|
width: number;
|
|
263
274
|
height: number;
|
|
264
275
|
}): Promise<string>;
|
|
276
|
+
/**
|
|
277
|
+
* PNG of a document-space rect captured the way a reader sees it: scroll so
|
|
278
|
+
* the rect's top sits at the top of the viewport, wait for the scroll to
|
|
279
|
+
* settle (instant scroll, then rAF frames until `scrollY` stops moving),
|
|
280
|
+
* and clip the viewport. Restores the scroll position afterwards.
|
|
281
|
+
*
|
|
282
|
+
* Bands are taller than the viewport. Rather than resizing the viewport to
|
|
283
|
+
* the band height (which reflows `vh`-sized layout, moves sticky and fixed
|
|
284
|
+
* elements, and so stops matching what the user sees), the rect is captured
|
|
285
|
+
* in viewport-height pieces at the real viewport and the pieces are
|
|
286
|
+
* stitched with pngjs. The final piece of a multi-piece rect is anchored to
|
|
287
|
+
* the viewport bottom so a fixed header, which sits at the viewport top, is
|
|
288
|
+
* not repeated in the middle of the band. No viewport change is made.
|
|
289
|
+
*
|
|
290
|
+
* Pixels come back at the page's device scale factor, so a rect at DPR 2
|
|
291
|
+
* yields an image twice the rect's CSS size, the same as a full-page
|
|
292
|
+
* screenshot cropped in pixel space would.
|
|
293
|
+
*
|
|
294
|
+
* Parity with the full-page screenshot: a full-page capture renders the
|
|
295
|
+
* whole document as one viewport, so a fixed header or a stuck sticky bar
|
|
296
|
+
* appears once, at its document position. Scrolled, the same element would
|
|
297
|
+
* ride along at the top of every piece and differ from the full-page crop
|
|
298
|
+
* on every band but the first. So while a piece is captured at a non-zero
|
|
299
|
+
* scroll, every `position: fixed`/`sticky` element that has left its
|
|
300
|
+
* scroll-0 document position is given `visibility: hidden` (layout kept,
|
|
301
|
+
* inline style restored afterwards). The result is the region as a
|
|
302
|
+
* full-page screenshot would show it, without the full-page raster.
|
|
303
|
+
*/
|
|
304
|
+
captureRegionByScroll(rect: {
|
|
305
|
+
x: number;
|
|
306
|
+
y: number;
|
|
307
|
+
width: number;
|
|
308
|
+
height: number;
|
|
309
|
+
}): Promise<Buffer>;
|
|
265
310
|
/** Document-space rects + labels for each element matching `selector` (semantic tiling). */
|
|
266
311
|
elementTiles(selector: string): Promise<Array<{
|
|
267
312
|
label: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/browser/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,IAAI,EACT,KAAK,MAAM,IAAI,QAAQ,EAExB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,SAAS,EAAuB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAoB,MAAM,cAAc,CAAC;AACpF,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,cAAc;IAC7B,+FAA+F;IAC/F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sEAAsE;IACtE,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,kCAAkC;IAClC,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,aAAa,GAAG,QAAQ,CAAC;IACnE;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iEAAiE;IACjE,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gHAAgH;IAChH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB;;8BAE0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpD;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,wBAAwB,CAAC;CACtC;AAED,MAAM,MAAM,4BAA4B,GACpC,UAAU,GACV,QAAQ,GACR,cAAc,GACd,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,IAAI,EAAE,4BAA4B,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,wBAAwB,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,wBAAwB,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAEhD,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlB;AAsCD,qBAAa,OAAO;IAcN,OAAO,CAAC,IAAI;IAbxB,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,eAAe,CAA6C;IACpE,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,eAAe,CAAK;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,cAAc,CAAuB;gBAEzB,IAAI,GAAE,cAAmB;IAI7C,oEAAoE;IACpE,IAAI,WAAW,IAAI,IAAI,CAMtB;IAED;;;OAGG;YACW,QAAQ;IA+CtB;;;;;;;;;OASG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C3B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA0CjC,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,wBAAwB;YAWlB,kBAAkB;IA8BhC,OAAO,CAAC,oBAAoB;IAO5B;;;OAGG;IACH,WAAW,IAAI,WAAW;IAUpB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAUpD;;;;;OAKG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAUvC,gEAAgE;IAC1D,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAMlF,yEAAyE;IACnE,WAAW,IAAI,OAAO,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IAYF,6EAA6E;IACvE,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIjD,mFAAmF;IAC7E,oBAAoB,CAAC,IAAI,EAAE;QAC/B,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,MAAM,CAAC;IAKnB,4FAA4F;IACtF,YAAY,CAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAsBzF;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAC1B,KAAK,CAAC;QAAE,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,KAAK,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAC/E;IAiDD;;;;;;;;OAQG;IACG,WAAW,IAAI,OAAO,CAAC;QAC3B,KAAK,EAAE,KAAK,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,MAAM,CAAC,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC;SAC7C,CAAC,CAAC;QACH,WAAW,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACjF,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IAuJF;;;;;;OAMG;IACG,wBAAwB,CAAC,CAAC,GAAG,OAAO,EACxC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO,GAChC,OAAO,CAAC;QACT,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC;QACd,QAAQ,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5C,QAAQ,EAAE;YACR,SAAS,EAAE,OAAO,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,MAAM,CAAC;YACf,UAAU,EAAE,MAAM,CAAC;YACnB,aAAa,EAAE,MAAM,CAAC;YACtB,UAAU,EAAE,MAAM,CAAC;YACnB,iBAAiB,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;YACrD,kBAAkB,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;YACtD,iCAAiC,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;YACrE,gCAAgC,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;YACpE,gCAAgC,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;YACpE,UAAU,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,CAAC;SAC9D,CAAC;KACH,CAAC;IAoGF;;;;OAIG;IACG,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUtD,8DAA8D;IACxD,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUrD;;;;;OAKG;IACG,cAAc,CAClB,IAAI,GAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;KAAO,GACvE,OAAO,CAAC,oBAAoB,CAAC;IAO1B,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxE,yEAAyE;IACnE,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAIvD;;;;;;;;OAQG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAmBhC,aAAa,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAa9C,WAAW,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAiB3C,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQ3D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgBvD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAY1D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAOpD,aAAa,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAO3C,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAO3E,WAAW,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAOzF,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAMxD,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAQ1E,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA0HlF,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA0C5E,OAAO,CAAC,cAAc;YAgBR,oBAAoB;YAIpB,oBAAoB;IAclC,OAAO,CAAC,YAAY;YAQN,WAAW;IAezB,OAAO,CAAC,4BAA4B;IAIpC;;;;;;;OAOG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAO9B,iFAAiF;IAC3E,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE,6CAA6C;IACvC,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjD;;;;;OAKG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAI7D;;;;;OAKG;IACG,aAAa,CAAC,IAAI,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAMjF;;;;OAIG;IACG,UAAU,CAAC,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAO/F,wEAAwE;IAClE,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,uCAAuC;IACjC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5C,uFAAuF;IACjF,cAAc,CAAC,IAAI,EAAE;QACzB,MAAM,EAAE,WAAW,EAAE,CAAC;QACtB,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;QAChC,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjB,yCAAyC;IACnC,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C,oFAAoF;IAC9E,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI5E,8EAA8E;IACxE,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,4CAA4C;IACtC,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjD,kGAAkG;IAC5F,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI/E,8FAA8F;IACxF,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIhE,uEAAuE;IACjE,eAAe,CAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,wCAAwC;IAClC,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9C;;;;OAIG;IACG,eAAe,CACnB,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAC/B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAc9B,gEAAgE;IAC1D,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE,sCAAsC;IAChC,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjD;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,2DAA2D;IACrD,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKpC;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAsB7B"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/browser/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,13 @@ import { homedir } from "node:os";
|
|
|
3
3
|
import { dirname, resolve } from "node:path";
|
|
4
4
|
import axe from "axe-core";
|
|
5
5
|
import { chromium, } from "playwright";
|
|
6
|
+
import { CookieStoreParseError, } from "../cookies/index.js";
|
|
6
7
|
import { buildAssertCheck } from "./asserts.js";
|
|
8
|
+
import { stitchPngRows } from "./capture-fidelity.js";
|
|
7
9
|
import { buildClearContentAnnotationsScript, buildContentAnnotateScript, buildContentChecks, } from "./content-checks.js";
|
|
8
10
|
import { buildClearLayoutLintAnnotationsScript, buildLayoutLintAnnotateScript, buildLayoutLintCheck, } from "./geometry.js";
|
|
9
11
|
import { buildClearLayoutAnnotationsScript, buildLayoutAnnotateScript, buildOverflowCheck, buildWidthCheck, } from "./layout.js";
|
|
12
|
+
import { isBenignNextRscAbort } from "./request-diagnostics.js";
|
|
10
13
|
import { buildClearRuntsAnnotationsScript, buildRuntsAnnotateScript, buildRuntsCheck, } from "./runts.js";
|
|
11
14
|
import { buildStandaloneHtmlScript, DEFAULT_MAX_RESOURCE_BYTES, DEFAULT_MAX_TOTAL_RESOURCE_BYTES, } from "./standalone-html.js";
|
|
12
15
|
import { buildClearTargetSizeAnnotationsScript, buildTargetSizeAnnotateScript, buildTargetSizeCheck, } from "./target-size.js";
|
|
@@ -81,12 +84,17 @@ export class Browser {
|
|
|
81
84
|
* the whole sequence — not just the launch — can be retried as a unit.
|
|
82
85
|
*/
|
|
83
86
|
async openOnce() {
|
|
87
|
+
const jarCookies = this.opts.jar?.list() ?? [];
|
|
84
88
|
// Hold a launch slot only across the spawn itself, not the browser's life.
|
|
85
89
|
await acquireLaunchSlot();
|
|
86
90
|
try {
|
|
87
91
|
this.context = await chromium.launchPersistentContext(this.profileDir, {
|
|
88
92
|
headless: !this.opts.headed,
|
|
89
93
|
viewport: this.opts.viewport ?? { width: 1280, height: 800 },
|
|
94
|
+
...(this.opts.deviceScaleFactor !== undefined
|
|
95
|
+
? { deviceScaleFactor: this.opts.deviceScaleFactor }
|
|
96
|
+
: {}),
|
|
97
|
+
...(this.opts.colorScheme ? { colorScheme: this.opts.colorScheme } : {}),
|
|
90
98
|
...(this.opts.launchTimeout !== undefined ? { timeout: this.opts.launchTimeout } : {}),
|
|
91
99
|
...(this.opts.launchArgs && this.opts.launchArgs.length > 0
|
|
92
100
|
? { args: this.opts.launchArgs }
|
|
@@ -101,11 +109,8 @@ export class Browser {
|
|
|
101
109
|
releaseLaunchSlot();
|
|
102
110
|
}
|
|
103
111
|
this.context.setDefaultNavigationTimeout(this.opts.navigationTimeout ?? 30_000);
|
|
104
|
-
if (
|
|
105
|
-
|
|
106
|
-
if (jarCookies.length > 0) {
|
|
107
|
-
await this.context.addCookies(jarCookies.map(toPWCookie));
|
|
108
|
-
}
|
|
112
|
+
if (jarCookies.length > 0) {
|
|
113
|
+
await this.context.addCookies(jarCookies.map(toPWCookie));
|
|
109
114
|
}
|
|
110
115
|
// Caller-injected extraHeaders callback (e.g., for Cloudflare-bypass
|
|
111
116
|
// or custom auth headers). Per-request route handler so headers only
|
|
@@ -170,6 +175,11 @@ export class Browser {
|
|
|
170
175
|
this.consoleEvents = [];
|
|
171
176
|
this.pageErrors = [];
|
|
172
177
|
this.failedRequests = [];
|
|
178
|
+
if (err instanceof CookieStoreParseError) {
|
|
179
|
+
throw new Error(`Failed to open browser during cookie-store load: ${err.message}`, {
|
|
180
|
+
cause: err,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
173
183
|
if (attempt < maxAttempts) {
|
|
174
184
|
await new Promise((resolve) => setTimeout(resolve, attempt * 250));
|
|
175
185
|
}
|
|
@@ -196,11 +206,16 @@ export class Browser {
|
|
|
196
206
|
this.pageErrors.push({ message: err.message, stack: err.stack });
|
|
197
207
|
});
|
|
198
208
|
page.on("requestfailed", (req) => {
|
|
199
|
-
|
|
209
|
+
const failedRequest = {
|
|
200
210
|
url: req.url(),
|
|
201
211
|
method: req.method(),
|
|
202
212
|
failure: req.failure()?.errorText ?? "unknown",
|
|
203
213
|
resourceType: req.resourceType(),
|
|
214
|
+
};
|
|
215
|
+
if (isBenignNextRscAbort(failedRequest))
|
|
216
|
+
return;
|
|
217
|
+
this.failedRequests.push({
|
|
218
|
+
...failedRequest,
|
|
204
219
|
status: null,
|
|
205
220
|
kind: "network",
|
|
206
221
|
});
|
|
@@ -356,6 +371,152 @@ export class Browser {
|
|
|
356
371
|
const buf = await this.currentPage.screenshot({ type: "png", clip: rect });
|
|
357
372
|
return buf.toString("base64");
|
|
358
373
|
}
|
|
374
|
+
/**
|
|
375
|
+
* PNG of a document-space rect captured the way a reader sees it: scroll so
|
|
376
|
+
* the rect's top sits at the top of the viewport, wait for the scroll to
|
|
377
|
+
* settle (instant scroll, then rAF frames until `scrollY` stops moving),
|
|
378
|
+
* and clip the viewport. Restores the scroll position afterwards.
|
|
379
|
+
*
|
|
380
|
+
* Bands are taller than the viewport. Rather than resizing the viewport to
|
|
381
|
+
* the band height (which reflows `vh`-sized layout, moves sticky and fixed
|
|
382
|
+
* elements, and so stops matching what the user sees), the rect is captured
|
|
383
|
+
* in viewport-height pieces at the real viewport and the pieces are
|
|
384
|
+
* stitched with pngjs. The final piece of a multi-piece rect is anchored to
|
|
385
|
+
* the viewport bottom so a fixed header, which sits at the viewport top, is
|
|
386
|
+
* not repeated in the middle of the band. No viewport change is made.
|
|
387
|
+
*
|
|
388
|
+
* Pixels come back at the page's device scale factor, so a rect at DPR 2
|
|
389
|
+
* yields an image twice the rect's CSS size, the same as a full-page
|
|
390
|
+
* screenshot cropped in pixel space would.
|
|
391
|
+
*
|
|
392
|
+
* Parity with the full-page screenshot: a full-page capture renders the
|
|
393
|
+
* whole document as one viewport, so a fixed header or a stuck sticky bar
|
|
394
|
+
* appears once, at its document position. Scrolled, the same element would
|
|
395
|
+
* ride along at the top of every piece and differ from the full-page crop
|
|
396
|
+
* on every band but the first. So while a piece is captured at a non-zero
|
|
397
|
+
* scroll, every `position: fixed`/`sticky` element that has left its
|
|
398
|
+
* scroll-0 document position is given `visibility: hidden` (layout kept,
|
|
399
|
+
* inline style restored afterwards). The result is the region as a
|
|
400
|
+
* full-page screenshot would show it, without the full-page raster.
|
|
401
|
+
*/
|
|
402
|
+
async captureRegionByScroll(rect) {
|
|
403
|
+
const page = this.currentPage;
|
|
404
|
+
if (!(rect.width > 0) || !(rect.height > 0)) {
|
|
405
|
+
throw new Error(`captureRegionByScroll: rect must have a positive size (got ${rect.width}×${rect.height})`);
|
|
406
|
+
}
|
|
407
|
+
const settle = (top) => page.evaluate(async (target) => {
|
|
408
|
+
window.scrollTo({ left: window.scrollX, top: target, behavior: "instant" });
|
|
409
|
+
const frame = () => new Promise((r) => requestAnimationFrame(() => r()));
|
|
410
|
+
let last = Number.NaN;
|
|
411
|
+
for (let i = 0; i < 8; i++) {
|
|
412
|
+
await frame();
|
|
413
|
+
const now = window.scrollY;
|
|
414
|
+
if (now === last)
|
|
415
|
+
break;
|
|
416
|
+
last = now;
|
|
417
|
+
}
|
|
418
|
+
return {
|
|
419
|
+
scrollX: window.scrollX,
|
|
420
|
+
scrollY: window.scrollY,
|
|
421
|
+
innerWidth: window.innerWidth,
|
|
422
|
+
innerHeight: window.innerHeight,
|
|
423
|
+
};
|
|
424
|
+
}, top);
|
|
425
|
+
const original = await page.evaluate(() => ({ x: window.scrollX, y: window.scrollY }));
|
|
426
|
+
const pieces = [];
|
|
427
|
+
// Viewport-pinned candidates, measured at scroll 0 so each later capture
|
|
428
|
+
// can tell "still where the full page shows it" from "riding along".
|
|
429
|
+
await settle(0);
|
|
430
|
+
// Hiding uses opacity, not visibility: `visibility: hidden` on the pinned
|
|
431
|
+
// element is undone by any descendant that sets `visibility: visible`
|
|
432
|
+
// (a revealed brand label inside a sticky bar did exactly that), while
|
|
433
|
+
// opacity is a group effect no descendant can override. Transitions are
|
|
434
|
+
// switched off inline so the capture never lands mid-fade.
|
|
435
|
+
const pinned = await page.evaluateHandle(() => {
|
|
436
|
+
const out = [];
|
|
437
|
+
const all = document.querySelectorAll("body *");
|
|
438
|
+
const limit = Math.min(all.length, 20_000);
|
|
439
|
+
for (let i = 0; i < limit; i++) {
|
|
440
|
+
const el = all[i];
|
|
441
|
+
const position = getComputedStyle(el).position;
|
|
442
|
+
if (position !== "fixed" && position !== "sticky")
|
|
443
|
+
continue;
|
|
444
|
+
out.push({
|
|
445
|
+
el,
|
|
446
|
+
top: el.getBoundingClientRect().top + window.scrollY,
|
|
447
|
+
priorOpacity: el.style.getPropertyValue("opacity"),
|
|
448
|
+
priorOpacityPriority: el.style.getPropertyPriority("opacity"),
|
|
449
|
+
priorTransition: el.style.getPropertyValue("transition"),
|
|
450
|
+
priorTransitionPriority: el.style.getPropertyPriority("transition"),
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
return out;
|
|
454
|
+
});
|
|
455
|
+
const syncPinned = (mode) => page.evaluate(async ([entries, action]) => {
|
|
456
|
+
for (const entry of entries) {
|
|
457
|
+
const restore = () => {
|
|
458
|
+
entry.el.style.setProperty("opacity", entry.priorOpacity, entry.priorOpacityPriority);
|
|
459
|
+
entry.el.style.setProperty("transition", entry.priorTransition, entry.priorTransitionPriority);
|
|
460
|
+
};
|
|
461
|
+
if (action === "restore") {
|
|
462
|
+
restore();
|
|
463
|
+
continue;
|
|
464
|
+
}
|
|
465
|
+
const now = entry.el.getBoundingClientRect().top + window.scrollY;
|
|
466
|
+
if (Math.abs(now - entry.top) > 1) {
|
|
467
|
+
entry.el.style.setProperty("transition", "none", "important");
|
|
468
|
+
entry.el.style.setProperty("opacity", "0", "important");
|
|
469
|
+
}
|
|
470
|
+
else {
|
|
471
|
+
restore();
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
// Let the style change paint before the screenshot is taken.
|
|
475
|
+
await new Promise((r) => requestAnimationFrame(() => r()));
|
|
476
|
+
}, [pinned, mode]);
|
|
477
|
+
try {
|
|
478
|
+
const bottom = rect.y + rect.height;
|
|
479
|
+
let cursor = rect.y;
|
|
480
|
+
let first = true;
|
|
481
|
+
while (cursor < bottom) {
|
|
482
|
+
const remaining = bottom - cursor;
|
|
483
|
+
// Top-align the piece; a final partial piece is then re-anchored to
|
|
484
|
+
// the viewport bottom once the viewport height is known.
|
|
485
|
+
let view = await settle(cursor);
|
|
486
|
+
if (!first && remaining < view.innerHeight) {
|
|
487
|
+
view = await settle(Math.max(0, bottom - view.innerHeight));
|
|
488
|
+
}
|
|
489
|
+
await syncPinned("hide-moved");
|
|
490
|
+
const offset = cursor - view.scrollY;
|
|
491
|
+
if (offset < 0 || offset >= view.innerHeight) {
|
|
492
|
+
throw new Error(`captureRegionByScroll: document y ${cursor} is not reachable in the viewport ` +
|
|
493
|
+
`(scrollY ${view.scrollY}, innerHeight ${view.innerHeight})`);
|
|
494
|
+
}
|
|
495
|
+
const pieceHeight = Math.min(remaining, view.innerHeight - offset);
|
|
496
|
+
const clipX = Math.max(0, rect.x - view.scrollX);
|
|
497
|
+
const clipWidth = Math.min(rect.width, view.innerWidth - clipX);
|
|
498
|
+
if (!(clipWidth > 0)) {
|
|
499
|
+
throw new Error(`captureRegionByScroll: document x ${rect.x} is outside the viewport (innerWidth ${view.innerWidth})`);
|
|
500
|
+
}
|
|
501
|
+
pieces.push(await page.screenshot({
|
|
502
|
+
type: "png",
|
|
503
|
+
clip: { x: clipX, y: offset, width: clipWidth, height: pieceHeight },
|
|
504
|
+
}));
|
|
505
|
+
cursor += pieceHeight;
|
|
506
|
+
first = false;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
finally {
|
|
510
|
+
try {
|
|
511
|
+
await syncPinned("restore");
|
|
512
|
+
}
|
|
513
|
+
finally {
|
|
514
|
+
await pinned.dispose();
|
|
515
|
+
await page.evaluate(({ x, y }) => window.scrollTo({ left: x, top: y, behavior: "instant" }), original);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
return stitchPngRows(pieces);
|
|
519
|
+
}
|
|
359
520
|
/** Document-space rects + labels for each element matching `selector` (semantic tiling). */
|
|
360
521
|
async elementTiles(selector) {
|
|
361
522
|
return await this.currentPage.evaluate((sel) => {
|
|
@@ -1229,9 +1390,7 @@ export class Browser {
|
|
|
1229
1390
|
if (this.opts.jar) {
|
|
1230
1391
|
try {
|
|
1231
1392
|
const live = await this.context.cookies();
|
|
1232
|
-
|
|
1233
|
-
this.opts.jar.set(toJarCookie(c));
|
|
1234
|
-
}
|
|
1393
|
+
this.opts.jar.merge(live.map(toJarCookie));
|
|
1235
1394
|
}
|
|
1236
1395
|
catch {
|
|
1237
1396
|
// Cookie persist is best-effort; never block close on it.
|
|
@@ -19,10 +19,26 @@ export interface CritiqueFinding {
|
|
|
19
19
|
category: string;
|
|
20
20
|
description: string;
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* How much of the page the tiles actually cover. The tiler keeps at most
|
|
24
|
+
* `maxTiles` bands and drops the rest, so on a tall page `capped` is true and
|
|
25
|
+
* `reviewed_height_px` stops short of `page_height_px`. Callers that turn a
|
|
26
|
+
* critique into a verdict must read this: a pass over the first 24 bands is
|
|
27
|
+
* not a pass over the page.
|
|
28
|
+
*/
|
|
29
|
+
export interface CritiqueCoverage {
|
|
30
|
+
page_height_px: number;
|
|
31
|
+
reviewed_height_px: number;
|
|
32
|
+
bands_total: number;
|
|
33
|
+
bands_reviewed: number;
|
|
34
|
+
capped: boolean;
|
|
35
|
+
}
|
|
22
36
|
export interface CritiqueResult {
|
|
23
37
|
rule: "critique";
|
|
24
38
|
/** Number of tiles the page was cut into. */
|
|
25
39
|
tiles: number;
|
|
40
|
+
/** Tile coverage of the page; absent only for results built without tiles. */
|
|
41
|
+
coverage?: CritiqueCoverage;
|
|
26
42
|
/** Whether a provider was available. False → outcome "skipped". */
|
|
27
43
|
provider: boolean;
|
|
28
44
|
findings: CritiqueFinding[];
|
|
@@ -82,6 +98,15 @@ export declare function bandRects(pageHeight: number, pageWidth: number, bandHei
|
|
|
82
98
|
* the provider would downscale. Atom coordinates must be in the same pixel
|
|
83
99
|
* space as the screenshot (identical at deviceScaleFactor 1; scale them if
|
|
84
100
|
* the capture DPR differs).
|
|
101
|
+
*
|
|
102
|
+
* `hitRects` (document-space rectangles a deterministic gate already flagged)
|
|
103
|
+
* add bands past the `maxTiles` cap: every full-page band that intersects a
|
|
104
|
+
* hit rect and was dropped by the cap is cut as well, labelled `hit band N`
|
|
105
|
+
* (N is the band's 1-based position in the full band list, and the tile's
|
|
106
|
+
* `index` is that position minus one), and appended after the kept bands.
|
|
107
|
+
* `coverage` stays honest about the kept prefix; `hitBands` counts the
|
|
108
|
+
* extras. Ignored for selector tiling (`elementRects`), which has no cap to
|
|
109
|
+
* look past in that sense.
|
|
85
110
|
*/
|
|
86
111
|
export declare function tilesFromFullPage(fullPageBuffer: Buffer, opts: {
|
|
87
112
|
elementRects?: Array<{
|
|
@@ -95,7 +120,19 @@ export declare function tilesFromFullPage(fullPageBuffer: Buffer, opts: {
|
|
|
95
120
|
overlap?: number;
|
|
96
121
|
maxTiles: number;
|
|
97
122
|
atoms?: VisualAtom[];
|
|
98
|
-
|
|
123
|
+
hitRects?: Array<{
|
|
124
|
+
x: number;
|
|
125
|
+
y: number;
|
|
126
|
+
width: number;
|
|
127
|
+
height: number;
|
|
128
|
+
}>;
|
|
129
|
+
/** Cap on hit bands appended past `maxTiles` (default 50). */
|
|
130
|
+
maxHitBands?: number;
|
|
131
|
+
}): {
|
|
132
|
+
tiles: CritiqueTile[];
|
|
133
|
+
coverage: CritiqueCoverage;
|
|
134
|
+
hitBands: number;
|
|
135
|
+
};
|
|
99
136
|
/**
|
|
100
137
|
* Validate + normalize a provider's raw output into CritiqueFindings. Tolerant
|
|
101
138
|
* of a model returning a bare array or wrapping it in `{ findings: [...] }`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"critique.d.ts","sourceRoot":"","sources":["../../../src/lib/browser/critique.ts"],"names":[],"mappings":"AAoBA,OAAO,
|
|
1
|
+
{"version":3,"file":"critique.d.ts","sourceRoot":"","sources":["../../../src/lib/browser/critique.ts"],"names":[],"mappings":"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"}
|