@browserbasehq/orca 3.5.0-vertex-test → 3.6.0-gemini-cua
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -15
- package/dist/cjs/lib/utils.d.ts +8 -0
- package/dist/cjs/lib/utils.js +31 -0
- package/dist/cjs/lib/utils.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AgentProvider.js +5 -3
- package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +10 -8
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +124 -28
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/utils/captureAriaTreeProbe.d.ts +35 -0
- package/dist/cjs/lib/v3/agent/utils/captureAriaTreeProbe.js +38 -0
- package/dist/cjs/lib/v3/agent/utils/captureAriaTreeProbe.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +10 -1
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
- package/dist/cjs/lib/v3/agent/utils/postStepProbeEvidence.d.ts +19 -0
- package/dist/cjs/lib/v3/agent/utils/postStepProbeEvidence.js +54 -0
- package/dist/cjs/lib/v3/agent/utils/postStepProbeEvidence.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/toolOutputEvidence.d.ts +2 -0
- package/dist/cjs/lib/v3/agent/utils/toolOutputEvidence.js +62 -0
- package/dist/cjs/lib/v3/agent/utils/toolOutputEvidence.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/wrapEvidenceCallback.d.ts +3 -0
- package/dist/cjs/lib/v3/agent/utils/wrapEvidenceCallback.js +25 -0
- package/dist/cjs/lib/v3/agent/utils/wrapEvidenceCallback.js.map +1 -0
- package/dist/cjs/lib/v3/api.d.ts +1 -0
- package/dist/cjs/lib/v3/api.js +37 -16
- package/dist/cjs/lib/v3/api.js.map +1 -1
- package/dist/cjs/lib/v3/cache/ActCache.js +1 -1
- package/dist/cjs/lib/v3/cache/ActCache.js.map +1 -1
- package/dist/cjs/lib/v3/cache/utils.d.ts +7 -0
- package/dist/cjs/lib/v3/cache/utils.js +19 -0
- package/dist/cjs/lib/v3/cache/utils.js.map +1 -1
- package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.d.ts +24 -24
- package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.js +24 -24
- package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.js.map +1 -1
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.js +79 -10
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +3 -1
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +108 -16
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +11 -0
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +119 -5
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/cjs/lib/v3/index.d.ts +13 -1
- package/dist/cjs/lib/v3/index.js +19 -1
- package/dist/cjs/lib/v3/index.js.map +1 -1
- package/dist/cjs/lib/v3/launch/local.js +1 -0
- package/dist/cjs/lib/v3/launch/local.js.map +1 -1
- package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +3 -0
- package/dist/cjs/lib/v3/llm/LLMProvider.js +45 -3
- package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/cjs/lib/v3/llm/aisdk.js +4 -0
- package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/cjs/lib/v3/llm/anthropicOptions.d.ts +57 -0
- package/dist/cjs/lib/v3/llm/anthropicOptions.js +115 -0
- package/dist/cjs/lib/v3/llm/anthropicOptions.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/agent.d.ts +8 -2
- package/dist/cjs/lib/v3/types/public/agent.js +3 -0
- package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/agentEvidenceEvents.d.ts +85 -0
- package/dist/cjs/lib/v3/types/public/agentEvidenceEvents.js +15 -0
- package/dist/cjs/lib/v3/types/public/agentEvidenceEvents.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/api.d.ts +925 -182
- package/dist/cjs/lib/v3/types/public/api.js +138 -20
- package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/clipboard.d.ts +15 -0
- package/dist/cjs/lib/v3/types/public/clipboard.js +3 -0
- package/dist/cjs/lib/v3/types/public/clipboard.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/index.d.ts +2 -0
- package/dist/cjs/lib/v3/types/public/index.js +2 -0
- package/dist/cjs/lib/v3/types/public/index.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/model.d.ts +33 -8
- package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/page.d.ts +29 -0
- package/dist/cjs/lib/v3/types/public/page.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +3 -0
- package/dist/cjs/lib/v3/types/public/sdkErrors.js +8 -2
- package/dist/cjs/lib/v3/types/public/sdkErrors.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/clipboard.d.ts +24 -0
- package/dist/cjs/lib/v3/understudy/clipboard.js +166 -0
- package/dist/cjs/lib/v3/understudy/clipboard.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/context.d.ts +3 -0
- package/dist/cjs/lib/v3/understudy/context.js +15 -0
- package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/page.d.ts +23 -1
- package/dist/cjs/lib/v3/understudy/page.js +283 -0
- package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
- package/dist/cjs/lib/v3/v3.js +19 -7
- package/dist/cjs/lib/v3/v3.js.map +1 -1
- package/dist/cjs/lib/v3/verifier/errorTaxonomy.d.ts +35 -0
- package/dist/cjs/lib/v3/verifier/errorTaxonomy.js +291 -0
- package/dist/cjs/lib/v3/verifier/errorTaxonomy.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/evidence.d.ts +44 -0
- package/dist/cjs/lib/v3/verifier/evidence.js +432 -0
- package/dist/cjs/lib/v3/verifier/evidence.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/evidenceNormalization.d.ts +7 -0
- package/dist/cjs/lib/v3/verifier/evidenceNormalization.js +100 -0
- package/dist/cjs/lib/v3/verifier/evidenceNormalization.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/index.d.ts +6 -0
- package/dist/cjs/lib/v3/verifier/index.js +16 -0
- package/dist/cjs/lib/v3/verifier/index.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/prompts/batchedRelevance.d.ts +21 -0
- package/dist/cjs/lib/v3/verifier/prompts/batchedRelevance.js +71 -0
- package/dist/cjs/lib/v3/verifier/prompts/batchedRelevance.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/prompts/firstPointOfFailure.d.ts +3 -0
- package/dist/cjs/lib/v3/verifier/prompts/firstPointOfFailure.js +166 -0
- package/dist/cjs/lib/v3/verifier/prompts/firstPointOfFailure.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/prompts/fusedJudgment.d.ts +35 -0
- package/dist/cjs/lib/v3/verifier/prompts/fusedJudgment.js +158 -0
- package/dist/cjs/lib/v3/verifier/prompts/fusedJudgment.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/prompts/fusedOutcome.d.ts +26 -0
- package/dist/cjs/lib/v3/verifier/prompts/fusedOutcome.js +137 -0
- package/dist/cjs/lib/v3/verifier/prompts/fusedOutcome.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/prompts/index.d.ts +8 -0
- package/dist/cjs/lib/v3/verifier/prompts/index.js +22 -0
- package/dist/cjs/lib/v3/verifier/prompts/index.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/prompts/perCriterionScore.d.ts +23 -0
- package/dist/cjs/lib/v3/verifier/prompts/perCriterionScore.js +77 -0
- package/dist/cjs/lib/v3/verifier/prompts/perCriterionScore.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/prompts/render.d.ts +23 -0
- package/dist/cjs/lib/v3/verifier/prompts/render.js +45 -0
- package/dist/cjs/lib/v3/verifier/prompts/render.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/prompts/rubricGeneration.d.ts +16 -0
- package/dist/cjs/lib/v3/verifier/prompts/rubricGeneration.js +321 -0
- package/dist/cjs/lib/v3/verifier/prompts/rubricGeneration.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/prompts/taskValidity.d.ts +1 -0
- package/dist/cjs/lib/v3/verifier/prompts/taskValidity.js +116 -0
- package/dist/cjs/lib/v3/verifier/prompts/taskValidity.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/rubricVerifier.d.ts +91 -0
- package/dist/cjs/lib/v3/verifier/rubricVerifier.js +1645 -0
- package/dist/cjs/lib/v3/verifier/rubricVerifier.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/trajectory.d.ts +50 -0
- package/dist/cjs/lib/v3/verifier/trajectory.js +316 -0
- package/dist/cjs/lib/v3/verifier/trajectory.js.map +1 -0
- package/dist/cjs/lib/v3/verifier/types.d.ts +429 -0
- package/dist/cjs/lib/v3/verifier/types.js +3 -0
- package/dist/cjs/lib/v3/verifier/types.js.map +1 -0
- package/dist/cjs/lib/v3Evaluator.d.ts +14 -4
- package/dist/cjs/lib/v3Evaluator.js +189 -1
- package/dist/cjs/lib/v3Evaluator.js.map +1 -1
- package/dist/cjs/lib/v3LegacyEvaluator.js +5 -1
- package/dist/cjs/lib/v3LegacyEvaluator.js.map +1 -1
- package/dist/cjs/lib/version.d.ts +1 -1
- package/dist/cjs/lib/version.js +1 -1
- package/dist/cjs/lib/version.js.map +1 -1
- package/dist/esm/lib/utils.d.ts +8 -0
- package/dist/esm/lib/utils.js +28 -0
- package/dist/esm/lib/utils.js.map +1 -1
- package/dist/esm/lib/v3/agent/AgentProvider.js +5 -3
- package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +10 -8
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js +124 -28
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/utils/captureAriaTreeProbe.d.ts +35 -0
- package/dist/esm/lib/v3/agent/utils/captureAriaTreeProbe.js +35 -0
- package/dist/esm/lib/v3/agent/utils/captureAriaTreeProbe.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +10 -1
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
- package/dist/esm/lib/v3/agent/utils/postStepProbeEvidence.d.ts +19 -0
- package/dist/esm/lib/v3/agent/utils/postStepProbeEvidence.js +50 -0
- package/dist/esm/lib/v3/agent/utils/postStepProbeEvidence.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/toolOutputEvidence.d.ts +2 -0
- package/dist/esm/lib/v3/agent/utils/toolOutputEvidence.js +59 -0
- package/dist/esm/lib/v3/agent/utils/toolOutputEvidence.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/wrapEvidenceCallback.d.ts +3 -0
- package/dist/esm/lib/v3/agent/utils/wrapEvidenceCallback.js +22 -0
- package/dist/esm/lib/v3/agent/utils/wrapEvidenceCallback.js.map +1 -0
- package/dist/esm/lib/v3/api.d.ts +1 -0
- package/dist/esm/lib/v3/api.js +38 -17
- package/dist/esm/lib/v3/api.js.map +1 -1
- package/dist/esm/lib/v3/cache/ActCache.js +2 -2
- package/dist/esm/lib/v3/cache/ActCache.js.map +1 -1
- package/dist/esm/lib/v3/cache/utils.d.ts +7 -0
- package/dist/esm/lib/v3/cache/utils.js +18 -0
- package/dist/esm/lib/v3/cache/utils.js.map +1 -1
- package/dist/esm/lib/v3/dom/build/locatorScripts.generated.d.ts +24 -24
- package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js +24 -24
- package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js.map +1 -1
- package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js +79 -10
- package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +3 -1
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js +108 -16
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +11 -0
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +119 -5
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/index.d.ts +13 -1
- package/dist/esm/lib/v3/index.js +10 -0
- package/dist/esm/lib/v3/index.js.map +1 -1
- package/dist/esm/lib/v3/launch/local.js +1 -0
- package/dist/esm/lib/v3/launch/local.js.map +1 -1
- package/dist/esm/lib/v3/llm/LLMProvider.d.ts +3 -0
- package/dist/esm/lib/v3/llm/LLMProvider.js +44 -3
- package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/esm/lib/v3/llm/aisdk.js +4 -0
- package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/esm/lib/v3/llm/anthropicOptions.d.ts +57 -0
- package/dist/esm/lib/v3/llm/anthropicOptions.js +106 -0
- package/dist/esm/lib/v3/llm/anthropicOptions.js.map +1 -0
- package/dist/esm/lib/v3/types/public/agent.d.ts +8 -2
- package/dist/esm/lib/v3/types/public/agent.js +3 -0
- package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
- package/dist/esm/lib/v3/types/public/agentEvidenceEvents.d.ts +85 -0
- package/dist/esm/lib/v3/types/public/agentEvidenceEvents.js +14 -0
- package/dist/esm/lib/v3/types/public/agentEvidenceEvents.js.map +1 -0
- package/dist/esm/lib/v3/types/public/api.d.ts +925 -182
- package/dist/esm/lib/v3/types/public/api.js +136 -18
- package/dist/esm/lib/v3/types/public/api.js.map +1 -1
- package/dist/esm/lib/v3/types/public/clipboard.d.ts +15 -0
- package/dist/esm/lib/v3/types/public/clipboard.js +2 -0
- package/dist/esm/lib/v3/types/public/clipboard.js.map +1 -0
- package/dist/esm/lib/v3/types/public/index.d.ts +2 -0
- package/dist/esm/lib/v3/types/public/index.js +2 -0
- package/dist/esm/lib/v3/types/public/index.js.map +1 -1
- package/dist/esm/lib/v3/types/public/model.d.ts +33 -8
- package/dist/esm/lib/v3/types/public/model.js.map +1 -1
- package/dist/esm/lib/v3/types/public/page.d.ts +29 -0
- package/dist/esm/lib/v3/types/public/page.js.map +1 -1
- package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +3 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js +5 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -1
- package/dist/esm/lib/v3/understudy/clipboard.d.ts +24 -0
- package/dist/esm/lib/v3/understudy/clipboard.js +163 -0
- package/dist/esm/lib/v3/understudy/clipboard.js.map +1 -0
- package/dist/esm/lib/v3/understudy/context.d.ts +3 -0
- package/dist/esm/lib/v3/understudy/context.js +15 -0
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/page.d.ts +23 -1
- package/dist/esm/lib/v3/understudy/page.js +284 -1
- package/dist/esm/lib/v3/understudy/page.js.map +1 -1
- package/dist/esm/lib/v3/v3.js +20 -8
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/dist/esm/lib/v3/verifier/errorTaxonomy.d.ts +35 -0
- package/dist/esm/lib/v3/verifier/errorTaxonomy.js +285 -0
- package/dist/esm/lib/v3/verifier/errorTaxonomy.js.map +1 -0
- package/dist/esm/lib/v3/verifier/evidence.d.ts +44 -0
- package/dist/esm/lib/v3/verifier/evidence.js +393 -0
- package/dist/esm/lib/v3/verifier/evidence.js.map +1 -0
- package/dist/esm/lib/v3/verifier/evidenceNormalization.d.ts +7 -0
- package/dist/esm/lib/v3/verifier/evidenceNormalization.js +93 -0
- package/dist/esm/lib/v3/verifier/evidenceNormalization.js.map +1 -0
- package/dist/esm/lib/v3/verifier/index.d.ts +6 -0
- package/dist/esm/lib/v3/verifier/index.js +3 -0
- package/dist/esm/lib/v3/verifier/index.js.map +1 -0
- package/dist/esm/lib/v3/verifier/prompts/batchedRelevance.d.ts +21 -0
- package/dist/esm/lib/v3/verifier/prompts/batchedRelevance.js +68 -0
- package/dist/esm/lib/v3/verifier/prompts/batchedRelevance.js.map +1 -0
- package/dist/esm/lib/v3/verifier/prompts/firstPointOfFailure.d.ts +3 -0
- package/dist/esm/lib/v3/verifier/prompts/firstPointOfFailure.js +162 -0
- package/dist/esm/lib/v3/verifier/prompts/firstPointOfFailure.js.map +1 -0
- package/dist/esm/lib/v3/verifier/prompts/fusedJudgment.d.ts +35 -0
- package/dist/esm/lib/v3/verifier/prompts/fusedJudgment.js +155 -0
- package/dist/esm/lib/v3/verifier/prompts/fusedJudgment.js.map +1 -0
- package/dist/esm/lib/v3/verifier/prompts/fusedOutcome.d.ts +26 -0
- package/dist/esm/lib/v3/verifier/prompts/fusedOutcome.js +134 -0
- package/dist/esm/lib/v3/verifier/prompts/fusedOutcome.js.map +1 -0
- package/dist/esm/lib/v3/verifier/prompts/index.d.ts +8 -0
- package/dist/esm/lib/v3/verifier/prompts/index.js +9 -0
- package/dist/esm/lib/v3/verifier/prompts/index.js.map +1 -0
- package/dist/esm/lib/v3/verifier/prompts/perCriterionScore.d.ts +23 -0
- package/dist/esm/lib/v3/verifier/prompts/perCriterionScore.js +74 -0
- package/dist/esm/lib/v3/verifier/prompts/perCriterionScore.js.map +1 -0
- package/dist/esm/lib/v3/verifier/prompts/render.d.ts +23 -0
- package/dist/esm/lib/v3/verifier/prompts/render.js +41 -0
- package/dist/esm/lib/v3/verifier/prompts/render.js.map +1 -0
- package/dist/esm/lib/v3/verifier/prompts/rubricGeneration.d.ts +16 -0
- package/dist/esm/lib/v3/verifier/prompts/rubricGeneration.js +318 -0
- package/dist/esm/lib/v3/verifier/prompts/rubricGeneration.js.map +1 -0
- package/dist/esm/lib/v3/verifier/prompts/taskValidity.d.ts +1 -0
- package/dist/esm/lib/v3/verifier/prompts/taskValidity.js +113 -0
- package/dist/esm/lib/v3/verifier/prompts/taskValidity.js.map +1 -0
- package/dist/esm/lib/v3/verifier/rubricVerifier.d.ts +91 -0
- package/dist/esm/lib/v3/verifier/rubricVerifier.js +1640 -0
- package/dist/esm/lib/v3/verifier/rubricVerifier.js.map +1 -0
- package/dist/esm/lib/v3/verifier/trajectory.d.ts +50 -0
- package/dist/esm/lib/v3/verifier/trajectory.js +273 -0
- package/dist/esm/lib/v3/verifier/trajectory.js.map +1 -0
- package/dist/esm/lib/v3/verifier/types.d.ts +429 -0
- package/dist/esm/lib/v3/verifier/types.js +2 -0
- package/dist/esm/lib/v3/verifier/types.js.map +1 -0
- package/dist/esm/lib/v3Evaluator.d.ts +14 -4
- package/dist/esm/lib/v3Evaluator.js +189 -1
- package/dist/esm/lib/v3Evaluator.js.map +1 -1
- package/dist/esm/lib/v3LegacyEvaluator.js +5 -1
- package/dist/esm/lib/v3LegacyEvaluator.js.map +1 -1
- package/dist/esm/lib/version.d.ts +1 -1
- package/dist/esm/lib/version.js +1 -1
- package/dist/esm/lib/version.js.map +1 -1
- package/package.json +18 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rubricVerifier.js","sourceRoot":"","sources":["../../../../../lib/v3/verifier/rubricVerifier.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nimport type { LLMClient, LLMResponse } from \"../llm/LLMClient.js\";\nimport type { LLMParsedResponse } from \"../../inference.js\";\nimport type { LogLine } from \"../types/public/logs.js\";\n\nimport type {\n CanonicalEvidence,\n CanonicalScreenshot,\n CanonicalTextEvidence,\n CriterionScore,\n EvaluationResult,\n Rubric,\n RubricVerifierOptions,\n TaskSpec,\n Trajectory,\n Verifier,\n VerifierConfig,\n} from \"./types.js\";\nimport { normalizeRubric } from \"./trajectory.js\";\nimport {\n FIRST_POINT_OF_FAILURE_PROMPT,\n FUSED_JUDGMENT_PROMPT,\n FUSED_OUTCOME_PROMPT,\n MM_BATCHED_RELEVANCE_PROMPT,\n MM_PER_CRITERION_SCORE_PROMPT,\n RUBRIC_GENERATION_PROMPT,\n TASK_VALIDITY_PROMPT,\n buildInitUrlContext,\n parseFailureStepNumbers,\n renderPrompt,\n} from \"./prompts/index.js\";\nimport {\n collectCanonicalEvidence,\n isImageEvidence,\n isTextEvidence,\n} from \"./evidence.js\";\nimport { getTaxonomyText } from \"./errorTaxonomy.js\";\n\nconst RubricItemSchema = z.object({\n criterion: z.string(),\n description: z.string(),\n max_points: z.number(),\n condition: z.string().optional(),\n task_span: z.string().optional(),\n justification: z.string().optional(),\n earned_points: z.union([z.number(), z.string()]).optional(),\n});\n\nconst RubricSchema = z.object({\n items: z.array(RubricItemSchema),\n});\n\nconst FindingSchema = z.object({\n category: z\n .enum([\n \"agent_tool_usage\",\n \"agent_strategy\",\n \"rubric_quality\",\n \"trajectory_capture\",\n \"task_specification\",\n \"verifier_uncertainty\",\n \"other\",\n ])\n .catch(\"other\"),\n severity: z.enum([\"info\", \"warning\", \"blocking\"]).catch(\"info\"),\n description: z.string(),\n suggestedAction: z.string().optional(),\n relatedSteps: z.array(z.number()).optional(),\n});\n\nconst FusedOutcomeSchema = z.object({\n primary_intent: z.string(),\n reasoning: z.string(),\n output_success: z.boolean(),\n findings: z.array(FindingSchema).optional().default([]),\n});\n\nconst FusedPerCriterionSchema = z.object({\n criterion_idx: z.coerce.number().int().min(0),\n applicable_evidence: z.string().optional().default(\"\"),\n justification: z.string().optional().default(\"\"),\n earned_points: z.coerce.number(),\n evidence_sufficient: z.boolean().optional().default(true),\n condition_met: z.boolean().nullable().optional(),\n});\n\nconst FusedFailurePointSchema = z.object({\n step_index: z.coerce.number().int(),\n error_code: z.string(),\n error_category: z.string(),\n description: z.string(),\n});\n\nconst FusedTaskValiditySchema = z.object({\n is_ambiguous: z.boolean(),\n ambiguity_reason: z.string().optional().default(\"\"),\n is_invalid: z.boolean(),\n invalid_reason: z.string().optional().default(\"\"),\n});\n\nconst FusedJudgmentResponseSchema = z.object({\n outcome: FusedOutcomeSchema,\n per_criterion: z.array(FusedPerCriterionSchema),\n failure_point: FusedFailurePointSchema.optional(),\n task_validity: FusedTaskValiditySchema.optional(),\n});\n\n/** Outcome-only response: no per_criterion field, just outcome + diagnostics. */\nconst FusedOutcomeResponseSchema = z.object({\n outcome: FusedOutcomeSchema,\n failure_point: FusedFailurePointSchema.optional(),\n task_validity: FusedTaskValiditySchema.optional(),\n});\n\nconst BatchedRelevanceItemSchema = z.object({\n evidence_idx: z.coerce.number().int().min(0),\n scores: z.array(\n z.object({\n criterion_idx: z.coerce.number().int().min(0),\n score: z.coerce.number().int().min(0).max(10),\n }),\n ),\n});\nconst BatchedRelevanceResponseSchema = z.object({\n items: z.array(BatchedRelevanceItemSchema),\n});\n\nconst PerCriterionScoreResponseSchema = z.object({\n criterion_idx: z.coerce.number().int().min(0),\n applicable_evidence: z.string().optional().default(\"\"),\n justification: z.string().optional().default(\"\"),\n earned_points: z.coerce.number(),\n evidence_sufficient: z.boolean().optional().default(true),\n condition_met: z.boolean().nullable().optional(),\n});\n\nconst TaskValiditySchema = z.object({\n reasoning_is_ambiguous: z.string(),\n is_ambiguous: z.boolean(),\n ambiguity_codes: z.array(z.string()).default([]),\n reasoning_is_invalid: z.string(),\n is_invalid: z.boolean(),\n invalid_task_codes: z.array(z.string()).default([]),\n});\n\nconst FailurePointSchema = z.object({\n step_numbers: z.string(),\n error_code: z.string(),\n error_category: z.string(),\n error_type: z.string(),\n what_happened: z.string(),\n agent_reasoning: z.string(),\n evidence: z.string(),\n impact: z.string(),\n});\n\nconst FailureAnalysisSchema = z.object({\n reasoning: z.string(),\n has_failure: z.boolean(),\n failure_points: z.array(FailurePointSchema).default([]),\n});\n\nconst noopLogger: (line: LogLine) => void = () => {};\nconst APPROX_CHARS_PER_TOKEN = 4;\nconst DEFAULT_ACTION_HISTORY_TOKEN_BUDGET = 2_000;\nconst DEFAULT_EVIDENCE_TOKEN_BUDGET = 3_000;\nconst DEFAULT_OUTCOME_EVIDENCE_TOKEN_BUDGET = 4_000;\nconst DEFAULT_OUTCOME_IMAGE_LIMIT = 3;\nconst DEFAULT_MAX_PARALLEL = 8;\nconst DEFAULT_TOP_K = 5;\nconst DEFAULT_RELEVANCE_BATCH_SIZE = 4;\nconst OUTCOME_EVIDENCE_MAX_STEPS = 14;\nconst OUTCOME_EVIDENCE_STEP_CHARS = 900;\n/**\n * How much of the final aria tree to include in the always-attached\n * \"Final trajectory state\" block. The verifier needs to see the end-of-run\n * page content reliably — the top-K/relevance selection can starve it out\n * when the final probe doesn't textually match the task keywords. 20k chars\n * (~5k tokens) is comfortably above typical page sizes while bounded.\n */\nconst FINAL_STATE_ARIA_CHARS = 20_000;\ntype VerifierApproach = VerifierConfig[\"approach\"];\ntype OptionalStepsMode = VerifierConfig[\"optionalSteps\"];\nconst DEFAULT_APPROACH: VerifierApproach = \"b\";\nconst DEFAULT_OPTIONAL_STEPS_MODE: OptionalStepsMode = \"folded\";\n\nconst NO_TRUNC = Number.MAX_SAFE_INTEGER;\n\nfunction readPositiveIntEnv(\n env: NodeJS.ProcessEnv,\n name: string,\n fallback: number,\n): number {\n const raw = env[name];\n if (!raw) return fallback;\n const parsed = Number.parseInt(raw, 10);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nfunction readChars(\n env: NodeJS.ProcessEnv,\n name: string,\n fallback: number,\n disabled: boolean,\n): number {\n if (disabled) return NO_TRUNC;\n return readPositiveIntEnv(env, name, fallback);\n}\n\nfunction readApproach(env: NodeJS.ProcessEnv): VerifierApproach {\n const raw = env.VERIFIER_APPROACH;\n if (raw === \"a\" || raw === \"b\" || raw === \"outcome-only\") return raw;\n return DEFAULT_APPROACH;\n}\n\nfunction readOptionalsMode(env: NodeJS.ProcessEnv): OptionalStepsMode {\n const raw = env.VERIFIER_OPTIONAL_STEPS;\n if (raw === \"folded\" || raw === \"separate\" || raw === \"skip\") return raw;\n return DEFAULT_OPTIONAL_STEPS_MODE;\n}\n\n/**\n * Resolve every verifier knob from env (+ optional overrides) into a frozen\n * VerifierConfig. Called once by RubricVerifier's constructor; per-call\n * overrides flow through verify()'s optional override arg.\n *\n * The master switch VERIFIER_DISABLE_TRUNCATION=1 lifts every per-section\n * limit to MAX_SAFE_INTEGER — useful on high-context models where\n * evidence-bound truncation is the bottleneck, not the token budget.\n */\nexport function resolveVerifierConfig(\n env: NodeJS.ProcessEnv = process.env,\n overrides: Partial<VerifierConfig> = {},\n): VerifierConfig {\n const truncDisabled =\n overrides.truncation?.disabled ?? env.VERIFIER_DISABLE_TRUNCATION === \"1\";\n return {\n approach: overrides.approach ?? readApproach(env),\n optionalSteps: overrides.optionalSteps ?? readOptionalsMode(env),\n topK:\n overrides.topK ??\n readPositiveIntEnv(env, \"VERIFIER_TOP_K\", DEFAULT_TOP_K),\n relevanceBatchSize:\n overrides.relevanceBatchSize ??\n readPositiveIntEnv(\n env,\n \"VERIFIER_RELEVANCE_BATCH_SIZE\",\n DEFAULT_RELEVANCE_BATCH_SIZE,\n ),\n outcomeMaxImages:\n overrides.outcomeMaxImages ??\n readPositiveIntEnv(\n env,\n \"VERIFIER_OUTCOME_MAX_IMAGES\",\n DEFAULT_OUTCOME_IMAGE_LIMIT,\n ),\n maxParallel:\n overrides.maxParallel ??\n readPositiveIntEnv(env, \"VERIFIER_MAX_PARALLEL\", DEFAULT_MAX_PARALLEL),\n evidenceTokenBudget:\n overrides.evidenceTokenBudget ??\n readPositiveIntEnv(\n env,\n \"VERIFIER_EVIDENCE_TOKEN_BUDGET\",\n DEFAULT_EVIDENCE_TOKEN_BUDGET,\n ),\n outcomeEvidenceTokenBudget:\n overrides.outcomeEvidenceTokenBudget ??\n readPositiveIntEnv(\n env,\n \"VERIFIER_OUTCOME_EVIDENCE_TOKEN_BUDGET\",\n DEFAULT_OUTCOME_EVIDENCE_TOKEN_BUDGET,\n ),\n actionHistoryTokenBudget:\n overrides.actionHistoryTokenBudget ??\n readPositiveIntEnv(\n env,\n \"VERIFIER_ACTION_HISTORY_TOKEN_BUDGET\",\n DEFAULT_ACTION_HISTORY_TOKEN_BUDGET,\n ),\n truncation: {\n disabled: truncDisabled,\n evidenceTextPreview:\n overrides.truncation?.evidenceTextPreview ??\n readChars(\n env,\n \"VERIFIER_EVIDENCE_TEXT_PREVIEW_CHARS\",\n 200,\n truncDisabled,\n ),\n groupedEvidenceText:\n overrides.truncation?.groupedEvidenceText ??\n readChars(\n env,\n \"VERIFIER_GROUPED_EVIDENCE_TEXT_CHARS\",\n 600,\n truncDisabled,\n ),\n buildEvidenceText:\n overrides.truncation?.buildEvidenceText ??\n readChars(\n env,\n \"VERIFIER_BUILD_EVIDENCE_TEXT_CHARS\",\n 160,\n truncDisabled,\n ),\n buildEvidenceAria:\n overrides.truncation?.buildEvidenceAria ??\n readChars(\n env,\n \"VERIFIER_BUILD_EVIDENCE_ARIA_CHARS\",\n 1200,\n truncDisabled,\n ),\n actionHistoryReasoning:\n overrides.truncation?.actionHistoryReasoning ??\n readChars(\n env,\n \"VERIFIER_ACTION_HISTORY_REASONING_CHARS\",\n 140,\n truncDisabled,\n ),\n },\n };\n}\n\nfunction mergeConfig(\n base: VerifierConfig,\n overrides?: Partial<VerifierConfig>,\n): VerifierConfig {\n if (!overrides) return base;\n return {\n ...base,\n ...overrides,\n truncation: { ...base.truncation, ...(overrides.truncation ?? {}) },\n };\n}\n\n/** Top-K grouping per criterion. Pure compute. */\nfunction groupTopKByCriterion(args: {\n numCriteria: number;\n relevanceScores: Map<number, Map<number, number>>;\n topK: number;\n}): Map<number, number[]> {\n const { numCriteria, relevanceScores, topK } = args;\n const grouped = new Map<number, number[]>();\n\n for (let cIdx = 0; cIdx < numCriteria; cIdx++) {\n const scored: Array<{ eIdx: number; score: number }> = [];\n for (const [eIdx, scoreMap] of relevanceScores.entries()) {\n scored.push({ eIdx, score: scoreMap.get(cIdx) ?? 0 });\n }\n scored.sort((a, b) => {\n if (b.score !== a.score) return b.score - a.score;\n return a.eIdx - b.eIdx; // ties → chronological order\n });\n\n const topKEvidence = scored.slice(0, topK);\n\n // Relevance-floor filter: if any selected evidence scored ≥6,\n // drop low-relevance entries that are >2 points below the weakest\n // high-relevance entry.\n const highScores = topKEvidence\n .filter((s) => s.score >= 6)\n .map((s) => s.score);\n if (highScores.length === 0) {\n grouped.set(\n cIdx,\n topKEvidence.map((s) => s.eIdx),\n );\n continue;\n }\n const minHigh = Math.min(...highScores);\n const kept = topKEvidence.filter(\n (s) => !(s.score < 5 && minHigh - s.score > 2),\n );\n grouped.set(\n cIdx,\n (kept.length > 0 ? kept : topKEvidence).map((s) => s.eIdx),\n );\n }\n return grouped;\n}\n\nfunction mapFusedPerCriterionToScores(\n rubric: Rubric,\n perCriterion: z.infer<typeof FusedPerCriterionSchema>[],\n): CriterionScore[] {\n const byIdx = new Map<number, z.infer<typeof FusedPerCriterionSchema>>();\n for (const entry of perCriterion) byIdx.set(entry.criterion_idx, entry);\n\n return rubric.items.map((c, i): CriterionScore => {\n const entry = byIdx.get(i);\n if (!entry) {\n return {\n criterion: c.criterion,\n maxPoints: c.maxPoints,\n earnedPoints: null,\n explanation: \"Verifier did not return a score for this criterion.\",\n evidenceInsufficient: true,\n };\n }\n const clamped = Math.max(0, Math.min(c.maxPoints, entry.earned_points));\n return {\n criterion: c.criterion,\n maxPoints: c.maxPoints,\n earnedPoints: clamped,\n explanation: entry.justification,\n evidenceInsufficient: entry.evidence_sufficient === false,\n };\n });\n}\n\nfunction evidencePreview(\n point: CanonicalEvidence,\n previewChars: number,\n): string {\n if (isImageEvidence(point)) {\n return `Screenshot at step ${point.originalStepIndex} (${point.bytes.length} bytes, ${point.mediaType})`;\n }\n const preview = point.content.slice(0, previewChars);\n return `${textEvidenceLabel(point)} at step ${point.originalStepIndex} — \"${preview.replace(/\\s+/g, \" \")}${point.content.length > previewChars ? \"…\" : \"\"}\"`;\n}\n\nfunction textEvidenceLabel(point: CanonicalTextEvidence): string {\n switch (point.source) {\n case \"probe-aria\":\n return \"ariaTree\";\n case \"agent-text\":\n return \"agent text\";\n case \"agent-json\":\n return \"agent JSON\";\n case \"tool-output\":\n return \"tool output\";\n }\n}\n\nfunction renderEvidenceManifest(\n points: CanonicalEvidence[],\n previewChars: number,\n): string {\n if (points.length === 0) return \"(no evidence captured)\";\n return points\n .map(\n (p) =>\n `- evidence_idx=${p.canonicalIndex}: ${evidencePreview(p, previewChars)}`,\n )\n .join(\"\\n\");\n}\n\nfunction renderGroupedEvidenceForApproach(\n rubric: Rubric,\n evidence: CanonicalEvidence[],\n groupedTopK: Map<number, number[]>,\n textLimit: number,\n): string {\n if (evidence.length === 0) return \"(no evidence captured)\";\n const byIdx = new Map<number, CanonicalEvidence>();\n for (const e of evidence) byIdx.set(e.canonicalIndex, e);\n\n const sections: string[] = [];\n for (let cIdx = 0; cIdx < rubric.items.length; cIdx++) {\n const c = rubric.items[cIdx];\n const topK = groupedTopK.get(cIdx) ?? [];\n if (topK.length === 0) {\n sections.push(\n `### Criterion ${cIdx}: ${c.criterion}\\n(no evidence scored highly enough — rely on action history)`,\n );\n continue;\n }\n const body = topK\n .map((eIdx) => {\n const p = byIdx.get(eIdx);\n if (!p) return null;\n if (isImageEvidence(p)) {\n return `- Evidence #${eIdx} — image @ step=${p.originalStepIndex}`;\n }\n const text = p.content.replace(/\\s+/g, \" \").slice(0, textLimit);\n return `- Evidence #${eIdx} — ${textEvidenceLabel(p)} @ step=${p.originalStepIndex}: \"${text}${p.content.length > textLimit ? \"…\" : \"\"}\"`;\n })\n .filter((x): x is string => x !== null)\n .join(\"\\n\");\n sections.push(`### Criterion ${cIdx}: ${c.criterion}\\n${body}`);\n }\n return sections.join(\"\\n\\n\");\n}\n\nexport class RubricVerifier implements Verifier {\n private readonly getClient: () => LLMClient;\n private readonly getRubricGenClient: () => LLMClient;\n private readonly logger: (line: LogLine) => void;\n private readonly baseConfig: VerifierConfig;\n\n constructor(opts: RubricVerifierOptions) {\n this.getClient = opts.getClient;\n this.getRubricGenClient = opts.getRubricGenClient ?? opts.getClient;\n this.logger = opts.logger ?? noopLogger;\n this.baseConfig = resolveVerifierConfig(process.env, opts.config);\n }\n\n /** Resolved verifier knobs the constructor saw, frozen at construction. */\n get config(): VerifierConfig {\n return this.baseConfig;\n }\n\n async verify(\n trajectory: Trajectory,\n overrides?: Partial<VerifierConfig>,\n ): Promise<EvaluationResult> {\n const taskSpec = trajectory.task;\n const config = mergeConfig(this.baseConfig, overrides);\n const hasTrajectorySignal =\n trajectory.steps.length > 0 || Boolean(trajectory.finalAnswer?.trim());\n if (!hasTrajectorySignal) {\n return this.emptyTrajectoryResult(\n normalizeRubric(taskSpec.precomputedRubric),\n );\n }\n\n const { approach, optionalSteps: optionalsMode } = config;\n\n if (approach === \"outcome-only\") {\n return this.verifyOutcomeOnly(trajectory, taskSpec, config);\n }\n\n let rubric: Rubric | undefined = normalizeRubric(\n taskSpec.precomputedRubric,\n );\n const rubricSource = rubric ? \"precomputed\" : \"generated\";\n if (!rubric) {\n rubric = await this.generateRubric(taskSpec);\n }\n\n // Empty-evidence trajectories fall back gracefully — the chosen approach\n // degrades to an action-history-only judgment downstream.\n const { evidence, loaded } = await collectCanonicalEvidence(trajectory);\n\n const relevanceScores = await this.scoreRelevanceBatched({\n taskSpec,\n rubric,\n evidence,\n config,\n });\n\n const groupedTopK = groupTopKByCriterion({\n numCriteria: rubric.items.length,\n relevanceScores,\n topK: config.topK,\n });\n\n let perCriterion: CriterionScore[];\n let fusedOutcome: z.infer<typeof FusedOutcomeSchema> | undefined;\n let foldedFailurePoint: z.infer<typeof FusedFailurePointSchema> | undefined;\n let foldedTaskValidity: z.infer<typeof FusedTaskValiditySchema> | undefined;\n\n if (approach === \"b\") {\n const fused = await this.fusedJudgment({\n trajectory,\n taskSpec,\n rubric,\n evidence,\n groupedTopK,\n foldFailure: optionalsMode === \"folded\",\n foldValidity: optionalsMode === \"folded\",\n config,\n });\n perCriterion = mapFusedPerCriterionToScores(rubric, fused.per_criterion);\n fusedOutcome = fused.outcome;\n foldedFailurePoint = fused.failure_point;\n foldedTaskValidity = fused.task_validity;\n } else {\n // Approach a: per-criterion analysis returns earned_points directly;\n // no separate whole-rubric rescore.\n perCriterion = await this.scorePerCriterion({\n trajectory,\n taskSpec,\n rubric,\n evidence,\n groupedTopK,\n config,\n });\n\n const outcome = await this.verifyOutcomeFused({\n trajectory,\n taskSpec,\n rubric,\n perCriterion,\n evidence,\n foldFailure: optionalsMode === \"folded\",\n foldValidity: optionalsMode === \"folded\",\n config,\n });\n fusedOutcome = outcome.outcome;\n foldedFailurePoint = outcome.failure_point;\n foldedTaskValidity = outcome.task_validity;\n }\n\n // ── Process score (deterministic from earned_points) ──────────────────\n const totals = perCriterion.reduce(\n (acc, c) => ({\n earned: acc.earned + (c.earnedPoints ?? 0),\n max: acc.max + c.maxPoints,\n }),\n { earned: 0, max: 0 },\n );\n const processScore = totals.max > 0 ? totals.earned / totals.max : 0;\n\n const evidenceInsufficient = perCriterion\n .filter((c) => c.evidenceInsufficient)\n .map((c) => c.criterion);\n\n const findings = (fusedOutcome?.findings ?? []).map((f) => ({\n ...f,\n category: f.category ?? (\"other\" as const),\n severity: f.severity ?? (\"info\" as const),\n }));\n\n // ── Optional steps: folded, separate, or skipped ──────────────────────\n let firstPointOfFailure: EvaluationResult[\"firstPointOfFailure\"];\n if (foldedFailurePoint && !fusedOutcome?.output_success) {\n firstPointOfFailure = {\n stepIndex: foldedFailurePoint.step_index,\n errorCode: foldedFailurePoint.error_code,\n category: foldedFailurePoint.error_category,\n description: foldedFailurePoint.description,\n };\n } else if (\n optionalsMode === \"separate\" &&\n fusedOutcome &&\n !fusedOutcome.output_success\n ) {\n firstPointOfFailure = await this.analyzeFailures({\n trajectory,\n taskSpec,\n rubric,\n perCriterion,\n outcome: {\n output_success: fusedOutcome.output_success,\n primary_intent: fusedOutcome.primary_intent,\n reasoning: fusedOutcome.reasoning,\n findings: fusedOutcome.findings ?? [],\n },\n config,\n }).catch((): EvaluationResult[\"firstPointOfFailure\"] => undefined);\n }\n\n let taskValidity: EvaluationResult[\"taskValidity\"];\n if (foldedTaskValidity) {\n taskValidity = {\n isAmbiguous: foldedTaskValidity.is_ambiguous,\n isInvalid: foldedTaskValidity.is_invalid,\n ambiguityReason:\n foldedTaskValidity.is_ambiguous && foldedTaskValidity.ambiguity_reason\n ? foldedTaskValidity.ambiguity_reason\n : undefined,\n invalidReason:\n foldedTaskValidity.is_invalid && foldedTaskValidity.invalid_reason\n ? foldedTaskValidity.invalid_reason\n : undefined,\n };\n } else if (optionalsMode === \"separate\") {\n taskValidity = await this.classifyTaskValidity(taskSpec).catch(\n (): EvaluationResult[\"taskValidity\"] => ({\n isAmbiguous: false,\n isInvalid: false,\n }),\n );\n } else {\n taskValidity = { isAmbiguous: false, isInvalid: false };\n }\n\n return {\n outcomeSuccess: fusedOutcome?.output_success ?? false,\n processScore,\n perCriterion,\n taskValidity,\n evidenceInsufficient,\n findings: findings.length > 0 ? findings : undefined,\n firstPointOfFailure,\n rawSteps: {\n primaryIntent: fusedOutcome?.primary_intent,\n reasoning: fusedOutcome?.reasoning,\n rubricSource,\n approach,\n optionalsMode,\n totalEarned: totals.earned,\n totalMax: totals.max,\n evidenceImages: evidence.filter(isImageEvidence).length,\n evidenceTexts: evidence.filter(isTextEvidence).length,\n evidenceOriginalScreenshots: loaded.originalCount,\n },\n };\n }\n\n private emptyTrajectoryResult(rubric?: Rubric): EvaluationResult {\n const items = rubric?.items ?? [];\n return {\n outcomeSuccess: false,\n explanation:\n \"No trajectory steps or final answer were captured; skipped verifier LLM calls.\",\n processScore: 0,\n perCriterion: items.map((c) => ({\n criterion: c.criterion,\n maxPoints: c.maxPoints,\n earnedPoints: 0,\n explanation:\n \"No trajectory steps or final answer were captured; skipped verifier LLM calls.\",\n evidenceInsufficient: true,\n })),\n taskValidity: { isAmbiguous: false, isInvalid: false },\n evidenceInsufficient: items.map((c) => c.criterion),\n rawSteps: {\n reason: \"empty-trajectory\",\n rubricSource: rubric ? \"precomputed\" : \"none\",\n },\n };\n }\n\n private async verifyOutcomeOnly(\n trajectory: Trajectory,\n taskSpec: TaskSpec,\n config: VerifierConfig,\n ): Promise<EvaluationResult> {\n const foldFailure = config.optionalSteps === \"folded\";\n const foldValidity = config.optionalSteps === \"folded\";\n const taxonomyBlock = foldFailure\n ? `\\n${getTaxonomyText(1, 6, 4)}\\n${getTaxonomyText(7, 8, 4)}\\n`\n : \"\";\n\n const prompt = renderPrompt(FUSED_OUTCOME_PROMPT, {\n task_definition: taskSpec.instruction,\n init_url_context: buildInitUrlContext(taskSpec.initUrl),\n action_history: this.formatActionHistory(trajectory, config),\n outcome_evidence_summary: this.buildOutcomeEvidenceSummary(\n trajectory,\n taskSpec,\n config,\n ),\n final_state_block: buildFinalStateBlock(trajectory),\n agent_predicted_output:\n trajectory.finalAnswer ?? \"(no final answer recorded)\",\n rubric_summary:\n \"(no rubric - outcome-only mode; judge success from the task, action history, final answer, and attached screenshots)\",\n taxonomy_block: taxonomyBlock,\n fold_failure_analysis: foldFailure ? \"true\" : \"false\",\n fold_task_validity: foldValidity ? \"true\" : \"false\",\n current_date: currentDateForVerifier(),\n });\n\n const messageContent: Array<\n | { type: \"text\"; text: string }\n | { type: \"image_url\"; image_url: { url: string } }\n > = [{ type: \"text\", text: prompt }];\n\n // Final images first (always attached), then recent images deduped.\n const seenImageKeys = new Set<string>();\n const attachImage = (img: EvidenceImage): void => {\n const key = `${img.bytes.length}:${img.bytes.subarray(0, 32).toString(\"base64\")}`;\n if (seenImageKeys.has(key)) return;\n seenImageKeys.add(key);\n messageContent.push({\n type: \"image_url\",\n image_url: {\n url: `data:${img.mediaType};base64,${img.bytes.toString(\"base64\")}`,\n },\n });\n };\n for (const img of selectFinalImages(trajectory)) attachImage(img);\n for (const img of selectRecentImages(trajectory, config.outcomeMaxImages))\n attachImage(img);\n\n let fused: z.infer<typeof FusedOutcomeResponseSchema>;\n try {\n const client = this.getClient();\n const response = await client.createChatCompletion<\n LLMParsedResponse<LLMResponse>\n >({\n logger: this.logger,\n options: {\n messages: [\n {\n role: \"system\",\n content:\n \"You are an expert evaluator of web-navigation agent trajectories. Output only valid JSON conforming to the schema in the user message.\",\n },\n { role: \"user\", content: messageContent },\n ],\n response_model: {\n name: \"FusedOutcome\",\n schema: FusedOutcomeResponseSchema,\n },\n },\n });\n fused = response.data as unknown as z.infer<\n typeof FusedOutcomeResponseSchema\n >;\n } catch {\n fused = {\n outcome: {\n primary_intent: taskSpec.instruction,\n reasoning:\n \"Outcome-only LLM call failed; defaulting to output_success=false.\",\n output_success: false,\n findings: [\n {\n category: \"verifier_uncertainty\" as const,\n severity: \"warning\" as const,\n description:\n \"The outcome-only verification call did not return a parseable response.\",\n },\n ],\n },\n };\n }\n\n const outcomeSuccess = fused.outcome.output_success;\n const findings = (fused.outcome.findings ?? []).map((f) => ({\n ...f,\n category: f.category ?? (\"other\" as const),\n severity: f.severity ?? (\"info\" as const),\n }));\n\n let firstPointOfFailure: EvaluationResult[\"firstPointOfFailure\"];\n if (fused.failure_point && !outcomeSuccess) {\n firstPointOfFailure = {\n stepIndex: fused.failure_point.step_index,\n errorCode: fused.failure_point.error_code,\n category: fused.failure_point.error_category,\n description: fused.failure_point.description,\n };\n }\n\n const taskValidity: EvaluationResult[\"taskValidity\"] = fused.task_validity\n ? {\n isAmbiguous: fused.task_validity.is_ambiguous,\n isInvalid: fused.task_validity.is_invalid,\n ambiguityReason:\n fused.task_validity.is_ambiguous &&\n fused.task_validity.ambiguity_reason\n ? fused.task_validity.ambiguity_reason\n : undefined,\n invalidReason:\n fused.task_validity.is_invalid && fused.task_validity.invalid_reason\n ? fused.task_validity.invalid_reason\n : undefined,\n }\n : { isAmbiguous: false, isInvalid: false };\n\n return {\n outcomeSuccess,\n explanation: fused.outcome.reasoning,\n taskValidity,\n findings: findings.length > 0 ? findings : undefined,\n firstPointOfFailure,\n rawSteps: {\n primaryIntent: fused.outcome.primary_intent,\n reasoning: fused.outcome.reasoning,\n approach: \"outcome-only\",\n optionalsMode: config.optionalSteps,\n screenshotsAttached: seenImageKeys.size,\n },\n };\n }\n\n /**\n * Score every (evidence, criterion) pair with one batched call per chunk,\n * to avoid a per-(criterion, frame) fan-out. Failed batches contribute\n * all-zeros scores so the downstream top-K still produces valid groups.\n */\n private async scoreRelevanceBatched(args: {\n taskSpec: TaskSpec;\n rubric: Rubric;\n evidence: CanonicalEvidence[];\n config: VerifierConfig;\n }): Promise<Map<number, Map<number, number>>> {\n const { taskSpec, rubric, evidence, config } = args;\n const out = new Map<number, Map<number, number>>();\n if (evidence.length === 0) return out;\n\n const numCriteria = rubric.items.length;\n const rubricCriteriaText = rubric.items\n .map(\n (c, i) =>\n `\\n${i}. **${c.criterion}**\\n Description: ${c.description}\\n`,\n )\n .join(\"\");\n\n const batchSize = Math.max(1, config.relevanceBatchSize);\n\n const batches: CanonicalEvidence[][] = [];\n for (let i = 0; i < evidence.length; i += batchSize) {\n batches.push(evidence.slice(i, i + batchSize));\n }\n\n const limit = pLimit(config.maxParallel);\n\n const tasks = batches.map((batch) =>\n limit(async () => {\n const manifest = renderEvidenceManifest(\n batch,\n config.truncation.evidenceTextPreview,\n );\n const prompt = renderPrompt(MM_BATCHED_RELEVANCE_PROMPT, {\n task_definition: taskSpec.instruction,\n init_url_context: buildInitUrlContext(taskSpec.initUrl),\n rubric_criteria: rubricCriteriaText,\n evidence_manifest: manifest,\n });\n\n const messageContent: Array<\n | { type: \"text\"; text: string }\n | {\n type: \"image_url\";\n image_url: { url: string };\n }\n > = [{ type: \"text\", text: prompt }];\n\n for (const ev of batch) {\n if (isImageEvidence(ev)) {\n messageContent.push({\n type: \"image_url\",\n image_url: {\n url: `data:${ev.mediaType};base64,${ev.bytes.toString(\"base64\")}`,\n },\n });\n } else {\n messageContent.push({\n type: \"text\",\n text: `\\n[evidence_idx=${ev.canonicalIndex} — ${textEvidenceLabel(ev)} at step ${ev.originalStepIndex}]\\n${ev.content}\\n`,\n });\n }\n }\n\n try {\n const client = this.getClient();\n const response = await client.createChatCompletion<\n LLMParsedResponse<LLMResponse>\n >({\n logger: this.logger,\n options: {\n messages: [\n {\n role: \"system\",\n content:\n \"You are scoring how relevant each evidence point in a batch is to each rubric criterion. Output only valid JSON conforming to the schema in the user message.\",\n },\n { role: \"user\", content: messageContent },\n ],\n response_model: {\n name: \"BatchedRelevance\",\n schema: BatchedRelevanceResponseSchema,\n },\n },\n });\n const data = response.data as unknown as z.infer<\n typeof BatchedRelevanceResponseSchema\n >;\n for (const item of data.items) {\n const scoreMap = new Map<number, number>();\n for (const s of item.scores) {\n if (s.criterion_idx >= 0 && s.criterion_idx < numCriteria) {\n scoreMap.set(s.criterion_idx, s.score);\n }\n }\n for (let i = 0; i < numCriteria; i++) {\n if (!scoreMap.has(i)) scoreMap.set(i, 0);\n }\n out.set(item.evidence_idx, scoreMap);\n }\n } catch {\n // Per-batch failure: zero out the whole batch so the pipeline\n // continues — top-K won't select these evidence points.\n for (const ev of batch) {\n const scoreMap = new Map<number, number>();\n for (let i = 0; i < numCriteria; i++) scoreMap.set(i, 0);\n out.set(ev.canonicalIndex, scoreMap);\n }\n }\n }),\n );\n\n await Promise.all(tasks);\n\n // Pad any missing evidence indices with zeros (defensive against the\n // model omitting batch entries).\n for (const ev of evidence) {\n if (!out.has(ev.canonicalIndex)) {\n const scoreMap = new Map<number, number>();\n for (let i = 0; i < numCriteria; i++) scoreMap.set(i, 0);\n out.set(ev.canonicalIndex, scoreMap);\n }\n }\n\n return out;\n }\n\n /**\n * One call per rubric criterion. Each call sees the criterion's top-K\n * evidence points (images + ariaTree snippets), the action history, and\n * the final answer; the response includes `earned_points` directly so the\n * process score is deterministic (Σ earned / Σ max).\n */\n private async scorePerCriterion(args: {\n trajectory: Trajectory;\n taskSpec: TaskSpec;\n rubric: Rubric;\n evidence: CanonicalEvidence[];\n groupedTopK: Map<number, number[]>;\n config: VerifierConfig;\n }): Promise<CriterionScore[]> {\n const { trajectory, taskSpec, rubric, evidence, groupedTopK, config } =\n args;\n if (rubric.items.length === 0) return [];\n\n const evidenceByIdx = new Map<number, CanonicalEvidence>();\n for (const e of evidence) evidenceByIdx.set(e.canonicalIndex, e);\n\n const actionHistory = this.formatActionHistory(trajectory, config);\n const predictedOutput =\n trajectory.finalAnswer ?? \"(no final answer recorded)\";\n\n const limit = pLimit(config.maxParallel);\n\n const tasks = rubric.items.map((criterion, cIdx) =>\n limit(async (): Promise<CriterionScore> => {\n const topK = groupedTopK.get(cIdx) ?? [];\n const evidencePoints = topK\n .map((eIdx) => evidenceByIdx.get(eIdx))\n .filter((e): e is CanonicalEvidence => e !== undefined);\n\n const manifest =\n evidencePoints.length === 0\n ? \"(no evidence scored highly enough for this criterion — rely on action history)\"\n : renderEvidenceManifest(\n evidencePoints,\n config.truncation.evidenceTextPreview,\n );\n\n const conditionLine = criterion.condition\n ? `- Condition: ${criterion.condition}`\n : \"\";\n\n const prompt = renderPrompt(MM_PER_CRITERION_SCORE_PROMPT, {\n task_definition: taskSpec.instruction,\n init_url_context: buildInitUrlContext(taskSpec.initUrl),\n action_history: actionHistory,\n agent_predicted_output: predictedOutput,\n criterion_idx: cIdx,\n criterion_name: criterion.criterion,\n criterion_description: criterion.description,\n criterion_max_points: criterion.maxPoints,\n criterion_condition: conditionLine,\n evidence_manifest: manifest,\n });\n\n const messageContent: Array<\n | { type: \"text\"; text: string }\n | { type: \"image_url\"; image_url: { url: string } }\n > = [{ type: \"text\", text: prompt }];\n\n for (const ev of evidencePoints) {\n if (isImageEvidence(ev)) {\n messageContent.push({\n type: \"image_url\",\n image_url: {\n url: `data:${ev.mediaType};base64,${ev.bytes.toString(\"base64\")}`,\n },\n });\n } else {\n messageContent.push({\n type: \"text\",\n text: `\\n[evidence_idx=${ev.canonicalIndex} — ${textEvidenceLabel(ev)} at step ${ev.originalStepIndex}]\\n${ev.content}\\n`,\n });\n }\n }\n\n try {\n const client = this.getClient();\n const response = await client.createChatCompletion<\n LLMParsedResponse<LLMResponse>\n >({\n logger: this.logger,\n options: {\n messages: [\n {\n role: \"system\",\n content:\n \"You are scoring one rubric criterion against the most relevant evidence from an agent's trajectory. Output only valid JSON conforming to the schema in the user message.\",\n },\n { role: \"user\", content: messageContent },\n ],\n response_model: {\n name: \"PerCriterionScore\",\n schema: PerCriterionScoreResponseSchema,\n },\n },\n });\n const data = response.data as unknown as z.infer<\n typeof PerCriterionScoreResponseSchema\n >;\n const clamped = Math.max(\n 0,\n Math.min(criterion.maxPoints, data.earned_points),\n );\n return {\n criterion: criterion.criterion,\n maxPoints: criterion.maxPoints,\n earnedPoints: clamped,\n explanation: data.justification,\n evidenceInsufficient: data.evidence_sufficient === false,\n };\n } catch {\n return {\n criterion: criterion.criterion,\n maxPoints: criterion.maxPoints,\n earnedPoints: null,\n explanation:\n \"Per-criterion scoring call failed; falling back to evidence-insufficient.\",\n evidenceInsufficient: true,\n };\n }\n }),\n );\n\n return Promise.all(tasks);\n }\n\n /**\n * Single fused multimodal call returning the full EvaluationResult shape:\n * rubric + per-criterion top-K evidence + action history + final answer.\n * Optionally folds in first-point-of-failure and task-validity. Image\n * evidence rides inline; ariaTree text is embedded in the prompt under\n * each criterion's manifest section.\n */\n private async fusedJudgment(args: {\n trajectory: Trajectory;\n taskSpec: TaskSpec;\n rubric: Rubric;\n evidence: CanonicalEvidence[];\n groupedTopK: Map<number, number[]>;\n foldFailure: boolean;\n foldValidity: boolean;\n config: VerifierConfig;\n }): Promise<z.infer<typeof FusedJudgmentResponseSchema>> {\n const {\n trajectory,\n taskSpec,\n rubric,\n evidence,\n groupedTopK,\n foldFailure,\n foldValidity,\n config,\n } = args;\n\n const evidenceByIdx = new Map<number, CanonicalEvidence>();\n for (const e of evidence) evidenceByIdx.set(e.canonicalIndex, e);\n\n const usedImageIndices = new Set<number>();\n for (const topK of groupedTopK.values()) {\n for (const eIdx of topK) {\n const p = evidenceByIdx.get(eIdx);\n if (p && isImageEvidence(p)) usedImageIndices.add(eIdx);\n }\n }\n const usedImages = [...usedImageIndices]\n .sort((a, b) => a - b)\n .map((eIdx) => evidenceByIdx.get(eIdx))\n .filter((p): p is CanonicalScreenshot => !!p && isImageEvidence(p));\n\n const rubricBlock = rubric.items\n .map((c, i) => {\n const cond = c.condition ? `\\n Condition: ${c.condition}` : \"\";\n return `Criterion ${i} — \"${c.criterion}\" (max ${c.maxPoints} pts):\\n Description: ${c.description}${cond}`;\n })\n .join(\"\\n\\n\");\n\n const evidenceBlock = renderGroupedEvidenceForApproach(\n rubric,\n evidence,\n groupedTopK,\n config.truncation.groupedEvidenceText,\n );\n\n const taxonomyBlock = foldFailure\n ? `\\n${getTaxonomyText(1, 6, 4)}\\n${getTaxonomyText(7, 8, 4)}\\n`\n : \"\";\n\n const prompt = renderPrompt(FUSED_JUDGMENT_PROMPT, {\n task_definition: taskSpec.instruction,\n init_url_context: buildInitUrlContext(taskSpec.initUrl),\n action_history: this.formatActionHistory(trajectory, config),\n agent_predicted_output:\n trajectory.finalAnswer ?? \"(no final answer recorded)\",\n rubric_block: rubricBlock,\n evidence_block: evidenceBlock,\n final_state_block: buildFinalStateBlock(trajectory),\n taxonomy_block: taxonomyBlock,\n fold_failure_analysis: foldFailure ? \"true\" : \"false\",\n fold_task_validity: foldValidity ? \"true\" : \"false\",\n current_date: currentDateForVerifier(),\n });\n\n const messageContent: Array<\n | { type: \"text\"; text: string }\n | { type: \"image_url\"; image_url: { url: string } }\n > = [{ type: \"text\", text: prompt }];\n\n // Always include the terminal visual evidence first — these bytes are the\n // single most reliable signal of what the agent actually saw at the end\n // of the run, and they're not subject to the per-criterion top-K cutoff.\n // Dedupe by content so we don't pay tokens twice when the top-K already\n // picked the same frame.\n const finalImageBytes = new Set<string>();\n for (const img of selectFinalImages(trajectory)) {\n const key = `${img.bytes.length}:${img.bytes.subarray(0, 32).toString(\"base64\")}`;\n finalImageBytes.add(key);\n messageContent.push({\n type: \"image_url\",\n image_url: {\n url: `data:${img.mediaType};base64,${img.bytes.toString(\"base64\")}`,\n },\n });\n }\n\n for (const img of usedImages) {\n const key = `${img.bytes.length}:${img.bytes.subarray(0, 32).toString(\"base64\")}`;\n if (finalImageBytes.has(key)) continue;\n messageContent.push({\n type: \"image_url\",\n image_url: {\n url: `data:${img.mediaType};base64,${img.bytes.toString(\"base64\")}`,\n },\n });\n }\n\n try {\n const client = this.getClient();\n const response = await client.createChatCompletion<\n LLMParsedResponse<LLMResponse>\n >({\n logger: this.logger,\n options: {\n messages: [\n {\n role: \"system\",\n content:\n \"You are an expert evaluator of web-navigation agent trajectories. Output only valid JSON conforming to the schema in the user message.\",\n },\n { role: \"user\", content: messageContent },\n ],\n response_model: {\n name: \"FusedJudgment\",\n schema: FusedJudgmentResponseSchema,\n },\n },\n });\n return response.data as unknown as z.infer<\n typeof FusedJudgmentResponseSchema\n >;\n } catch (e) {\n // Hard failure of the fused call: synthesize a no-confidence result\n // so the pipeline can still produce an EvaluationResult object.\n void e;\n return {\n outcome: {\n primary_intent: taskSpec.instruction,\n reasoning:\n \"Fused judgment LLM call failed; returning evidence-insufficient result.\",\n output_success: false,\n findings: [\n {\n category: \"verifier_uncertainty\" as const,\n severity: \"warning\" as const,\n description:\n \"The fused judgment call did not return a parseable response.\",\n },\n ],\n },\n per_criterion: rubric.items.map((c, i) => ({\n criterion_idx: i,\n applicable_evidence: \"\",\n justification: \"Fused judgment call failed for this criterion.\",\n earned_points: 0,\n evidence_sufficient: false,\n })),\n };\n }\n }\n\n /**\n * Consume the pre-scored rubric from scorePerCriterion and produce the\n * outcome result. When foldFailure/foldValidity are set, the response also\n * includes first-point-of-failure and task-validity, saving 1–2 extra\n * LLM calls.\n */\n private async verifyOutcomeFused(args: {\n trajectory: Trajectory;\n taskSpec: TaskSpec;\n rubric: Rubric;\n perCriterion: CriterionScore[];\n evidence: CanonicalEvidence[];\n foldFailure: boolean;\n foldValidity: boolean;\n config: VerifierConfig;\n }): Promise<z.infer<typeof FusedOutcomeResponseSchema>> {\n const {\n trajectory,\n taskSpec,\n rubric,\n perCriterion,\n foldFailure,\n foldValidity,\n config,\n } = args;\n void args.evidence;\n\n const taxonomyBlock = foldFailure\n ? `\\n${getTaxonomyText(1, 6, 4)}\\n${getTaxonomyText(7, 8, 4)}\\n`\n : \"\";\n\n const prompt = renderPrompt(FUSED_OUTCOME_PROMPT, {\n task_definition: taskSpec.instruction,\n init_url_context: buildInitUrlContext(taskSpec.initUrl),\n action_history: this.formatActionHistory(trajectory, config),\n outcome_evidence_summary: this.buildOutcomeEvidenceSummary(\n trajectory,\n taskSpec,\n config,\n ),\n final_state_block: buildFinalStateBlock(trajectory),\n agent_predicted_output:\n trajectory.finalAnswer ?? \"(no final answer recorded)\",\n rubric_summary: this.formatScoredRubricSummary(rubric, perCriterion),\n taxonomy_block: taxonomyBlock,\n fold_failure_analysis: foldFailure ? \"true\" : \"false\",\n fold_task_validity: foldValidity ? \"true\" : \"false\",\n current_date: currentDateForVerifier(),\n });\n\n // Always attach the terminal screenshots so the outcome judge can see the\n // final page state, regardless of the (formerly text-only) evidence\n // summary heuristics.\n const messageContent: Array<\n | { type: \"text\"; text: string }\n | { type: \"image_url\"; image_url: { url: string } }\n > = [{ type: \"text\", text: prompt }];\n for (const img of selectFinalImages(trajectory)) {\n messageContent.push({\n type: \"image_url\",\n image_url: {\n url: `data:${img.mediaType};base64,${img.bytes.toString(\"base64\")}`,\n },\n });\n }\n\n try {\n const client = this.getClient();\n const response = await client.createChatCompletion<\n LLMParsedResponse<LLMResponse>\n >({\n logger: this.logger,\n options: {\n messages: [\n {\n role: \"system\",\n content:\n \"You are an expert evaluator of web-navigation agent trajectories. Output only valid JSON conforming to the schema in the user message.\",\n },\n { role: \"user\", content: messageContent },\n ],\n response_model: {\n name: \"FusedOutcome\",\n schema: FusedOutcomeResponseSchema,\n },\n },\n });\n return response.data as unknown as z.infer<\n typeof FusedOutcomeResponseSchema\n >;\n } catch {\n // Failure surfaces as a no-confidence result.\n return {\n outcome: {\n primary_intent: taskSpec.instruction,\n reasoning:\n \"Outcome LLM call failed; defaulting to output_success=false.\",\n output_success: false,\n findings: [\n {\n category: \"verifier_uncertainty\" as const,\n severity: \"warning\" as const,\n description:\n \"The outcome verification call did not return a parseable response.\",\n },\n ],\n },\n };\n }\n }\n\n /**\n * Flat per-step evidence summary — fallback for trajectories with no\n * probe screenshots, such as harness-adapter or stubbed trajectories.\n */\n private buildEvidenceContext(\n trajectory: Trajectory,\n config: VerifierConfig,\n opts: { includeImages?: boolean } = {},\n ): EvidenceContext {\n if (trajectory.steps.length === 0) {\n return { text: \"(no steps captured)\", images: [] };\n }\n\n const textLimit = config.truncation.buildEvidenceText;\n const ariaLimit = config.truncation.buildEvidenceAria;\n\n const text = clampToTokenBudget(\n trajectory.steps\n .map((s, i) => {\n const url = s.probeEvidence.url ? `, url=${s.probeEvidence.url}` : \"\";\n const hasScreenshot =\n s.probeEvidence.screenshotPath || s.probeEvidence.screenshot\n ? \"yes\"\n : \"no\";\n const tier1 = s.agentEvidence.modalities\n .map((m) => {\n if (m.type === \"text\")\n return `text(${m.content.slice(0, textLimit)})`;\n if (m.type === \"image\") return `image(${m.bytes.length} bytes)`;\n return `json(${safeJsonSnippet(m.content, 180)})`;\n })\n .join(\", \");\n const toolOutput = safeJsonSnippet(s.toolOutput.result, 220);\n // Include the post-step a11y dump when captured — textual ground\n // truth for criteria that can't be verified from the visual probe\n // alone (prices, names, list contents). Per-step cap keeps the\n // total budget bounded.\n const ariaSnippet =\n typeof s.probeEvidence.ariaTree === \"string\" &&\n s.probeEvidence.ariaTree.length > 0\n ? `\\n aria_tree: ${s.probeEvidence.ariaTree.slice(0, ariaLimit)}${\n s.probeEvidence.ariaTree.length > ariaLimit\n ? \"… [truncated]\"\n : \"\"\n }`\n : \"\";\n return `Screenshot ${i + 1} — step=${i}, action=${s.actionName}${url}, probe_screenshot=${hasScreenshot}\\n tier1: ${tier1 || \"(none)\"}\\n tool_output: ${toolOutput}${ariaSnippet}`;\n })\n .join(\"\\n\\n\"),\n config.evidenceTokenBudget,\n );\n\n if (opts.includeImages === false) return { text, images: [] };\n\n return {\n text,\n images: selectRecentImages(trajectory, config.outcomeMaxImages),\n };\n }\n\n /**\n * Compact text evidence for the one-call outcome verifier.\n *\n * Outcome-only does not run the rubric relevance selector, but it still needs\n * enough saved-page text to avoid replacing trajectory facts with model\n * memory. Select a bounded set of lexically relevant and recent steps, then\n * include short excerpts around task/final-answer terms.\n */\n private buildOutcomeEvidenceSummary(\n trajectory: Trajectory,\n taskSpec: TaskSpec,\n config: VerifierConfig,\n ): string {\n if (trajectory.steps.length === 0) return \"(no steps captured)\";\n\n const keywords = outcomeKeywords(\n `${taskSpec.instruction}\\n${trajectory.finalAnswer ?? \"\"}`,\n );\n const lastImportantIndex = Math.max(0, trajectory.steps.length - 5);\n\n const candidates = trajectory.steps.map((step, position) => {\n const url = step.probeEvidence.url ?? \"\";\n const ariaTree = step.probeEvidence.ariaTree ?? \"\";\n const toolOutput = safeJsonSnippet(step.toolOutput?.result, 600);\n const actionArgs = safeJsonSnippet(step.actionArgs, 400);\n const haystack = [\n step.actionName,\n step.reasoning ?? \"\",\n url,\n actionArgs,\n toolOutput,\n ariaTree,\n ]\n .join(\"\\n\")\n .toLowerCase();\n\n let score = position >= lastImportantIndex ? 3 : 0;\n if (url) score += 1;\n if (\n /extract|observe|aria|navigate|click|type|search/i.test(step.actionName)\n ) {\n score += 1;\n }\n for (const keyword of keywords) {\n if (haystack.includes(keyword)) {\n score += keyword.length >= 8 ? 3 : 1;\n }\n }\n\n return { step, position, score };\n });\n\n const selected = new Set<number>();\n for (const candidate of [...candidates]\n .sort((a, b) => b.score - a.score || a.position - b.position)\n .slice(0, OUTCOME_EVIDENCE_MAX_STEPS)) {\n selected.add(candidate.position);\n }\n\n for (\n let i = Math.max(0, trajectory.steps.length - 4);\n i < trajectory.steps.length;\n i++\n ) {\n selected.add(i);\n }\n\n const sections = [...selected]\n .sort((a, b) => a - b)\n .map((position) => {\n const step = trajectory.steps[position];\n const url = step.probeEvidence.url\n ? ` url=${step.probeEvidence.url}`\n : \"\";\n const reasoning = step.reasoning\n ? `\\n reasoning: ${step.reasoning.slice(0, 220)}`\n : \"\";\n const toolOutput = step.toolOutput?.result\n ? `\\n tool_output: ${safeJsonSnippet(step.toolOutput.result, 320)}`\n : \"\";\n const ariaExcerpt = step.probeEvidence.ariaTree\n ? `\\n page_excerpt: ${bestOutcomeExcerpt(\n step.probeEvidence.ariaTree,\n keywords,\n OUTCOME_EVIDENCE_STEP_CHARS,\n )}`\n : \"\";\n return `Step ${position}: ${step.actionName}(${summarizeArgs(\n step.actionArgs,\n )})${url}${reasoning}${toolOutput}${ariaExcerpt}`;\n });\n\n return clampToTokenBudget(\n sections.join(\"\\n\\n\"),\n config.outcomeEvidenceTokenBudget,\n );\n }\n\n /** Generate a rubric from the task description alone. */\n async generateRubric(taskSpec: TaskSpec): Promise<Rubric> {\n const prompt = renderPrompt(RUBRIC_GENERATION_PROMPT, {\n task_id: taskSpec.instruction,\n init_url_context: buildInitUrlContext(taskSpec.initUrl),\n });\n\n const maxAttempts = 3;\n let lastError: unknown;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const client = this.getRubricGenClient();\n const response = await client.createChatCompletion<\n LLMParsedResponse<LLMResponse>\n >({\n logger: this.logger,\n options: {\n messages: [\n {\n role: \"system\",\n content:\n \"You are an expert rubric author. Output only valid JSON conforming to the schema requested in the user message. Do not include explanatory prose.\",\n },\n { role: \"user\", content: prompt },\n ],\n response_model: { name: \"Rubric\", schema: RubricSchema },\n },\n });\n const data = response.data as unknown as z.infer<typeof RubricSchema>;\n const normalized = normalizeRubric({\n items: filterByTaskSpan(\n data.items,\n taskSpec.instruction,\n this.logger,\n ),\n });\n if (!normalized) {\n throw new Error(\"Rubric generation returned no rubric\");\n }\n return normalized;\n } catch (err) {\n lastError = err;\n if (attempt === maxAttempts - 1) break;\n await new Promise((resolve) => setTimeout(resolve, 500 * 2 ** attempt));\n }\n }\n\n throw lastError instanceof Error ? lastError : new Error(String(lastError));\n }\n\n /**\n * Identify all distinct failure points using taxonomy categories 1–6\n * (agent-controllable errors) and return the earliest one. Best-effort:\n * returns undefined on LLM failure / unparseable output / no failures\n * found, rather than blocking the rest of the pipeline.\n */\n private async analyzeFailures(args: {\n trajectory: Trajectory;\n taskSpec: TaskSpec;\n rubric: Rubric;\n perCriterion: CriterionScore[];\n outcome: z.infer<typeof FusedOutcomeSchema>;\n config: VerifierConfig;\n }): Promise<EvaluationResult[\"firstPointOfFailure\"]> {\n const { trajectory, taskSpec, rubric, perCriterion, outcome, config } =\n args;\n const evidenceContext = this.buildEvidenceContext(trajectory, config, {\n includeImages: false,\n });\n\n const prompt = renderPrompt(FIRST_POINT_OF_FAILURE_PROMPT, {\n task_definition: taskSpec.instruction,\n init_url_context: buildInitUrlContext(taskSpec.initUrl),\n action_history: this.formatActionHistory(trajectory, config),\n predicted_output: trajectory.finalAnswer ?? \"(no final answer recorded)\",\n rubric_summary: this.formatScoredRubricSummary(rubric, perCriterion),\n evidence_summary: evidenceContext.text,\n outcome_verification: `output_success=${outcome.output_success}\\nprimary_intent=${outcome.primary_intent}\\nreasoning=${outcome.reasoning}`,\n });\n\n const client = this.getClient();\n const response = await client.createChatCompletion<\n LLMParsedResponse<LLMResponse>\n >({\n logger: this.logger,\n options: {\n messages: [\n {\n role: \"system\",\n content:\n \"You are an expert failure analyst for computer-use web agents. Output only valid JSON conforming to the schema in the user message.\",\n },\n { role: \"user\", content: prompt },\n ],\n response_model: {\n name: \"FailureAnalysis\",\n schema: FailureAnalysisSchema,\n },\n },\n });\n\n const data = response.data as unknown as z.infer<\n typeof FailureAnalysisSchema\n >;\n if (!data.has_failure || data.failure_points.length === 0) return undefined;\n\n // Find the failure with the earliest step number: lowest min-step across\n // all failure_points.\n let best: {\n minStep: number;\n point: z.infer<typeof FailurePointSchema>;\n } | null = null;\n for (const fp of data.failure_points) {\n const steps = parseFailureStepNumbers(fp.step_numbers, {\n maxStep: Math.max(0, trajectory.steps.length),\n });\n if (steps.length === 0) continue;\n const minStep = steps[0];\n if (best === null || minStep < best.minStep) {\n best = { minStep, point: fp };\n }\n }\n if (best === null) return undefined;\n\n return {\n stepIndex: best.minStep,\n errorCode: best.point.error_code,\n category: best.point.error_category,\n description: `${best.point.error_type}: ${best.point.what_happened}`,\n };\n }\n\n /**\n * Classify the task across ambiguity (taxonomy category 7) and\n * validity/feasibility (category 8). Pure task-level analysis; no\n * trajectory context needed. Best-effort: returns undefined on LLM error.\n */\n private async classifyTaskValidity(\n taskSpec: TaskSpec,\n ): Promise<EvaluationResult[\"taskValidity\"]> {\n const prompt = renderPrompt(TASK_VALIDITY_PROMPT, {\n task_definition: taskSpec.instruction,\n url: taskSpec.initUrl ?? \"(none)\",\n // For browser-driven tasks the app is always Edge/Chrome. The prompt\n // accepts a free-form apps field; keeping it accurate matters less than\n // anchoring the model with non-empty context.\n apps: \"Edge\",\n date: new Date().toISOString().slice(0, 10),\n });\n\n const client = this.getClient();\n const response = await client.createChatCompletion<\n LLMParsedResponse<LLMResponse>\n >({\n logger: this.logger,\n options: {\n messages: [\n {\n role: \"system\",\n content:\n \"You are an expert failure analyst for computer-use web agents. Output only valid JSON conforming to the schema in the user message.\",\n },\n { role: \"user\", content: prompt },\n ],\n response_model: {\n name: \"TaskValidity\",\n schema: TaskValiditySchema,\n },\n },\n });\n\n const data = response.data as unknown as z.infer<typeof TaskValiditySchema>;\n return {\n isAmbiguous: data.is_ambiguous,\n isInvalid: data.is_invalid,\n ambiguityReason:\n data.is_ambiguous && data.reasoning_is_ambiguous\n ? data.reasoning_is_ambiguous\n : undefined,\n invalidReason:\n data.is_invalid && data.reasoning_is_invalid\n ? data.reasoning_is_invalid\n : undefined,\n };\n }\n\n /**\n * Format the rubric with per-criterion rescored points + explanations.\n * The outcome verifier reads this as advisory context — it sees how a\n * separate scoring system viewed each criterion but forms its own result.\n */\n private formatScoredRubricSummary(\n rubric: Rubric,\n scores: CriterionScore[],\n ): string {\n return rubric.items\n .map((c, i) => {\n const cond = c.condition ? ` [condition: ${c.condition}]` : \"\";\n const score = scores[i];\n const earned = score?.earnedPoints ?? \"—\";\n const explanation = score?.explanation ?? \"\";\n return `${i + 1}. ${c.criterion} (${earned}/${c.maxPoints} pts)${cond}\\n Description: ${c.description}\\n Score explanation: ${explanation}`;\n })\n .join(\"\\n\\n\");\n }\n\n /**\n * Compact textual action history for embedding in prompts. One line per\n * step. Full per-step detail lives in trajectory.json on disk.\n */\n private formatActionHistory(\n trajectory: Trajectory,\n config: VerifierConfig,\n ): string {\n const reasoningLimit = config.truncation.actionHistoryReasoning;\n const history = trajectory.steps\n .map((s, i) => {\n const argSummary = summarizeArgs(s.actionArgs);\n const reasoning = (s.reasoning ?? \"\").slice(0, reasoningLimit);\n const url = s.probeEvidence.url ? ` @ ${s.probeEvidence.url}` : \"\";\n return `Step ${i}: ${s.actionName}(${argSummary})${url}${reasoning ? `\\n reasoning: ${reasoning}` : \"\"}`;\n })\n .join(\"\\n\");\n return clampToTokenBudget(history, config.actionHistoryTokenBudget);\n }\n}\n\ninterface EvidenceImage {\n label: string;\n bytes: Buffer;\n mediaType: string;\n}\n\ninterface EvidenceContext {\n text: string;\n images: EvidenceImage[];\n}\n\n/** FIFO concurrency limiter; avoids a new dep. */\nfunction pLimit(concurrency: number): <T>(fn: () => Promise<T>) => Promise<T> {\n const n = Math.max(1, Math.floor(concurrency));\n let active = 0;\n const queue: Array<() => void> = [];\n const next = () => {\n if (active >= n) return;\n const job = queue.shift();\n if (job) {\n active++;\n job();\n }\n };\n return <T>(fn: () => Promise<T>): Promise<T> =>\n new Promise<T>((resolve, reject) => {\n queue.push(() => {\n fn()\n .then(resolve, reject)\n .finally(() => {\n active--;\n next();\n });\n });\n next();\n });\n}\n\n/**\n * Always-attach final visual evidence: the trajectory's terminal page\n * observation plus the last step's probe screenshot, deduped. Returned in\n * chronological order (last-step probe first if both are present, then\n * finalObservation as the closing frame).\n *\n * This bypasses the per-criterion top-K relevance ranking used by\n * {@link fusedJudgment} and the (previously) text-only outcome prompt, so the\n * judge LLM always sees what the page actually looked like at the end of the\n * run — not just whatever images happened to rank well against keyword\n * heuristics.\n */\nfunction selectFinalImages(trajectory: Trajectory): EvidenceImage[] {\n const out: EvidenceImage[] = [];\n const seen = new Set<string>();\n\n const push = (label: string, bytes: Buffer | undefined): void => {\n if (!bytes || bytes.length === 0) return;\n const key = `${bytes.length}:${bytes.subarray(0, 32).toString(\"base64\")}`;\n if (seen.has(key)) return;\n seen.add(key);\n out.push({ label, bytes, mediaType: \"image/png\" });\n };\n\n const lastStepIdx = trajectory.steps.length - 1;\n if (lastStepIdx >= 0) {\n push(\n `step ${lastStepIdx} probe screenshot (final action)`,\n trajectory.steps[lastStepIdx].probeEvidence.screenshot,\n );\n }\n push(\"trajectory final observation\", trajectory.finalObservation?.screenshot);\n\n return out;\n}\n\n/**\n * Always-attach final textual evidence: the terminal page content (URL +\n * ariaTree) at the end of the run. Prefers `trajectory.finalObservation`\n * (the explicit post-run probe) and falls back to the last step's\n * `probeEvidence`. Clamped to {@link FINAL_STATE_ARIA_CHARS}.\n *\n * Returns an empty string when no terminal observation is available — the\n * caller should treat the resulting prompt section as \"(no final state\n * captured)\" rather than omit the header entirely so the LLM doesn't think\n * the field is missing.\n */\nfunction buildFinalStateBlock(trajectory: Trajectory): string {\n const last = trajectory.steps[trajectory.steps.length - 1];\n const sources: Array<{\n label: string;\n url?: string;\n ariaTree?: string;\n }> = [];\n\n if (last?.probeEvidence) {\n sources.push({\n label: `Last step (Step ${trajectory.steps.length - 1}, post-action)`,\n url: last.probeEvidence.url,\n ariaTree: last.probeEvidence.ariaTree,\n });\n }\n if (trajectory.finalObservation) {\n sources.push({\n label: \"Final observation (probed after trajectory ended)\",\n url: trajectory.finalObservation.url,\n ariaTree: trajectory.finalObservation.ariaTree,\n });\n }\n\n if (sources.length === 0) return \"(no final state captured)\";\n\n return sources\n .map((s) => {\n const aria =\n s.ariaTree && s.ariaTree.length > FINAL_STATE_ARIA_CHARS\n ? `${s.ariaTree.slice(0, FINAL_STATE_ARIA_CHARS)}\\n...[truncated ${s.ariaTree.length - FINAL_STATE_ARIA_CHARS} chars]`\n : (s.ariaTree ?? \"(no aria tree)\");\n const url = s.url ? `\\n url: ${s.url}` : \"\";\n return `${s.label}:${url}\\n aria_tree:\\n${aria}`;\n })\n .join(\"\\n\\n\");\n}\n\nfunction selectRecentImages(\n trajectory: Trajectory,\n limit: number,\n): EvidenceImage[] {\n if (limit <= 0) return [];\n\n const images: EvidenceImage[] = [];\n const seen = new Set<string>();\n\n for (let i = trajectory.steps.length - 1; i >= 0; i--) {\n const step = trajectory.steps[i];\n const candidates: EvidenceImage[] = [];\n if (step.probeEvidence.screenshot) {\n candidates.push({\n label: `step ${i} probe screenshot`,\n bytes: step.probeEvidence.screenshot,\n mediaType: \"image/png\",\n });\n }\n for (const modality of step.agentEvidence.modalities) {\n if (modality.type === \"image\") {\n candidates.push({\n label: `step ${i} agent image`,\n bytes: modality.bytes,\n mediaType: modality.mediaType,\n });\n }\n }\n\n for (const candidate of candidates) {\n const key = `${candidate.mediaType}:${candidate.bytes.length}:${candidate.bytes.subarray(0, 32).toString(\"base64\")}`;\n if (seen.has(key)) continue;\n seen.add(key);\n images.push(candidate);\n if (images.length >= limit) return images.reverse();\n }\n }\n\n return images.reverse();\n}\n\nfunction currentDateForVerifier(): string {\n return new Date().toISOString().slice(0, 10);\n}\n\nconst OUTCOME_KEYWORD_STOPWORDS = new Set([\n \"about\",\n \"above\",\n \"access\",\n \"agent\",\n \"also\",\n \"answer\",\n \"available\",\n \"based\",\n \"been\",\n \"being\",\n \"browser\",\n \"class\",\n \"click\",\n \"correct\",\n \"current\",\n \"details\",\n \"final\",\n \"find\",\n \"found\",\n \"from\",\n \"have\",\n \"including\",\n \"into\",\n \"list\",\n \"located\",\n \"model\",\n \"more\",\n \"navigated\",\n \"page\",\n \"provided\",\n \"request\",\n \"requested\",\n \"results\",\n \"search\",\n \"show\",\n \"successfully\",\n \"task\",\n \"that\",\n \"the\",\n \"their\",\n \"then\",\n \"there\",\n \"this\",\n \"through\",\n \"user\",\n \"using\",\n \"which\",\n \"with\",\n]);\n\nfunction outcomeKeywords(text: string): string[] {\n const counts = new Map<string, number>();\n for (const match of text.toLowerCase().matchAll(/[a-z0-9][a-z0-9._/-]*/g)) {\n const word = match[0].replace(/^[-_./]+|[-_./]+$/g, \"\");\n if (!word) continue;\n if (OUTCOME_KEYWORD_STOPWORDS.has(word)) continue;\n if (word.length < 4 && !/\\d/.test(word)) continue;\n counts.set(word, (counts.get(word) ?? 0) + 1);\n }\n\n return [...counts.entries()]\n .sort((a, b) => b[1] - a[1] || b[0].length - a[0].length)\n .slice(0, 36)\n .map(([word]) => word)\n .sort((a, b) => b.length - a.length || a.localeCompare(b));\n}\n\nfunction bestOutcomeExcerpt(\n text: string,\n keywords: string[],\n maxChars: number,\n): string {\n const compact = text.replace(/\\s+/g, \" \").trim();\n if (compact.length <= maxChars) return compact;\n\n const lower = compact.toLowerCase();\n let bestIndex = -1;\n for (const keyword of keywords) {\n const idx = lower.indexOf(keyword);\n if (idx >= 0) {\n bestIndex = idx;\n break;\n }\n }\n\n if (bestIndex < 0) {\n return `${compact.slice(0, maxChars)}... [truncated]`;\n }\n\n const before = Math.floor(maxChars * 0.35);\n const start = Math.max(0, bestIndex - before);\n const end = Math.min(compact.length, start + maxChars);\n const prefix = start > 0 ? \"... \" : \"\";\n const suffix = end < compact.length ? \" ... [truncated]\" : \"\";\n return `${prefix}${compact.slice(start, end)}${suffix}`;\n}\n\nfunction clampToTokenBudget(text: string, tokenBudget: number): string {\n const maxChars = Math.max(0, tokenBudget) * APPROX_CHARS_PER_TOKEN;\n if (maxChars === 0 || text.length <= maxChars) return text;\n\n const keepHead = Math.floor(maxChars * 0.35);\n const keepTail = Math.max(0, maxChars - keepHead - 120);\n return [\n text.slice(0, keepHead).trimEnd(),\n `\\n...[truncated ${text.length - keepHead - keepTail} chars to fit verifier context budget]...\\n`,\n text.slice(text.length - keepTail).trimStart(),\n ].join(\"\");\n}\n\nfunction filterByTaskSpan(\n items: z.infer<typeof RubricItemSchema>[],\n taskInstruction: string,\n logger: (line: LogLine) => void,\n): z.infer<typeof RubricItemSchema>[] {\n const normalizedTask = normalizeForSpanMatch(taskInstruction);\n const kept: z.infer<typeof RubricItemSchema>[] = [];\n const dropped: { criterion: string; reason: string }[] = [];\n\n for (const item of items) {\n const span = item.task_span?.trim();\n if (!span) {\n dropped.push({\n criterion: item.criterion,\n reason: \"missing task_span\",\n });\n continue;\n }\n\n if (\n span === \"<critical-point>\" ||\n normalizedTask.includes(normalizeForSpanMatch(span))\n ) {\n kept.push(item);\n continue;\n }\n\n dropped.push({\n criterion: item.criterion,\n reason: `task_span ${JSON.stringify(span)} not found in task instruction`,\n });\n }\n\n if (dropped.length > 0) {\n logger({\n category: \"v3-evaluator\",\n message: \"rubric: dropped hallucinated criteria via task_span filter\",\n auxiliary: {\n droppedCount: { value: String(dropped.length), type: \"integer\" },\n dropped: {\n value: JSON.stringify(dropped),\n type: \"object\",\n },\n },\n });\n }\n\n return kept;\n}\n\nfunction normalizeForSpanMatch(value: string): string {\n return value.toLowerCase().replace(/\\s+/g, \" \").trim();\n}\n\nfunction safeJsonSnippet(value: unknown, maxChars: number): string {\n let raw: string;\n try {\n raw = typeof value === \"string\" ? value : JSON.stringify(value);\n } catch {\n raw = String(value);\n }\n if (raw === undefined) return \"(undefined)\";\n return raw.length > maxChars ? `${raw.slice(0, maxChars)}...` : raw;\n}\n\nfunction summarizeArgs(args: Record<string, unknown>): string {\n const keys = Object.keys(args);\n if (keys.length === 0) return \"\";\n return keys\n .slice(0, 3)\n .map((k) => {\n const v = args[k];\n if (typeof v === \"string\") return `${k}: ${v.slice(0, 60)}`;\n if (typeof v === \"number\" || typeof v === \"boolean\") return `${k}: ${v}`;\n return `${k}: ${typeof v}`;\n })\n .join(\", \");\n}\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Rubric, Trajectory } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Convert dataset or generated rubric JSON into the public Stagehand shape.
|
|
4
|
+
* Snake-case dataset fields are accepted here so serialized quirks do not leak
|
|
5
|
+
* into the canonical rubric type.
|
|
6
|
+
*/
|
|
7
|
+
export declare function normalizeRubric(rubric: unknown): Rubric | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Hydrate a Trajectory from the on-disk directory layout written by
|
|
10
|
+
* TrajectoryRecorder.persist(). Used by the offline re-scoring CLI (`bench
|
|
11
|
+
* verify`) and by any consumer that wants to feed a saved trajectory back
|
|
12
|
+
* into V3Evaluator.verify() without running an agent.
|
|
13
|
+
*
|
|
14
|
+
* Reverses the recorder's serialization tweaks:
|
|
15
|
+
* - `probeEvidence.screenshotPath` → read file into `probeEvidence.screenshot`.
|
|
16
|
+
* - Image modalities in `agentEvidence.modalities` carry `imagePath` on disk
|
|
17
|
+
* (relative to the trajectory dir). Legacy `bytesBase64` is also accepted
|
|
18
|
+
* for trajectories written before the externalization change.
|
|
19
|
+
*
|
|
20
|
+
* @param dir absolute or cwd-relative path to a `<run-id>/<task-id>/` directory.
|
|
21
|
+
*/
|
|
22
|
+
export declare function loadTrajectoryFromDisk(dir: string): Promise<Trajectory>;
|
|
23
|
+
/**
|
|
24
|
+
* Build a `result*.json` filename for persisted evaluator output.
|
|
25
|
+
*
|
|
26
|
+
* Convention: the live run writes `result.json`; offline re-score attempts use
|
|
27
|
+
* a label-based name (e.g., `result_rescore-2026-05-11.json`) so they coexist
|
|
28
|
+
* without collisions and remain easy to diff.
|
|
29
|
+
*/
|
|
30
|
+
export declare function nextResultFilename(label?: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Default persistence policy: explicit override, then env, then "on unless CI".
|
|
33
|
+
*/
|
|
34
|
+
export declare function shouldPersistTrajectory(override: boolean | undefined): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Write the on-disk trajectory layout under `dir`:
|
|
37
|
+
*
|
|
38
|
+
* <dir>/
|
|
39
|
+
* ├── task_data.json
|
|
40
|
+
* ├── trajectory.json (screenshots referenced by path)
|
|
41
|
+
* ├── screenshots/
|
|
42
|
+
* │ ├── probe/<N>.png
|
|
43
|
+
* │ └── agent/<N>[_M].png
|
|
44
|
+
* ├── scores/ (empty; populated separately)
|
|
45
|
+
* └── core.log
|
|
46
|
+
*
|
|
47
|
+
* Image bytes are externalized to PNG files; the in-memory Trajectory is left
|
|
48
|
+
* untouched so callers can keep using it after persistence.
|
|
49
|
+
*/
|
|
50
|
+
export declare function writeTrajectoryDir(dir: string, trajectory: Trajectory): Promise<void>;
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { redactInlineImagePayloads } from "./evidenceNormalization.js";
|
|
4
|
+
/**
|
|
5
|
+
* Convert dataset or generated rubric JSON into the public Stagehand shape.
|
|
6
|
+
* Snake-case dataset fields are accepted here so serialized quirks do not leak
|
|
7
|
+
* into the canonical rubric type.
|
|
8
|
+
*/
|
|
9
|
+
export function normalizeRubric(rubric) {
|
|
10
|
+
if (rubric == null)
|
|
11
|
+
return undefined;
|
|
12
|
+
if (typeof rubric !== "object") {
|
|
13
|
+
throw new TypeError("Rubric must be an object");
|
|
14
|
+
}
|
|
15
|
+
const rawRubric = rubric;
|
|
16
|
+
if (!Array.isArray(rawRubric.items)) {
|
|
17
|
+
throw new TypeError("Rubric is missing an items array");
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
items: rawRubric.items.map((item) => {
|
|
21
|
+
const criterion = normalizeRequiredString(item.criterion, "criterion");
|
|
22
|
+
const description = normalizeRequiredString(item.description, "description");
|
|
23
|
+
const maxPoints = normalizeMaxPoints(item);
|
|
24
|
+
if (typeof maxPoints !== "number" || !Number.isFinite(maxPoints)) {
|
|
25
|
+
throw new TypeError(`Rubric criterion "${criterion}" is missing a numeric maxPoints value`);
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
criterion,
|
|
29
|
+
description,
|
|
30
|
+
maxPoints,
|
|
31
|
+
...(typeof item.condition === "string" && {
|
|
32
|
+
condition: item.condition,
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
}),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function normalizeRequiredString(value, fieldName) {
|
|
39
|
+
if (typeof value === "string" && value.length) {
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
throw new TypeError(`Rubric criterion is missing a ${fieldName} value`);
|
|
43
|
+
}
|
|
44
|
+
function normalizeMaxPoints(item) {
|
|
45
|
+
return item.maxPoints ?? item.max_points;
|
|
46
|
+
}
|
|
47
|
+
function normalizeResultLabel(label) {
|
|
48
|
+
return (label ?? `rescore-${new Date().toISOString()}`).replace(/[^A-Za-z0-9._-]/g, "_");
|
|
49
|
+
}
|
|
50
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
51
|
+
// On-disk loader
|
|
52
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
53
|
+
/**
|
|
54
|
+
* Hydrate a Trajectory from the on-disk directory layout written by
|
|
55
|
+
* TrajectoryRecorder.persist(). Used by the offline re-scoring CLI (`bench
|
|
56
|
+
* verify`) and by any consumer that wants to feed a saved trajectory back
|
|
57
|
+
* into V3Evaluator.verify() without running an agent.
|
|
58
|
+
*
|
|
59
|
+
* Reverses the recorder's serialization tweaks:
|
|
60
|
+
* - `probeEvidence.screenshotPath` → read file into `probeEvidence.screenshot`.
|
|
61
|
+
* - Image modalities in `agentEvidence.modalities` carry `imagePath` on disk
|
|
62
|
+
* (relative to the trajectory dir). Legacy `bytesBase64` is also accepted
|
|
63
|
+
* for trajectories written before the externalization change.
|
|
64
|
+
*
|
|
65
|
+
* @param dir absolute or cwd-relative path to a `<run-id>/<task-id>/` directory.
|
|
66
|
+
*/
|
|
67
|
+
export async function loadTrajectoryFromDisk(dir) {
|
|
68
|
+
const fs = await import("node:fs/promises");
|
|
69
|
+
const path = await import("node:path");
|
|
70
|
+
const trajectoryDir = path.resolve(dir);
|
|
71
|
+
const trajectoryPath = path.join(trajectoryDir, "trajectory.json");
|
|
72
|
+
const raw = await fs.readFile(trajectoryPath, "utf8");
|
|
73
|
+
const parsed = JSON.parse(raw);
|
|
74
|
+
const resolveWithinTrajectoryDir = (candidate, fieldName = "screenshotPath") => {
|
|
75
|
+
const resolved = path.resolve(trajectoryDir, candidate);
|
|
76
|
+
const relative = path.relative(trajectoryDir, resolved);
|
|
77
|
+
const outside = relative === ".." ||
|
|
78
|
+
relative.startsWith(`..${path.sep}`) ||
|
|
79
|
+
path.isAbsolute(relative);
|
|
80
|
+
if (outside) {
|
|
81
|
+
throw new Error(`Trajectory ${fieldName} escapes trajectory directory: ${candidate}`);
|
|
82
|
+
}
|
|
83
|
+
return resolved;
|
|
84
|
+
};
|
|
85
|
+
const hydrateProbeScreenshot = async (probe) => {
|
|
86
|
+
if (probe?.screenshotPath && !probe.screenshot) {
|
|
87
|
+
const resolved = resolveWithinTrajectoryDir(probe.screenshotPath);
|
|
88
|
+
try {
|
|
89
|
+
probe.screenshot = await fs.readFile(resolved);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Missing screenshot file: leave probe.screenshot unset. The verifier's
|
|
93
|
+
// evidence_insufficient path will handle it.
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
for (const step of parsed.steps) {
|
|
98
|
+
// Rehydrate tier-2 probe screenshot from its on-disk file reference.
|
|
99
|
+
await hydrateProbeScreenshot(step.probeEvidence);
|
|
100
|
+
// Rehydrate tier-1 image modalities. New shape: resolve imagePath → Buffer.
|
|
101
|
+
// Legacy shape: decode bytesBase64 → Buffer.
|
|
102
|
+
if (step.agentEvidence?.modalities) {
|
|
103
|
+
const resolved = [];
|
|
104
|
+
for (const m of step.agentEvidence.modalities) {
|
|
105
|
+
if (m.type !== "image") {
|
|
106
|
+
resolved.push(m);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const raw = m;
|
|
110
|
+
if (typeof raw.imagePath === "string") {
|
|
111
|
+
const imagePath = resolveWithinTrajectoryDir(raw.imagePath, "imagePath");
|
|
112
|
+
try {
|
|
113
|
+
const bytes = await fs.readFile(imagePath);
|
|
114
|
+
resolved.push({ type: "image", bytes, mediaType: m.mediaType });
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Missing tier-1 image: drop this modality. evidence_insufficient
|
|
118
|
+
// handles the downstream effect.
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else if (typeof raw.bytesBase64 === "string") {
|
|
122
|
+
resolved.push({
|
|
123
|
+
type: "image",
|
|
124
|
+
bytes: Buffer.from(raw.bytesBase64, "base64"),
|
|
125
|
+
mediaType: m.mediaType,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
resolved.push(m);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
step.agentEvidence.modalities = resolved;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
await hydrateProbeScreenshot(parsed.finalObservation);
|
|
136
|
+
return parsed;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Build a `result*.json` filename for persisted evaluator output.
|
|
140
|
+
*
|
|
141
|
+
* Convention: the live run writes `result.json`; offline re-score attempts use
|
|
142
|
+
* a label-based name (e.g., `result_rescore-2026-05-11.json`) so they coexist
|
|
143
|
+
* without collisions and remain easy to diff.
|
|
144
|
+
*/
|
|
145
|
+
export function nextResultFilename(label) {
|
|
146
|
+
return `result_${normalizeResultLabel(label)}.json`;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Default persistence policy: explicit override, then env, then "on unless CI".
|
|
150
|
+
*/
|
|
151
|
+
export function shouldPersistTrajectory(override) {
|
|
152
|
+
if (override !== undefined)
|
|
153
|
+
return override;
|
|
154
|
+
const env = process.env.VERIFIER_PERSIST_TRAJECTORIES?.toLowerCase();
|
|
155
|
+
if (env === "1" || env === "true")
|
|
156
|
+
return true;
|
|
157
|
+
if (env === "0" || env === "false")
|
|
158
|
+
return false;
|
|
159
|
+
return !process.env.CI;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Write the on-disk trajectory layout under `dir`:
|
|
163
|
+
*
|
|
164
|
+
* <dir>/
|
|
165
|
+
* ├── task_data.json
|
|
166
|
+
* ├── trajectory.json (screenshots referenced by path)
|
|
167
|
+
* ├── screenshots/
|
|
168
|
+
* │ ├── probe/<N>.png
|
|
169
|
+
* │ └── agent/<N>[_M].png
|
|
170
|
+
* ├── scores/ (empty; populated separately)
|
|
171
|
+
* └── core.log
|
|
172
|
+
*
|
|
173
|
+
* Image bytes are externalized to PNG files; the in-memory Trajectory is left
|
|
174
|
+
* untouched so callers can keep using it after persistence.
|
|
175
|
+
*/
|
|
176
|
+
export async function writeTrajectoryDir(dir, trajectory) {
|
|
177
|
+
await fs.mkdir(dir, { recursive: true });
|
|
178
|
+
await fs.mkdir(path.join(dir, "screenshots", "probe"), { recursive: true });
|
|
179
|
+
await fs.mkdir(path.join(dir, "screenshots", "agent"), { recursive: true });
|
|
180
|
+
const serializableSteps = [];
|
|
181
|
+
// A single post-turn probe is fanned across every step of a multi-tool turn,
|
|
182
|
+
// and a single agent screenshot is shared across every action a CUA provider
|
|
183
|
+
// chose from it, so the same Buffer is shared by reference. Dedupe by
|
|
184
|
+
// identity: write the PNG once and point every sharing step at the same file.
|
|
185
|
+
const probePathByBuffer = new Map();
|
|
186
|
+
const agentPathByBuffer = new Map();
|
|
187
|
+
for (const [i, step] of trajectory.steps.entries()) {
|
|
188
|
+
const probe = { ...step.probeEvidence };
|
|
189
|
+
if (probe.screenshot) {
|
|
190
|
+
let relPath = probePathByBuffer.get(probe.screenshot);
|
|
191
|
+
if (!relPath) {
|
|
192
|
+
relPath = `screenshots/probe/${i + 1}.png`;
|
|
193
|
+
await fs.writeFile(path.join(dir, relPath), probe.screenshot);
|
|
194
|
+
probePathByBuffer.set(probe.screenshot, relPath);
|
|
195
|
+
}
|
|
196
|
+
probe.screenshotPath = relPath;
|
|
197
|
+
delete probe.screenshot;
|
|
198
|
+
}
|
|
199
|
+
const imageModalities = step.agentEvidence.modalities.filter((m) => m.type === "image");
|
|
200
|
+
const multipleImages = imageModalities.length > 1;
|
|
201
|
+
let imageSeq = 0;
|
|
202
|
+
const modalities = [];
|
|
203
|
+
for (const m of step.agentEvidence.modalities) {
|
|
204
|
+
if (m.type !== "image") {
|
|
205
|
+
modalities.push(m.type === "json"
|
|
206
|
+
? {
|
|
207
|
+
...m,
|
|
208
|
+
content: redactInlineImagePayloads(m.content, step.actionName),
|
|
209
|
+
}
|
|
210
|
+
: m);
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
let relPath = agentPathByBuffer.get(m.bytes);
|
|
214
|
+
if (!relPath) {
|
|
215
|
+
const suffix = multipleImages ? `_${imageSeq}` : "";
|
|
216
|
+
relPath = `screenshots/agent/${i + 1}${suffix}.png`;
|
|
217
|
+
await fs.writeFile(path.join(dir, relPath), m.bytes);
|
|
218
|
+
agentPathByBuffer.set(m.bytes, relPath);
|
|
219
|
+
}
|
|
220
|
+
modalities.push({
|
|
221
|
+
type: "image",
|
|
222
|
+
imagePath: relPath,
|
|
223
|
+
mediaType: m.mediaType,
|
|
224
|
+
});
|
|
225
|
+
imageSeq += 1;
|
|
226
|
+
}
|
|
227
|
+
serializableSteps.push({
|
|
228
|
+
...step,
|
|
229
|
+
probeEvidence: probe,
|
|
230
|
+
agentEvidence: { modalities },
|
|
231
|
+
toolOutput: {
|
|
232
|
+
...step.toolOutput,
|
|
233
|
+
result: redactInlineImagePayloads(step.toolOutput.result, step.actionName),
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
const finalObservation = trajectory.finalObservation === undefined
|
|
238
|
+
? undefined
|
|
239
|
+
: { ...trajectory.finalObservation };
|
|
240
|
+
if (finalObservation?.screenshot) {
|
|
241
|
+
const relPath = "screenshots/probe/final.png";
|
|
242
|
+
await fs.writeFile(path.join(dir, relPath), finalObservation.screenshot);
|
|
243
|
+
finalObservation.screenshotPath = relPath;
|
|
244
|
+
delete finalObservation.screenshot;
|
|
245
|
+
}
|
|
246
|
+
// Image modalities carry imagePath instead of raw bytes on disk; cast
|
|
247
|
+
// through unknown rather than widen Trajectory's type contract.
|
|
248
|
+
const serialized = {
|
|
249
|
+
...trajectory,
|
|
250
|
+
steps: serializableSteps,
|
|
251
|
+
...(finalObservation ? { finalObservation } : {}),
|
|
252
|
+
};
|
|
253
|
+
await fs.writeFile(path.join(dir, "trajectory.json"), JSON.stringify(serialized, null, 2));
|
|
254
|
+
await fs.writeFile(path.join(dir, "task_data.json"), JSON.stringify({
|
|
255
|
+
task: trajectory.task,
|
|
256
|
+
status: trajectory.status,
|
|
257
|
+
finalAnswer: trajectory.finalAnswer ?? null,
|
|
258
|
+
}, null, 2));
|
|
259
|
+
await fs.mkdir(path.join(dir, "scores"), { recursive: true });
|
|
260
|
+
await fs.writeFile(path.join(dir, "core.log"), coreLog(trajectory));
|
|
261
|
+
}
|
|
262
|
+
function coreLog(trajectory) {
|
|
263
|
+
return (trajectory.steps
|
|
264
|
+
.map((step, i) => JSON.stringify({
|
|
265
|
+
step: i,
|
|
266
|
+
action: step.actionName,
|
|
267
|
+
url: step.probeEvidence.url ?? null,
|
|
268
|
+
ok: step.toolOutput.ok,
|
|
269
|
+
reasoning: step.reasoning || undefined,
|
|
270
|
+
}))
|
|
271
|
+
.join("\n") + "\n");
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=trajectory.js.map
|