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
|
@@ -0,0 +1,613 @@
|
|
|
1
|
+
import type { CritiqueCoverage, CritiqueFinding, CritiqueTile } from "./critique.js";
|
|
2
|
+
import type { QaContext, QaSignature } from "./qa-plan.js";
|
|
3
|
+
export declare const PAGE_REVIEW_PACK_SCHEMA = "harnery-page-review/v1";
|
|
4
|
+
export declare const PAGE_REVIEW_FINDINGS_SCHEMA = "harnery-page-review-findings/v3";
|
|
5
|
+
/** Directory name a qa-run gives its pack inside the run directory. */
|
|
6
|
+
export declare const PAGE_REVIEW_PACK_DIRNAME = "pack";
|
|
7
|
+
export declare const PAGE_REVIEW_MANIFEST_FILENAME = "manifest.json";
|
|
8
|
+
export declare const PAGE_REVIEW_REVIEW_FILENAME = "review.md";
|
|
9
|
+
export declare const PAGE_REVIEW_FINDINGS_FILENAME = "findings.json";
|
|
10
|
+
export declare const PAGE_REVIEW_FINDINGS_SCHEMA_FILENAME = "findings.schema.json";
|
|
11
|
+
/** How long a pack lives after its judge (or its capture, when no judge
|
|
12
|
+
* runs) before the whole directory is deleted. Ruled 2026-09-02. */
|
|
13
|
+
export declare const PAGE_REVIEW_DEFAULT_RETENTION_MINUTES = 90;
|
|
14
|
+
/** The only file left behind when an expired pack is deleted. */
|
|
15
|
+
export declare const PAGE_REVIEW_EXPIRED_STUB_FILENAME = "pack-expired.json";
|
|
16
|
+
/** Reviewer dispositions a machine finding can carry in `findings.json`. */
|
|
17
|
+
export declare const PAGE_REVIEW_DISPOSITIONS: readonly ["confirmed", "artifact", "not-a-defect", "duplicate-of-gate"];
|
|
18
|
+
export type PageReviewDisposition = (typeof PAGE_REVIEW_DISPOSITIONS)[number];
|
|
19
|
+
/** Schema id and file name of the reviewed-outcome record `review-pack verdict` writes. */
|
|
20
|
+
export declare const PAGE_REVIEW_VERDICT_SCHEMA = "harnery-page-review-verdict/v2";
|
|
21
|
+
export declare const PAGE_REVIEW_VERDICT_FILENAME = "verdict.json";
|
|
22
|
+
export declare const PAGE_REVIEW_FINDING_SEVERITIES: readonly ["critical", "high", "medium", "low", "info"];
|
|
23
|
+
export type PageReviewFindingSeverity = (typeof PAGE_REVIEW_FINDING_SEVERITIES)[number];
|
|
24
|
+
export declare const PAGE_REVIEW_FINDING_CATEGORIES: readonly ["layout", "typography", "contrast", "content", "image", "interaction", "accessibility", "responsiveness", "render-artifact", "coverage", "other"];
|
|
25
|
+
export type PageReviewFindingCategory = (typeof PAGE_REVIEW_FINDING_CATEGORIES)[number];
|
|
26
|
+
export declare const PAGE_REVIEW_SUBAGENT_MODELS: readonly ["GPT-5.6 Luna", "Composer 2.5", "Haiku 4.5"];
|
|
27
|
+
export type PageReviewSubagentModel = (typeof PAGE_REVIEW_SUBAGENT_MODELS)[number];
|
|
28
|
+
/** One review-subagent finding in `findings.json`. */
|
|
29
|
+
export interface PageReviewReviewerFinding {
|
|
30
|
+
id: string;
|
|
31
|
+
severity: PageReviewFindingSeverity;
|
|
32
|
+
category: PageReviewFindingCategory;
|
|
33
|
+
context_id: string;
|
|
34
|
+
/** Tile ids (`T012`) or pack-relative file paths; never empty. */
|
|
35
|
+
evidence: string[];
|
|
36
|
+
observation: string;
|
|
37
|
+
recommendation?: string;
|
|
38
|
+
confidence?: number;
|
|
39
|
+
}
|
|
40
|
+
/** A reviewer's verdict on one machine finding in `evidence/critique.json`. */
|
|
41
|
+
export interface PageReviewDispositionRecord {
|
|
42
|
+
/** `<context-id>/<tile-id>#<n>`, n = 0-based position among the tile's findings. */
|
|
43
|
+
target: string;
|
|
44
|
+
disposition: PageReviewDisposition;
|
|
45
|
+
note?: string;
|
|
46
|
+
by?: string;
|
|
47
|
+
at?: string;
|
|
48
|
+
}
|
|
49
|
+
/** One review subagent's assigned and completed primary-tile work. */
|
|
50
|
+
export interface PageReviewDelegatedReviewRecord {
|
|
51
|
+
reviewer: string;
|
|
52
|
+
model: PageReviewSubagentModel;
|
|
53
|
+
/** `<context-id>/<tile-id>` entries assigned to this subagent. */
|
|
54
|
+
assigned_tiles: string[];
|
|
55
|
+
/** Assigned entries the subagent actually opened at native pixels. */
|
|
56
|
+
completed_tiles: string[];
|
|
57
|
+
status: "complete" | "incomplete";
|
|
58
|
+
}
|
|
59
|
+
/** The delegated-review `findings.json` document. */
|
|
60
|
+
export interface PageReviewFindingsDocument {
|
|
61
|
+
schema: string;
|
|
62
|
+
schema_path?: string;
|
|
63
|
+
target: string;
|
|
64
|
+
reviewer: string | null;
|
|
65
|
+
reviewed_at: string | null;
|
|
66
|
+
delegated_reviews: PageReviewDelegatedReviewRecord[];
|
|
67
|
+
findings: PageReviewReviewerFinding[];
|
|
68
|
+
dispositions?: PageReviewDispositionRecord[];
|
|
69
|
+
}
|
|
70
|
+
/** What `resolvePackVerdict` derives from the machine critique plus the reviewer's file. */
|
|
71
|
+
export interface PageReviewVerdict {
|
|
72
|
+
machine_outcome: "pass" | "fail" | "skipped" | "incomplete";
|
|
73
|
+
reviewed_outcome: "pass" | "fail" | "skipped" | "incomplete";
|
|
74
|
+
/** Machine `high` findings across every judged context. */
|
|
75
|
+
high_total: number;
|
|
76
|
+
high_confirmed: number;
|
|
77
|
+
/** Highs dispositioned `artifact`, `not-a-defect`, or `duplicate-of-gate`. */
|
|
78
|
+
high_dismissed: number;
|
|
79
|
+
/** Highs with no disposition; they still count against the page. */
|
|
80
|
+
high_open: number;
|
|
81
|
+
/** Review-subagent findings at `critical` or `high`; each counts against the page. */
|
|
82
|
+
reviewer_high: number;
|
|
83
|
+
/** Dispositions whose target matched a machine finding. */
|
|
84
|
+
dispositions_applied: number;
|
|
85
|
+
/** Disposition targets that name no machine finding in the critique. */
|
|
86
|
+
unmatched_dispositions: string[];
|
|
87
|
+
/** Primary tiles the inspection plan requires. */
|
|
88
|
+
primary_tiles_total: number;
|
|
89
|
+
/** Required tiles covered by a completed review-subagent record. */
|
|
90
|
+
primary_tiles_reviewed: number;
|
|
91
|
+
/** Required `<context-id>/<tile-id>` entries with no completed subagent review. */
|
|
92
|
+
uncovered_primary_tiles: string[];
|
|
93
|
+
}
|
|
94
|
+
export interface PageReviewVerdictDocument extends PageReviewVerdict {
|
|
95
|
+
schema: string;
|
|
96
|
+
reviewed_at: string;
|
|
97
|
+
}
|
|
98
|
+
/** How a context's tiles were cut: from one full-page screenshot (the
|
|
99
|
+
* default) or from per-band scrolled viewport captures (the fallback when the
|
|
100
|
+
* fidelity probe proved the full-page screenshot wrong). */
|
|
101
|
+
export interface PageReviewCaptureFidelity {
|
|
102
|
+
source: "full-page" | "scrolled-bands";
|
|
103
|
+
/** Bands re-shot by scroll-and-clip and compared with the full-page capture. */
|
|
104
|
+
probed: Array<{
|
|
105
|
+
tile_id: string;
|
|
106
|
+
scrollY: number;
|
|
107
|
+
height: number;
|
|
108
|
+
mismatch_ratio: number;
|
|
109
|
+
}>;
|
|
110
|
+
/** Tile ids whose probe exceeded the mismatch threshold. */
|
|
111
|
+
mismatched: string[];
|
|
112
|
+
mismatch_threshold: number;
|
|
113
|
+
}
|
|
114
|
+
/** Pack expiry as written into the manifest. `managed` is false for a pack
|
|
115
|
+
* written to an explicit `--out`; such a pack is never deleted automatically. */
|
|
116
|
+
export interface PageReviewRetention {
|
|
117
|
+
expires_at: string;
|
|
118
|
+
managed: boolean;
|
|
119
|
+
}
|
|
120
|
+
/** One tile as stored in the pack. `id` is stable within its context
|
|
121
|
+
* (`T001`, `T002`, …) and is what a finding cites. `file` is pack-relative. */
|
|
122
|
+
export interface PageReviewTileRecord {
|
|
123
|
+
id: string;
|
|
124
|
+
/** Tiler index (position in the capture's tile list). */
|
|
125
|
+
index: number;
|
|
126
|
+
label: string;
|
|
127
|
+
/** Selector the tile was cut for; absent for full-page bands. */
|
|
128
|
+
scope?: string;
|
|
129
|
+
/** `band` (full-page band), `scope` (selector tile), or `hit-band` (a band
|
|
130
|
+
* captured past the tile cap because a gate hit lands in it). Absent on
|
|
131
|
+
* packs written before this field existed; treat as `band`/`scope` by
|
|
132
|
+
* whether `scope` is set. */
|
|
133
|
+
kind?: "band" | "scope" | "hit-band";
|
|
134
|
+
x: number;
|
|
135
|
+
scrollY: number;
|
|
136
|
+
width: number;
|
|
137
|
+
height: number;
|
|
138
|
+
file: string;
|
|
139
|
+
sha256: string;
|
|
140
|
+
bytes: number;
|
|
141
|
+
}
|
|
142
|
+
/** One tile region re-captured at a higher device scale factor after the
|
|
143
|
+
* original capture (`review-pack expand`). The source tile is untouched; this
|
|
144
|
+
* record sits beside it. `file` is pack-relative. Optional and additive on the
|
|
145
|
+
* v1 context record. */
|
|
146
|
+
export interface PageReviewExpandedTileRecord {
|
|
147
|
+
/** Source tile id (`T012`). */
|
|
148
|
+
tile: string;
|
|
149
|
+
/** Device scale factor the region was rendered at (2 = twice the pixels). */
|
|
150
|
+
dpr: number;
|
|
151
|
+
/** Pixel size of the expanded PNG (source tile size × dpr, clamped). */
|
|
152
|
+
width: number;
|
|
153
|
+
height: number;
|
|
154
|
+
file: string;
|
|
155
|
+
sha256: string;
|
|
156
|
+
bytes: number;
|
|
157
|
+
captured_at: string;
|
|
158
|
+
}
|
|
159
|
+
/** The per-context contact sheet: every tile downscaled into one grid PNG
|
|
160
|
+
* for orientation. Reading order is row-major (left to right, then top to
|
|
161
|
+
* bottom) in tile id order; each cell carries its tile id stamped in its
|
|
162
|
+
* label band. Optional and additive on the v1 context record. */
|
|
163
|
+
export interface PageReviewContactSheetRecord {
|
|
164
|
+
file: string;
|
|
165
|
+
sha256: string;
|
|
166
|
+
bytes: number;
|
|
167
|
+
width: number;
|
|
168
|
+
height: number;
|
|
169
|
+
columns: number;
|
|
170
|
+
rows: number;
|
|
171
|
+
cell_width: number;
|
|
172
|
+
cell_height: number;
|
|
173
|
+
order: "row-major";
|
|
174
|
+
}
|
|
175
|
+
export interface PageReviewContextRecord {
|
|
176
|
+
id: string;
|
|
177
|
+
viewport: string;
|
|
178
|
+
theme: "light" | "dark";
|
|
179
|
+
state: string;
|
|
180
|
+
/** Rendered URL after navigation. */
|
|
181
|
+
url: string;
|
|
182
|
+
title?: string;
|
|
183
|
+
captured_at: string;
|
|
184
|
+
page: {
|
|
185
|
+
width: number;
|
|
186
|
+
height: number;
|
|
187
|
+
};
|
|
188
|
+
/** Full-page band coverage (what the tiler kept of the page). */
|
|
189
|
+
coverage: CritiqueCoverage;
|
|
190
|
+
scopes: Array<{
|
|
191
|
+
selector: string;
|
|
192
|
+
tiles: number;
|
|
193
|
+
}>;
|
|
194
|
+
/** Pack-relative file paths. `dom` ends in `.gz` (gzip) for packs written
|
|
195
|
+
* after the footprint change and in `.html` (plain) for older packs. */
|
|
196
|
+
files: {
|
|
197
|
+
full_page: string;
|
|
198
|
+
dom: string;
|
|
199
|
+
signature: string;
|
|
200
|
+
tiles: string;
|
|
201
|
+
context: string;
|
|
202
|
+
};
|
|
203
|
+
dom_sha256: string;
|
|
204
|
+
tiles: PageReviewTileRecord[];
|
|
205
|
+
/** Higher-DPR re-captures of single tiles, in the order they were made. */
|
|
206
|
+
expanded?: PageReviewExpandedTileRecord[];
|
|
207
|
+
/** Downscaled grid of every tile (`contacts.png`); absent for a context with no tiles. */
|
|
208
|
+
contact_sheet?: PageReviewContactSheetRecord;
|
|
209
|
+
/** Where the tiles came from and what the fidelity probe saw. Absent on
|
|
210
|
+
* packs written before the probe existed (tiles came from the full page). */
|
|
211
|
+
capture_fidelity?: PageReviewCaptureFidelity;
|
|
212
|
+
/** Bands captured past the tile cap because a gate hit lands in them. */
|
|
213
|
+
hit_bands?: number;
|
|
214
|
+
}
|
|
215
|
+
/** What a capture hands the pack for one context. `tiles` are the full-page
|
|
216
|
+
* bands; `scopeTiles` are selector tiles, one entry per selector. */
|
|
217
|
+
export interface PageReviewContextCapture {
|
|
218
|
+
context: QaContext & {
|
|
219
|
+
id?: string;
|
|
220
|
+
};
|
|
221
|
+
url: string;
|
|
222
|
+
title?: string;
|
|
223
|
+
fullPage: Buffer;
|
|
224
|
+
pageWidth: number;
|
|
225
|
+
pageHeight: number;
|
|
226
|
+
tiles: CritiqueTile[];
|
|
227
|
+
coverage: CritiqueCoverage;
|
|
228
|
+
scopeTiles?: Array<{
|
|
229
|
+
selector: string;
|
|
230
|
+
tiles: CritiqueTile[];
|
|
231
|
+
}>;
|
|
232
|
+
signature: QaSignature;
|
|
233
|
+
domHtml: string;
|
|
234
|
+
capturedAt?: string;
|
|
235
|
+
/** Result of the capture-fidelity probe (capture-fidelity.ts); absent when
|
|
236
|
+
* the capture did not probe. Copied onto the record as `capture_fidelity`. */
|
|
237
|
+
captureFidelity?: PageReviewCaptureFidelity;
|
|
238
|
+
/** Bands cut past the tile cap because a gate hit lands in them (their
|
|
239
|
+
* tiles sit in `tiles` after the kept bands, labelled `hit band N`). */
|
|
240
|
+
hitBands?: number;
|
|
241
|
+
}
|
|
242
|
+
/** One context's machine critique, as the judge records it into the pack. */
|
|
243
|
+
export interface PageReviewCritiqueRecord {
|
|
244
|
+
context_id: string;
|
|
245
|
+
provider: string;
|
|
246
|
+
tiles_total: number;
|
|
247
|
+
tiles_reviewed: number;
|
|
248
|
+
tiles_reused: number;
|
|
249
|
+
outcome: "pass" | "fail" | "skipped" | "incomplete";
|
|
250
|
+
findings: Array<CritiqueFinding & {
|
|
251
|
+
tile_id: string;
|
|
252
|
+
}>;
|
|
253
|
+
coverage: CritiqueCoverage;
|
|
254
|
+
error?: string;
|
|
255
|
+
}
|
|
256
|
+
export interface PageReviewRect {
|
|
257
|
+
x: number;
|
|
258
|
+
y: number;
|
|
259
|
+
width: number;
|
|
260
|
+
height: number;
|
|
261
|
+
}
|
|
262
|
+
/** One gate finding that carries a document-space rectangle (CSS px at the
|
|
263
|
+
* capture's device scale factor 1, the same space as tile `x`/`scrollY`). */
|
|
264
|
+
export interface PageReviewGateHit {
|
|
265
|
+
/** Check family the hit came from: runts, contrast, truncation, clip, … */
|
|
266
|
+
rule: string;
|
|
267
|
+
/** Short locator: the element label plus the check's own detail. */
|
|
268
|
+
label: string;
|
|
269
|
+
rect: PageReviewRect;
|
|
270
|
+
}
|
|
271
|
+
export interface PageReviewGateRecord {
|
|
272
|
+
context_id: string;
|
|
273
|
+
check_id: string;
|
|
274
|
+
outcome: "passed" | "failed" | "unknown";
|
|
275
|
+
failures: string[];
|
|
276
|
+
/** Rectangles the gate's envelope recorded; optional and additive. */
|
|
277
|
+
hits?: PageReviewGateHit[];
|
|
278
|
+
}
|
|
279
|
+
export interface PageReviewInspectionGateHit extends PageReviewGateHit {
|
|
280
|
+
check_id: string;
|
|
281
|
+
/** Tile ids whose rect intersects the hit; empty when no tile covers it. */
|
|
282
|
+
tiles: string[];
|
|
283
|
+
}
|
|
284
|
+
export interface PageReviewInspectionPlan {
|
|
285
|
+
schema: string;
|
|
286
|
+
purpose: string;
|
|
287
|
+
contexts: Array<{
|
|
288
|
+
context_id: string;
|
|
289
|
+
full_page: string;
|
|
290
|
+
/** Tiles review subagents must open for a complete review; everything else is drill-down. */
|
|
291
|
+
primary_tiles: Array<{
|
|
292
|
+
id: string;
|
|
293
|
+
file: string;
|
|
294
|
+
reason: string;
|
|
295
|
+
}>;
|
|
296
|
+
drilldown_tiles: number;
|
|
297
|
+
/** Every gate hit with a rectangle, mapped to the tiles that show it. */
|
|
298
|
+
gate_hits: PageReviewInspectionGateHit[];
|
|
299
|
+
}>;
|
|
300
|
+
}
|
|
301
|
+
export interface PageReviewPackManifest {
|
|
302
|
+
schema: string;
|
|
303
|
+
created_at: string;
|
|
304
|
+
target: string;
|
|
305
|
+
tested_revision?: string;
|
|
306
|
+
tool: {
|
|
307
|
+
name: string;
|
|
308
|
+
version?: string;
|
|
309
|
+
};
|
|
310
|
+
contexts: PageReviewContextRecord[];
|
|
311
|
+
gates: PageReviewGateRecord[];
|
|
312
|
+
critique: PageReviewCritiqueRecord[] | null;
|
|
313
|
+
pool?: {
|
|
314
|
+
concurrency: number;
|
|
315
|
+
wall_time_ms: number;
|
|
316
|
+
provider: string;
|
|
317
|
+
};
|
|
318
|
+
not_checked: Array<{
|
|
319
|
+
check: string;
|
|
320
|
+
reason: string;
|
|
321
|
+
}>;
|
|
322
|
+
warnings: string[];
|
|
323
|
+
/** Pack expiry; absent until the writer knows when the judge finished. */
|
|
324
|
+
retention?: PageReviewRetention;
|
|
325
|
+
/** Bytes on disk across every file in the pack at finalize time. */
|
|
326
|
+
size_bytes?: number;
|
|
327
|
+
files: {
|
|
328
|
+
review: string;
|
|
329
|
+
findings: string;
|
|
330
|
+
findings_schema: string;
|
|
331
|
+
inspection_plan: string;
|
|
332
|
+
coverage: string;
|
|
333
|
+
index: string;
|
|
334
|
+
inventory: string;
|
|
335
|
+
critique: string;
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
export declare function packPaths(packDir: string): {
|
|
339
|
+
dir: string;
|
|
340
|
+
manifest: string;
|
|
341
|
+
review: string;
|
|
342
|
+
findings: string;
|
|
343
|
+
findingsSchema: string;
|
|
344
|
+
evidenceDir: string;
|
|
345
|
+
inspectionPlan: string;
|
|
346
|
+
coverage: string;
|
|
347
|
+
index: string;
|
|
348
|
+
inventory: string;
|
|
349
|
+
critique: string;
|
|
350
|
+
verdict: string;
|
|
351
|
+
contextsDir: string;
|
|
352
|
+
contextDir: (contextId: string) => string;
|
|
353
|
+
};
|
|
354
|
+
export declare function sha256Hex(buffer: Buffer | string): string;
|
|
355
|
+
export declare function tileId(position: number): string;
|
|
356
|
+
/** Deterministic file name for an expanded tile: `T012@2x.png`. */
|
|
357
|
+
export declare function expandedTileFilename(tileId: string, dpr: number): string;
|
|
358
|
+
/**
|
|
359
|
+
* Crop one region out of a PNG buffer in pixel space. The rect is clamped to
|
|
360
|
+
* the image so an off-by-one never throws; the result is at least 1×1.
|
|
361
|
+
*/
|
|
362
|
+
export declare function cropPngRegion(buffer: Buffer, rect: {
|
|
363
|
+
x: number;
|
|
364
|
+
y: number;
|
|
365
|
+
width: number;
|
|
366
|
+
height: number;
|
|
367
|
+
}): {
|
|
368
|
+
png: Buffer;
|
|
369
|
+
width: number;
|
|
370
|
+
height: number;
|
|
371
|
+
};
|
|
372
|
+
/**
|
|
373
|
+
* Locate one tile across a pack's contexts. With `contextId` the lookup is
|
|
374
|
+
* exact; without it the tile id must be unique across the given contexts,
|
|
375
|
+
* otherwise the caller has to name the context.
|
|
376
|
+
*/
|
|
377
|
+
export declare function findPackTile(contexts: PageReviewContextRecord[], tileId: string, contextId?: string): {
|
|
378
|
+
context: PageReviewContextRecord;
|
|
379
|
+
tile: PageReviewTileRecord;
|
|
380
|
+
};
|
|
381
|
+
/**
|
|
382
|
+
* Write one tile region re-rendered at `dpr` into an existing context:
|
|
383
|
+
* `tiles/<tile>@<dpr>x.png` cropped from `fullPage` (a screenshot of the same
|
|
384
|
+
* page at that device scale factor, so the source tile's CSS-pixel rect is
|
|
385
|
+
* multiplied by `dpr`). Existing tiles are never touched; the context record
|
|
386
|
+
* gains or replaces one `expanded` entry for that tile + dpr and is rewritten.
|
|
387
|
+
*/
|
|
388
|
+
export declare function writePackExpandedTile(packDir: string, contextId: string, input: {
|
|
389
|
+
tileId: string;
|
|
390
|
+
dpr: number;
|
|
391
|
+
capturedAt?: string;
|
|
392
|
+
} & ({
|
|
393
|
+
fullPage: Buffer;
|
|
394
|
+
region?: undefined;
|
|
395
|
+
} | {
|
|
396
|
+
fullPage?: undefined;
|
|
397
|
+
/** The tile's region already rendered at `dpr` (a scrolled viewport
|
|
398
|
+
* capture, `Browser.captureRegionByScroll`); written as is. */
|
|
399
|
+
region: Buffer;
|
|
400
|
+
})): {
|
|
401
|
+
record: PageReviewContextRecord;
|
|
402
|
+
expanded: PageReviewExpandedTileRecord;
|
|
403
|
+
};
|
|
404
|
+
/**
|
|
405
|
+
* Write one context's capture into the pack: `full-page.png`, `dom.html.gz`,
|
|
406
|
+
* `signature.json`, `tiles/T001.png…`, `tiles.json`, and `context.json`.
|
|
407
|
+
* Full-page bands come first, then each scope's tiles in selector order, so
|
|
408
|
+
* tile ids are stable for a given capture. Returns the record written.
|
|
409
|
+
*/
|
|
410
|
+
export declare function writePackContext(packDir: string, capture: PageReviewContextCapture): PageReviewContextRecord;
|
|
411
|
+
export declare const CONTACT_SHEET_FILENAME = "contacts.png";
|
|
412
|
+
/** Tiles per row. Four 320 px cells plus gutters stay under a 1600 px sheet. */
|
|
413
|
+
export declare const CONTACT_SHEET_COLUMNS = 4;
|
|
414
|
+
/**
|
|
415
|
+
* Build one contact sheet from tile PNGs, in the order given: a fixed grid of
|
|
416
|
+
* `CONTACT_SHEET_COLUMNS` cells per row, each cell a label band stamped with
|
|
417
|
+
* the tile id above the tile downscaled (box filter, aspect kept, never
|
|
418
|
+
* upscaled) to fit the cell. Row-major reading order.
|
|
419
|
+
*/
|
|
420
|
+
export declare function buildContactSheet(tiles: Array<{
|
|
421
|
+
id: string;
|
|
422
|
+
png: Buffer;
|
|
423
|
+
}>): {
|
|
424
|
+
png: Buffer;
|
|
425
|
+
width: number;
|
|
426
|
+
height: number;
|
|
427
|
+
columns: number;
|
|
428
|
+
rows: number;
|
|
429
|
+
cell_width: number;
|
|
430
|
+
cell_height: number;
|
|
431
|
+
};
|
|
432
|
+
/**
|
|
433
|
+
* Write (or rewrite) a context's `contacts.png` from its tiles and record it
|
|
434
|
+
* on the context. Tile bytes are read from the pack unless supplied. A
|
|
435
|
+
* context with no tiles gets no sheet and its record is returned unchanged.
|
|
436
|
+
*/
|
|
437
|
+
export declare function writePackContactSheet(packDir: string, record: PageReviewContextRecord, tilePngs?: Map<string, Buffer>): PageReviewContextRecord;
|
|
438
|
+
/** Context ids present in the pack, in directory order. */
|
|
439
|
+
export declare function listPackContexts(packDir: string): string[];
|
|
440
|
+
export declare function readPackContext(packDir: string, contextId: string): PageReviewContextRecord;
|
|
441
|
+
/**
|
|
442
|
+
* Load a context's tiles back as `CritiqueTile`s (PNG bytes read from disk
|
|
443
|
+
* and base64-encoded), verifying each file against its recorded digest so a
|
|
444
|
+
* judge never reviews a tile that was altered after capture.
|
|
445
|
+
*/
|
|
446
|
+
export declare function readPackTiles(packDir: string, record: PageReviewContextRecord): Array<CritiqueTile & {
|
|
447
|
+
id: string;
|
|
448
|
+
scope?: string;
|
|
449
|
+
}>;
|
|
450
|
+
export declare function readPackFullPage(packDir: string, record: PageReviewContextRecord): Buffer;
|
|
451
|
+
export declare function readPackSignature(packDir: string, record: PageReviewContextRecord): QaSignature;
|
|
452
|
+
/** Read a context's serialized DOM, inflating a gzip-compressed `dom.html.gz`
|
|
453
|
+
* and reading an older plain `dom.html` as-is. */
|
|
454
|
+
export declare function readPackDom(packDir: string, record: PageReviewContextRecord): string;
|
|
455
|
+
export declare function readPackManifest(packDir: string): PageReviewPackManifest;
|
|
456
|
+
/** Read the bounded primary-tile plan used to prove delegated review coverage. */
|
|
457
|
+
export declare function readPackInspectionPlan(packDir: string): PageReviewInspectionPlan;
|
|
458
|
+
export declare function readPackFindings(packDir: string): PageReviewFindingsDocument;
|
|
459
|
+
/** Write `findings.json` atomically: a temp file beside it, then a rename. */
|
|
460
|
+
export declare function writePackFindings(packDir: string, doc: PageReviewFindingsDocument): void;
|
|
461
|
+
/**
|
|
462
|
+
* Check a findings document against the rules `findingsSchemaDocument()`
|
|
463
|
+
* states, by hand so the toolkit tier carries no validator dependency.
|
|
464
|
+
* Returns every violation found; an empty array means the document is valid.
|
|
465
|
+
*/
|
|
466
|
+
export declare function validateFindingsDocument(doc: unknown): string[];
|
|
467
|
+
/** `<context-id>/<tile-id>#<n>` for the n-th finding of a tile in one context. */
|
|
468
|
+
export declare function dispositionTarget(contextId: string, tileId: string, n: number): string;
|
|
469
|
+
/**
|
|
470
|
+
* Every machine finding in the critique, keyed by its disposition target.
|
|
471
|
+
* `n` counts a tile's findings in critique order, all severities included, so
|
|
472
|
+
* a reviewer can point at the second finding on T006 as `ctx/T006#1`.
|
|
473
|
+
*/
|
|
474
|
+
export declare function machineFindingTargets(critique: PageReviewCritiqueRecord[] | null): Map<string, CritiqueFinding & {
|
|
475
|
+
tile_id: string;
|
|
476
|
+
context_id: string;
|
|
477
|
+
}>;
|
|
478
|
+
/**
|
|
479
|
+
* Combine the immutable machine critique with the reviewer's dispositions and
|
|
480
|
+
* findings into one reviewed outcome. A machine `high` counts against the page
|
|
481
|
+
* unless a reviewer dispositioned it `artifact`, `not-a-defect`, or
|
|
482
|
+
* `duplicate-of-gate`; `confirmed` and undispositioned highs count; so does a
|
|
483
|
+
* review-subagent finding at `critical` or `high`. Nothing here rewrites the
|
|
484
|
+
* critique: `evidence/critique.json` stays the machine record.
|
|
485
|
+
*/
|
|
486
|
+
export declare function resolvePackVerdict(manifest: Pick<PageReviewPackManifest, "critique">, inspectionPlan: PageReviewInspectionPlan, findings: PageReviewFindingsDocument): PageReviewVerdict;
|
|
487
|
+
/** The verdict a previous `review-pack verdict` wrote, or undefined when none exists. */
|
|
488
|
+
export declare function readPackVerdict(packDir: string): PageReviewVerdictDocument | undefined;
|
|
489
|
+
export interface FinalizePageReviewPackInput {
|
|
490
|
+
packDir: string;
|
|
491
|
+
target: string;
|
|
492
|
+
tested_revision?: string;
|
|
493
|
+
contexts: PageReviewContextRecord[];
|
|
494
|
+
gates?: PageReviewGateRecord[];
|
|
495
|
+
/** Null or absent until the judge has run. */
|
|
496
|
+
critique?: PageReviewCritiqueRecord[] | null;
|
|
497
|
+
pool?: {
|
|
498
|
+
concurrency: number;
|
|
499
|
+
wall_time_ms: number;
|
|
500
|
+
provider: string;
|
|
501
|
+
};
|
|
502
|
+
not_checked?: Array<{
|
|
503
|
+
check: string;
|
|
504
|
+
reason: string;
|
|
505
|
+
}>;
|
|
506
|
+
warnings?: string[];
|
|
507
|
+
tool?: {
|
|
508
|
+
name: string;
|
|
509
|
+
version?: string;
|
|
510
|
+
};
|
|
511
|
+
/** Command the reader can run to judge the pack, shown in review.md. */
|
|
512
|
+
judgeCommand?: string;
|
|
513
|
+
createdAt?: string;
|
|
514
|
+
/** Pack expiry to record; omit to keep whatever the manifest already says. */
|
|
515
|
+
retention?: PageReviewRetention;
|
|
516
|
+
}
|
|
517
|
+
export declare function findingsSchemaDocument(): Record<string, unknown>;
|
|
518
|
+
/** Most hits one envelope contributes; a runaway sweep must not bloat the pack. */
|
|
519
|
+
export declare const GATE_HITS_PER_ENVELOPE = 50;
|
|
520
|
+
/**
|
|
521
|
+
* Pull every rectangle-bearing finding out of a `browse` JSON envelope so the
|
|
522
|
+
* inspection plan can point at the tiles that show it. Covers the checks
|
|
523
|
+
* whose results carry a document-space rect: runts, truncation, contrast,
|
|
524
|
+
* placeholder, image, clip, overlap, crowd, align, gap, overflow, and
|
|
525
|
+
* target-size (`hit`). Anything without a rect is skipped; the gate's
|
|
526
|
+
* `failures` lines still describe it. Capped at `GATE_HITS_PER_ENVELOPE`.
|
|
527
|
+
*/
|
|
528
|
+
export declare function gateHitsFromEnvelope(envelope: Record<string, unknown> | undefined): PageReviewGateHit[];
|
|
529
|
+
/** Tile ids whose rect intersects `rect` (both in document-space px). */
|
|
530
|
+
export declare function tilesCoveringRect(tiles: PageReviewTileRecord[], rect: PageReviewRect): string[];
|
|
531
|
+
export declare function buildInspectionPlan(contexts: PageReviewContextRecord[], critique: PageReviewCritiqueRecord[] | null | undefined, gates?: PageReviewGateRecord[]): PageReviewInspectionPlan;
|
|
532
|
+
/**
|
|
533
|
+
* Write the pack's navigation layer: manifest, evidence files, the findings
|
|
534
|
+
* skeleton and schema (never overwriting a findings file a reviewer already
|
|
535
|
+
* filled), and `review.md`. Safe to call twice: once after capture, again
|
|
536
|
+
* after the judge so machine findings land in the plan and the review.
|
|
537
|
+
*/
|
|
538
|
+
export declare function finalizePageReviewPack(input: FinalizePageReviewPackInput): {
|
|
539
|
+
manifest: string;
|
|
540
|
+
review: string;
|
|
541
|
+
};
|
|
542
|
+
export declare function renderReviewMarkdown(manifest: PageReviewPackManifest, plan: PageReviewInspectionPlan, judgeCommand?: string, verdict?: PageReviewVerdictDocument): string;
|
|
543
|
+
/** Schema of the stub left behind when an expired pack is deleted. */
|
|
544
|
+
export declare const PAGE_REVIEW_EXPIRED_SCHEMA = "harnery-page-review-expired/v1";
|
|
545
|
+
/** What remains of a deleted pack: enough for a result document's
|
|
546
|
+
* `review_pack.dir` to explain itself without the evidence. */
|
|
547
|
+
export interface PageReviewExpiredStub {
|
|
548
|
+
schema: typeof PAGE_REVIEW_EXPIRED_SCHEMA;
|
|
549
|
+
target: string;
|
|
550
|
+
created_at: string;
|
|
551
|
+
expires_at: string;
|
|
552
|
+
deleted_at: string;
|
|
553
|
+
/** Contexts the pack held before deletion. */
|
|
554
|
+
contexts: number;
|
|
555
|
+
/** Aggregate of the manifest's critique outcomes; null when no judge ran. */
|
|
556
|
+
machine_outcome: PageReviewCritiqueRecord["outcome"] | null;
|
|
557
|
+
}
|
|
558
|
+
/** One pack as seen by the expiry sweep. `expires_at`, `size_bytes`, and
|
|
559
|
+
* `managed` are null when the manifest does not carry them; such a pack is
|
|
560
|
+
* never deleted. */
|
|
561
|
+
export interface PageReviewPackRow {
|
|
562
|
+
dir: string;
|
|
563
|
+
target: string;
|
|
564
|
+
created_at: string;
|
|
565
|
+
expires_at: string | null;
|
|
566
|
+
size_bytes: number | null;
|
|
567
|
+
managed: boolean | null;
|
|
568
|
+
/** `retention.expires_at` is in the past (at the sweep's `now`). */
|
|
569
|
+
expired: boolean;
|
|
570
|
+
}
|
|
571
|
+
export interface DeleteExpiredPacksInput {
|
|
572
|
+
/** Directories to search; see `findPageReviewPacks` for the shape searched. */
|
|
573
|
+
roots: string[];
|
|
574
|
+
/** Sweep clock (default: the wall clock). */
|
|
575
|
+
now?: Date;
|
|
576
|
+
/** Also delete packs whose manifest says `managed: false` (an explicit
|
|
577
|
+
* `--out`). Default false: only the store's own packs are touched. */
|
|
578
|
+
includeUnmanaged?: boolean;
|
|
579
|
+
/** Report without touching the filesystem. */
|
|
580
|
+
dryRun: boolean;
|
|
581
|
+
}
|
|
582
|
+
export interface DeleteExpiredPacksResult {
|
|
583
|
+
/** Every pack found under the roots, deletable or not. */
|
|
584
|
+
candidates: PageReviewPackRow[];
|
|
585
|
+
/** Packs removed by this call; under `dryRun`, the packs that would be. */
|
|
586
|
+
deleted: PageReviewPackRow[];
|
|
587
|
+
}
|
|
588
|
+
/**
|
|
589
|
+
* Every page review pack under the given roots. A pack is a directory whose
|
|
590
|
+
* `manifest.json` carries the pack schema. Each root is searched as: the root
|
|
591
|
+
* itself, each immediate child workspace, and `run-<id>/pack` under the root and
|
|
592
|
+
* under each workspace (the layout of the managed artifact store, where a
|
|
593
|
+
* `review-pack` workspace is itself the pack and a `qa-run` workspace holds
|
|
594
|
+
* one pack per run). Nothing deeper is walked.
|
|
595
|
+
*/
|
|
596
|
+
export declare function findPageReviewPacks(roots: string[]): string[];
|
|
597
|
+
/** Whether the sweep may delete this pack: expired, and either managed by the
|
|
598
|
+
* store or explicitly included. A pack without retention never qualifies. */
|
|
599
|
+
export declare function isPackDeletable(row: PageReviewPackRow, includeUnmanaged?: boolean): boolean;
|
|
600
|
+
/** One verdict for the whole pack from its per-context critique rows: any
|
|
601
|
+
* fail is a fail, otherwise the weakest non-pass outcome, otherwise pass. */
|
|
602
|
+
export declare function aggregateMachineOutcome(critique: PageReviewCritiqueRecord[] | null | undefined): PageReviewCritiqueRecord["outcome"] | null;
|
|
603
|
+
/**
|
|
604
|
+
* Delete every expired pack under the roots and leave `pack-expired.json` in
|
|
605
|
+
* its place. Deletion removes every entry inside the pack directory except
|
|
606
|
+
* the artifact store's own `.harnery-artifact.json` (a standalone review-pack
|
|
607
|
+
* workspace is the pack, and the store still owns the workspace). Nothing
|
|
608
|
+
* outside the pack directory is touched. Only a pack whose manifest carries
|
|
609
|
+
* `retention.expires_at` in the past is eligible, and an unmanaged pack
|
|
610
|
+
* (explicit `--out`) only when `includeUnmanaged` is set.
|
|
611
|
+
*/
|
|
612
|
+
export declare function deleteExpiredPacks(input: DeleteExpiredPacksInput): DeleteExpiredPacksResult;
|
|
613
|
+
//# sourceMappingURL=page-review-pack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-review-pack.d.ts","sourceRoot":"","sources":["../../../src/lib/browser/page-review-pack.ts"],"names":[],"mappings":"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"}
|