import { type ReviewFindingsArtifactRef, type SingleResult, type TaskRoutingEvidence, type TaskToolDetails } from "./types"; export interface TaskRoi { tokens: number; contextTokens?: number; clonedTokens?: number; costTotal?: number; outputBytes?: number; outputLines?: number; producedChanges: boolean; materialContribution: boolean; lowRoi: boolean; } export interface TaskResultReceipt { index: number; id: string; agent: string; agentSource: SingleResult["agentSource"]; task: string; assignment?: string; description?: string; status: "completed" | "failed" | "aborted" | "merge_failed" | "paused"; exitCode: number; aborted?: boolean; paused?: boolean; truncated: boolean; durationMs: number; tokens: number; contextTokens?: number; contextWindow?: number; modelOverride?: string | string[]; routing?: TaskRoutingEvidence; modelSubstitutionWarning?: SingleResult["modelSubstitutionWarning"]; fastMode?: boolean; usage?: SingleResult["usage"]; cost?: number; usageCostBreakdownComplete?: true; branchName?: string; persistence?: SingleResult["persistence"]; retryFailure?: { attempt: number; errorSummary: string; }; setupFailure?: { summary: string; }; localErrorSummary?: SingleResult["localErrorSummary"]; errorSummary?: string; duplicateDisposition?: SingleResult["duplicateDisposition"]; abortSummary?: string; preview: string; previewTruncated: boolean; outputRef?: { uri: string; sizeBytes: number; lineCount: number; sha256?: string; /** Output remains readable for the parent session lifetime (and same-session descendants). */ durability?: "session"; }; outputUnavailable?: boolean; review?: { overallCorrectness?: string; findingCount: number; findings?: Array<{ severity?: string; summary: string; }>; /** Canonical full-fidelity findings; inline summaries are display-only. */ findingsRef?: ReviewFindingsArtifactRef; }; extractedToolCounts?: Record; forkContext?: SingleResult["forkContext"]; forkContextAdvisory?: SingleResult["forkContextAdvisory"]; /** Resolved repository identity for this delegated lane (#2901). */ repositoryBinding?: SingleResult["repositoryBinding"]; roi?: TaskRoi; } /** * Heuristic task ROI signal built only from receipt-safe accounting fields. * Advisory only: these flags never change task success/failure semantics. */ export declare function buildTaskRoi(raw: SingleResult): TaskRoi; export declare function buildTaskRoiSummary(receipts: readonly TaskResultReceipt[]): TaskToolDetails["roiSummary"]; export declare function buildTaskReceipt(raw: SingleResult): TaskResultReceipt; /** * Raw, pre-sanitization task details: the internal shape produced during task * execution, where `results` are full `SingleResult` objects. The public * `TaskToolDetails` exposes only receipts. */ export interface RawTaskToolDetails { projectAgentsDir: string | null; results: SingleResult[]; totalDurationMs: number; usage?: TaskToolDetails["usage"]; usageCostBreakdownComplete?: TaskToolDetails["usageCostBreakdownComplete"]; async?: TaskToolDetails["async"]; forkContextClonedTokens?: number; roiSummary?: TaskToolDetails["roiSummary"]; } /** Central converter from raw task details to receipt-only public details. */ export declare function sanitizeTaskToolDetails(raw: RawTaskToolDetails): TaskToolDetails; export declare function findRawTaskLeakKeys(value: unknown): string[]; export declare function assertNoRawTaskFields(value: unknown, surface: string): void;