diff --git a/src/application/AnalysisClientCleanup.ts b/src/application/AnalysisClientCleanup.ts index d2aa7e8ef..fedc8cef8 100644 --- a/src/application/AnalysisClientCleanup.ts +++ b/src/application/AnalysisClientCleanup.ts @@ -1,6 +1,6 @@ import { ProviderCleanupError } from "../domain/providerCleanupError.js"; import { err, ok, type Result } from "../domain/result.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { AnalysisClient, ExecutionOptions } from "./AnalysisProvider.js"; /** Close one provider client and normalize unexpected adapter rejection. */ diff --git a/src/application/AnalysisContextQueries.test.ts b/src/application/AnalysisContextQueries.test.ts index 62734ce9c..3305c9684 100644 --- a/src/application/AnalysisContextQueries.test.ts +++ b/src/application/AnalysisContextQueries.test.ts @@ -13,7 +13,7 @@ import { AnalysisCancelledError, AnalysisOutputError, AnalysisProtocolError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; import { err, ok } from "../domain/result.js"; const provider = { id: "fixture", name: "Fixture", version: "1" }; diff --git a/src/application/AnalysisContextQueries.ts b/src/application/AnalysisContextQueries.ts index 412b89c3f..a48a19541 100644 --- a/src/application/AnalysisContextQueries.ts +++ b/src/application/AnalysisContextQueries.ts @@ -6,8 +6,8 @@ import type { import { AnalysisCapabilityUnavailableError, AnalysisOutputError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { parseDocuments } from "../domain/hopperValues.js"; import { err, ok, type Result } from "../domain/result.js"; diff --git a/src/application/AnalysisProvider.ts b/src/application/AnalysisProvider.ts index 9c226165d..0b2922ab9 100644 --- a/src/application/AnalysisProvider.ts +++ b/src/application/AnalysisProvider.ts @@ -4,7 +4,7 @@ import type { EnhancedToolName } from "../contracts/enhancedInputs.js"; import type { NativeToolName } from "../contracts/nativeToolContracts.js"; import type { ArtifactAnalysisOperation } from "../contracts/artifactToolContracts.js"; import type { ManagedToolName } from "../contracts/managedToolContracts.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js"; import type { JsonValue } from "../domain/jsonValue.js"; import type { Result } from "../domain/result.js"; diff --git a/src/application/AnalysisProviderEvaluation.ts b/src/application/AnalysisProviderEvaluation.ts index 63e726e70..08a7a5493 100644 --- a/src/application/AnalysisProviderEvaluation.ts +++ b/src/application/AnalysisProviderEvaluation.ts @@ -3,7 +3,7 @@ import { type AnalysisProfileCommitment, } from "../domain/analysisProfile.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { AnalysisCancelledError } from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; import { jsonObjectSchema, type JsonValue } from "../domain/jsonValue.js"; import { err, ok, type Result } from "../domain/result.js"; import type { AnalysisProviderCandidate } from "./AnalysisProvider.js"; diff --git a/src/application/AnalysisProviderRegistry.test.ts b/src/application/AnalysisProviderRegistry.test.ts index 2dc8802e7..a079f43c0 100644 --- a/src/application/AnalysisProviderRegistry.test.ts +++ b/src/application/AnalysisProviderRegistry.test.ts @@ -15,11 +15,9 @@ import { } from "./AnalysisProvider.js"; import { createAnalysisProfile } from "../domain/analysisProfile.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { - ProviderAdapterError, - ProviderSelectionError, - projectAnalysisError, -} from "../domain/errors.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; +import { ProviderSelectionError } from "../domain/providerSelectionError.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; import { err, ok } from "../domain/result.js"; const DATABASE_TARGET: BinaryTarget = { diff --git a/src/application/AnalysisProviderRegistry.ts b/src/application/AnalysisProviderRegistry.ts index de254e764..d39b201f8 100644 --- a/src/application/AnalysisProviderRegistry.ts +++ b/src/application/AnalysisProviderRegistry.ts @@ -5,12 +5,12 @@ import { } from "../contracts/providerSelection.js"; import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; import { - AnalysisCancelledError, ProviderSelectionError, type ProviderSelectionFailureReason, type ProviderSelectionRejection, -} from "../domain/errors.js"; +} from "../domain/providerSelectionError.js"; import { jsonObjectSchema, type JsonValue } from "../domain/jsonValue.js"; import { err, ok, type Result } from "../domain/result.js"; import type { diff --git a/src/application/AnalysisSnapshotCache.ts b/src/application/AnalysisSnapshotCache.ts index 88ae8998c..a51929c08 100644 --- a/src/application/AnalysisSnapshotCache.ts +++ b/src/application/AnalysisSnapshotCache.ts @@ -2,11 +2,9 @@ import type { BinaryTarget } from "../domain/binaryTarget.js"; import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js"; import type { JsonValue } from "../domain/jsonValue.js"; import type { EvidenceBundle } from "../domain/evidenceBundle.js"; -import { - EvidenceIntegrityError, - NoBinaryOpenError, - type AnalysisError, -} from "../domain/errors.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; +import { NoBinaryOpenError } from "../domain/configurationErrors.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../domain/result.js"; import { analysisQueryId, diff --git a/src/application/AnalysisSnapshotFiles.ts b/src/application/AnalysisSnapshotFiles.ts index 02d3c0130..6907ea005 100644 --- a/src/application/AnalysisSnapshotFiles.ts +++ b/src/application/AnalysisSnapshotFiles.ts @@ -3,7 +3,10 @@ import { serializeAnalysisSnapshot, type AnalysisSnapshot, } from "../domain/analysisSnapshot.js"; -import { EvidenceFileError, EvidenceIntegrityError } from "../domain/errors.js"; +import { + EvidenceFileError, + EvidenceIntegrityError, +} from "../domain/evidenceErrors.js"; import { err, ok, type Result } from "../domain/result.js"; import { readJsonFile, writeTextFile } from "./JsonFiles.js"; diff --git a/src/application/AndroidApplicationService.ts b/src/application/AndroidApplicationService.ts index 269b65f66..0d21c73ce 100644 --- a/src/application/AndroidApplicationService.ts +++ b/src/application/AndroidApplicationService.ts @@ -1,4 +1,4 @@ -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import { androidApplicationProjectionInputSchema, diff --git a/src/application/AppleApplicationService.ts b/src/application/AppleApplicationService.ts index f90db3c39..593daa709 100644 --- a/src/application/AppleApplicationService.ts +++ b/src/application/AppleApplicationService.ts @@ -1,4 +1,4 @@ -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import { appleApplicationProjectionInputSchema, diff --git a/src/application/BinarySession.ts b/src/application/BinarySession.ts index 480b72adb..f379a1dbd 100644 --- a/src/application/BinarySession.ts +++ b/src/application/BinarySession.ts @@ -5,10 +5,8 @@ import { analysisProfilesEqual, type AnalysisProfileCommitment, } from "../domain/analysisProfile.js"; -import { - AnalysisCancelledError, - type AnalysisError, -} from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../domain/result.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { createEvidence } from "../domain/evidence.js"; diff --git a/src/application/BinarySessionExecution.ts b/src/application/BinarySessionExecution.ts index 11fcbe405..410bf0223 100644 --- a/src/application/BinarySessionExecution.ts +++ b/src/application/BinarySessionExecution.ts @@ -1,11 +1,9 @@ import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { - AnalysisCapabilityUnavailableError, - NoBinaryOpenError, - ProviderAdapterError, - type AnalysisError, -} from "../domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; +import { NoBinaryOpenError } from "../domain/configurationErrors.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { JsonValue } from "../domain/jsonValue.js"; import type { EvidenceSubjectTarget } from "../domain/evidence.js"; import { err, ok, type Result } from "../domain/result.js"; diff --git a/src/application/BinarySessionOpen.ts b/src/application/BinarySessionOpen.ts index 25cdd8d5c..46f74dcaf 100644 --- a/src/application/BinarySessionOpen.ts +++ b/src/application/BinarySessionOpen.ts @@ -8,10 +8,8 @@ import { import type { AnalysisSnapshot } from "../domain/analysisSnapshot.js"; import { parseBinaryTarget } from "./BinaryTargetResolver.js"; import { type BinaryTarget } from "../domain/binaryTarget.js"; -import { - EvidenceIntegrityError, - type AnalysisError, -} from "../domain/errors.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { err, type Result } from "../domain/result.js"; import type { SessionProviderRoute } from "./SessionProviderRouter.js"; import { SessionProviderRouter } from "./SessionProviderRouter.js"; diff --git a/src/application/BinarySessionPort.ts b/src/application/BinarySessionPort.ts index 3352f8be0..5104a197c 100644 --- a/src/application/BinarySessionPort.ts +++ b/src/application/BinarySessionPort.ts @@ -5,11 +5,9 @@ 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, - UnknownRegistryError, -} from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; +import type { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; +import type { UnknownRegistryError } from "../domain/unknownRegistryError.js"; import type { Result } from "../domain/result.js"; import type { RecordUnknownInput, diff --git a/src/application/BinarySessionRecords.ts b/src/application/BinarySessionRecords.ts index 0439e4370..dd2bbfbc6 100644 --- a/src/application/BinarySessionRecords.ts +++ b/src/application/BinarySessionRecords.ts @@ -4,11 +4,9 @@ import type { BinaryTarget } from "../domain/binaryTarget.js"; import { createEvidence, type Evidence } from "../domain/evidence.js"; import type { EvidenceBundle } from "../domain/evidenceBundle.js"; import { evidenceBundleForTarget } from "../domain/evidenceBundle.js"; -import { - EvidenceIntegrityError, - type AnalysisError, - type UnknownRegistryError, -} from "../domain/errors.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import { type UnknownRegistryError } from "../domain/unknownRegistryError.js"; import type { RecordUnknownInput, ResidualUnknown, diff --git a/src/application/BinaryTargetResolver.ts b/src/application/BinaryTargetResolver.ts index 76b5b00f8..841837b22 100644 --- a/src/application/BinaryTargetResolver.ts +++ b/src/application/BinaryTargetResolver.ts @@ -13,7 +13,7 @@ import { extname, isAbsolute, join, resolve } from "node:path"; import { promisify } from "node:util"; import { isPathWithinRoot } from "../domain/localPath.js"; -import { BinaryTargetError } from "../domain/errors.js"; +import { BinaryTargetError } from "../domain/configurationErrors.js"; import type { BinaryTarget } from "../domain/binaryTargetTypes.js"; import { err, ok, type Result } from "../domain/result.js"; import { mzWindowsHeaderOffset } from "../domain/dosMz.js"; diff --git a/src/application/BrowserObservationPort.ts b/src/application/BrowserObservationPort.ts index 1d72e4f4d..1d33e12af 100644 --- a/src/application/BrowserObservationPort.ts +++ b/src/application/BrowserObservationPort.ts @@ -1,4 +1,4 @@ -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { BrowserTargetList, InspectWebPageInput, diff --git a/src/application/BrowserObservationService.ts b/src/application/BrowserObservationService.ts index 8dfaabe20..1852dab26 100644 --- a/src/application/BrowserObservationService.ts +++ b/src/application/BrowserObservationService.ts @@ -11,10 +11,8 @@ import type { CaptureWebScreenshotInput, CompareWebScreenshotsInput, } from "../domain/webScreenshot.js"; -import { - AnalysisCapabilityUnavailableError, - type AnalysisError, -} from "../domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../domain/result.js"; import type { ExecutionOptions } from "./AnalysisProvider.js"; import type { BrowserObservationPort } from "./BrowserObservationPort.js"; diff --git a/src/application/BrowserScenarioCapturePort.ts b/src/application/BrowserScenarioCapturePort.ts index c48df87d3..99260e5ab 100644 --- a/src/application/BrowserScenarioCapturePort.ts +++ b/src/application/BrowserScenarioCapturePort.ts @@ -1,5 +1,5 @@ import type { ExecutionOptions, ProviderIdentity } from "./AnalysisProvider.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { BrowserScenario } from "../domain/browserScenario.js"; import type { BrowserScenarioCapture } from "../domain/browserScenarioCapture.js"; import type { Result } from "../domain/result.js"; diff --git a/src/application/BrowserScenarioCaptureService.ts b/src/application/BrowserScenarioCaptureService.ts index 7f0b00d47..ae3500625 100644 --- a/src/application/BrowserScenarioCaptureService.ts +++ b/src/application/BrowserScenarioCaptureService.ts @@ -1,10 +1,8 @@ import type { ExecutionOptions } from "./AnalysisProvider.js"; import type { BrowserScenarioCapturePort } from "./BrowserScenarioCapturePort.js"; import { createBrowserScenarioEvidence } from "./BrowserScenarioEvidence.js"; -import { - AnalysisCapabilityUnavailableError, - type AnalysisError, -} from "../domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import type { BrowserScenario } from "../domain/browserScenario.js"; import { err, type Result } from "../domain/result.js"; diff --git a/src/application/CallPathTracing.ts b/src/application/CallPathTracing.ts index 43fcf0695..ce31885c6 100644 --- a/src/application/CallPathTracing.ts +++ b/src/application/CallPathTracing.ts @@ -1,5 +1,6 @@ import type { AnalysisOperation } from "./AnalysisProvider.js"; -import { projectAnalysisError, type AnalysisError } from "../domain/errors.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { parseRelatedAddresses } from "../domain/hopperValues.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { ok, type Result } from "../domain/result.js"; diff --git a/src/application/CompositeProvider.ts b/src/application/CompositeProvider.ts index 28db5671b..75c5992f3 100644 --- a/src/application/CompositeProvider.ts +++ b/src/application/CompositeProvider.ts @@ -1,4 +1,4 @@ -import { AnalysisCapabilityUnavailableError } from "../domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; import { err, ok } from "../domain/result.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js"; diff --git a/src/application/DirectAnalysis.ts b/src/application/DirectAnalysis.ts index cb6313fae..b7a9263d8 100644 --- a/src/application/DirectAnalysis.ts +++ b/src/application/DirectAnalysis.ts @@ -11,11 +11,9 @@ import { isManagedToolName, type ManagedToolName, } from "../contracts/managedToolContracts.js"; -import { - EvidenceIntegrityError, - projectAnalysisError, - type AnalysisError, -} from "../domain/errors.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { access } from "node:fs/promises"; import { readAnalysisSnapshot, diff --git a/src/application/DirectAnalysisStatus.ts b/src/application/DirectAnalysisStatus.ts index 5c36443d6..b90c87218 100644 --- a/src/application/DirectAnalysisStatus.ts +++ b/src/application/DirectAnalysisStatus.ts @@ -1,5 +1,5 @@ import { parseConfig } from "../config.js"; -import { projectAnalysisError } from "../domain/errors.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; import { jsonObjectSchema, type JsonValue } from "../domain/jsonValue.js"; import { createServerIdentity } from "../serverIdentity.js"; import { silentLogger, type Logger } from "../logger.js"; diff --git a/src/application/ElectronActiveObservationPort.ts b/src/application/ElectronActiveObservationPort.ts index ad54031c8..584568a05 100644 --- a/src/application/ElectronActiveObservationPort.ts +++ b/src/application/ElectronActiveObservationPort.ts @@ -1,5 +1,5 @@ import type { ExecutionOptions, ProviderIdentity } from "./AnalysisProvider.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { ElectronActiveObservationInput, ElectronActiveObservationResult, diff --git a/src/application/ElectronActiveObservationService.ts b/src/application/ElectronActiveObservationService.ts index 482cf53a0..f1081be2f 100644 --- a/src/application/ElectronActiveObservationService.ts +++ b/src/application/ElectronActiveObservationService.ts @@ -6,8 +6,8 @@ import type { ElectronActiveObservationPort } from "./ElectronActiveObservationP import { AnalysisCapabilityUnavailableError, AnalysisInputError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import type { ElectronActiveObservationInput } from "../domain/electronActiveObservation.js"; import { err, type Result } from "../domain/result.js"; diff --git a/src/application/ElectronObservationPort.ts b/src/application/ElectronObservationPort.ts index 3b882cae9..f6ed7bf06 100644 --- a/src/application/ElectronObservationPort.ts +++ b/src/application/ElectronObservationPort.ts @@ -1,5 +1,5 @@ import type { ExecutionOptions, ProviderIdentity } from "./AnalysisProvider.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { ElectronPageInspection, ElectronTargetList, diff --git a/src/application/ElectronObservationService.ts b/src/application/ElectronObservationService.ts index 7e0b615da..87d7263be 100644 --- a/src/application/ElectronObservationService.ts +++ b/src/application/ElectronObservationService.ts @@ -5,10 +5,8 @@ import type { InspectElectronPageInput, ListElectronTargetsInput, } from "../domain/electronObservation.js"; -import { - AnalysisCapabilityUnavailableError, - type AnalysisError, -} from "../domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../domain/result.js"; import { createElectronEvidence } from "./ElectronEvidence.js"; diff --git a/src/application/EnhancedLiteralTracing.ts b/src/application/EnhancedLiteralTracing.ts index e1ea1fdb7..ccede81ae 100644 --- a/src/application/EnhancedLiteralTracing.ts +++ b/src/application/EnhancedLiteralTracing.ts @@ -1,6 +1,7 @@ import { z } from "zod"; import type { AnalysisOperation } from "./AnalysisProvider.js"; -import { AnalysisOutputError, type AnalysisError } from "../domain/errors.js"; +import { AnalysisOutputError } from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { err, ok, type Result } from "../domain/result.js"; import type { diff --git a/src/application/EnhancedNativeInvestigation.test.ts b/src/application/EnhancedNativeInvestigation.test.ts index ee1c7308f..5e75de903 100644 --- a/src/application/EnhancedNativeInvestigation.test.ts +++ b/src/application/EnhancedNativeInvestigation.test.ts @@ -8,7 +8,11 @@ import { type AnalysisExecution, type AnalysisOperation, } from "./AnalysisProvider.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; +import { + AnalysisCancelledError, + AnalysisCapabilityUnavailableError, +} from "../domain/analysisErrorCore.js"; import { EnhancedTools } from "./EnhancedTools.js"; import { nativeInvestigationGraphSchema, @@ -16,10 +20,6 @@ import { } from "../domain/nativeInvestigationGraph.js"; import { err, ok } from "../domain/result.js"; import type { Result } from "../domain/result.js"; -import { - AnalysisCancelledError, - AnalysisCapabilityUnavailableError, -} from "../domain/errors.js"; const target = "a".repeat(64); const provider = { id: "fixture", name: "Fixture", version: "1" }; diff --git a/src/application/EnhancedToolTypes.ts b/src/application/EnhancedToolTypes.ts index 32498eca4..05cad4303 100644 --- a/src/application/EnhancedToolTypes.ts +++ b/src/application/EnhancedToolTypes.ts @@ -1,6 +1,7 @@ import type { z } from "zod"; -import { AnalysisInputError, type AnalysisError } from "../domain/errors.js"; +import { AnalysisInputError } from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { err, type Result } from "../domain/result.js"; import { diff --git a/src/application/EnhancedTools.ts b/src/application/EnhancedTools.ts index b4e774cd8..fa758d19f 100644 --- a/src/application/EnhancedTools.ts +++ b/src/application/EnhancedTools.ts @@ -9,9 +9,9 @@ import { enhancedInputSchemas } from "../contracts/enhancedInputs.js"; import { AnalysisCancelledError, AnalysisOutputError, - projectAnalysisError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { addressDistance, functionDossierSchema, diff --git a/src/application/EvidenceBundleCommands.ts b/src/application/EvidenceBundleCommands.ts index d24c00dc6..33fce9bbc 100644 --- a/src/application/EvidenceBundleCommands.ts +++ b/src/application/EvidenceBundleCommands.ts @@ -1,7 +1,5 @@ -import { - EvidenceIntegrityError, - type AnalysisError, -} from "../domain/errors.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { EvidenceBundle } from "../domain/evidenceBundle.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; diff --git a/src/application/EvidenceBundleFiles.ts b/src/application/EvidenceBundleFiles.ts index 35a478dc6..cf59d4109 100644 --- a/src/application/EvidenceBundleFiles.ts +++ b/src/application/EvidenceBundleFiles.ts @@ -3,7 +3,10 @@ import { serializeEvidenceBundle, type EvidenceBundle, } from "../domain/evidenceBundle.js"; -import { EvidenceFileError, EvidenceIntegrityError } from "../domain/errors.js"; +import { + EvidenceFileError, + EvidenceIntegrityError, +} from "../domain/evidenceErrors.js"; import { err, ok, type Result } from "../domain/result.js"; import { parseProcessCapture } from "../domain/processCapture.js"; import { readJsonFile, writeTextFile } from "./JsonFiles.js"; diff --git a/src/application/EvidenceLedger.ts b/src/application/EvidenceLedger.ts index e8c570ff5..b8b9cfb1c 100644 --- a/src/application/EvidenceLedger.ts +++ b/src/application/EvidenceLedger.ts @@ -6,10 +6,8 @@ import { validateResidualUnknownAddition, type EvidenceBundle, } from "../domain/evidenceBundle.js"; -import { - EvidenceIntegrityError, - UnknownRegistryError, -} from "../domain/errors.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; +import { UnknownRegistryError } from "../domain/unknownRegistryError.js"; import { parseEvidence, type Evidence } from "../domain/evidence.js"; import { createResidualUnknown, diff --git a/src/application/InventoryProjectionEvidence.ts b/src/application/InventoryProjectionEvidence.ts index a51d3fdde..40d22de24 100644 --- a/src/application/InventoryProjectionEvidence.ts +++ b/src/application/InventoryProjectionEvidence.ts @@ -3,8 +3,8 @@ import { z } from "zod"; import { AnalysisInputError, AnalysisProtocolError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { createEvidence, type Evidence, diff --git a/src/application/JavaScriptApplicationService.ts b/src/application/JavaScriptApplicationService.ts index fb71bce1b..8e51a6d0f 100644 --- a/src/application/JavaScriptApplicationService.ts +++ b/src/application/JavaScriptApplicationService.ts @@ -8,9 +8,9 @@ import { import { AnalysisInputError, AnalysisProtocolError, - ArtifactOperationError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { ArtifactOperationError } from "../domain/artifactOperationError.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import { projectInputIssues } from "../domain/inputIssueProjection.js"; import { err, ok, type Result } from "../domain/result.js"; diff --git a/src/application/JavaScriptApplicationWorkflowService.ts b/src/application/JavaScriptApplicationWorkflowService.ts index 6a48d9d10..d01a2497c 100644 --- a/src/application/JavaScriptApplicationWorkflowService.ts +++ b/src/application/JavaScriptApplicationWorkflowService.ts @@ -3,8 +3,8 @@ import { z } from "zod"; import { AnalysisInputError, AnalysisProtocolError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import { projectInputIssues } from "../domain/inputIssueProjection.js"; import { compareJavaScriptApplicationVersions } from "../domain/javascriptApplicationVersionComparison.js"; diff --git a/src/application/JavaScriptRuntimeObservationPort.ts b/src/application/JavaScriptRuntimeObservationPort.ts index 7bb3cfec2..5772cbce0 100644 --- a/src/application/JavaScriptRuntimeObservationPort.ts +++ b/src/application/JavaScriptRuntimeObservationPort.ts @@ -5,7 +5,7 @@ import type { ListJavaScriptRuntimeTargetsInput, ObserveJavaScriptRuntimeInput, } from "../domain/javascriptRuntimeObservation.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { Result } from "../domain/result.js"; /** Provider-neutral boundary for passive Node/Electron Inspector observation. */ diff --git a/src/application/JavaScriptRuntimeObservationService.ts b/src/application/JavaScriptRuntimeObservationService.ts index b3d991f44..486a366a8 100644 --- a/src/application/JavaScriptRuntimeObservationService.ts +++ b/src/application/JavaScriptRuntimeObservationService.ts @@ -2,10 +2,8 @@ import type { ExecutionOptions } from "./AnalysisProvider.js"; import type { JavaScriptRuntimeObservationPort } from "./JavaScriptRuntimeObservationPort.js"; import { createJavaScriptRuntimeObservationEvidence } from "./JavaScriptRuntimeObservationEvidence.js"; import type { Evidence } from "../domain/evidence.js"; -import { - AnalysisCapabilityUnavailableError, - type AnalysisError, -} from "../domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { ListJavaScriptRuntimeTargetsInput, ObserveJavaScriptRuntimeInput, diff --git a/src/application/JavaScriptRuntimeReconciliationService.ts b/src/application/JavaScriptRuntimeReconciliationService.ts index 5af941acb..72e5e5992 100644 --- a/src/application/JavaScriptRuntimeReconciliationService.ts +++ b/src/application/JavaScriptRuntimeReconciliationService.ts @@ -4,8 +4,8 @@ import { z } from "zod"; import { AnalysisInputError, AnalysisProtocolError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import { projectInputIssues } from "../domain/inputIssueProjection.js"; import { reconcileJavaScriptRuntime } from "../domain/javascriptRuntimeReconciliation.js"; diff --git a/src/application/JavaScriptSemanticTraceService.ts b/src/application/JavaScriptSemanticTraceService.ts index baa5f54ac..cfab1ddb4 100644 --- a/src/application/JavaScriptSemanticTraceService.ts +++ b/src/application/JavaScriptSemanticTraceService.ts @@ -3,8 +3,8 @@ import { z } from "zod"; import { AnalysisInputError, AnalysisProtocolError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { queryJavaScriptSemanticGraph } from "../domain/javascriptSemanticQuery.js"; diff --git a/src/application/JsonFiles.ts b/src/application/JsonFiles.ts index ca8ff6771..23a3514dd 100644 --- a/src/application/JsonFiles.ts +++ b/src/application/JsonFiles.ts @@ -3,7 +3,7 @@ import { basename, dirname, resolve } from "node:path"; import writeFileAtomic from "write-file-atomic"; -import { EvidenceFileError } from "../domain/errors.js"; +import { EvidenceFileError } from "../domain/evidenceErrors.js"; import { err, ok, type Result } from "../domain/result.js"; /** Read JSON data from a regular file at the caller-supplied path. */ diff --git a/src/application/LazyAnalysisProvider.test.ts b/src/application/LazyAnalysisProvider.test.ts index 36ee32fe9..0808ac1b0 100644 --- a/src/application/LazyAnalysisProvider.test.ts +++ b/src/application/LazyAnalysisProvider.test.ts @@ -3,7 +3,7 @@ import { expect, it } from "vitest"; import { parseBinaryTarget } from "./BinaryTargetResolver.js"; import type { AnalysisProvider, ProviderIdentity } from "./AnalysisProvider.js"; import { LazyAnalysisProvider } from "./LazyAnalysisProvider.js"; -import { AnalysisCancelledError } from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; import { err } from "../domain/result.js"; const identity: ProviderIdentity = { diff --git a/src/application/LazyAnalysisProvider.ts b/src/application/LazyAnalysisProvider.ts index 0d9426eb5..1cdc3b9c8 100644 --- a/src/application/LazyAnalysisProvider.ts +++ b/src/application/LazyAnalysisProvider.ts @@ -1,10 +1,8 @@ import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { - AnalysisCancelledError, - AnalysisError, - ProviderAdapterError, -} from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; +import { AnalysisError } from "../domain/analysisErrorBase.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; import { err } from "../domain/result.js"; import { ABORTED, waitForAbortable } from "./AbortablePromise.js"; import type { diff --git a/src/application/ManagedApplicationGraphService.ts b/src/application/ManagedApplicationGraphService.ts index 97de9a545..9bd42fe6a 100644 --- a/src/application/ManagedApplicationGraphService.ts +++ b/src/application/ManagedApplicationGraphService.ts @@ -3,8 +3,8 @@ import { z } from "zod"; import { AnalysisInputError, AnalysisProtocolError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { createEvidence, type Evidence } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { diff --git a/src/application/ManagedMemberComparisonService.ts b/src/application/ManagedMemberComparisonService.ts index 8933316e0..47426a909 100644 --- a/src/application/ManagedMemberComparisonService.ts +++ b/src/application/ManagedMemberComparisonService.ts @@ -12,9 +12,9 @@ import { import { AnalysisInputError, AnalysisProtocolError, - EvidenceIntegrityError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { createEvidence, type Evidence } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { parseBinaryTarget } from "./BinaryTargetResolver.js"; diff --git a/src/application/ManagedNativeVerificationService.ts b/src/application/ManagedNativeVerificationService.ts index c1b9cd6e0..63ddc799c 100644 --- a/src/application/ManagedNativeVerificationService.ts +++ b/src/application/ManagedNativeVerificationService.ts @@ -3,8 +3,8 @@ import { z } from "zod"; import { AnalysisInputError, AnalysisProtocolError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { createEvidence, type Evidence } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { diff --git a/src/application/ManagedReconstructionService.ts b/src/application/ManagedReconstructionService.ts index 6d6c48eed..e28527197 100644 --- a/src/application/ManagedReconstructionService.ts +++ b/src/application/ManagedReconstructionService.ts @@ -3,8 +3,8 @@ import { z } from "zod"; import { AnalysisInputError, AnalysisProtocolError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { createEvidence, type Evidence } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { diff --git a/src/application/NativeCallRoutes.test.ts b/src/application/NativeCallRoutes.test.ts index daf68a1e4..d23921873 100644 --- a/src/application/NativeCallRoutes.test.ts +++ b/src/application/NativeCallRoutes.test.ts @@ -4,7 +4,7 @@ import { createAnalysisExecution } from "./AnalysisProvider.js"; import { ghidraReferenceEdge } from "../domain/ghidraValues.fixture.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { err, ok } from "../domain/result.js"; -import { AnalysisCancelledError } from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; const provider = { id: "fixture", name: "Fixture", version: "1" }; describe("typed native call routes", () => { diff --git a/src/application/NativeCallRoutes.ts b/src/application/NativeCallRoutes.ts index 4ff1e9427..8ac1bcd4f 100644 --- a/src/application/NativeCallRoutes.ts +++ b/src/application/NativeCallRoutes.ts @@ -5,7 +5,7 @@ import { referenceKindSchema, } from "../domain/hopperValues.js"; import { err, ok } from "../domain/result.js"; -import { AnalysisOutputError } from "../domain/errors.js"; +import { AnalysisOutputError } from "../domain/analysisErrorCore.js"; const referencesSchema = z.object({ reference_kinds_available: z.boolean().optional(), diff --git a/src/application/NativeDispatchMetadataInspection.ts b/src/application/NativeDispatchMetadataInspection.ts index a4340ebb8..8f2ea0dbd 100644 --- a/src/application/NativeDispatchMetadataInspection.ts +++ b/src/application/NativeDispatchMetadataInspection.ts @@ -3,7 +3,7 @@ import { nativeDispatchMetadataResultSchema, inspectNativeDispatchMetadata, } from "../domain/objcSwiftMetadata.js"; -import { AnalysisOutputError } from "../domain/errors.js"; +import { AnalysisOutputError } from "../domain/analysisErrorCore.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { err, ok } from "../domain/result.js"; import type { AnalysisOperationPort } from "./AnalysisProvider.js"; diff --git a/src/application/NativeUiActionTrace.ts b/src/application/NativeUiActionTrace.ts index d59af5b5c..f94051a12 100644 --- a/src/application/NativeUiActionTrace.ts +++ b/src/application/NativeUiActionTrace.ts @@ -15,7 +15,8 @@ import { inspectNativeDispatch } from "./NativeDispatchMetadataInspection.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { readNativeCallRoutes } from "./NativeCallRoutes.js"; import { err, ok } from "../domain/result.js"; -import { AnalysisOutputError, projectAnalysisError } from "../domain/errors.js"; +import { AnalysisOutputError } from "../domain/analysisErrorCore.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; type Input = z.output; /** Build a UI-to-code trace from the active app and selected native provider. */ diff --git a/src/application/NativeValueTrace.test.ts b/src/application/NativeValueTrace.test.ts index 3c403a359..2d4d0e08a 100644 --- a/src/application/NativeValueTrace.test.ts +++ b/src/application/NativeValueTrace.test.ts @@ -7,7 +7,7 @@ import { import { ghidraFunctionDossier } from "../domain/ghidraValues.fixture.js"; import { functionDossierSchema } from "../domain/hopperValues.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; -import { AnalysisCancelledError } from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; import { ok, err } from "../domain/result.js"; const subject = { diff --git a/src/application/NativeValueTrace.ts b/src/application/NativeValueTrace.ts index 39163e221..9da1db7ce 100644 --- a/src/application/NativeValueTrace.ts +++ b/src/application/NativeValueTrace.ts @@ -8,7 +8,7 @@ import { createEvidence } from "../domain/evidence.js"; import { AnalysisCancelledError, AnalysisOutputError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; import { err, ok } from "../domain/result.js"; import type { AnalysisOperationPort } from "./AnalysisProvider.js"; import type { EnhancedResult } from "./EnhancedToolTypes.js"; diff --git a/src/application/ProcessCaptureError.test.ts b/src/application/ProcessCaptureError.test.ts index 0156484c1..3dedc4260 100644 --- a/src/application/ProcessCaptureError.test.ts +++ b/src/application/ProcessCaptureError.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { projectAnalysisError } from "../domain/errors.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; import { ProcessCaptureError, processCaptureCancelled, diff --git a/src/application/ProcessCaptureError.ts b/src/application/ProcessCaptureError.ts index bb1f32144..da57679ab 100644 --- a/src/application/ProcessCaptureError.ts +++ b/src/application/ProcessCaptureError.ts @@ -1,4 +1,4 @@ -import { AnalysisError } from "../domain/errors.js"; +import { AnalysisError } from "../domain/analysisErrorBase.js"; interface ProcessCaptureErrorOptions extends ErrorOptions { readonly userMessage?: string; diff --git a/src/application/ProcessCli.ts b/src/application/ProcessCli.ts index 4f3ebbe94..eb5af8c80 100644 --- a/src/application/ProcessCli.ts +++ b/src/application/ProcessCli.ts @@ -1,10 +1,8 @@ import { readFile } from "node:fs/promises"; -import { - AnalysisError, - AnalysisInputError, - projectAnalysisError, -} from "../domain/errors.js"; +import { AnalysisError } from "../domain/analysisErrorBase.js"; +import { AnalysisInputError } from "../domain/analysisErrorCore.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; import { createEvidence, parseEvidence } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { projectInputIssues } from "../domain/inputIssueProjection.js"; diff --git a/src/application/ProcessHarness.test.ts b/src/application/ProcessHarness.test.ts index fe96c8194..0f62497c1 100644 --- a/src/application/ProcessHarness.test.ts +++ b/src/application/ProcessHarness.test.ts @@ -1,6 +1,6 @@ import { expect, it } from "vitest"; import { processScenarioSchema } from "../domain/processScenario.js"; -import { AnalysisCapabilityUnavailableError } from "../domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; import { captureProcessScenario } from "./ProcessHarness.js"; import { settleProcessCaptureJournal } from "./ProcessCaptureLifecycle.js"; import { processCaptureSchema } from "../domain/processCapture.js"; diff --git a/src/application/ProcessHarness.ts b/src/application/ProcessHarness.ts index b162c918d..4ea9c8279 100644 --- a/src/application/ProcessHarness.ts +++ b/src/application/ProcessHarness.ts @@ -11,10 +11,8 @@ import type { } from "../domain/processCapture.js"; import { parseProcessCapture } from "../domain/processCapture.js"; import { err, ok, type Result } from "../domain/result.js"; -import { - AnalysisCapabilityUnavailableError, - type AnalysisError, -} from "../domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { ProcessCaptureError, processCaptureCancelled, diff --git a/src/application/ReconstructionCoverageService.ts b/src/application/ReconstructionCoverageService.ts index f4ac172d5..5706b008e 100644 --- a/src/application/ReconstructionCoverageService.ts +++ b/src/application/ReconstructionCoverageService.ts @@ -1,6 +1,7 @@ import { z } from "zod"; -import { AnalysisInputError, type AnalysisError } from "../domain/errors.js"; +import { AnalysisInputError } from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { evaluateReconstructionClosure, reconstructionCoverageDataSchema, diff --git a/src/application/ReconstructionObligationLedgerService.ts b/src/application/ReconstructionObligationLedgerService.ts index 64f667ab6..2b4c9a50d 100644 --- a/src/application/ReconstructionObligationLedgerService.ts +++ b/src/application/ReconstructionObligationLedgerService.ts @@ -3,8 +3,8 @@ import { z } from "zod"; import { AnalysisInputError, AnalysisProtocolError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { createEvidence, type Evidence } from "../domain/evidence.js"; import { jsonObjectSchema, jsonValueSchema } from "../domain/jsonValue.js"; import { diff --git a/src/application/SessionProviderRouter.ts b/src/application/SessionProviderRouter.ts index fbfd7fd65..936bb5438 100644 --- a/src/application/SessionProviderRouter.ts +++ b/src/application/SessionProviderRouter.ts @@ -7,10 +7,10 @@ import type { BinaryTarget } from "../domain/binaryTarget.js"; import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, - ProviderAdapterError, - ProviderSelectionError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; +import { ProviderSelectionError } from "../domain/providerSelectionError.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { jsonObjectSchema, type JsonValue } from "../domain/jsonValue.js"; import { err, ok, type Result } from "../domain/result.js"; import type { diff --git a/src/artifacts/ArtifactProvider.ts b/src/artifacts/ArtifactProvider.ts index ad4a458fd..e095d0dfe 100644 --- a/src/artifacts/ArtifactProvider.ts +++ b/src/artifacts/ArtifactProvider.ts @@ -20,11 +20,9 @@ import { type ArtifactAnalysisOperation, } from "../contracts/artifactToolContracts.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { - AnalysisCapabilityUnavailableError, - ArtifactOperationError, - type AnalysisError, -} from "../domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; +import { ArtifactOperationError } from "../domain/artifactOperationError.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { interfaceBuilderLimitsSchema } from "../domain/interfaceBuilderGraph.js"; import { err, ok } from "../domain/result.js"; diff --git a/src/browser/CdpAuthorizedMainFrame.ts b/src/browser/CdpAuthorizedMainFrame.ts index 33e0adc6c..dc869f56c 100644 --- a/src/browser/CdpAuthorizedMainFrame.ts +++ b/src/browser/CdpAuthorizedMainFrame.ts @@ -1,5 +1,5 @@ import type { BrowserObservationOperation } from "../domain/browserObservationErrors.js"; -import { BrowserObservationError } from "../domain/errors.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; import type { CdpConnection } from "./CdpConnection.js"; import { mainFrameUrl } from "./CdpCaptureDocuments.js"; import { diff --git a/src/browser/CdpBrowserProvider.ts b/src/browser/CdpBrowserProvider.ts index c8129d978..de37f524e 100644 --- a/src/browser/CdpBrowserProvider.ts +++ b/src/browser/CdpBrowserProvider.ts @@ -40,12 +40,10 @@ import { type WebScreenshot, type WebScreenshotDiff, } from "../domain/webScreenshot.js"; -import { - AnalysisError, - BrowserObservationError, - ProviderAdapterError, - type BrowserObservationOperation, -} from "../domain/errors.js"; +import { AnalysisError } from "../domain/analysisErrorBase.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; +import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { err, ok, type Result } from "../domain/result.js"; import { discoverCdpEndpoint, diff --git a/src/browser/CdpCaptureValues.ts b/src/browser/CdpCaptureValues.ts index 3d0e7c5d2..e0cb122fe 100644 --- a/src/browser/CdpCaptureValues.ts +++ b/src/browser/CdpCaptureValues.ts @@ -1,8 +1,6 @@ -import { - AnalysisCancelledError, - BrowserObservationError, - type BrowserObservationOperation, -} from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; +import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { sanitizeBrowserUrl } from "../domain/browserObservation.js"; import { createWebTextArtifact } from "../domain/webContentArtifact.js"; diff --git a/src/browser/CdpConnection.ts b/src/browser/CdpConnection.ts index 3ed527513..5a363c48b 100644 --- a/src/browser/CdpConnection.ts +++ b/src/browser/CdpConnection.ts @@ -1,11 +1,9 @@ import WebSocket, { type RawData } from "ws"; -import { - AnalysisCancelledError, - AnalysisError, - BrowserObservationError, - type BrowserObservationOperation, -} from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; +import { AnalysisError } from "../domain/analysisErrorBase.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; +import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { safeParseJson } from "../domain/safeJson.js"; export interface CdpEvent { diff --git a/src/browser/CdpElectronInspection.ts b/src/browser/CdpElectronInspection.ts index ab50e5918..9851909e3 100644 --- a/src/browser/CdpElectronInspection.ts +++ b/src/browser/CdpElectronInspection.ts @@ -4,7 +4,7 @@ import type { ElectronPageInspection, InspectElectronPageInput, } from "../domain/electronObservation.js"; -import { BrowserObservationError } from "../domain/errors.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; import type { CdpConnection, CdpEvent } from "./CdpConnection.js"; import type { CdpEndpointDiscovery, CdpEndpointTarget } from "./CdpEndpoint.js"; import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js"; diff --git a/src/browser/CdpElectronProvider.ts b/src/browser/CdpElectronProvider.ts index efc8beaec..088bf29a3 100644 --- a/src/browser/CdpElectronProvider.ts +++ b/src/browser/CdpElectronProvider.ts @@ -11,12 +11,10 @@ import { type InspectElectronPageInput, type ListElectronTargetsInput, } from "../domain/electronObservation.js"; -import { - AnalysisError, - BrowserObservationError, - ProviderAdapterError, - type BrowserObservationOperation, -} from "../domain/errors.js"; +import { AnalysisError } from "../domain/analysisErrorBase.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; +import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { err, ok, type Result } from "../domain/result.js"; import { discoverCdpEndpoint, diff --git a/src/browser/CdpEndpoint.ts b/src/browser/CdpEndpoint.ts index a208f9ba7..b95711c32 100644 --- a/src/browser/CdpEndpoint.ts +++ b/src/browser/CdpEndpoint.ts @@ -2,12 +2,10 @@ import { request } from "node:http"; import { z } from "zod"; -import { - AnalysisCancelledError, - AnalysisError, - BrowserObservationError, - type BrowserObservationOperation, -} from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; +import { AnalysisError } from "../domain/analysisErrorBase.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; +import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { sanitizeBrowserUrl } from "../domain/browserObservation.js"; import { safeParseJson } from "../domain/safeJson.js"; diff --git a/src/browser/CdpObservationSession.ts b/src/browser/CdpObservationSession.ts index b98103d49..0ba238912 100644 --- a/src/browser/CdpObservationSession.ts +++ b/src/browser/CdpObservationSession.ts @@ -3,10 +3,8 @@ import type { ObserveWebSessionInput, WebObservationSession, } from "../domain/browserSession.js"; -import { - AnalysisCancelledError, - BrowserObservationError, -} from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; import type { CdpEndpointDiscovery, CdpEndpointTarget } from "./CdpEndpoint.js"; import { CdpConnection, type CdpEvent } from "./CdpConnection.js"; import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js"; diff --git a/src/browser/CdpOptionalCommand.ts b/src/browser/CdpOptionalCommand.ts index 240c3d338..b02b2f78f 100644 --- a/src/browser/CdpOptionalCommand.ts +++ b/src/browser/CdpOptionalCommand.ts @@ -1,4 +1,4 @@ -import { BrowserObservationError } from "../domain/errors.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; import { CdpConnection } from "./CdpConnection.js"; /** Execute an optional CDP method while preserving transport and cancellation failures. */ diff --git a/src/browser/CdpPageCapture.ts b/src/browser/CdpPageCapture.ts index 2789fbde6..e1914b55a 100644 --- a/src/browser/CdpPageCapture.ts +++ b/src/browser/CdpPageCapture.ts @@ -3,10 +3,8 @@ import type { WebPageInspection, } from "../domain/browserObservation.js"; import type { ProgressReporter } from "../application/ProgressReporter.js"; -import { - BrowserObservationError, - type BrowserObservationOperation, -} from "../domain/errors.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; +import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { stableWebResources } from "../domain/webInventory.js"; import type { CdpEndpointDiscovery, CdpEndpointTarget } from "./CdpEndpoint.js"; import { CdpConnection } from "./CdpConnection.js"; diff --git a/src/browser/CdpScreenshot.ts b/src/browser/CdpScreenshot.ts index 54c3278da..19b5ad91e 100644 --- a/src/browser/CdpScreenshot.ts +++ b/src/browser/CdpScreenshot.ts @@ -4,7 +4,7 @@ import type { WebScreenshot, } from "../domain/webScreenshot.js"; import { createWebScreenshotArtifact } from "../domain/webScreenshot.js"; -import { BrowserObservationError } from "../domain/errors.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; import { isMainFrameNavigation } from "./CdpCaptureEventHelpers.js"; import type { CdpEndpointDiscovery, CdpEndpointTarget } from "./CdpEndpoint.js"; import type { CdpConnection, CdpEvent } from "./CdpConnection.js"; diff --git a/src/browser/CdpTargetSession.ts b/src/browser/CdpTargetSession.ts index 71542f41c..9983f3765 100644 --- a/src/browser/CdpTargetSession.ts +++ b/src/browser/CdpTargetSession.ts @@ -1,7 +1,5 @@ -import { - BrowserObservationError, - type BrowserObservationOperation, -} from "../domain/errors.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; +import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { CdpConnection } from "./CdpConnection.js"; import { cdpTargetWebSocket, diff --git a/src/browser/CdpWebMcpDiscovery.ts b/src/browser/CdpWebMcpDiscovery.ts index 6d3dd686b..ddbc6fabf 100644 --- a/src/browser/CdpWebMcpDiscovery.ts +++ b/src/browser/CdpWebMcpDiscovery.ts @@ -9,7 +9,7 @@ import { inferJsonShape } from "../domain/jsonShape.js"; import type { CdpEndpointDiscovery, CdpEndpointTarget } from "./CdpEndpoint.js"; import type { CdpConnection, CdpEvent } from "./CdpConnection.js"; import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js"; -import { BrowserObservationError } from "../domain/errors.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; import { allowedSanitizedUrl, delayWithCancellation, diff --git a/src/browser/PlaywrightBrowserScenarioProvider.ts b/src/browser/PlaywrightBrowserScenarioProvider.ts index 71b602698..909210f3e 100644 --- a/src/browser/PlaywrightBrowserScenarioProvider.ts +++ b/src/browser/PlaywrightBrowserScenarioProvider.ts @@ -19,11 +19,9 @@ import { type BrowserScenarioStepOutcome, type BrowserStepArtifacts, } from "../domain/browserScenarioCapture.js"; -import { - AnalysisError, - BrowserObservationError, - ProviderAdapterError, -} from "../domain/errors.js"; +import { AnalysisError } from "../domain/analysisErrorBase.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; import { err, ok, type Result } from "../domain/result.js"; import type { BrowserScenarioSessionFactory, diff --git a/src/browser/PlaywrightElectronActiveActions.ts b/src/browser/PlaywrightElectronActiveActions.ts index 86ab89dfc..7f4a953ff 100644 --- a/src/browser/PlaywrightElectronActiveActions.ts +++ b/src/browser/PlaywrightElectronActiveActions.ts @@ -2,7 +2,7 @@ import type { ElectronApplication, Page } from "playwright-core"; import { z } from "zod"; import type { ExecutionOptions } from "../application/AnalysisProvider.js"; -import { BrowserObservationError } from "../domain/errors.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; import type { ElectronActiveObservationInput, ElectronActiveObservationResult, diff --git a/src/browser/PlaywrightElectronActiveProvider.ts b/src/browser/PlaywrightElectronActiveProvider.ts index ab20ae7a0..88850ee23 100644 --- a/src/browser/PlaywrightElectronActiveProvider.ts +++ b/src/browser/PlaywrightElectronActiveProvider.ts @@ -15,11 +15,9 @@ import { type ElectronActiveObservationInput, type ElectronActiveObservationResult, } from "../domain/electronActiveObservation.js"; -import { - AnalysisError, - BrowserObservationError, - ProviderAdapterError, -} from "../domain/errors.js"; +import { AnalysisError } from "../domain/analysisErrorBase.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; import { err, ok, type Result } from "../domain/result.js"; import { cleanupOwnedProcessGroup, diff --git a/src/browser/PlaywrightExecutionBoundary.test.ts b/src/browser/PlaywrightExecutionBoundary.test.ts index f9cfe9c5d..323b4506c 100644 --- a/src/browser/PlaywrightExecutionBoundary.test.ts +++ b/src/browser/PlaywrightExecutionBoundary.test.ts @@ -4,7 +4,7 @@ import { withPlaywrightExecutionBoundary } from "./PlaywrightExecutionBoundary.j import { AnalysisCancelledError, AnalysisTimeoutError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; describe("withPlaywrightExecutionBoundary", () => { afterEach(() => vi.useRealTimers()); diff --git a/src/browser/PlaywrightExecutionBoundary.ts b/src/browser/PlaywrightExecutionBoundary.ts index 4adde394a..9fd21fcf3 100644 --- a/src/browser/PlaywrightExecutionBoundary.ts +++ b/src/browser/PlaywrightExecutionBoundary.ts @@ -1,7 +1,7 @@ import { AnalysisCancelledError, AnalysisTimeoutError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; const OPERATION = "capture_browser_scenario" as const; diff --git a/src/browser/PlaywrightScenarioBrowser.ts b/src/browser/PlaywrightScenarioBrowser.ts index 7719e1d00..b89d99e99 100644 --- a/src/browser/PlaywrightScenarioBrowser.ts +++ b/src/browser/PlaywrightScenarioBrowser.ts @@ -10,7 +10,7 @@ import { } from "playwright-core"; import type { BrowserScenario } from "../domain/browserScenario.js"; -import { BrowserObservationError } from "../domain/errors.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; import { withPlaywrightExecutionBoundary } from "./PlaywrightExecutionBoundary.js"; const OPERATION = "capture_browser_scenario" as const; diff --git a/src/browser/PlaywrightScenarioSession.ts b/src/browser/PlaywrightScenarioSession.ts index a87c09a47..8ca64e036 100644 --- a/src/browser/PlaywrightScenarioSession.ts +++ b/src/browser/PlaywrightScenarioSession.ts @@ -4,7 +4,7 @@ import type { BrowserScenario, BrowserScenarioAction, } from "../domain/browserScenario.js"; -import { BrowserObservationError } from "../domain/errors.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; import type { BrowserScenarioSessionFactory, BrowserScenarioSessionPort, diff --git a/src/browser/V8InspectorEndpoint.ts b/src/browser/V8InspectorEndpoint.ts index 42dc209da..481cc1594 100644 --- a/src/browser/V8InspectorEndpoint.ts +++ b/src/browser/V8InspectorEndpoint.ts @@ -4,10 +4,8 @@ import type { JavaScriptRuntimeTargetList, JavaScriptRuntimeTargetLocation, } from "../domain/javascriptRuntimeObservation.js"; -import { - BrowserObservationError, - type BrowserObservationOperation, -} from "../domain/errors.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; +import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { parseCdpEndpointValue, readCdpJson } from "./CdpEndpoint.js"; const versionSchema = z diff --git a/src/browser/V8InspectorProvider.ts b/src/browser/V8InspectorProvider.ts index d846f9622..a6f957edf 100644 --- a/src/browser/V8InspectorProvider.ts +++ b/src/browser/V8InspectorProvider.ts @@ -11,12 +11,10 @@ import { type ListJavaScriptRuntimeTargetsInput, type ObserveJavaScriptRuntimeInput, } from "../domain/javascriptRuntimeObservation.js"; -import { - AnalysisError, - BrowserObservationError, - ProviderAdapterError, - type BrowserObservationOperation, -} from "../domain/errors.js"; +import { AnalysisError } from "../domain/analysisErrorBase.js"; +import { BrowserObservationError } from "../domain/browserObservationError.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; +import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { err, ok, type Result } from "../domain/result.js"; import { numberValue, diff --git a/src/cli/applicationCommands.ts b/src/cli/applicationCommands.ts index cc11b458d..68aed7911 100644 --- a/src/cli/applicationCommands.ts +++ b/src/cli/applicationCommands.ts @@ -15,11 +15,9 @@ import { buildReconstructionObligationLedgerEvidenceValidated } from "../applica import { CLI_COMMANDS } from "../cliCommandNames.js"; import { parseCliJsonInput } from "../cliJsonInput.js"; import { logCliCommand } from "../cliLogging.js"; -import { - AnalysisInputError, - projectAnalysisError, - type AnalysisError, -} from "../domain/errors.js"; +import { AnalysisInputError } from "../domain/analysisErrorCore.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js"; import type { Logger } from "../logger.js"; import { traceApplicationFeatureInputSchema } from "../domain/javascriptFeatureTraceSchemas.js"; diff --git a/src/cli/browserAdvancedCommands.ts b/src/cli/browserAdvancedCommands.ts index b69923086..2d299503f 100644 --- a/src/cli/browserAdvancedCommands.ts +++ b/src/cli/browserAdvancedCommands.ts @@ -10,7 +10,7 @@ import { } from "../application/BrowserObservationService.js"; import { CdpBrowserProvider } from "../browser/CdpBrowserProvider.js"; import { logCliCommand } from "../cliLogging.js"; -import { AnalysisInputError } from "../domain/errors.js"; +import { AnalysisInputError } from "../domain/analysisErrorCore.js"; import { browserCaptureComparisonInputSchema } from "../domain/browserCaptureComparison.js"; import { discoverWebMcpToolsInputSchema } from "../domain/webMcpDiscovery.js"; import { diff --git a/src/cli/browserCommands.ts b/src/cli/browserCommands.ts index eb7b01827..e06e0498d 100644 --- a/src/cli/browserCommands.ts +++ b/src/cli/browserCommands.ts @@ -14,7 +14,7 @@ import { } from "../domain/browserObservation.js"; import { analyzeWebBundleInputSchema } from "../domain/webBundleAnalysis.js"; import { observeWebSessionInputSchema } from "../domain/browserSession.js"; -import { AnalysisInputError } from "../domain/errors.js"; +import { AnalysisInputError } from "../domain/analysisErrorCore.js"; import type { Logger } from "../logger.js"; import { CLI_COMMANDS } from "../cliCommandNames.js"; import { diff --git a/src/cli/electronCommands.ts b/src/cli/electronCommands.ts index 277246750..899cd0b9a 100644 --- a/src/cli/electronCommands.ts +++ b/src/cli/electronCommands.ts @@ -14,7 +14,8 @@ import { listElectronTargetsInputSchema, } from "../domain/electronObservation.js"; import { electronActiveObservationInputSchema } from "../domain/electronActiveObservation.js"; -import { AnalysisInputError, projectAnalysisError } from "../domain/errors.js"; +import { AnalysisInputError } from "../domain/analysisErrorCore.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; import type { JsonValue } from "../domain/jsonValue.js"; import type { Logger } from "../logger.js"; import { CLI_COMMANDS } from "../cliCommandNames.js"; diff --git a/src/cli/javascriptApplicationAnalysis.ts b/src/cli/javascriptApplicationAnalysis.ts index baf861db6..30a680e64 100644 --- a/src/cli/javascriptApplicationAnalysis.ts +++ b/src/cli/javascriptApplicationAnalysis.ts @@ -1,5 +1,5 @@ import { analyzeJavaScriptApplication } from "../application/JavaScriptApplicationService.js"; -import { projectAnalysisError } from "../domain/errors.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; import type { JsonValue } from "../domain/jsonValue.js"; /** Execute the shared one-shot CLI boundary for static JavaScript analysis. */ diff --git a/src/cli/managedCommands.ts b/src/cli/managedCommands.ts index ca6791d39..f1c65b107 100644 --- a/src/cli/managedCommands.ts +++ b/src/cli/managedCommands.ts @@ -5,7 +5,7 @@ import { verifyManagedNativeBoundariesEvidence } from "../application/ManagedNat import { importManagedReconstructionEvidence } from "../application/ManagedReconstructionService.js"; import { runProviderAnalysis } from "../application/DirectAnalysis.js"; import { parseCliJsonInput } from "../cliJsonInput.js"; -import { projectAnalysisError } from "../domain/errors.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; import { CLI_COMMANDS } from "../cliCommandNames.js"; import { logCliCommand } from "../cliLogging.js"; import type { Logger } from "../logger.js"; diff --git a/src/cli/managedProjectGraphCommand.ts b/src/cli/managedProjectGraphCommand.ts index 8c89794eb..d41d99d99 100644 --- a/src/cli/managedProjectGraphCommand.ts +++ b/src/cli/managedProjectGraphCommand.ts @@ -4,7 +4,7 @@ import { projectManagedApplicationGraphEvidence } from "../application/ManagedAp import { CLI_COMMANDS } from "../cliCommandNames.js"; import { parseCliJsonInput } from "../cliJsonInput.js"; import { logCliCommand } from "../cliLogging.js"; -import { projectAnalysisError } from "../domain/errors.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; import type { Logger } from "../logger.js"; import type { CliInstance } from "./types.js"; diff --git a/src/cli/utilityCommands.ts b/src/cli/utilityCommands.ts index 372a97c98..d5ee22407 100644 --- a/src/cli/utilityCommands.ts +++ b/src/cli/utilityCommands.ts @@ -9,7 +9,7 @@ import { import { importReferenceSource } from "../application/ReferenceSourceImport.js"; import { projectReferenceSourceImportError } from "../application/ReferenceSourceImportTypes.js"; import { parseConfig } from "../config.js"; -import { projectAnalysisError } from "../domain/errors.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; import { PRODUCT_IDENTITY } from "../identity.js"; import { logCliCommand } from "../cliLogging.js"; import { CLI_COMMANDS } from "../cliCommandNames.js"; diff --git a/src/cliBrowserContext.ts b/src/cliBrowserContext.ts index b9baa895f..85bbe155d 100644 --- a/src/cliBrowserContext.ts +++ b/src/cliBrowserContext.ts @@ -1,5 +1,5 @@ import { CdpBrowserProvider } from "./browser/CdpBrowserProvider.js"; -import { projectAnalysisError } from "./domain/errors.js"; +import { projectAnalysisError } from "./domain/analysisErrorProjection.js"; import type { JsonValue } from "./domain/jsonValue.js"; /** Build the passive browser provider; scope is supplied on each request. */ diff --git a/src/cliBrowserScenarioCommands.ts b/src/cliBrowserScenarioCommands.ts index 5ac21842d..fbf11ae5c 100644 --- a/src/cliBrowserScenarioCommands.ts +++ b/src/cliBrowserScenarioCommands.ts @@ -6,7 +6,8 @@ import { PlaywrightBrowserScenarioProvider } from "./browser/PlaywrightBrowserSc import { CLI_COMMANDS } from "./cliCommandNames.js"; import { parseCliJsonInput } from "./cliJsonInput.js"; import { logCliCommand } from "./cliLogging.js"; -import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js"; +import { AnalysisInputError } from "./domain/analysisErrorCore.js"; +import { projectAnalysisError } from "./domain/analysisErrorProjection.js"; import { browserScenarioSchema } from "./domain/browserScenario.js"; import type { JsonValue } from "./domain/jsonValue.js"; import type { Logger } from "./logger.js"; diff --git a/src/cliEvidenceCommands.ts b/src/cliEvidenceCommands.ts index 75557969d..acf8658a2 100644 --- a/src/cliEvidenceCommands.ts +++ b/src/cliEvidenceCommands.ts @@ -9,7 +9,8 @@ import { logCliCommand } from "./cliLogging.js"; import type { Logger } from "./logger.js"; import { CLI_COMMANDS } from "./cliCommandNames.js"; import type { JsonValue } from "./domain/jsonValue.js"; -import { projectAnalysisError, type AnalysisError } from "./domain/errors.js"; +import { projectAnalysisError } from "./domain/analysisErrorProjection.js"; +import { type AnalysisError } from "./domain/analysisErrorBase.js"; /** Register caller-path Evidence commands. */ export const registerEvidenceCommands = ( diff --git a/src/cliJavaScriptRuntimeCommands.ts b/src/cliJavaScriptRuntimeCommands.ts index 42ceb8873..342fc751b 100644 --- a/src/cliJavaScriptRuntimeCommands.ts +++ b/src/cliJavaScriptRuntimeCommands.ts @@ -12,7 +12,8 @@ import { listJavaScriptRuntimeTargetsInputSchema, observeJavaScriptRuntimeInputSchema, } from "./domain/javascriptRuntimeObservation.js"; -import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js"; +import { AnalysisInputError } from "./domain/analysisErrorCore.js"; +import { projectAnalysisError } from "./domain/analysisErrorProjection.js"; import type { JsonValue } from "./domain/jsonValue.js"; import type { Logger } from "./logger.js"; diff --git a/src/cliJsonInput.ts b/src/cliJsonInput.ts index 3b89cfc2a..370a2f1b0 100644 --- a/src/cliJsonInput.ts +++ b/src/cliJsonInput.ts @@ -1,6 +1,7 @@ import { readFile } from "node:fs/promises"; -import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js"; +import { AnalysisInputError } from "./domain/analysisErrorCore.js"; +import { projectAnalysisError } from "./domain/analysisErrorProjection.js"; import type { JsonValue } from "./domain/jsonValue.js"; import { safeParseJson } from "./domain/safeJson.js"; diff --git a/src/cliLogging.test.ts b/src/cliLogging.test.ts index f8b3a1dbc..c02cb2041 100644 --- a/src/cliLogging.test.ts +++ b/src/cliLogging.test.ts @@ -1,10 +1,8 @@ import { describe, expect, it } from "vitest"; -import { - ArtifactOperationError, - ConfigurationError, - projectAnalysisError, -} from "./domain/errors.js"; +import { ArtifactOperationError } from "./domain/artifactOperationError.js"; +import { ConfigurationError } from "./domain/configurationErrors.js"; +import { projectAnalysisError } from "./domain/analysisErrorProjection.js"; import { isCliOperationFailure, logCliCommand } from "./cliLogging.js"; import { silentLogger } from "./logger.js"; diff --git a/src/cliLogging.ts b/src/cliLogging.ts index f7e2279bc..6dbb24039 100644 --- a/src/cliLogging.ts +++ b/src/cliLogging.ts @@ -2,11 +2,11 @@ import { analysisCliErrorEnvelopeSchema, analysisErrorProjectionSchema, } from "./contracts/errorSchemas.js"; +import { AnalysisError } from "./domain/analysisErrorBase.js"; import { - AnalysisError, projectAnalysisError, type AnalysisErrorProjection, -} from "./domain/errors.js"; +} from "./domain/analysisErrorProjection.js"; import type { Logger } from "./logger.js"; const isRecord = (value: unknown): value is Readonly> => diff --git a/src/config/environment.ts b/src/config/environment.ts index fb73dedb6..0207b7e4c 100644 --- a/src/config/environment.ts +++ b/src/config/environment.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { isAbsolute } from "node:path"; -import { ConfigurationError } from "../domain/errors.js"; +import { ConfigurationError } from "../domain/configurationErrors.js"; import { err, ok, type Result } from "../domain/result.js"; import { analysisProviderSelectorSchema } from "../contracts/providerSelection.js"; diff --git a/src/config/parseConfig.ts b/src/config/parseConfig.ts index 502354917..d0334a619 100644 --- a/src/config/parseConfig.ts +++ b/src/config/parseConfig.ts @@ -1,4 +1,4 @@ -import { ConfigurationError } from "../domain/errors.js"; +import { ConfigurationError } from "../domain/configurationErrors.js"; import { ok, type Result } from "../domain/result.js"; import { parseEnvironment } from "./environment.js"; import { parseStringArray, parseLoaderArgs } from "./parsers.js"; diff --git a/src/config/parsers.ts b/src/config/parsers.ts index 64f373422..41637d513 100644 --- a/src/config/parsers.ts +++ b/src/config/parsers.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -import { ConfigurationError } from "../domain/errors.js"; +import { ConfigurationError } from "../domain/configurationErrors.js"; import { err, ok, type Result } from "../domain/result.js"; export const parseStringArray = ( diff --git a/src/domain/analysisErrorBase.ts b/src/domain/analysisErrorBase.ts new file mode 100644 index 000000000..2c423fc3d --- /dev/null +++ b/src/domain/analysisErrorBase.ts @@ -0,0 +1,38 @@ +/** Stable tags exposed by safe analysis-error projections. */ +const ANALYSIS_ERROR_TAGS = [ + "AnalysisProtocolError", + "AnalysisInputError", + "AnalysisOutputError", + "AnalysisCapabilityUnavailableError", + "AnalysisCancelledError", + "AnalysisTimeoutError", + "ProviderSelectionError", + "ProviderAdapterError", + "BrowserObservationError", + "ArtifactOperationError", + "ProcessCaptureError", + "EvidenceIntegrityError", + "EvidenceFileError", + "UnknownRegistryError", + "HopperTimeoutError", + "HopperCancelledError", + "HopperProtocolError", + "HopperRemoteError", + "HopperProcessError", + "HopperStartError", + "ConfigurationError", + "NoBinaryOpenError", + "BinaryTargetError", +] as const; + +/** Stable tag for an expected analysis failure. */ +export type AnalysisErrorTag = (typeof ANALYSIS_ERROR_TAGS)[number]; + +/** Base class for expected analysis, provider, and session failures. */ +export abstract class AnalysisError extends Error { + abstract readonly _tag: AnalysisErrorTag; + readonly userMessage: string | undefined = undefined; + readonly userCategory: "cancelled" | undefined = undefined; + readonly cleanupIncomplete: boolean = false; + readonly cleanupResources: readonly string[] = []; +} diff --git a/src/domain/analysisErrorCore.ts b/src/domain/analysisErrorCore.ts new file mode 100644 index 000000000..b9cdea561 --- /dev/null +++ b/src/domain/analysisErrorCore.ts @@ -0,0 +1,86 @@ +import type { JsonValue } from "./jsonValue.js"; +import { AnalysisError } from "./analysisErrorBase.js"; + +/** Provider-neutral invalid analysis input or output at an application boundary. */ +export class AnalysisProtocolError extends AnalysisError { + readonly _tag = "AnalysisProtocolError"; +} + +/** Caller input failed provider-neutral application parsing. */ +export class AnalysisInputError extends AnalysisError { + readonly _tag = "AnalysisInputError"; + + constructor( + readonly operation: string, + options?: ErrorOptions, + readonly issues: readonly AnalysisInputIssue[] = [], + ) { + super(`Invalid analysis input for ${operation}`, options); + } +} + +/** Secret-safe correction metadata for one rejected caller argument. */ +export interface AnalysisInputIssue { + readonly path: readonly (string | number)[]; + readonly reason: + | "unknown_argument" + | "missing_argument" + | "invalid_type" + | "out_of_range" + | "invalid_value" + | "invalid_format"; + /** Schema-authored correction guidance for cross-field or custom checks. */ + readonly message?: string; + readonly expected?: JsonValue; + readonly minimum?: number; + readonly maximum?: number; +} + +/** Provider output failed provider-neutral application parsing. */ +export class AnalysisOutputError extends AnalysisError { + readonly _tag = "AnalysisOutputError"; + + constructor( + readonly operation: string, + readonly reason: string, + options?: ErrorOptions, + ) { + super(`Invalid analysis output for ${operation}: ${reason}`, options); + } +} + +/** Selected provider cannot execute a declared analysis operation. */ +export class AnalysisCapabilityUnavailableError extends AnalysisError { + readonly _tag = "AnalysisCapabilityUnavailableError"; + + constructor( + readonly providerId: string, + readonly operation: string, + readonly reason: string, + ) { + super(`Provider ${providerId} cannot execute ${operation}: ${reason}`); + } +} + +/** Caller cancellation won before provider-neutral work completed. */ +export class AnalysisCancelledError extends AnalysisError { + readonly _tag = "AnalysisCancelledError"; + + constructor(readonly operation: string) { + super(`Analysis operation was cancelled: ${operation}`); + } +} + +/** Provider-neutral operation exceeded its declared execution deadline. */ +export class AnalysisTimeoutError extends AnalysisError { + readonly _tag = "AnalysisTimeoutError"; + + constructor( + readonly operation: string, + readonly timeoutMs: number, + ) { + super( + `Analysis operation timed out after ${String(timeoutMs)}ms: ${operation}`, + ); + } +} diff --git a/src/domain/analysisErrorPresentation.ts b/src/domain/analysisErrorPresentation.ts index f9fa8af1d..9fc1c1879 100644 --- a/src/domain/analysisErrorPresentation.ts +++ b/src/domain/analysisErrorPresentation.ts @@ -1,22 +1,25 @@ +import { AnalysisInputError } from "./analysisErrorCore.js"; +import { ArtifactOperationError } from "./artifactOperationError.js"; import { - AnalysisInputError, - ArtifactOperationError, BinaryTargetError, - BrowserObservationError, ConfigurationError, - EvidenceFileError, - EvidenceIntegrityError, + NoBinaryOpenError, +} from "./configurationErrors.js"; +import { BrowserObservationError } from "./browserObservationError.js"; +import { EvidenceFileError, EvidenceIntegrityError } from "./evidenceErrors.js"; +import { HopperRemoteError, HopperProcessError, HopperStartError, HopperTimeoutError, - NoBinaryOpenError, - ProviderSelectionError, - UnknownRegistryError, +} from "./hopperErrors.js"; +import { ProviderSelectionError } from "./providerSelectionError.js"; +import { UnknownRegistryError } from "./unknownRegistryError.js"; +import { type AnalysisError, - type AnalysisErrorProjection, type AnalysisErrorTag, -} from "./errors.js"; +} from "./analysisErrorBase.js"; +import { type AnalysisErrorProjection } from "./analysisErrorProjection.js"; export const analysisErrorRemediationAction = ( error: AnalysisError, diff --git a/src/domain/analysisErrorProjection.test.ts b/src/domain/analysisErrorProjection.test.ts index 3a4398aa3..f05d35bf4 100644 --- a/src/domain/analysisErrorProjection.test.ts +++ b/src/domain/analysisErrorProjection.test.ts @@ -1,19 +1,20 @@ import { describe, expect, it } from "vitest"; - import { AnalysisCapabilityUnavailableError, AnalysisInputError, - ArtifactOperationError, - BinaryTargetError, - BrowserObservationError, +} from "./analysisErrorCore.js"; +import { ArtifactOperationError } from "./artifactOperationError.js"; +import { BinaryTargetError } from "./configurationErrors.js"; +import { BrowserObservationError } from "./browserObservationError.js"; +import { HopperProcessError, HopperRemoteError, HopperStartError, HopperTimeoutError, - ProviderAdapterError, - UnknownRegistryError, - projectAnalysisError, -} from "./errors.js"; +} from "./hopperErrors.js"; +import { ProviderAdapterError } from "./providerAdapterError.js"; +import { UnknownRegistryError } from "./unknownRegistryError.js"; +import { projectAnalysisError } from "./analysisErrorProjection.js"; describe("analysis error projection: provider failures", () => { it("projects the primary browser failure alongside incomplete cleanup", () => { diff --git a/src/domain/analysisErrorProjection.ts b/src/domain/analysisErrorProjection.ts index 9a302254a..7bc9eed76 100644 --- a/src/domain/analysisErrorProjection.ts +++ b/src/domain/analysisErrorProjection.ts @@ -1,31 +1,34 @@ import type { JsonValue } from "./jsonValue.js"; -import { - AnalysisCancelledError, - AnalysisCapabilityUnavailableError, - AnalysisInputError, - AnalysisTimeoutError, - ArtifactOperationError, - BinaryTargetError, - BrowserObservationError, - EvidenceFileError, - EvidenceReferenceError, - HopperCancelledError, - HopperProcessError, - HopperRemoteError, - HopperTimeoutError, - ProviderAdapterError, - ProviderSelectionError, - UnknownRegistryError, - type AnalysisError, - type AnalysisErrorProjection, - type AnalysisErrorTag, -} from "./errors.js"; + import { analysisErrorCategory, analysisErrorRemediationAction, analysisErrorUserMessage, assertKnownAnalysisErrorTag, } from "./analysisErrorPresentation.js"; +import { + AnalysisCancelledError, + AnalysisCapabilityUnavailableError, + AnalysisInputError, + AnalysisTimeoutError, +} from "./analysisErrorCore.js"; +import { ArtifactOperationError } from "./artifactOperationError.js"; +import { BinaryTargetError } from "./configurationErrors.js"; +import { BrowserObservationError } from "./browserObservationError.js"; +import { EvidenceFileError, EvidenceReferenceError } from "./evidenceErrors.js"; +import { + HopperCancelledError, + HopperProcessError, + HopperRemoteError, + HopperTimeoutError, +} from "./hopperErrors.js"; +import { ProviderAdapterError } from "./providerAdapterError.js"; +import { ProviderSelectionError } from "./providerSelectionError.js"; +import { UnknownRegistryError } from "./unknownRegistryError.js"; +import { + type AnalysisError, + type AnalysisErrorTag, +} from "./analysisErrorBase.js"; /** Project expected failures into exhaustive, secret-safe caller fields. */ export const projectAnalysisError = ( @@ -342,3 +345,40 @@ const RETRYABLE_CODES: ReadonlySet = new Set([ "revision_conflict", "provider_unavailable", ]); + +export interface AnalysisErrorProjection extends Readonly< + Record +> { + readonly code: + | "invalid_request" + | "unreadable_output" + | "capability_unavailable" + | "provider_unavailable" + | "provider_timeout" + | "cancelled" + | "artifact_integrity_mismatch" + | "artifact_operation_failed" + | "evidence_integrity_mismatch" + | "truncated" + | "process_capture_failed" + | "cleanup_incomplete" + | "revision_conflict" + | "configuration_invalid" + | "target_unavailable" + | "execution_failure"; + readonly category: + | "invalid_input" + | "unsupported_provider" + | "integrity_mismatch" + | "truncated" + | "cancelled" + | "timeout" + | "unavailable" + | "execution_failure"; + readonly message: string; + readonly retryable: boolean; + readonly remediation: Readonly<{ + action: string; + }>; + readonly details?: Readonly>; +} diff --git a/src/domain/appleAssetCatalog.ts b/src/domain/appleAssetCatalog.ts index 0312b90ad..12439fce0 100644 --- a/src/domain/appleAssetCatalog.ts +++ b/src/domain/appleAssetCatalog.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { jsonValueSchema } from "./jsonValue.js"; -import { AnalysisOutputError } from "./errors.js"; +import { AnalysisOutputError } from "./analysisErrorCore.js"; /** Caller-controlled page bounds for compiled Apple asset metadata. */ export const appleAssetCatalogInputSchema = z.strictObject({ diff --git a/src/domain/artifactOperationError.ts b/src/domain/artifactOperationError.ts new file mode 100644 index 000000000..a40f9c569 --- /dev/null +++ b/src/domain/artifactOperationError.ts @@ -0,0 +1,37 @@ +import { AnalysisError } from "./analysisErrorBase.js"; + +/** Artifact inventory or extraction failed a typed safety boundary. */ +export class ArtifactOperationError extends AnalysisError { + readonly _tag = "ArtifactOperationError"; + + constructor( + readonly operation: + | "inventory_artifact" + | "inspect_artifact" + | "extract_artifact" + | "decode_interface_builder" + | "inspect_asset_catalog" + | "inspect_keyed_archive" + | "analyze_javascript_application", + readonly reason: + | "cancelled" + | "format" + | "integrity" + | "limit" + | "path" + | "unavailable" + | "io", + readonly artifactDetails?: Readonly<{ + logicalPath: string; + declaredSha256: string | null; + calculatedSha256: string | null; + unpacked: boolean; + }>, + ) { + super( + artifactDetails === undefined + ? `Artifact ${operation} failed: ${reason}` + : `Artifact ${operation} failed: ${reason} at ${artifactDetails.logicalPath} (declared_sha256=${artifactDetails.declaredSha256 ?? "unavailable"}, calculated_sha256=${artifactDetails.calculatedSha256 ?? "unavailable"}, unpacked=${String(artifactDetails.unpacked)})`, + ); + } +} diff --git a/src/domain/browserObservationError.ts b/src/domain/browserObservationError.ts new file mode 100644 index 000000000..16218e776 --- /dev/null +++ b/src/domain/browserObservationError.ts @@ -0,0 +1,29 @@ +import type { + BrowserObservationFailureReason, + BrowserObservationOperation, +} from "./browserObservationErrors.js"; +import { AnalysisError } from "./analysisErrorBase.js"; +import { AnalysisCancelledError } from "./analysisErrorCore.js"; + +/** A bounded passive browser observation failed at its CDP boundary. */ +export class BrowserObservationError extends AnalysisError { + readonly _tag = "BrowserObservationError"; + override readonly cleanupIncomplete: boolean; + override readonly cleanupResources: readonly string[]; + override readonly userCategory: "cancelled" | undefined; + + constructor( + readonly operation: BrowserObservationOperation, + readonly reason: BrowserObservationFailureReason, + options?: ErrorOptions, + ) { + super(`Browser observation ${operation} failed: ${reason}`, options); + this.cleanupIncomplete = reason === "cleanup_failed"; + this.cleanupResources = + reason === "cleanup_failed" ? ["browser_transport"] : []; + this.userCategory = + reason === "cancelled" || options?.cause instanceof AnalysisCancelledError + ? "cancelled" + : undefined; + } +} diff --git a/src/domain/configurationErrors.ts b/src/domain/configurationErrors.ts new file mode 100644 index 000000000..4592715ec --- /dev/null +++ b/src/domain/configurationErrors.ts @@ -0,0 +1,28 @@ +import { AnalysisError } from "./analysisErrorBase.js"; + +/** Runtime configuration could not be parsed safely. */ +export class ConfigurationError extends AnalysisError { + readonly _tag = "ConfigurationError"; +} + +/** No app or binary session exists for an analysis request. */ +export class NoBinaryOpenError extends AnalysisError { + readonly _tag = "NoBinaryOpenError"; + constructor() { + super( + "No app is open. Ask the user which app to investigate, then call open_binary with its local path.", + ); + } +} + +/** A supplied target path could not be safely opened as a supported app or binary. */ +export class BinaryTargetError extends AnalysisError { + readonly _tag = "BinaryTargetError"; + constructor( + readonly path: string, + reason: string, + options?: ErrorOptions, + ) { + super(`Cannot open artifact: ${reason}`, options); + } +} diff --git a/src/domain/errors.ts b/src/domain/errors.ts deleted file mode 100644 index 561c77468..000000000 --- a/src/domain/errors.ts +++ /dev/null @@ -1,516 +0,0 @@ -import type { JsonValue } from "./jsonValue.js"; -import type { - BrowserObservationFailureReason, - BrowserObservationOperation, -} from "./browserObservationErrors.js"; - -export type { BrowserObservationOperation } from "./browserObservationErrors.js"; -import { - hopperStartupFailure, - type HopperStartupDiagnostic, - type HopperStartupFailureDiagnostic, - type HopperStartupFailureCode, -} from "./hopperStartupFailure.js"; -export { - hopperStartupFailure, - type HopperStartupDiagnostic, - type HopperStartupFailureDiagnostic, - type HopperStartupFailureCode, -}; -export { projectAnalysisError } from "./analysisErrorProjection.js"; - -/** Stable tags exposed by safe analysis-error projections. */ -const ANALYSIS_ERROR_TAGS = [ - "AnalysisProtocolError", - "AnalysisInputError", - "AnalysisOutputError", - "AnalysisCapabilityUnavailableError", - "AnalysisCancelledError", - "AnalysisTimeoutError", - "ProviderSelectionError", - "ProviderAdapterError", - "BrowserObservationError", - "ArtifactOperationError", - "ProcessCaptureError", - "EvidenceIntegrityError", - "EvidenceFileError", - "UnknownRegistryError", - "HopperTimeoutError", - "HopperCancelledError", - "HopperProtocolError", - "HopperRemoteError", - "HopperProcessError", - "HopperStartError", - "ConfigurationError", - "NoBinaryOpenError", - "BinaryTargetError", -] as const; - -/** Stable tag for an expected analysis failure. */ -export type AnalysisErrorTag = (typeof ANALYSIS_ERROR_TAGS)[number]; - -/** Base class for expected analysis, provider, and session failures. */ -export abstract class AnalysisError extends Error { - abstract readonly _tag: AnalysisErrorTag; - readonly userMessage: string | undefined = undefined; - readonly userCategory: "cancelled" | undefined = undefined; - readonly cleanupIncomplete: boolean = false; - readonly cleanupResources: readonly string[] = []; -} - -/** Base class for failures produced specifically by the Hopper provider. */ -export abstract class HopperError extends AnalysisError {} - -/** Provider-neutral invalid analysis input or output at an application boundary. */ -export class AnalysisProtocolError extends AnalysisError { - readonly _tag = "AnalysisProtocolError"; -} - -/** Caller input failed provider-neutral application parsing. */ -export class AnalysisInputError extends AnalysisError { - readonly _tag = "AnalysisInputError"; - - constructor( - readonly operation: string, - options?: ErrorOptions, - readonly issues: readonly AnalysisInputIssue[] = [], - ) { - super(`Invalid analysis input for ${operation}`, options); - } -} - -/** Secret-safe correction metadata for one rejected caller argument. */ -export interface AnalysisInputIssue { - readonly path: readonly (string | number)[]; - readonly reason: - | "unknown_argument" - | "missing_argument" - | "invalid_type" - | "out_of_range" - | "invalid_value" - | "invalid_format"; - /** Schema-authored correction guidance for cross-field or custom checks. */ - readonly message?: string; - readonly expected?: JsonValue; - readonly minimum?: number; - readonly maximum?: number; -} - -/** Provider output failed provider-neutral application parsing. */ -export class AnalysisOutputError extends AnalysisError { - readonly _tag = "AnalysisOutputError"; - - constructor( - readonly operation: string, - readonly reason: string, - options?: ErrorOptions, - ) { - super(`Invalid analysis output for ${operation}: ${reason}`, options); - } -} - -/** Selected provider cannot execute a declared analysis operation. */ -export class AnalysisCapabilityUnavailableError extends AnalysisError { - readonly _tag = "AnalysisCapabilityUnavailableError"; - - constructor( - readonly providerId: string, - readonly operation: string, - readonly reason: string, - ) { - super(`Provider ${providerId} cannot execute ${operation}: ${reason}`); - } -} - -/** Caller cancellation won before provider-neutral work completed. */ -export class AnalysisCancelledError extends AnalysisError { - readonly _tag = "AnalysisCancelledError"; - - constructor(readonly operation: string) { - super(`Analysis operation was cancelled: ${operation}`); - } -} - -/** Provider-neutral operation exceeded its declared execution deadline. */ -export class AnalysisTimeoutError extends AnalysisError { - readonly _tag = "AnalysisTimeoutError"; - - constructor( - readonly operation: string, - readonly timeoutMs: number, - ) { - super( - `Analysis operation timed out after ${String(timeoutMs)}ms: ${operation}`, - ); - } -} - -/** Stable failure classes for target-bound deep-provider selection. */ -export type ProviderSelectionFailureReason = - | "unknown_provider" - | "provider_unavailable" - | "target_unsupported" - | "ambiguous" - | "invalid_options"; - -/** One actionable candidate rejection retained in caller diagnostics. */ -export interface ProviderSelectionRejection { - readonly providerId: string; - readonly code: string; - readonly reason: string; - readonly diagnostics: Readonly>; -} - -/** Complete typed context for one failed deep-provider selection. */ -export interface ProviderSelectionErrorOptions { - readonly operation?: string; - readonly reason: ProviderSelectionFailureReason; - readonly requestedProviderId: string; - readonly candidateIds: readonly string[]; - readonly rejections?: readonly ProviderSelectionRejection[]; -} - -/** No configured provider can satisfy a requested operation or target binding. */ -export class ProviderSelectionError extends AnalysisError { - readonly _tag = "ProviderSelectionError"; - readonly operation: string; - readonly reason: ProviderSelectionFailureReason; - readonly requestedProviderId: string; - readonly candidateIds: readonly string[]; - readonly rejections: readonly ProviderSelectionRejection[]; - override readonly userMessage: string; - - constructor(options: ProviderSelectionErrorOptions) { - const operation = options.operation ?? "open_binary"; - super(providerSelectionDiagnostic(options)); - this.operation = operation; - this.reason = options.reason; - this.requestedProviderId = options.requestedProviderId; - this.candidateIds = [...options.candidateIds]; - this.rejections = [...(options.rejections ?? [])].map((rejection) => ({ - ...rejection, - diagnostics: structuredClone(rejection.diagnostics), - })); - this.userMessage = providerSelectionUserMessage(options); - } -} - -const providerSelectionDiagnostic = ( - options: ProviderSelectionErrorOptions, -): string => { - const candidates = - options.candidateIds.length === 0 - ? "none" - : options.candidateIds.join(", "); - return `Analysis provider selection failed (${options.reason}) for ${options.requestedProviderId}; candidates: ${candidates}`; -}; - -const providerSelectionUserMessage = ( - options: ProviderSelectionErrorOptions, -): string => { - switch (options.reason) { - case "ambiguous": - return "Multiple analysis providers support this target. Choose one with provider_id, --provider, or REA_ANALYSIS_PROVIDER."; - case "unknown_provider": - return `The requested analysis provider is unknown. Choose one of: ${options.candidateIds.join(", ") || "no configured providers"}.`; - case "provider_unavailable": - return "The selected analysis provider is unavailable. Review the reported local diagnostics or run `rea doctor`, then retry."; - case "target_unsupported": - return "The selected analysis provider does not support this target. Choose another provider or open a supported extracted binary."; - case "invalid_options": - return "The analysis provider selection or open options are invalid. Correct them and try again."; - } -}; - -/** A provider adapter failed outside its more precise typed variants. */ -export interface ProviderAdapterErrorOptions extends ErrorOptions { - readonly diagnostics?: Readonly>; -} - -/** A provider adapter failed outside its more precise typed variants. */ -export class ProviderAdapterError extends AnalysisError { - readonly _tag = "ProviderAdapterError"; - readonly diagnostics: Readonly> | undefined; - - constructor( - readonly providerId: string, - readonly operation: string, - options: ProviderAdapterErrorOptions = {}, - ) { - super(`Provider ${providerId} adapter failed during ${operation}`, options); - this.diagnostics = - options.diagnostics === undefined - ? undefined - : structuredClone(options.diagnostics); - } -} - -/** A bounded passive browser observation failed at its CDP boundary. */ -export class BrowserObservationError extends AnalysisError { - readonly _tag = "BrowserObservationError"; - override readonly cleanupIncomplete: boolean; - override readonly cleanupResources: readonly string[]; - override readonly userCategory: "cancelled" | undefined; - - constructor( - readonly operation: BrowserObservationOperation, - readonly reason: BrowserObservationFailureReason, - options?: ErrorOptions, - ) { - super(`Browser observation ${operation} failed: ${reason}`, options); - this.cleanupIncomplete = reason === "cleanup_failed"; - this.cleanupResources = - reason === "cleanup_failed" ? ["browser_transport"] : []; - this.userCategory = - reason === "cancelled" || options?.cause instanceof AnalysisCancelledError - ? "cancelled" - : undefined; - } -} - -/** Artifact inventory or extraction failed a typed safety boundary. */ -export class ArtifactOperationError extends AnalysisError { - readonly _tag = "ArtifactOperationError"; - - constructor( - readonly operation: - | "inventory_artifact" - | "inspect_artifact" - | "extract_artifact" - | "decode_interface_builder" - | "inspect_asset_catalog" - | "inspect_keyed_archive" - | "analyze_javascript_application", - readonly reason: - | "cancelled" - | "format" - | "integrity" - | "limit" - | "path" - | "unavailable" - | "io", - readonly artifactDetails?: Readonly<{ - logicalPath: string; - declaredSha256: string | null; - calculatedSha256: string | null; - unpacked: boolean; - }>, - ) { - super( - artifactDetails === undefined - ? `Artifact ${operation} failed: ${reason}` - : `Artifact ${operation} failed: ${reason} at ${artifactDetails.logicalPath} (declared_sha256=${artifactDetails.declaredSha256 ?? "unavailable"}, calculated_sha256=${artifactDetails.calculatedSha256 ?? "unavailable"}, unpacked=${String(artifactDetails.unpacked)})`, - ); - } -} - -/** Evidence identity, schema, or bundle manifests failed integrity checks. */ -export class EvidenceIntegrityError extends AnalysisError { - readonly _tag = "EvidenceIntegrityError"; -} - -/** A session Evidence reference is missing or has the wrong semantic identity. */ -export class EvidenceReferenceError extends EvidenceIntegrityError { - constructor( - readonly evidenceId: string, - readonly reason: "missing" | "wrong_operation" | "wrong_predicate", - readonly expected: string, - readonly actual: string | null, - ) { - super(`Evidence reference ${reason}: ${evidenceId}`); - } -} - -/** Evidence bundle filesystem access failed within the configured policy. */ -export class EvidenceFileError extends AnalysisError { - readonly _tag = "EvidenceFileError"; - - constructor( - readonly operation: "read" | "write", - readonly reason: "not-file" | "exists" | "invalid-json" | "io", - options?: ErrorOptions, - ) { - super(`Evidence bundle ${operation} failed: ${reason}`, options); - } -} - -/** Residual-unknown mutation failed a lifecycle, reference, or CAS invariant. */ -export class UnknownRegistryError extends AnalysisError { - readonly _tag = "UnknownRegistryError"; - - constructor( - readonly reason: - | "not-found" - | "already-exists" - | "revision-conflict" - | "invalid-transition" - | "integrity" - | "limit", - options?: ErrorOptions, - ) { - super(`Residual unknown registry mutation failed: ${reason}`, options); - } -} - -/** Hopper did not respond within the configured operation deadline. */ -export class HopperTimeoutError extends HopperError { - readonly _tag = "HopperTimeoutError"; - - constructor( - readonly timeoutMs: number, - readonly operation?: string, - readonly requestId?: number, - readonly providerState: "busy" | "not_started" = "not_started", - ) { - super( - `Hopper ${operation === undefined ? "startup" : operation} timed out after ${String(timeoutMs)}ms`, - ); - } -} - -/** The caller cancelled a Hopper operation before it completed. */ -export class HopperCancelledError extends HopperError { - readonly _tag = "HopperCancelledError"; - - constructor() { - super("Hopper operation was cancelled"); - } -} - -/** Hopper returned bytes or JSON that do not satisfy the NDJSON RPC contract. */ -export class HopperProtocolError extends HopperError { - readonly _tag = "HopperProtocolError"; -} - -export type HopperDiagnosticType = - | "remote" - | "authorization" - | "invalid_request" - | "capability_unavailable" - | "bridge_exception"; - -/** Hopper's JSON-RPC endpoint returned an expected remote error response. */ -export interface HopperRemoteErrorContext { - readonly diagnosticType?: HopperDiagnosticType; - readonly operation?: string; - readonly requestId?: number; -} - -export class HopperRemoteError extends HopperError { - readonly _tag = "HopperRemoteError"; - readonly diagnosticType: HopperDiagnosticType; - readonly operation: string | undefined; - readonly requestId: number | undefined; - - constructor( - readonly code: number, - readonly safeMessage: string, - context: HopperRemoteErrorContext = {}, - ) { - super(`Hopper request failed (${String(code)}): ${safeMessage}`); - this.diagnosticType = context.diagnosticType ?? "remote"; - this.operation = context.operation; - this.requestId = context.requestId; - } -} - -/** The owned Hopper bridge stopped before its client was closed. */ -export class HopperProcessError extends HopperError { - readonly _tag = "HopperProcessError"; - readonly failureCode: HopperStartupFailureCode | undefined; - override readonly userMessage: string | undefined; - - constructor( - readonly exitCode: number | null, - readonly diagnostic?: HopperStartupFailureDiagnostic, - readonly operation?: string, - readonly requestId?: number, - ) { - super(`Hopper bridge stopped unexpectedly with code ${String(exitCode)}`); - const failure = hopperStartupFailure(exitCode); - this.failureCode = failure?.code; - this.userMessage = failure?.message; - } -} - -/** Hopper or the repository bridge could not be started. */ -export class HopperStartError extends HopperError { - readonly _tag = "HopperStartError"; - override readonly userMessage: string | undefined; - readonly ownerRunId: string | undefined; - - constructor( - options?: ErrorOptions & { - readonly userMessage?: string; - readonly ownerRunId?: string; - }, - ) { - super("Hopper application bridge could not be started", options); - this.userMessage = options?.userMessage; - this.ownerRunId = options?.ownerRunId; - } -} - -/** Runtime configuration could not be parsed safely. */ -export class ConfigurationError extends AnalysisError { - readonly _tag = "ConfigurationError"; -} - -/** No app or binary session exists for an analysis request. */ -export class NoBinaryOpenError extends AnalysisError { - readonly _tag = "NoBinaryOpenError"; - constructor() { - super( - "No app is open. Ask the user which app to investigate, then call open_binary with its local path.", - ); - } -} - -/** A supplied target path could not be safely opened as a supported app or binary. */ -export class BinaryTargetError extends AnalysisError { - readonly _tag = "BinaryTargetError"; - constructor( - readonly path: string, - reason: string, - options?: ErrorOptions, - ) { - super(`Cannot open artifact: ${reason}`, options); - } -} - -export interface AnalysisErrorProjection extends Readonly< - Record -> { - readonly code: - | "invalid_request" - | "unreadable_output" - | "capability_unavailable" - | "provider_unavailable" - | "provider_timeout" - | "cancelled" - | "artifact_integrity_mismatch" - | "artifact_operation_failed" - | "evidence_integrity_mismatch" - | "truncated" - | "process_capture_failed" - | "cleanup_incomplete" - | "revision_conflict" - | "configuration_invalid" - | "target_unavailable" - | "execution_failure"; - readonly category: - | "invalid_input" - | "unsupported_provider" - | "integrity_mismatch" - | "truncated" - | "cancelled" - | "timeout" - | "unavailable" - | "execution_failure"; - readonly message: string; - readonly retryable: boolean; - readonly remediation: Readonly<{ - action: string; - }>; - readonly details?: Readonly>; -} diff --git a/src/domain/evidenceErrors.ts b/src/domain/evidenceErrors.ts new file mode 100644 index 000000000..73ecf5fba --- /dev/null +++ b/src/domain/evidenceErrors.ts @@ -0,0 +1,31 @@ +import { AnalysisError } from "./analysisErrorBase.js"; + +/** Evidence identity, schema, or bundle manifests failed integrity checks. */ +export class EvidenceIntegrityError extends AnalysisError { + readonly _tag = "EvidenceIntegrityError"; +} + +/** A session Evidence reference is missing or has the wrong semantic identity. */ +export class EvidenceReferenceError extends EvidenceIntegrityError { + constructor( + readonly evidenceId: string, + readonly reason: "missing" | "wrong_operation" | "wrong_predicate", + readonly expected: string, + readonly actual: string | null, + ) { + super(`Evidence reference ${reason}: ${evidenceId}`); + } +} + +/** Evidence bundle filesystem access failed within the configured policy. */ +export class EvidenceFileError extends AnalysisError { + readonly _tag = "EvidenceFileError"; + + constructor( + readonly operation: "read" | "write", + readonly reason: "not-file" | "exists" | "invalid-json" | "io", + options?: ErrorOptions, + ) { + super(`Evidence bundle ${operation} failed: ${reason}`, options); + } +} diff --git a/src/domain/hopperErrors.ts b/src/domain/hopperErrors.ts new file mode 100644 index 000000000..a34f5a707 --- /dev/null +++ b/src/domain/hopperErrors.ts @@ -0,0 +1,109 @@ +import { AnalysisError } from "./analysisErrorBase.js"; +import { + hopperStartupFailure, + type HopperStartupDiagnostic, + type HopperStartupFailureCode, + type HopperStartupFailureDiagnostic, +} from "./hopperStartupFailure.js"; + +/** Base class for failures produced specifically by the Hopper provider. */ +export abstract class HopperError extends AnalysisError {} + +/** Hopper did not respond within the configured operation deadline. */ +export class HopperTimeoutError extends HopperError { + readonly _tag = "HopperTimeoutError"; + + constructor( + readonly timeoutMs: number, + readonly operation?: string, + readonly requestId?: number, + readonly providerState: "busy" | "not_started" = "not_started", + ) { + super( + `Hopper ${operation === undefined ? "startup" : operation} timed out after ${String(timeoutMs)}ms`, + ); + } +} + +/** The caller cancelled a Hopper operation before it completed. */ +export class HopperCancelledError extends HopperError { + readonly _tag = "HopperCancelledError"; + + constructor() { + super("Hopper operation was cancelled"); + } +} + +/** Hopper returned bytes or JSON that do not satisfy the NDJSON RPC contract. */ +export class HopperProtocolError extends HopperError { + readonly _tag = "HopperProtocolError"; +} + +export type HopperDiagnosticType = + | "remote" + | "authorization" + | "invalid_request" + | "capability_unavailable" + | "bridge_exception"; + +/** Hopper's JSON-RPC endpoint returned an expected remote error response. */ +export interface HopperRemoteErrorContext { + readonly diagnosticType?: HopperDiagnosticType; + readonly operation?: string; + readonly requestId?: number; +} + +export class HopperRemoteError extends HopperError { + readonly _tag = "HopperRemoteError"; + readonly diagnosticType: HopperDiagnosticType; + readonly operation: string | undefined; + readonly requestId: number | undefined; + + constructor( + readonly code: number, + readonly safeMessage: string, + context: HopperRemoteErrorContext = {}, + ) { + super(`Hopper request failed (${String(code)}): ${safeMessage}`); + this.diagnosticType = context.diagnosticType ?? "remote"; + this.operation = context.operation; + this.requestId = context.requestId; + } +} + +/** The owned Hopper bridge stopped before its client was closed. */ +export class HopperProcessError extends HopperError { + readonly _tag = "HopperProcessError"; + readonly failureCode: HopperStartupFailureCode | undefined; + override readonly userMessage: string | undefined; + + constructor( + readonly exitCode: number | null, + readonly diagnostic?: HopperStartupFailureDiagnostic, + readonly operation?: string, + readonly requestId?: number, + ) { + super(`Hopper bridge stopped unexpectedly with code ${String(exitCode)}`); + const failure = hopperStartupFailure(exitCode); + this.failureCode = failure?.code; + this.userMessage = failure?.message; + } +} + +/** Hopper or the repository bridge could not be started. */ +export class HopperStartError extends HopperError { + readonly _tag = "HopperStartError"; + override readonly userMessage: string | undefined; + readonly ownerRunId: string | undefined; + + constructor( + options?: ErrorOptions & { + readonly userMessage?: string; + readonly ownerRunId?: string; + }, + ) { + super("Hopper application bridge could not be started", options); + this.userMessage = options?.userMessage; + this.ownerRunId = options?.ownerRunId; + } +} diff --git a/src/domain/hopperValues.ts b/src/domain/hopperValues.ts index b1d2dc5ef..8161a796f 100644 --- a/src/domain/hopperValues.ts +++ b/src/domain/hopperValues.ts @@ -1,10 +1,12 @@ import { z } from "zod"; import type { JsonValue } from "./jsonValue.js"; -import { AnalysisOutputError, HopperProtocolError } from "./errors.js"; + import { err, ok, type Result } from "./result.js"; import { nativeApiBoundarySchema } from "./nativeApiBoundary.js"; import { nativeValueFlowSchema } from "./nativeValueFlow.js"; +import { AnalysisOutputError } from "./analysisErrorCore.js"; +import { HopperProtocolError } from "./hopperErrors.js"; export interface AddressedName { readonly address: string; diff --git a/src/domain/inputIssueProjection.ts b/src/domain/inputIssueProjection.ts index 13214d198..1fff45e1c 100644 --- a/src/domain/inputIssueProjection.ts +++ b/src/domain/inputIssueProjection.ts @@ -1,6 +1,5 @@ import type { z } from "zod"; - -import type { AnalysisInputIssue } from "./errors.js"; +import type { AnalysisInputIssue } from "./analysisErrorCore.js"; /** Project Zod failures to secret-safe caller correction metadata. */ export const projectInputIssues = ( diff --git a/src/domain/providerAdapterError.ts b/src/domain/providerAdapterError.ts new file mode 100644 index 000000000..f999d00ba --- /dev/null +++ b/src/domain/providerAdapterError.ts @@ -0,0 +1,25 @@ +import type { JsonValue } from "./jsonValue.js"; +import { AnalysisError } from "./analysisErrorBase.js"; + +/** A provider adapter failed outside its more precise typed variants. */ +export interface ProviderAdapterErrorOptions extends ErrorOptions { + readonly diagnostics?: Readonly>; +} + +/** A provider adapter failed outside its more precise typed variants. */ +export class ProviderAdapterError extends AnalysisError { + readonly _tag = "ProviderAdapterError"; + readonly diagnostics: Readonly> | undefined; + + constructor( + readonly providerId: string, + readonly operation: string, + options: ProviderAdapterErrorOptions = {}, + ) { + super(`Provider ${providerId} adapter failed during ${operation}`, options); + this.diagnostics = + options.diagnostics === undefined + ? undefined + : structuredClone(options.diagnostics); + } +} diff --git a/src/domain/providerCleanupError.ts b/src/domain/providerCleanupError.ts index 71e51d698..ce79e44df 100644 --- a/src/domain/providerCleanupError.ts +++ b/src/domain/providerCleanupError.ts @@ -1,5 +1,5 @@ -import { ProviderAdapterError } from "./errors.js"; import type { JsonValue } from "./jsonValue.js"; +import { ProviderAdapterError } from "./providerAdapterError.js"; /** Provider resources could not be proven closed after bounded cleanup. */ export class ProviderCleanupError extends ProviderAdapterError { diff --git a/src/domain/providerSelectionError.ts b/src/domain/providerSelectionError.ts new file mode 100644 index 000000000..2dbb182fa --- /dev/null +++ b/src/domain/providerSelectionError.ts @@ -0,0 +1,79 @@ +import type { JsonValue } from "./jsonValue.js"; +import { AnalysisError } from "./analysisErrorBase.js"; + +/** Stable failure classes for target-bound deep-provider selection. */ +export type ProviderSelectionFailureReason = + | "unknown_provider" + | "provider_unavailable" + | "target_unsupported" + | "ambiguous" + | "invalid_options"; + +/** One actionable candidate rejection retained in caller diagnostics. */ +export interface ProviderSelectionRejection { + readonly providerId: string; + readonly code: string; + readonly reason: string; + readonly diagnostics: Readonly>; +} + +/** Complete typed context for one failed deep-provider selection. */ +export interface ProviderSelectionErrorOptions { + readonly operation?: string; + readonly reason: ProviderSelectionFailureReason; + readonly requestedProviderId: string; + readonly candidateIds: readonly string[]; + readonly rejections?: readonly ProviderSelectionRejection[]; +} + +/** No configured provider can satisfy a requested operation or target binding. */ +export class ProviderSelectionError extends AnalysisError { + readonly _tag = "ProviderSelectionError"; + readonly operation: string; + readonly reason: ProviderSelectionFailureReason; + readonly requestedProviderId: string; + readonly candidateIds: readonly string[]; + readonly rejections: readonly ProviderSelectionRejection[]; + override readonly userMessage: string; + + constructor(options: ProviderSelectionErrorOptions) { + const operation = options.operation ?? "open_binary"; + super(providerSelectionDiagnostic(options)); + this.operation = operation; + this.reason = options.reason; + this.requestedProviderId = options.requestedProviderId; + this.candidateIds = [...options.candidateIds]; + this.rejections = [...(options.rejections ?? [])].map((rejection) => ({ + ...rejection, + diagnostics: structuredClone(rejection.diagnostics), + })); + this.userMessage = providerSelectionUserMessage(options); + } +} + +const providerSelectionDiagnostic = ( + options: ProviderSelectionErrorOptions, +): string => { + const candidates = + options.candidateIds.length === 0 + ? "none" + : options.candidateIds.join(", "); + return `Analysis provider selection failed (${options.reason}) for ${options.requestedProviderId}; candidates: ${candidates}`; +}; + +const providerSelectionUserMessage = ( + options: ProviderSelectionErrorOptions, +): string => { + switch (options.reason) { + case "ambiguous": + return "Multiple analysis providers support this target. Choose one with provider_id, --provider, or REA_ANALYSIS_PROVIDER."; + case "unknown_provider": + return `The requested analysis provider is unknown. Choose one of: ${options.candidateIds.join(", ") || "no configured providers"}.`; + case "provider_unavailable": + return "The selected analysis provider is unavailable. Review the reported local diagnostics or run `rea doctor`, then retry."; + case "target_unsupported": + return "The selected analysis provider does not support this target. Choose another provider or open a supported extracted binary."; + case "invalid_options": + return "The analysis provider selection or open options are invalid. Correct them and try again."; + } +}; diff --git a/src/domain/unknownRegistryError.ts b/src/domain/unknownRegistryError.ts new file mode 100644 index 000000000..9803690c2 --- /dev/null +++ b/src/domain/unknownRegistryError.ts @@ -0,0 +1,19 @@ +import { AnalysisError } from "./analysisErrorBase.js"; + +/** Residual-unknown mutation failed a lifecycle, reference, or CAS invariant. */ +export class UnknownRegistryError extends AnalysisError { + readonly _tag = "UnknownRegistryError"; + + constructor( + readonly reason: + | "not-found" + | "already-exists" + | "revision-conflict" + | "invalid-transition" + | "integrity" + | "limit", + options?: ErrorOptions, + ) { + super(`Residual unknown registry mutation failed: ${reason}`, options); + } +} diff --git a/src/dotnet/ManagedStaticProvider.ts b/src/dotnet/ManagedStaticProvider.ts index fa3bed384..a4c38471c 100644 --- a/src/dotnet/ManagedStaticProvider.ts +++ b/src/dotnet/ManagedStaticProvider.ts @@ -23,9 +23,9 @@ import type { BinaryTarget } from "../domain/binaryTarget.js"; import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, - EvidenceIntegrityError, - ProviderAdapterError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; import type { EvidenceLocation } from "../domain/evidence.js"; import type { JsonValue } from "../domain/jsonValue.js"; import type { diff --git a/src/ghidra/GhidraAnalysisProfile.ts b/src/ghidra/GhidraAnalysisProfile.ts index d1e57b901..369055d76 100644 --- a/src/ghidra/GhidraAnalysisProfile.ts +++ b/src/ghidra/GhidraAnalysisProfile.ts @@ -4,11 +4,9 @@ import type { } from "../application/AnalysisProvider.js"; import { createAnalysisProfile } from "../domain/analysisProfile.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { - AnalysisCancelledError, - ProviderAdapterError, - type AnalysisError, -} from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../domain/result.js"; import type { GhidraInstallationInspection } from "./GhidraInstallation.js"; diff --git a/src/ghidra/GhidraFunctionValues.ts b/src/ghidra/GhidraFunctionValues.ts index 23406b4a3..6db1e8775 100644 --- a/src/ghidra/GhidraFunctionValues.ts +++ b/src/ghidra/GhidraFunctionValues.ts @@ -5,7 +5,10 @@ import { nativeCallTargetsSchema, } from "../domain/nativeInstruction.js"; -import { AnalysisInputError, AnalysisOutputError } from "../domain/errors.js"; +import { + AnalysisInputError, + AnalysisOutputError, +} from "../domain/analysisErrorCore.js"; import { functionBodyEntryAgrees, functionInstructionWindowSchema, diff --git a/src/ghidra/GhidraInventoryValues.ts b/src/ghidra/GhidraInventoryValues.ts index cb14426ed..8566d99b3 100644 --- a/src/ghidra/GhidraInventoryValues.ts +++ b/src/ghidra/GhidraInventoryValues.ts @@ -1,6 +1,9 @@ import { z } from "zod"; -import { AnalysisInputError, AnalysisOutputError } from "../domain/errors.js"; +import { + AnalysisInputError, + AnalysisOutputError, +} from "../domain/analysisErrorCore.js"; import { functionBodySchema, functionBodyEntryAgrees, diff --git a/src/ghidra/GhidraLauncher.ts b/src/ghidra/GhidraLauncher.ts index 304fa2d6b..5f3f54b32 100644 --- a/src/ghidra/GhidraLauncher.ts +++ b/src/ghidra/GhidraLauncher.ts @@ -3,7 +3,7 @@ import { basename, dirname, join, win32 } from "node:path"; import writeFileAtomic from "write-file-atomic"; -import { AnalysisCancelledError } from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; import { err, ok, type Result } from "../domain/result.js"; import { cleanupOwnedProcessGroup, diff --git a/src/ghidra/GhidraProvider.ts b/src/ghidra/GhidraProvider.ts index abadd2d83..080f832ad 100644 --- a/src/ghidra/GhidraProvider.ts +++ b/src/ghidra/GhidraProvider.ts @@ -20,10 +20,10 @@ import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, - type AnalysisError, AnalysisTimeoutError, - ProviderAdapterError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; import { err, ok, type Result } from "../domain/result.js"; import type { Logger } from "../logger.js"; import { GhidraClient } from "./GhidraClient.js"; diff --git a/src/hopper/BridgeLauncher.ts b/src/hopper/BridgeLauncher.ts index fbd75265f..78a6a7c41 100644 --- a/src/hopper/BridgeLauncher.ts +++ b/src/hopper/BridgeLauncher.ts @@ -7,7 +7,7 @@ import { HopperCancelledError, HopperProcessError, HopperStartError, -} from "../domain/errors.js"; +} from "../domain/hopperErrors.js"; import { err, ok, type Result } from "../domain/result.js"; import { cleanupOwnedProcessGroup } from "../process/ProcessOwnership.js"; import { execFileOutput } from "../process/ExecFileOutput.js"; diff --git a/src/hopper/HopperAnalysisProfile.ts b/src/hopper/HopperAnalysisProfile.ts index f99d1bab7..506105dff 100644 --- a/src/hopper/HopperAnalysisProfile.ts +++ b/src/hopper/HopperAnalysisProfile.ts @@ -10,11 +10,9 @@ import type { BinaryArchitecture, BinaryTarget, } from "../domain/binaryTarget.js"; -import { - AnalysisCancelledError, - ProviderAdapterError, - type AnalysisError, -} from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../domain/result.js"; interface HopperProfileOptions { diff --git a/src/hopper/HopperCleanup.ts b/src/hopper/HopperCleanup.ts index 0ac15ab23..588c25afa 100644 --- a/src/hopper/HopperCleanup.ts +++ b/src/hopper/HopperCleanup.ts @@ -1,8 +1,10 @@ import type { Socket } from "node:net"; import type { ProgressReporter } from "../application/ProgressReporter.js"; -import type { AnalysisError, HopperError } from "../domain/errors.js"; -import { HopperProcessError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; +import type { HopperError } from "../domain/hopperErrors.js"; +import { HopperProcessError } from "../domain/hopperErrors.js"; + import type { JsonValue } from "../domain/jsonValue.js"; import { ProviderCleanupError } from "../domain/providerCleanupError.js"; import { err, ok, type Result } from "../domain/result.js"; diff --git a/src/hopper/HopperClient.ts b/src/hopper/HopperClient.ts index fdb17236c..d259389f4 100644 --- a/src/hopper/HopperClient.ts +++ b/src/hopper/HopperClient.ts @@ -4,19 +4,21 @@ import type { Socket } from "node:net"; import { tmpdir } from "node:os"; import { join } from "node:path"; +import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; import { - AnalysisCapabilityUnavailableError, HopperCancelledError, - type AnalysisError, type HopperError, HopperProcessError, HopperProtocolError, HopperRemoteError, HopperStartError, - hopperStartupFailure, HopperTimeoutError, +} from "../domain/hopperErrors.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import { + hopperStartupFailure, type HopperStartupFailureDiagnostic, -} from "../domain/errors.js"; +} from "../domain/hopperStartupFailure.js"; import { err, ok, type Result } from "../domain/result.js"; import type { JsonValue } from "../domain/jsonValue.js"; import type { ProgressReporter } from "../application/ProgressReporter.js"; diff --git a/src/hopper/HopperDiagnostics.ts b/src/hopper/HopperDiagnostics.ts index 7b8323d13..b40e607d3 100644 --- a/src/hopper/HopperDiagnostics.ts +++ b/src/hopper/HopperDiagnostics.ts @@ -1,4 +1,4 @@ -import type { HopperDiagnosticType } from "../domain/errors.js"; +import type { HopperDiagnosticType } from "../domain/hopperErrors.js"; import type { ProcessCleanupResult } from "../process/ProcessOwnership.js"; import type { ProviderProcessLaunch, diff --git a/src/hopper/HopperProcessDiagnostic.ts b/src/hopper/HopperProcessDiagnostic.ts index f92938733..2bfc2426d 100644 --- a/src/hopper/HopperProcessDiagnostic.ts +++ b/src/hopper/HopperProcessDiagnostic.ts @@ -1,7 +1,7 @@ import { hopperStartupFailure, type HopperStartupFailureDiagnostic, -} from "../domain/errors.js"; +} from "../domain/hopperStartupFailure.js"; import type { ProviderProcessDiagnostic } from "../process/ProviderProcess.js"; import { parseLinuxPrivateDisplayDiagnostic } from "./LinuxPrivateDisplayDiagnostic.js"; diff --git a/src/hopper/HopperProvider.ts b/src/hopper/HopperProvider.ts index 6955247c6..439287fc9 100644 --- a/src/hopper/HopperProvider.ts +++ b/src/hopper/HopperProvider.ts @@ -16,7 +16,7 @@ import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js"; import type { AppConfig } from "../config.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; import type { Logger } from "../logger.js"; -import { AnalysisCapabilityUnavailableError } from "../domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; import { err } from "../domain/result.js"; import { GENERATED_MCP_TOOL_CATALOG } from "../generatedMcpToolCatalog.js"; import { HopperApplicationLauncher } from "./BridgeLauncher.js"; diff --git a/src/hopper/HopperRequestQueue.ts b/src/hopper/HopperRequestQueue.ts index a12737458..0ae4c22fb 100644 --- a/src/hopper/HopperRequestQueue.ts +++ b/src/hopper/HopperRequestQueue.ts @@ -9,7 +9,7 @@ import { HopperProcessError, HopperProtocolError, HopperRemoteError, -} from "../domain/errors.js"; +} from "../domain/hopperErrors.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { err, type Result } from "../domain/result.js"; diff --git a/src/hopper/HopperSessionValues.ts b/src/hopper/HopperSessionValues.ts index cac9ba182..d8e748c91 100644 --- a/src/hopper/HopperSessionValues.ts +++ b/src/hopper/HopperSessionValues.ts @@ -1,4 +1,4 @@ -import { HopperProtocolError } from "../domain/errors.js"; +import { HopperProtocolError } from "../domain/hopperErrors.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { err, ok, type Result } from "../domain/result.js"; diff --git a/src/hopper/HopperSocketConnection.ts b/src/hopper/HopperSocketConnection.ts index a59d50831..8333bb164 100644 --- a/src/hopper/HopperSocketConnection.ts +++ b/src/hopper/HopperSocketConnection.ts @@ -1,6 +1,9 @@ import { createConnection, type Socket } from "node:net"; -import { HopperCancelledError, HopperStartError } from "../domain/errors.js"; +import { + HopperCancelledError, + HopperStartError, +} from "../domain/hopperErrors.js"; import { err, ok, type Result } from "../domain/result.js"; /** Open one abort-aware Hopper Unix-socket connection attempt. */ diff --git a/src/hopper/HopperTargetLease.ts b/src/hopper/HopperTargetLease.ts index 9edff5b6f..9203c7c77 100644 --- a/src/hopper/HopperTargetLease.ts +++ b/src/hopper/HopperTargetLease.ts @@ -7,7 +7,7 @@ import { type Socket, } from "node:net"; import { join, resolve } from "node:path"; -import { HopperStartError } from "../domain/errors.js"; +import { HopperStartError } from "../domain/hopperErrors.js"; import { safeParseJson } from "../domain/safeJson.js"; interface HopperTargetLeaseOwner { diff --git a/src/hopper/protocol.ts b/src/hopper/protocol.ts index 9c74111e9..10c109bc4 100644 --- a/src/hopper/protocol.ts +++ b/src/hopper/protocol.ts @@ -1,6 +1,9 @@ import { z } from "zod"; -import { HopperProtocolError, HopperRemoteError } from "../domain/errors.js"; +import { + HopperProtocolError, + HopperRemoteError, +} from "../domain/hopperErrors.js"; import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js"; import { err, ok, type Result } from "../domain/result.js"; import { safeParseJson } from "../domain/safeJson.js"; diff --git a/src/main.ts b/src/main.ts index 0188a0aa8..920b0a694 100644 --- a/src/main.ts +++ b/src/main.ts @@ -8,7 +8,7 @@ import { serveStdio } from "@modelcontextprotocol/server/stdio"; import { parseConfig } from "./config.js"; import { createBinarySession } from "./application/runtime.js"; import { createLogger } from "./logger.js"; -import { projectAnalysisError } from "./domain/errors.js"; +import { projectAnalysisError } from "./domain/analysisErrorProjection.js"; import type { RuntimeDependencies } from "./main/types.js"; import { SERVER_START_FAILED } from "./main/messages.js"; import { createRuntimeState } from "./main/state.js"; diff --git a/src/main/startup.ts b/src/main/startup.ts index d0ff96a81..e05915fb3 100644 --- a/src/main/startup.ts +++ b/src/main/startup.ts @@ -1,7 +1,7 @@ import type { BinarySession } from "../application/BinarySession.js"; import type { AppConfig } from "../config.js"; import type { Logger } from "../logger.js"; -import { projectAnalysisError } from "../domain/errors.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; export const openInitialTarget = async ( session: BinarySession, diff --git a/src/native/AppleDispatchMetadata.ts b/src/native/AppleDispatchMetadata.ts index 8ad2f57b3..3bd301c6d 100644 --- a/src/native/AppleDispatchMetadata.ts +++ b/src/native/AppleDispatchMetadata.ts @@ -7,10 +7,8 @@ import { type ObjcSwiftMetadata, } from "../domain/objcSwiftMetadata.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { - AnalysisCancelledError, - EvidenceIntegrityError, -} from "../domain/errors.js"; +import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; import { decodeSwiftClassVtables } from "./AppleSwiftVtables.js"; import { createObjcProtocolReader } from "./AppleObjcProtocols.js"; diff --git a/src/native/NativeMacOSProvider.ts b/src/native/NativeMacOSProvider.ts index e92500f8e..4a0e4b016 100644 --- a/src/native/NativeMacOSProvider.ts +++ b/src/native/NativeMacOSProvider.ts @@ -24,9 +24,9 @@ import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisOutputError, - ProviderAdapterError, - AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; +import { AnalysisError } from "../domain/analysisErrorBase.js"; import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js"; import { demangleSwiftSchema, diff --git a/src/native/NativeMachoInspection.ts b/src/native/NativeMachoInspection.ts index 29d909b09..4593069d3 100644 --- a/src/native/NativeMachoInspection.ts +++ b/src/native/NativeMachoInspection.ts @@ -1,6 +1,6 @@ import type { BinaryTarget } from "../domain/binaryTarget.js"; import type { EvidenceLocation } from "../domain/evidence.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { inspectMachoSchema, type NativeCommandInvocation, diff --git a/src/native/NativeUiObservation.ts b/src/native/NativeUiObservation.ts index 1ddf7d1b8..b58964d11 100644 --- a/src/native/NativeUiObservation.ts +++ b/src/native/NativeUiObservation.ts @@ -11,9 +11,9 @@ import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, - ProviderAdapterError, - type AnalysisError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; +import { ProviderAdapterError } from "../domain/providerAdapterError.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../domain/result.js"; import { createNativeUiHelperRuntime } from "./NativeUiHelperRuntime.js"; diff --git a/src/native/parsers/plist.ts b/src/native/parsers/plist.ts index 89244c1dd..65f4748e2 100644 --- a/src/native/parsers/plist.ts +++ b/src/native/parsers/plist.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -import { AnalysisOutputError } from "../../domain/errors.js"; +import { AnalysisOutputError } from "../../domain/analysisErrorCore.js"; import { err, ok, type Result } from "../../domain/result.js"; import { safeParseJson } from "../../domain/safeJson.js"; diff --git a/src/server/recordDerivedEvidence.ts b/src/server/recordDerivedEvidence.ts index 877be2acf..9f7b3fdde 100644 --- a/src/server/recordDerivedEvidence.ts +++ b/src/server/recordDerivedEvidence.ts @@ -1,5 +1,5 @@ import type { BinarySessionPort } from "../application/BinarySession.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import type { RecordUnknownInput } from "../domain/residualUnknown.js"; import { ok, type Result } from "../domain/result.js"; diff --git a/src/server/registerBrowserTools.ts b/src/server/registerBrowserTools.ts index 4fa2c900e..80f7eff24 100644 --- a/src/server/registerBrowserTools.ts +++ b/src/server/registerBrowserTools.ts @@ -15,7 +15,7 @@ import { import type { ProgressReporter } from "../application/ProgressReporter.js"; import { BROWSER_TOOL_CONTRACTS } from "../contracts/browserToolContracts.js"; import type { ToolContract } from "../contracts/toolContracts.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import { analyzeWebBundleInputSchema } from "../domain/webBundleAnalysis.js"; import { inspectWebPageInputSchema } from "../domain/browserObservation.js"; diff --git a/src/server/registerElectronTools.ts b/src/server/registerElectronTools.ts index 647ac5641..e6ce905e2 100644 --- a/src/server/registerElectronTools.ts +++ b/src/server/registerElectronTools.ts @@ -13,7 +13,7 @@ import { reconcileJavaScriptRuntimeEvidenceValidated } from "../application/Java import type { ProgressReporter } from "../application/ProgressReporter.js"; import { ELECTRON_TOOL_CONTRACTS } from "../contracts/electronToolContracts.js"; import type { ToolContract } from "../contracts/toolContracts.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import type { Result } from "../domain/result.js"; import { inspectElectronPageInputSchema } from "../domain/electronObservation.js"; diff --git a/src/server/registerEnhancedTools.ts b/src/server/registerEnhancedTools.ts index f43e8f4dc..eb73a6f85 100644 --- a/src/server/registerEnhancedTools.ts +++ b/src/server/registerEnhancedTools.ts @@ -17,7 +17,7 @@ import { import { toolContract, type ToolContract } from "../contracts/toolContracts.js"; import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { UnknownRegistryError } from "../domain/errors.js"; +import { UnknownRegistryError } from "../domain/unknownRegistryError.js"; import { createEvidence } from "../domain/evidence.js"; import type { JsonValue } from "../domain/jsonValue.js"; import type { Logger } from "../logger.js"; diff --git a/src/server/registerFunctionComparisonTool.ts b/src/server/registerFunctionComparisonTool.ts index c43e8ab32..72b67f33f 100644 --- a/src/server/registerFunctionComparisonTool.ts +++ b/src/server/registerFunctionComparisonTool.ts @@ -7,7 +7,7 @@ import { parseEvidence, type Evidence, } from "../domain/evidence.js"; -import { EvidenceIntegrityError } from "../domain/errors.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; import { err } from "../domain/result.js"; import { compareFunctions } from "../domain/functionComparison.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; diff --git a/src/server/registerInvestigationTools/helpers.ts b/src/server/registerInvestigationTools/helpers.ts index 602b1e5b7..211b5bfeb 100644 --- a/src/server/registerInvestigationTools/helpers.ts +++ b/src/server/registerInvestigationTools/helpers.ts @@ -1,9 +1,7 @@ import type { BinarySessionPort } from "../../application/BinarySession.js"; import type { Evidence } from "../../domain/evidence.js"; -import { - EvidenceIntegrityError, - type AnalysisError, -} from "../../domain/errors.js"; +import { EvidenceIntegrityError } from "../../domain/evidenceErrors.js"; +import { type AnalysisError } from "../../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../../domain/result.js"; import { recordDerivedEvidence } from "../recordDerivedEvidence.js"; import type { WorkflowUnknownInput } from "./types.js"; diff --git a/src/server/registerJavaScriptRuntimeObservationTools.ts b/src/server/registerJavaScriptRuntimeObservationTools.ts index 4eed516d3..e33a50363 100644 --- a/src/server/registerJavaScriptRuntimeObservationTools.ts +++ b/src/server/registerJavaScriptRuntimeObservationTools.ts @@ -8,7 +8,7 @@ import { } from "../application/JavaScriptRuntimeObservationService.js"; import { JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS } from "../contracts/javascriptRuntimeObservationToolContracts.js"; import type { ToolContract } from "../contracts/toolContracts.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import type { Result } from "../domain/result.js"; import { observeJavaScriptRuntimeInputSchema } from "../domain/javascriptRuntimeObservation.js"; diff --git a/src/server/registerManagedTools.ts b/src/server/registerManagedTools.ts index 73ec0010e..2fe9dcb64 100644 --- a/src/server/registerManagedTools.ts +++ b/src/server/registerManagedTools.ts @@ -4,7 +4,7 @@ import type { AnalysisOperationPort } from "../application/AnalysisProvider.js"; import type { BinarySessionPort } from "../application/BinarySession.js"; import { MANAGED_TOOL_CONTRACTS } from "../contracts/managedToolContracts.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { AnalysisInputError } from "../domain/errors.js"; +import { AnalysisInputError } from "../domain/analysisErrorCore.js"; import { err } from "../domain/result.js"; import type { Logger } from "../logger.js"; import { registerEvidenceTools } from "./registerEvidenceTools.js"; diff --git a/src/server/registerManagedWorkflowTools/evidence.ts b/src/server/registerManagedWorkflowTools/evidence.ts index aa76d2eca..7b6e3fd78 100644 --- a/src/server/registerManagedWorkflowTools/evidence.ts +++ b/src/server/registerManagedWorkflowTools/evidence.ts @@ -1,6 +1,6 @@ import type { Evidence } from "../../domain/evidence.js"; import { parseEvidence } from "../../domain/evidence.js"; -import { EvidenceIntegrityError } from "../../domain/errors.js"; +import { EvidenceIntegrityError } from "../../domain/evidenceErrors.js"; import type { Result } from "../../domain/result.js"; import { err, ok } from "../../domain/result.js"; diff --git a/src/server/registerOfficialTools.ts b/src/server/registerOfficialTools.ts index 838af67cb..f415c5e53 100644 --- a/src/server/registerOfficialTools.ts +++ b/src/server/registerOfficialTools.ts @@ -10,7 +10,7 @@ import type { ProgressReporter } from "../application/ProgressReporter.js"; import type { ToolContract } from "../contracts/toolContracts.js"; import { OFFICIAL_TOOL_CONTRACTS } from "../contracts/officialToolContracts.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; -import type { AnalysisError } from "../domain/errors.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { createEvidence } from "../domain/evidence.js"; import { jsonObjectSchema, diff --git a/src/server/registerProcessComparisonTool.ts b/src/server/registerProcessComparisonTool.ts index 306b46da1..6fe33e8d6 100644 --- a/src/server/registerProcessComparisonTool.ts +++ b/src/server/registerProcessComparisonTool.ts @@ -2,7 +2,7 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; import { toolContract } from "../contracts/toolContracts.js"; -import { EvidenceIntegrityError } from "../domain/errors.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; import { createEvidence, parseEvidence, diff --git a/src/server/registerSessionTools.ts b/src/server/registerSessionTools.ts index 3c8ef1138..98ec5a637 100644 --- a/src/server/registerSessionTools.ts +++ b/src/server/registerSessionTools.ts @@ -11,7 +11,8 @@ import { createProcessCaptureEvidence } from "../application/ProcessEvidence.js" import { captureProcessScenario } from "../application/ProcessHarness.js"; import { toolContract } from "../contracts/toolContracts.js"; import type { AnalysisSnapshot } from "../domain/analysisSnapshot.js"; -import { UnknownRegistryError, type AnalysisError } from "../domain/errors.js"; +import { UnknownRegistryError } from "../domain/unknownRegistryError.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import type { ProcessCapture } from "../domain/processCapture.js"; import { ok, type Result } from "../domain/result.js"; diff --git a/src/server/runDerivedOperation.ts b/src/server/runDerivedOperation.ts index f2c8ac319..1fbdf39ba 100644 --- a/src/server/runDerivedOperation.ts +++ b/src/server/runDerivedOperation.ts @@ -4,7 +4,7 @@ import { setImmediate } from "node:timers/promises"; import { AnalysisCancelledError, AnalysisInputError, -} from "../domain/errors.js"; +} from "../domain/analysisErrorCore.js"; import { err, ok, type Result } from "../domain/result.js"; import { mcpProgressReporter, type McpProgressContext } from "./mcpProgress.js"; diff --git a/src/server/sessionEvidence.ts b/src/server/sessionEvidence.ts index 8f24cbca8..b0669a6db 100644 --- a/src/server/sessionEvidence.ts +++ b/src/server/sessionEvidence.ts @@ -1,5 +1,5 @@ import type { BinarySessionPort } from "../application/BinarySession.js"; -import { EvidenceIntegrityError } from "../domain/errors.js"; +import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; import type { Evidence } from "../domain/evidence.js"; import { ok, type Result } from "../domain/result.js"; diff --git a/src/server/toolResult.ts b/src/server/toolResult.ts index d0e671dda..f74dfe32d 100644 --- a/src/server/toolResult.ts +++ b/src/server/toolResult.ts @@ -1,7 +1,8 @@ import type { CallToolResult } from "@modelcontextprotocol/server"; import type { ToolContract } from "../contracts/toolContracts.js"; -import { projectAnalysisError, type AnalysisError } from "../domain/errors.js"; +import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; +import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { JsonValue } from "../domain/jsonValue.js"; import type { Result } from "../domain/result.js"; diff --git a/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts b/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts index e42b4cf3b..bea1b8e73 100644 --- a/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts +++ b/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts @@ -13,7 +13,7 @@ import { } from "../../../src/application/JavaScriptApplicationWorkflowService.js"; import { reconcileJavaScriptRuntimeEvidence } from "../../../src/application/JavaScriptRuntimeReconciliationService.js"; import { createEvidence } from "../../../src/domain/evidence.js"; -import { AnalysisInputError } from "../../../src/domain/errors.js"; +import { AnalysisInputError } from "../../../src/domain/analysisErrorCore.js"; import { jsonValueSchema } from "../../../src/domain/jsonValue.js"; import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; import { diff --git a/tests/boundary/mcp/browserScenarioMcp.test.ts b/tests/boundary/mcp/browserScenarioMcp.test.ts index 71c967b8b..aa1b76ec3 100644 --- a/tests/boundary/mcp/browserScenarioMcp.test.ts +++ b/tests/boundary/mcp/browserScenarioMcp.test.ts @@ -14,7 +14,7 @@ import { browserScenarioCaptureSchema, type BrowserScenarioCapture, } from "../../../src/domain/browserScenarioCapture.js"; -import type { AnalysisError } from "../../../src/domain/errors.js"; +import type { AnalysisError } from "../../../src/domain/analysisErrorBase.js"; import { ok, type Result } from "../../../src/domain/result.js"; import { createServer } from "../../../src/server/createServer.js"; import { observed } from "../../fixtures/analysisExecution.js"; diff --git a/tests/boundary/mcp/enhancedTools.01-lists-the-complete-target-open.test.ts b/tests/boundary/mcp/enhancedTools.01-lists-the-complete-target-open.test.ts index ea07d543a..a5d5aac0f 100644 --- a/tests/boundary/mcp/enhancedTools.01-lists-the-complete-target-open.test.ts +++ b/tests/boundary/mcp/enhancedTools.01-lists-the-complete-target-open.test.ts @@ -13,7 +13,7 @@ import { observed as ok } from "../../fixtures/analysisExecution.js"; import { createAnalysisExecution } from "../../../src/application/AnalysisProvider.js"; import { ok as resultOk } from "../../../src/domain/result.js"; import { err } from "../../../src/domain/result.js"; -import { AnalysisCapabilityUnavailableError } from "../../../src/domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../../../src/domain/analysisErrorCore.js"; const targetObservation = (value: unknown) => resultOk( diff --git a/tests/boundary/mcp/enhancedTools.03-returns-typed-graph-failures-and.test.ts b/tests/boundary/mcp/enhancedTools.03-returns-typed-graph-failures-and.test.ts index 6606b3401..9c13b8b70 100644 --- a/tests/boundary/mcp/enhancedTools.03-returns-typed-graph-failures-and.test.ts +++ b/tests/boundary/mcp/enhancedTools.03-returns-typed-graph-failures-and.test.ts @@ -2,7 +2,7 @@ import { afterEach, describe, expect, it } from "vitest"; import type { AnalysisOperationPort } from "../../../src/application/AnalysisProvider.js"; import { EnhancedTools } from "../../../src/application/EnhancedTools.js"; -import { AnalysisOutputError } from "../../../src/domain/errors.js"; +import { AnalysisOutputError } from "../../../src/domain/analysisErrorCore.js"; import { err } from "../../../src/domain/result.js"; import { diff --git a/tests/boundary/mcp/enhancedTools.callPathsAndBatches.test.ts b/tests/boundary/mcp/enhancedTools.callPathsAndBatches.test.ts index 1ee7dc413..25d71764e 100644 --- a/tests/boundary/mcp/enhancedTools.callPathsAndBatches.test.ts +++ b/tests/boundary/mcp/enhancedTools.callPathsAndBatches.test.ts @@ -2,7 +2,7 @@ import { afterEach, describe, expect, it } from "vitest"; import type { AnalysisOperationPort } from "../../../src/application/AnalysisProvider.js"; import { EnhancedTools } from "../../../src/application/EnhancedTools.js"; -import { AnalysisOutputError } from "../../../src/domain/errors.js"; +import { AnalysisOutputError } from "../../../src/domain/analysisErrorCore.js"; import { err } from "../../../src/domain/result.js"; import { closeEnhancedToolResources, connect } from "./enhancedToolsHarness.js"; diff --git a/tests/boundary/mcp/officialTools.test.ts b/tests/boundary/mcp/officialTools.test.ts index 95eac48ef..7c3c7caba 100644 --- a/tests/boundary/mcp/officialTools.test.ts +++ b/tests/boundary/mcp/officialTools.test.ts @@ -3,7 +3,7 @@ import { afterEach, describe, expect, it } from "vitest"; import type { AnalysisOperationPort } from "../../../src/application/AnalysisProvider.js"; import { OFFICIAL_TOOL_CONTRACTS } from "../../../src/contracts/officialToolContracts.js"; -import { HopperRemoteError } from "../../../src/domain/errors.js"; +import { HopperRemoteError } from "../../../src/domain/hopperErrors.js"; import { err } from "../../../src/domain/result.js"; import { observed as ok } from "../../fixtures/analysisExecution.js"; import type { JsonValue } from "../../../src/domain/jsonValue.js"; diff --git a/tests/boundary/mcp/progressMcp.test.ts b/tests/boundary/mcp/progressMcp.test.ts index f03ad83d5..ff0a94216 100644 --- a/tests/boundary/mcp/progressMcp.test.ts +++ b/tests/boundary/mcp/progressMcp.test.ts @@ -2,7 +2,7 @@ import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; import { describe, expect, it } from "vitest"; import type { AnalysisOperationPort } from "../../../src/application/AnalysisProvider.js"; -import { AnalysisCancelledError } from "../../../src/domain/errors.js"; +import { AnalysisCancelledError } from "../../../src/domain/analysisErrorCore.js"; import { err } from "../../../src/domain/result.js"; import { createServer } from "../../../src/server/createServer.js"; import { observed } from "../../fixtures/analysisExecution.js"; diff --git a/tests/boundary/mcp/serverLifecycleMcp.test.ts b/tests/boundary/mcp/serverLifecycleMcp.test.ts index 539b1b1dc..af5ba7c13 100644 --- a/tests/boundary/mcp/serverLifecycleMcp.test.ts +++ b/tests/boundary/mcp/serverLifecycleMcp.test.ts @@ -3,7 +3,7 @@ import type { CallToolResult } from "@modelcontextprotocol/server"; import { afterEach, expect, it } from "vitest"; import type { AnalysisOperationPort } from "../../../src/application/AnalysisProvider.js"; -import { HopperRemoteError } from "../../../src/domain/errors.js"; +import { HopperRemoteError } from "../../../src/domain/hopperErrors.js"; import { err } from "../../../src/domain/result.js"; import { observed as ok } from "../../fixtures/analysisExecution.js"; import { createServer } from "../../../src/server/createServer.js"; diff --git a/tests/boundary/mcp/serverUnknownsMcp.test.ts b/tests/boundary/mcp/serverUnknownsMcp.test.ts index ecc905944..88286dd86 100644 --- a/tests/boundary/mcp/serverUnknownsMcp.test.ts +++ b/tests/boundary/mcp/serverUnknownsMcp.test.ts @@ -9,7 +9,7 @@ import type { AnalysisProvider, CapabilityDescriptor, } from "../../../src/application/AnalysisProvider.js"; -import { AnalysisCapabilityUnavailableError } from "../../../src/domain/errors.js"; +import { AnalysisCapabilityUnavailableError } from "../../../src/domain/analysisErrorCore.js"; import { err } from "../../../src/domain/result.js"; import { observed as ok } from "../../fixtures/analysisExecution.js"; import { createServer } from "../../../src/server/createServer.js"; diff --git a/tests/boundary/mcp/toolResult.test.ts b/tests/boundary/mcp/toolResult.test.ts index b4168d9a3..224f47380 100644 --- a/tests/boundary/mcp/toolResult.test.ts +++ b/tests/boundary/mcp/toolResult.test.ts @@ -4,7 +4,7 @@ import { z } from "zod"; import type { ToolContract } from "../../../src/contracts/toolContracts.js"; import { ok } from "../../../src/domain/result.js"; import { err } from "../../../src/domain/result.js"; -import { HopperProcessError } from "../../../src/domain/errors.js"; +import { HopperProcessError } from "../../../src/domain/hopperErrors.js"; import { toCallToolResult } from "../../../src/server/toolResult.js"; import { createEvidence, parseEvidence } from "../../../src/domain/evidence.js"; import type { JsonValue } from "../../../src/domain/jsonValue.js"; diff --git a/tests/boundary/providers/hopper/hopperClient.cleanup.test.ts b/tests/boundary/providers/hopper/hopperClient.cleanup.test.ts index a7d8ff75f..ae8f3cd99 100644 --- a/tests/boundary/providers/hopper/hopperClient.cleanup.test.ts +++ b/tests/boundary/providers/hopper/hopperClient.cleanup.test.ts @@ -4,7 +4,7 @@ import { fileURLToPath } from "node:url"; import { afterEach, describe, expect, it } from "vitest"; -import { projectAnalysisError } from "../../../../src/domain/errors.js"; +import { projectAnalysisError } from "../../../../src/domain/analysisErrorProjection.js"; import { ok } from "../../../../src/domain/result.js"; import type { BridgeLauncher, diff --git a/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts b/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts index 226ab96a2..a0d157e1c 100644 --- a/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts +++ b/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts @@ -4,7 +4,7 @@ import { fileURLToPath } from "node:url"; import { afterEach, describe, expect, it } from "vitest"; -import { projectAnalysisError } from "../../../../src/domain/errors.js"; +import { projectAnalysisError } from "../../../../src/domain/analysisErrorProjection.js"; import type { HopperStartupDiagnostic } from "../../../../src/domain/hopperStartupFailure.js"; import { ok } from "../../../../src/domain/result.js"; import type { diff --git a/tests/composition/analysis-sessions/binarySession.test.ts b/tests/composition/analysis-sessions/binarySession.test.ts index c0635deb9..0f6c47e53 100644 --- a/tests/composition/analysis-sessions/binarySession.test.ts +++ b/tests/composition/analysis-sessions/binarySession.test.ts @@ -6,10 +6,8 @@ import type { BinarySession } from "../../../src/application/BinarySession.js"; import type { JsonValue } from "../../../src/domain/jsonValue.js"; import type { RecordUnknownInput } from "../../../src/domain/residualUnknown.js"; import { createAnalysisProfile } from "../../../src/domain/analysisProfile.js"; -import { - HopperStartError, - ProviderAdapterError, -} from "../../../src/domain/errors.js"; +import { HopperStartError } from "../../../src/domain/hopperErrors.js"; +import { ProviderAdapterError } from "../../../src/domain/providerAdapterError.js"; import { ProviderCleanupError } from "../../../src/domain/providerCleanupError.js"; import { err, ok as resultOk } from "../../../src/domain/result.js"; import { observed as ok } from "../../fixtures/analysisExecution.js"; diff --git a/tests/composition/analysis-sessions/providerBinding.test.ts b/tests/composition/analysis-sessions/providerBinding.test.ts index f58f4ff13..e677f1609 100644 --- a/tests/composition/analysis-sessions/providerBinding.test.ts +++ b/tests/composition/analysis-sessions/providerBinding.test.ts @@ -20,10 +20,8 @@ import type { BinarySession } from "../../../src/application/BinarySession.js"; import { composeBinarySession } from "../../../src/application/BinarySessionComposition.js"; import { SessionProviderRouter } from "../../../src/application/SessionProviderRouter.js"; import { createAnalysisProfile } from "../../../src/domain/analysisProfile.js"; -import { - AnalysisCancelledError, - ProviderAdapterError, -} from "../../../src/domain/errors.js"; +import { AnalysisCancelledError } from "../../../src/domain/analysisErrorCore.js"; +import { ProviderAdapterError } from "../../../src/domain/providerAdapterError.js"; import { err, ok } from "../../../src/domain/result.js"; type DeclaredOperation = Exclude; diff --git a/tests/conformance/contracts/analysisErrorProjection.test.ts b/tests/conformance/contracts/analysisErrorProjection.test.ts index ba8a38080..228cd7ca8 100644 --- a/tests/conformance/contracts/analysisErrorProjection.test.ts +++ b/tests/conformance/contracts/analysisErrorProjection.test.ts @@ -2,14 +2,12 @@ import { describe, expect, it } from "vitest"; import { ProcessCaptureError } from "../../../src/application/ProcessCaptureError.js"; import { analysisErrorProjectionSchema } from "../../../src/contracts/errorSchemas.js"; -import { - ArtifactOperationError, - EvidenceFileError, - HopperRemoteError, - UnknownRegistryError, - projectAnalysisError, - type AnalysisError, -} from "../../../src/domain/errors.js"; +import { ArtifactOperationError } from "../../../src/domain/artifactOperationError.js"; +import { EvidenceFileError } from "../../../src/domain/evidenceErrors.js"; +import { HopperRemoteError } from "../../../src/domain/hopperErrors.js"; +import { UnknownRegistryError } from "../../../src/domain/unknownRegistryError.js"; +import { projectAnalysisError } from "../../../src/domain/analysisErrorProjection.js"; +import { type AnalysisError } from "../../../src/domain/analysisErrorBase.js"; describe("analysis error projection contract", () => { it("accepts every closed error-reason variant without exposing diagnostics", () => { diff --git a/tests/fixtures/binarySession.ts b/tests/fixtures/binarySession.ts index a118a609a..1e6ee2a5b 100644 --- a/tests/fixtures/binarySession.ts +++ b/tests/fixtures/binarySession.ts @@ -3,7 +3,8 @@ import { join } from "node:path"; import { createAnalysisProfile } from "../../src/domain/analysisProfile.js"; import type { BinaryTarget } from "../../src/domain/binaryTarget.js"; -import type { AnalysisError } from "../../src/domain/errors.js"; +import type { AnalysisError } from "../../src/domain/analysisErrorBase.js"; +import { HopperStartError } from "../../src/domain/hopperErrors.js"; import type { Result } from "../../src/domain/result.js"; import type { AnalysisClient, @@ -15,7 +16,7 @@ import type { } from "../../src/application/AnalysisProvider.js"; import { BinarySession } from "../../src/application/BinarySession.js"; import { SessionProviderRouter } from "../../src/application/SessionProviderRouter.js"; -import { HopperStartError } from "../../src/domain/errors.js"; + import { err, ok as resultOk } from "../../src/domain/result.js"; import { observed } from "./analysisExecution.js"; import { createTestTempDirectory } from "./temporaryDirectory.js"; diff --git a/tests/process-global/cliLogging.test.ts b/tests/process-global/cliLogging.test.ts index 591f5a040..84363d3fd 100644 --- a/tests/process-global/cliLogging.test.ts +++ b/tests/process-global/cliLogging.test.ts @@ -2,10 +2,8 @@ import { afterEach, describe, expect, it } from "vitest"; import { logCliCommand } from "../../src/cliLogging.js"; import { silentLogger } from "../../src/logger.js"; -import { - ArtifactOperationError, - projectAnalysisError, -} from "../../src/domain/errors.js"; +import { ArtifactOperationError } from "../../src/domain/artifactOperationError.js"; +import { projectAnalysisError } from "../../src/domain/analysisErrorProjection.js"; import { runSetup } from "../../src/application/Setup.js"; import { isSetupFailure } from "../../src/application/SetupTypes.js"; import { diff --git a/tests/support/applicationSessionFixture.ts b/tests/support/applicationSessionFixture.ts index 364426a54..d7a23371a 100644 --- a/tests/support/applicationSessionFixture.ts +++ b/tests/support/applicationSessionFixture.ts @@ -5,7 +5,7 @@ import { TextReader, Uint8ArrayWriter, ZipWriter } from "@zip.js/zip.js"; import { expect } from "vitest"; import { runProviderAnalysis } from "../../src/application/DirectAnalysis.js"; -import type { AnalysisError } from "../../src/domain/errors.js"; +import type { AnalysisError } from "../../src/domain/analysisErrorBase.js"; import { type Evidence, parseEvidence } from "../../src/domain/evidence.js"; import type { Result } from "../../src/domain/result.js"; import { createTestTempDirectory } from "../fixtures/temporaryDirectory.js";