import type { BinaryTarget } from "../domain/binaryTarget.js"; import type { JsonValue } from "../domain/jsonValue.js"; import type { Evidence } from "../domain/evidence.js"; import type { EvidenceBundle } from "../domain/evidenceBundle.js"; import type { AnalysisSnapshot } from "../domain/analysisSnapshot.js"; import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js"; import type { AnalysisProviderSelector } from "../contracts/providerSelection.js"; import type { AnalysisError, EvidenceIntegrityError, EvidenceLimitError, UnknownRegistryError, } from "../domain/errors.js"; import type { Result } from "../domain/result.js"; import type { RecordUnknownInput, ResidualUnknown, UnknownStatus, UpdateUnknownInput, } from "../domain/residualUnknown.js"; import type { InvestigationWorkspace } from "../domain/investigationWorkspace.js"; import type { AnalysisOperation, AnalysisOperationPort, ProviderIdentity, } from "./AnalysisProvider.js"; /** Target lifecycle used by CLI and MCP without exposing a concrete provider. */ export interface BinarySessionPort extends AnalysisOperationPort { open( path: string, options?: { readonly signal?: AbortSignal; readonly targetKind?: BinaryTarget["kind"]; readonly snapshot?: AnalysisSnapshot; readonly providerId?: AnalysisProviderSelector; }, ): Promise>; close(): Promise>; status(): JsonValue; activeTarget(): BinaryTarget | undefined; recordEvidence( evidence: Evidence, ): Result<"added" | "duplicate", EvidenceIntegrityError | EvidenceLimitError>; hasEvidence(evidenceId: string): boolean; evidenceById(evidenceId: string): Evidence | undefined; exportEvidenceBundle(): EvidenceBundle; importEvidenceBundle( bundle: unknown, ): Result; exportAnalysisSnapshot(): Result; importAnalysisSnapshot( snapshot: AnalysisSnapshot, ): Result; retainInvestigationWorkspace( workspace: InvestigationWorkspace, ): "added" | "duplicate"; investigationWorkspace( workspaceId: string, revision: number, ): InvestigationWorkspace | undefined; investigationWorkspaces(): readonly InvestigationWorkspace[]; recordUnknown( input: RecordUnknownInput, ): Result; recordEvidenceWithUnknown( evidence: Evidence, input: RecordUnknownInput, ): Result; updateUnknown( input: UpdateUnknownInput, ): Result; listUnknowns(filters?: { readonly status?: UnknownStatus; readonly severity?: ResidualUnknown["severity"]; readonly domain?: string; }): ResidualUnknown[]; verifyUnknownResolution(unknownId: string): Result< { readonly valid: boolean; readonly truthVerified: boolean; readonly unknown: ResidualUnknown; }, UnknownRegistryError >; providerIdentity(operation?: AnalysisOperation): ProviderIdentity; analysisProfile( operation?: AnalysisOperation, ): AnalysisProfileCommitment | undefined; openCompatibility(): Readonly>; onAvailabilityChanged?(listener: () => void | Promise): () => void; }