diff --git a/.oxlintrc.json b/.oxlintrc.json index 2da0945d6f..a4618ad114 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -22,7 +22,8 @@ ], "max-params": ["warn", 4], "no-var": "warn", - "no-var-requires": "error" + "no-var-requires": "error", + "typescript/no-import-type-side-effects": "error" }, "overrides": [ { diff --git a/src/application/AnalysisContextQueries.ts b/src/application/AnalysisContextQueries.ts index b82ef410a6..cdb008e1fc 100644 --- a/src/application/AnalysisContextQueries.ts +++ b/src/application/AnalysisContextQueries.ts @@ -4,7 +4,7 @@ import type { AnalysisOperationPort, } from "./AnalysisProvider.js"; import { AnalysisOutputError } from "../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { analysisBookmarkSchema } from "../domain/hopperValues.js"; import { resolveAnalysisDocument } from "./AnalysisDocument.js"; diff --git a/src/application/BrowserObservationService.ts b/src/application/BrowserObservationService.ts index 1852dab26e..a080f1ef89 100644 --- a/src/application/BrowserObservationService.ts +++ b/src/application/BrowserObservationService.ts @@ -12,7 +12,7 @@ import type { CompareWebScreenshotsInput, } from "../domain/webScreenshot.js"; import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.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/BrowserScenarioCaptureService.ts b/src/application/BrowserScenarioCaptureService.ts index ae3500625f..3dbd488c67 100644 --- a/src/application/BrowserScenarioCaptureService.ts +++ b/src/application/BrowserScenarioCaptureService.ts @@ -2,7 +2,7 @@ import type { ExecutionOptions } from "./AnalysisProvider.js"; import type { BrowserScenarioCapturePort } from "./BrowserScenarioCapturePort.js"; import { createBrowserScenarioEvidence } from "./BrowserScenarioEvidence.js"; import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.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 7d24a3382b..b6e9eb339a 100644 --- a/src/application/CallPathTracing.ts +++ b/src/application/CallPathTracing.ts @@ -1,6 +1,6 @@ import type { AnalysisOperation } from "./AnalysisProvider.js"; import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.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/DirectAnalysis.ts b/src/application/DirectAnalysis.ts index fe95807934..c8108e6147 100644 --- a/src/application/DirectAnalysis.ts +++ b/src/application/DirectAnalysis.ts @@ -18,7 +18,7 @@ import { } from "../contracts/managed/managedToolContracts.js"; import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { access } from "node:fs/promises"; import { readAnalysisSnapshot, diff --git a/src/application/EnhancedLiteralTracing.ts b/src/application/EnhancedLiteralTracing.ts index 9278381507..9c86781bce 100644 --- a/src/application/EnhancedLiteralTracing.ts +++ b/src/application/EnhancedLiteralTracing.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import type { AnalysisOperation } from "./AnalysisProvider.js"; import { AnalysisOutputError } from "../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.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/EnhancedToolTypes.ts b/src/application/EnhancedToolTypes.ts index 05cad4303e..740e29ac4d 100644 --- a/src/application/EnhancedToolTypes.ts +++ b/src/application/EnhancedToolTypes.ts @@ -1,7 +1,7 @@ import type { z } from "zod"; import { AnalysisInputError } from "../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.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 d24fbceef3..c4ec83c6ce 100644 --- a/src/application/EnhancedTools.ts +++ b/src/application/EnhancedTools.ts @@ -12,7 +12,7 @@ import { AnalysisOutputError, } from "../domain/analysisErrorCore.js"; import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { addressDistance, functionDossierSchema, diff --git a/src/application/EvidenceBundleCommands.ts b/src/application/EvidenceBundleCommands.ts index 5f220e3a1e..7b91c05c37 100644 --- a/src/application/EvidenceBundleCommands.ts +++ b/src/application/EvidenceBundleCommands.ts @@ -1,5 +1,5 @@ import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.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/InventoryProjectionEvidence.ts b/src/application/InventoryProjectionEvidence.ts index bded3a7215..eefc4a9d92 100644 --- a/src/application/InventoryProjectionEvidence.ts +++ b/src/application/InventoryProjectionEvidence.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { AnalysisProtocolError } from "../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { createEvidence, type Evidence, diff --git a/src/application/ReconstructionCoverageService.ts b/src/application/ReconstructionCoverageService.ts index 66cad4e768..bd17cf0cab 100644 --- a/src/application/ReconstructionCoverageService.ts +++ b/src/application/ReconstructionCoverageService.ts @@ -2,7 +2,7 @@ import { z } from "zod"; import { reconstructionCoverageEvaluationInputSchema } from "../domain/reconstructionCoverageInput.js"; import { AnalysisInputError } from "../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { evaluateReconstructionClosure } from "../domain/reconstructionCoverage.js"; import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js"; import { err, ok, type Result } from "../domain/result.js"; diff --git a/src/application/ReconstructionObligationLedgerService.ts b/src/application/ReconstructionObligationLedgerService.ts index 8314bff3b5..e0b1f160a2 100644 --- a/src/application/ReconstructionObligationLedgerService.ts +++ b/src/application/ReconstructionObligationLedgerService.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { AnalysisProtocolError } from "../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.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/ReferenceSourceImport.ts b/src/application/ReferenceSourceImport.ts index 3b8ace1e7d..769f8bb8cd 100644 --- a/src/application/ReferenceSourceImport.ts +++ b/src/application/ReferenceSourceImport.ts @@ -18,9 +18,9 @@ import type { } from "../reference/ReferenceSourceReaderTypes.js"; import { parseReferenceSourceEntries } from "./ReferenceSourceImportEntries.js"; import { readReferenceSourceVcs } from "./ReferenceSourceVcsAdapter.js"; -import { - type ReferenceSourceImportError, - type ReferenceSourceImportOptions, +import type { + ReferenceSourceImportError, + ReferenceSourceImportOptions, } from "./ReferenceSourceImportTypes.js"; import { prepareReferenceSourceImport, diff --git a/src/application/Setup.fixture.ts b/src/application/Setup.fixture.ts index bf9a978104..1fae2d931d 100644 --- a/src/application/Setup.fixture.ts +++ b/src/application/Setup.fixture.ts @@ -1,10 +1,10 @@ import { skillDestinations } from "./SetupSkill.js"; -import { - type ClientConfigurationInspection, - type ClientConfigurationResult, - type SetupHost, - type SetupOptions, - type SetupProviderEnvironment, +import type { + ClientConfigurationInspection, + ClientConfigurationResult, + SetupHost, + SetupOptions, + SetupProviderEnvironment, } from "./SetupTypes.js"; import type { SetupClient } from "./SupportedClients.js"; import type { SetupHopperInstallResult } from "./SetupInstallFailure.js"; diff --git a/src/application/binary/AnalysisSnapshotCache.ts b/src/application/binary/AnalysisSnapshotCache.ts index 7d807065ca..295b21636f 100644 --- a/src/application/binary/AnalysisSnapshotCache.ts +++ b/src/application/binary/AnalysisSnapshotCache.ts @@ -7,7 +7,7 @@ import { AnalysisSnapshotMismatchError, } from "../../domain/evidenceErrors.js"; import { NoBinaryOpenError } from "../../domain/configurationErrors.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../../domain/result.js"; import { analysisQueryId, diff --git a/src/application/binary/BinarySession.ts b/src/application/binary/BinarySession.ts index bcf4da184d..d64e04f899 100644 --- a/src/application/binary/BinarySession.ts +++ b/src/application/binary/BinarySession.ts @@ -6,7 +6,7 @@ import { type AnalysisProfileCommitment, } from "../../domain/analysisProfile.js"; import { AnalysisCancelledError } from "../../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.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/binary/BinarySessionExecution.ts b/src/application/binary/BinarySessionExecution.ts index 6893308c33..996749aae2 100644 --- a/src/application/binary/BinarySessionExecution.ts +++ b/src/application/binary/BinarySessionExecution.ts @@ -3,7 +3,7 @@ import type { BinaryTarget } from "../../domain/binaryTargetTypes.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 { 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/binary/BinarySessionOpen.ts b/src/application/binary/BinarySessionOpen.ts index 1a7f635bc8..714bed8043 100644 --- a/src/application/binary/BinarySessionOpen.ts +++ b/src/application/binary/BinarySessionOpen.ts @@ -8,12 +8,12 @@ import { } from "../../domain/analysisSnapshot.js"; import type { AnalysisSnapshot } from "../../domain/analysisSnapshot.js"; import { parseBinaryTarget } from "../BinaryTargetResolver.js"; -import { type BinaryTarget } from "../../domain/binaryTargetTypes.js"; +import type { BinaryTarget } from "../../domain/binaryTargetTypes.js"; import { EvidenceIntegrityError, AnalysisSnapshotMismatchError, } from "../../domain/evidenceErrors.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.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/binary/BinarySessionRecords.ts b/src/application/binary/BinarySessionRecords.ts index 884c02ff38..1f94dcdfd8 100644 --- a/src/application/binary/BinarySessionRecords.ts +++ b/src/application/binary/BinarySessionRecords.ts @@ -9,8 +9,8 @@ import { EvidenceIntegrityError, AnalysisSnapshotMismatchError, } from "../../domain/evidenceErrors.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.js"; -import { type UnknownRegistryError } from "../../domain/unknownRegistryError.js"; +import type { AnalysisError } from "../../domain/analysisErrorBase.js"; +import type { UnknownRegistryError } from "../../domain/unknownRegistryError.js"; import type { RecordUnknownInput, ResidualUnknown, diff --git a/src/application/binary/SessionProviderRouter.ts b/src/application/binary/SessionProviderRouter.ts index 03bb028a45..dac5c183ee 100644 --- a/src/application/binary/SessionProviderRouter.ts +++ b/src/application/binary/SessionProviderRouter.ts @@ -3,7 +3,7 @@ import type { AnalysisProfileCommitment } from "../../domain/analysisProfile.js" import type { BinaryTarget } from "../../domain/binaryTargetTypes.js"; import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js"; import { ProviderSelectionError } from "../../domain/providerSelectionError.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../../domain/result.js"; import type { AnalysisClient, diff --git a/src/application/javascript/ElectronActiveObservationService.ts b/src/application/javascript/ElectronActiveObservationService.ts index 276dc5c178..5a4a84e1d7 100644 --- a/src/application/javascript/ElectronActiveObservationService.ts +++ b/src/application/javascript/ElectronActiveObservationService.ts @@ -7,7 +7,7 @@ import { AnalysisCapabilityUnavailableError, AnalysisInputError, } from "../../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../../domain/analysisErrorBase.js"; import type { Evidence } from "../../domain/evidence.js"; import type { ElectronActiveObservationInput } from "../../domain/javascript/electronActiveObservation.js"; import { err, type Result } from "../../domain/result.js"; diff --git a/src/application/javascript/ElectronObservationService.ts b/src/application/javascript/ElectronObservationService.ts index 4149db1874..307738a0f0 100644 --- a/src/application/javascript/ElectronObservationService.ts +++ b/src/application/javascript/ElectronObservationService.ts @@ -6,7 +6,7 @@ import type { ListElectronTargetsInput, } from "../../domain/javascript/electronObservation.js"; import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.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/javascript/JavaScriptApplicationWorkflowService.ts b/src/application/javascript/JavaScriptApplicationWorkflowService.ts index cdee1f8930..b76259801a 100644 --- a/src/application/javascript/JavaScriptApplicationWorkflowService.ts +++ b/src/application/javascript/JavaScriptApplicationWorkflowService.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../../domain/analysisErrorBase.js"; import type { Evidence } from "../../domain/evidence.js"; import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js"; import { compareJavaScriptApplicationVersions } from "../../domain/javascript/javascriptApplicationVersionComparison.js"; diff --git a/src/application/javascript/JavaScriptRuntimeObservationService.ts b/src/application/javascript/JavaScriptRuntimeObservationService.ts index beb9c31422..e1192a4419 100644 --- a/src/application/javascript/JavaScriptRuntimeObservationService.ts +++ b/src/application/javascript/JavaScriptRuntimeObservationService.ts @@ -6,7 +6,7 @@ import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, } from "../../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../../domain/analysisErrorBase.js"; import type { ListJavaScriptRuntimeTargetsInput, ObserveJavaScriptRuntimeInput, diff --git a/src/application/javascript/JavaScriptRuntimeReconciliationService.ts b/src/application/javascript/JavaScriptRuntimeReconciliationService.ts index ca96d81bc1..6c2d0dbcfe 100644 --- a/src/application/javascript/JavaScriptRuntimeReconciliationService.ts +++ b/src/application/javascript/JavaScriptRuntimeReconciliationService.ts @@ -2,7 +2,7 @@ import { resolve } from "node:path"; import { z } from "zod"; import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../../domain/analysisErrorBase.js"; import type { Evidence } from "../../domain/evidence.js"; import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js"; import { diff --git a/src/application/javascript/JavaScriptSemanticTraceService.ts b/src/application/javascript/JavaScriptSemanticTraceService.ts index 24413df439..0a51a9398d 100644 --- a/src/application/javascript/JavaScriptSemanticTraceService.ts +++ b/src/application/javascript/JavaScriptSemanticTraceService.ts @@ -4,7 +4,7 @@ import { AnalysisInputError, AnalysisProtocolError, } from "../../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../../domain/analysisErrorBase.js"; import { applicationGraphEvidenceInputError, parseApplicationGraphEvidence, diff --git a/src/application/managed/ManagedApplicationGraphService.ts b/src/application/managed/ManagedApplicationGraphService.ts index 5144cc8978..c1a2c8f8cd 100644 --- a/src/application/managed/ManagedApplicationGraphService.ts +++ b/src/application/managed/ManagedApplicationGraphService.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../../domain/analysisErrorBase.js"; import { createEvidence, type Evidence, diff --git a/src/application/managed/ManagedMemberComparisonService.ts b/src/application/managed/ManagedMemberComparisonService.ts index 7f7ac75f61..1c0ac8456b 100644 --- a/src/application/managed/ManagedMemberComparisonService.ts +++ b/src/application/managed/ManagedMemberComparisonService.ts @@ -11,7 +11,7 @@ import { import { parseManagedMemberEvidence } from "../../domain/managed/managedMemberComparisonMatch.js"; import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js"; import { EvidenceIntegrityError } from "../../domain/evidenceErrors.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.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/managed/ManagedNativeVerificationService.ts b/src/application/managed/ManagedNativeVerificationService.ts index 7615bd098f..09929198e2 100644 --- a/src/application/managed/ManagedNativeVerificationService.ts +++ b/src/application/managed/ManagedNativeVerificationService.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.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/managed/ManagedReconstructionService.ts b/src/application/managed/ManagedReconstructionService.ts index 0fec81e130..3ac0883199 100644 --- a/src/application/managed/ManagedReconstructionService.ts +++ b/src/application/managed/ManagedReconstructionService.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.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/artifacts/ArtifactProvider.ts b/src/artifacts/ArtifactProvider.ts index acf4eeedb0..c51bd7f13f 100644 --- a/src/artifacts/ArtifactProvider.ts +++ b/src/artifacts/ArtifactProvider.ts @@ -28,7 +28,7 @@ import { AnalysisUnsupportedTargetError, } from "../domain/analysisErrorCore.js"; import { ArtifactOperationError } from "../domain/artifactOperationError.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { interfaceBuilderLimitsSchema } from "../domain/apple/interfaceBuilderGraph.js"; import { err, ok, type Result } from "../domain/result.js"; diff --git a/src/artifacts/extraction/ArtifactExtraction.ts b/src/artifacts/extraction/ArtifactExtraction.ts index f38f601c17..7dd23bcac0 100644 --- a/src/artifacts/extraction/ArtifactExtraction.ts +++ b/src/artifacts/extraction/ArtifactExtraction.ts @@ -27,9 +27,9 @@ import { type IntegrityContradiction, } from "../../domain/artifactGraph.js"; import { AnalysisUnsupportedTargetError } from "../../domain/analysisErrorCore.js"; -import { - type ArtifactResourceOwner, - type ArtifactResourceScope, +import type { + ArtifactResourceOwner, + ArtifactResourceScope, } from "../ArtifactResourceScope.js"; import type { BinaryTarget } from "../../domain/binaryTargetTypes.js"; import type { ArtifactInventorySnapshot } from "../../domain/artifactInventorySnapshot.js"; diff --git a/src/artifacts/inventory/classify.ts b/src/artifacts/inventory/classify.ts index 6534fcfdf2..c6c3fb3536 100644 --- a/src/artifacts/inventory/classify.ts +++ b/src/artifacts/inventory/classify.ts @@ -12,7 +12,7 @@ import { zipPackageFormatForPath, } from "../../domain/zipPackageFormat.js"; import { ArtifactReaderFailure } from "../ArtifactReader.js"; -import { type ArtifactResourceOwner } from "../ArtifactResourceScope.js"; +import type { ArtifactResourceOwner } from "../ArtifactResourceScope.js"; import type { HashResult } from "../ArtifactHash.js"; import { hashStableRootArtifactHandle, diff --git a/src/artifacts/inventory/scanCanonical.ts b/src/artifacts/inventory/scanCanonical.ts index 0985773114..1eb3a74d2b 100644 --- a/src/artifacts/inventory/scanCanonical.ts +++ b/src/artifacts/inventory/scanCanonical.ts @@ -34,7 +34,7 @@ import { artifactManifestId, } from "../../domain/artifactIdentity.js"; import { classifyAndHashRootForInventory } from "./classify.js"; -import { type HashResult } from "../ArtifactHash.js"; +import type { HashResult } from "../ArtifactHash.js"; import { hashStableRootArtifact, hashStableRootArtifactHandle, diff --git a/src/browser/CdpBrowserProvider.ts b/src/browser/CdpBrowserProvider.ts index 72838626d6..7138710775 100644 --- a/src/browser/CdpBrowserProvider.ts +++ b/src/browser/CdpBrowserProvider.ts @@ -46,7 +46,7 @@ import { AnalysisError } from "../domain/analysisErrorBase.js"; import { AnalysisInputError } from "../domain/analysisErrorCore.js"; import { BrowserObservationError } from "../domain/browserObservationError.js"; import { ProviderAdapterError } from "../domain/providerAdapterError.js"; -import { type BrowserObservationOperation } from "../domain/browserObservationErrors.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 734d5e8329..6d639a454c 100644 --- a/src/browser/CdpCaptureValues.ts +++ b/src/browser/CdpCaptureValues.ts @@ -1,6 +1,6 @@ import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; import { BrowserObservationError } from "../domain/browserObservationError.js"; -import { type BrowserObservationOperation } from "../domain/browserObservationErrors.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 2f6a3f04a2..3c7e5e86a9 100644 --- a/src/browser/CdpConnection.ts +++ b/src/browser/CdpConnection.ts @@ -4,7 +4,7 @@ import { AnalysisCancelledError } from "../domain/analysisErrorCore.js"; import { AnalysisError } from "../domain/analysisErrorBase.js"; import { BrowserObservationError } from "../domain/browserObservationError.js"; import { CdpCommandRejection } from "./CdpCommandRejection.js"; -import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; +import type { BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { safeParseJson } from "../domain/safeJson.js"; import { WEB_RUNTIME_LIMITS } from "../domain/webRuntime.js"; diff --git a/src/browser/CdpElectronProvider.ts b/src/browser/CdpElectronProvider.ts index 8191a8ec26..7d42682cb3 100644 --- a/src/browser/CdpElectronProvider.ts +++ b/src/browser/CdpElectronProvider.ts @@ -14,7 +14,7 @@ import { 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 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 178ebc65b7..1d1b8c14b8 100644 --- a/src/browser/CdpEndpoint.ts +++ b/src/browser/CdpEndpoint.ts @@ -5,7 +5,7 @@ import { z } from "zod"; 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 type { BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { sanitizeBrowserUrl } from "../domain/browserObservation.js"; import { safeParseJson } from "../domain/safeJson.js"; diff --git a/src/browser/CdpPageCapture.ts b/src/browser/CdpPageCapture.ts index fdbc81fb45..2e3fa11af8 100644 --- a/src/browser/CdpPageCapture.ts +++ b/src/browser/CdpPageCapture.ts @@ -2,7 +2,7 @@ import type { InspectWebPageInput } from "../domain/browserObservation.js"; import type { WebPageInspection } from "../domain/browserObservationSchemas.js"; import type { ProgressReporter } from "../application/ProgressReporter.js"; import { BrowserObservationError } from "../domain/browserObservationError.js"; -import { type BrowserObservationOperation } from "../domain/browserObservationErrors.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/CdpTargetSession.ts b/src/browser/CdpTargetSession.ts index 0c2b5b24f2..3e1f6eb430 100644 --- a/src/browser/CdpTargetSession.ts +++ b/src/browser/CdpTargetSession.ts @@ -1,5 +1,5 @@ import { BrowserObservationError } from "../domain/browserObservationError.js"; -import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; +import type { BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { CdpConnection } from "./CdpConnection.js"; import { cdpTargetWebSocket, diff --git a/src/browser/PlaywrightElectronActiveProvider.ts b/src/browser/PlaywrightElectronActiveProvider.ts index 5c730e2fdf..9c05465c8a 100644 --- a/src/browser/PlaywrightElectronActiveProvider.ts +++ b/src/browser/PlaywrightElectronActiveProvider.ts @@ -3,7 +3,7 @@ import { dirname } from "node:path"; import { randomUUID } from "node:crypto"; import { fileURLToPath } from "node:url"; -import { _electron as electron } from "playwright-core"; +import type { _electron as electron } from "playwright-core"; import type { ExecutionOptions, @@ -60,8 +60,9 @@ type ElectronPaths = { export class PlaywrightElectronActiveProvider implements ElectronActiveObservationPort { constructor( private readonly environment: Readonly>, - private readonly launch: typeof electron.launch = (options) => - electron.launch(options), + // Load Playwright only when a capture launches; MCP startup stays off its module graph. + private readonly launch: typeof electron.launch = async (options) => + (await import("playwright-core"))._electron.launch(options), ) {} identity(): ProviderIdentity { diff --git a/src/browser/PlaywrightScenarioBrowser.ts b/src/browser/PlaywrightScenarioBrowser.ts index 54291e5e40..615ad055ee 100644 --- a/src/browser/PlaywrightScenarioBrowser.ts +++ b/src/browser/PlaywrightScenarioBrowser.ts @@ -2,12 +2,7 @@ import { chmod, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join, resolve } from "node:path"; -import { - chromium, - type Browser, - type BrowserContext, - type Page, -} from "playwright-core"; +import type { Browser, BrowserContext, Page, chromium } from "playwright-core"; import type { BrowserScenario } from "../domain/browserScenario.js"; import { AnalysisError } from "../domain/analysisErrorBase.js"; @@ -479,7 +474,9 @@ export const openPlaywrightScenarioBrowser = async ( readonly retainCleanup?: (close: () => Promise) => void; } = {}, ): Promise => { - const launcher = options.launcher ?? chromium; + // Load Playwright only when a scenario opens; MCP startup stays off its module graph. + const launcher = + options.launcher ?? (await import("playwright-core")).chromium; if (scenario.browser.mode === "connect") return openAttachedScenarioBrowser( scenario.browser, diff --git a/src/browser/PlaywrightScenarioSession.ts b/src/browser/PlaywrightScenarioSession.ts index cfb8979dba..745561574d 100644 --- a/src/browser/PlaywrightScenarioSession.ts +++ b/src/browser/PlaywrightScenarioSession.ts @@ -1,4 +1,4 @@ -import { type BrowserContext, type Page } from "playwright-core"; +import type { BrowserContext, Page } from "playwright-core"; import type { BrowserScenario } from "../domain/browserScenario.js"; import type { BrowserScenarioAction } from "../domain/browserScenarioValues.js"; diff --git a/src/cli/applicationCommands.ts b/src/cli/applicationCommands.ts index ac13007f60..929e9064d5 100644 --- a/src/cli/applicationCommands.ts +++ b/src/cli/applicationCommands.ts @@ -16,7 +16,7 @@ import { CLI_COMMANDS } from "../cliCommandNames.js"; import { parseCliJsonInput } from "../cliJsonInput.js"; import { logCliCommand } from "../cliLogging.js"; import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { androidApplicationProjectionInputSchema } from "../domain/android/androidApplication.js"; import { appleApplicationProjectionInputSchema } from "../domain/apple/appleApplication.js"; import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js"; diff --git a/src/cli/streamedJsonOutput.ts b/src/cli/streamedJsonOutput.ts index 64977c22d1..9d21eec0fb 100644 --- a/src/cli/streamedJsonOutput.ts +++ b/src/cli/streamedJsonOutput.ts @@ -1,5 +1,5 @@ import { constants } from "node:buffer"; -import { type Writable } from "node:stream"; +import type { Writable } from "node:stream"; import { Cli, Filter } from "incur"; diff --git a/src/cliEvidenceCommands.ts b/src/cliEvidenceCommands.ts index 11a01be8c9..308a793ec3 100644 --- a/src/cliEvidenceCommands.ts +++ b/src/cliEvidenceCommands.ts @@ -10,7 +10,7 @@ import type { Logger } from "pino"; import { CLI_COMMANDS } from "./cliCommandNames.js"; import type { JsonValue } from "./domain/jsonValue.js"; import { projectAnalysisError } from "./domain/analysisErrorProjection.js"; -import { type AnalysisError } from "./domain/analysisErrorBase.js"; +import type { AnalysisError } from "./domain/analysisErrorBase.js"; /** Register caller-path Evidence commands. */ export const registerEvidenceCommands = ( diff --git a/src/domain/analysisErrorPresentation.ts b/src/domain/analysisErrorPresentation.ts index dd40bfbe60..07b2269476 100644 --- a/src/domain/analysisErrorPresentation.ts +++ b/src/domain/analysisErrorPresentation.ts @@ -27,11 +27,8 @@ import { import { ProviderSelectionError } from "./providerSelectionError.js"; import { UnknownRegistryError } from "./unknownRegistryError.js"; import { providerRetryAction } from "./providerOperationHealth.js"; -import { - type AnalysisError, - type AnalysisErrorTag, -} from "./analysisErrorBase.js"; -import { type AnalysisErrorProjection } from "./analysisErrorProjection.js"; +import type { AnalysisError, AnalysisErrorTag } from "./analysisErrorBase.js"; +import type { AnalysisErrorProjection } from "./analysisErrorProjection.js"; export const analysisErrorRemediationAction = ( error: AnalysisError, diff --git a/src/domain/analysisErrorProjection.ts b/src/domain/analysisErrorProjection.ts index be7b431b69..2ab2a6c5cc 100644 --- a/src/domain/analysisErrorProjection.ts +++ b/src/domain/analysisErrorProjection.ts @@ -40,10 +40,7 @@ import { ProviderAdapterError } from "./providerAdapterError.js"; import { ProviderSelectionError } from "./providerSelectionError.js"; import { UnknownRegistryError } from "./unknownRegistryError.js"; import { providerRetryAction } from "./providerOperationHealth.js"; -import { - type AnalysisError, - type AnalysisErrorTag, -} from "./analysisErrorBase.js"; +import type { AnalysisError, AnalysisErrorTag } from "./analysisErrorBase.js"; /** Project expected failures into exhaustive, secret-safe caller fields. */ export const projectAnalysisError = ( diff --git a/src/domain/artifactComparison.ts b/src/domain/artifactComparison.ts index 7cdd419d29..f7c27cdcf7 100644 --- a/src/domain/artifactComparison.ts +++ b/src/domain/artifactComparison.ts @@ -1,10 +1,10 @@ import { compareUnicodeCodePoints } from "./unicodeCodePointOrder.js"; import { z } from "zod"; -import { - type ArtifactInventoryResult, - type ArtifactNode, - type ArtifactOccurrence, +import type { + ArtifactInventoryResult, + ArtifactNode, + ArtifactOccurrence, } from "./artifactGraph.js"; import { evidenceSchema } from "./evidence.js"; import { diff --git a/src/domain/javascript/javascriptNativeHandoff.ts b/src/domain/javascript/javascriptNativeHandoff.ts index daf2245725..7d2f7dfb01 100644 --- a/src/domain/javascript/javascriptNativeHandoff.ts +++ b/src/domain/javascript/javascriptNativeHandoff.ts @@ -1,8 +1,8 @@ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js"; import type { Evidence } from "../evidence.js"; -import { - type ApplicationEdge, - type ApplicationNode, +import type { + ApplicationEdge, + ApplicationNode, } from "./javascriptApplicationGraphSchemas.js"; import type { ApplicationFeatureTraceResult } from "./javascriptFeatureTraceSchemas.js"; diff --git a/src/domain/javascript/javascriptRuntimeReconciliationResult.ts b/src/domain/javascript/javascriptRuntimeReconciliationResult.ts index 19226f27cb..4483a46fd7 100644 --- a/src/domain/javascript/javascriptRuntimeReconciliationResult.ts +++ b/src/domain/javascript/javascriptRuntimeReconciliationResult.ts @@ -1,4 +1,4 @@ -import { type JavaScriptApplicationGraph } from "./javascriptApplicationGraph.js"; +import type { JavaScriptApplicationGraph } from "./javascriptApplicationGraph.js"; import { digestCanonicalValue } from "../canonicalDigest.js"; import { uniqueSorted } from "../canonicalOrdering.js"; import type { StaticLoadStateProjection } from "./javascriptRuntimeLoadState.js"; diff --git a/src/domain/managed/managedApplicationGraphNodes.ts b/src/domain/managed/managedApplicationGraphNodes.ts index ff186cecc9..064b6f951e 100644 --- a/src/domain/managed/managedApplicationGraphNodes.ts +++ b/src/domain/managed/managedApplicationGraphNodes.ts @@ -8,10 +8,10 @@ import type { ApplicationNode } from "../javascript/javascriptApplicationGraphSc import { managedSourceCoverage } from "./managedApplicationGraphCoverage.js"; import type { Evidence } from "../evidence.js"; import { managedTokenScopesMatch } from "./managedInspectionEvidence.js"; -import { - type ManagedArtifactInspection, - type ManagedMemberInspection, - type ManagedNativeBoundaryInspection, +import type { + ManagedArtifactInspection, + ManagedMemberInspection, + ManagedNativeBoundaryInspection, } from "./managedArtifact.js"; import type { GraphBuildState, diff --git a/src/domain/process/processComparison.ts b/src/domain/process/processComparison.ts index 9db90cfb75..21c7bd80b6 100644 --- a/src/domain/process/processComparison.ts +++ b/src/domain/process/processComparison.ts @@ -7,7 +7,7 @@ import type { ProcessCapture } from "./processCaptureParsing.js"; import { comparableTerminalFrame } from "./processObservation.js"; import { AnalysisInputError } from "../analysisErrorCore.js"; import { jsonValueSchema } from "../jsonValue.js"; -import { type ProcessTraceSpecification } from "./processTraceSpecification.js"; +import type { ProcessTraceSpecification } from "./processTraceSpecification.js"; import { processTraceComparisonResultSchema } from "./processTraceEvaluation.js"; import { dimensionsForTraceSources, diff --git a/src/domain/process/processTraceComparison.fixture.ts b/src/domain/process/processTraceComparison.fixture.ts index b63f7e6c7c..9da69cc84b 100644 --- a/src/domain/process/processTraceComparison.fixture.ts +++ b/src/domain/process/processTraceComparison.fixture.ts @@ -4,7 +4,7 @@ import { parseProcessCapture, type ProcessCapture, } from "./processCaptureParsing.js"; -import { type ProcessTraceSpecification } from "./processTraceSpecification.js"; +import type { ProcessTraceSpecification } from "./processTraceSpecification.js"; export const emptyCapture = parseProcessCapture(EMPTY_PROCESS_CAPTURE_EXAMPLE); export const terminal = { sequence: 0, at_ms: 900, data: "Ready" }; diff --git a/src/domain/process/processTraceComparison.test.ts b/src/domain/process/processTraceComparison.test.ts index 952bb97586..caeaf79992 100644 --- a/src/domain/process/processTraceComparison.test.ts +++ b/src/domain/process/processTraceComparison.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; import { parseProcessCapture } from "./processCaptureParsing.js"; -import { type ProcessTraceSpecification } from "./processTraceSpecification.js"; +import type { ProcessTraceSpecification } from "./processTraceSpecification.js"; import { processTraceComparisonResultSchema } from "./processTraceEvaluation.js"; import { capture, diff --git a/src/dotnet/ManagedMemberInspectorCore.ts b/src/dotnet/ManagedMemberInspectorCore.ts index f867bbd022..0c5b4b3ab4 100644 --- a/src/dotnet/ManagedMemberInspectorCore.ts +++ b/src/dotnet/ManagedMemberInspectorCore.ts @@ -7,9 +7,9 @@ import type { ManagedMemberInspection, ManagedParseIssue, } from "../domain/managed/managedArtifact.js"; -import { - type ManagedMetadataLayout, - type MetadataTableLayout, +import type { + ManagedMetadataLayout, + MetadataTableLayout, } from "./ManagedMetadataLayout.js"; import { metadataRowCursor, diff --git a/src/dotnet/ManagedNativeBoundaryHelpers.ts b/src/dotnet/ManagedNativeBoundaryHelpers.ts index 4c7498a1b6..fb81e1d283 100644 --- a/src/dotnet/ManagedNativeBoundaryHelpers.ts +++ b/src/dotnet/ManagedNativeBoundaryHelpers.ts @@ -8,7 +8,7 @@ import { type ManagedNativeBoundaryInspection, type ManagedParseIssue, } from "../domain/managed/managedArtifact.js"; -import { type ManagedMetadataLayout } from "./ManagedMetadataLayout.js"; +import type { ManagedMetadataLayout } from "./ManagedMetadataLayout.js"; import { metadataRowCursor, metadataCodedToken, diff --git a/src/ghidra/GhidraAnalysisProfile.ts b/src/ghidra/GhidraAnalysisProfile.ts index fa5015dfca..4177a8495c 100644 --- a/src/ghidra/GhidraAnalysisProfile.ts +++ b/src/ghidra/GhidraAnalysisProfile.ts @@ -10,7 +10,7 @@ import { AnalysisUnsupportedTargetError, } from "../domain/analysisErrorCore.js"; import { ProviderAdapterError } from "../domain/providerAdapterError.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../domain/result.js"; import type { GhidraInstallationInspection } from "./GhidraInstallation.js"; import { diff --git a/src/ghidra/GhidraLoadImageAttest.ts b/src/ghidra/GhidraLoadImageAttest.ts index 956f570fa6..5034cec431 100644 --- a/src/ghidra/GhidraLoadImageAttest.ts +++ b/src/ghidra/GhidraLoadImageAttest.ts @@ -13,7 +13,7 @@ import { attestGhidraDosComLoadImage, attestGhidraDosLoadImage, } from "./GhidraLoadImageValues.js"; -import { type NativeAotPeResult } from "../domain/native/nativeAotPe.js"; +import type { NativeAotPeResult } from "../domain/native/nativeAotPe.js"; import type { GhidraTargetSnapshot } from "./GhidraClient.js"; import type { GhidraSessionError } from "./GhidraSessionError.js"; diff --git a/src/ghidra/GhidraProvider.ts b/src/ghidra/GhidraProvider.ts index 58501bc2ad..3ee9a6210f 100644 --- a/src/ghidra/GhidraProvider.ts +++ b/src/ghidra/GhidraProvider.ts @@ -1,13 +1,13 @@ import { snapshotEnvironment } from "../process/snapshotEnvironment.js"; -import { - type AnalysisClient, - type AnalysisClientContext, - type AnalysisProfileResolutionOptions, - type AnalysisProviderCandidate, - type CapabilityDescriptor, - type ProviderAvailability, - type ProviderIdentity, - type ProviderTargetSupport, +import type { + AnalysisClient, + AnalysisClientContext, + AnalysisProfileResolutionOptions, + AnalysisProviderCandidate, + CapabilityDescriptor, + ProviderAvailability, + ProviderIdentity, + ProviderTargetSupport, } from "../application/AnalysisProvider.js"; import type { AppConfig } from "../config/types.js"; import { diff --git a/src/ghidra/GhidraProviderClient.ts b/src/ghidra/GhidraProviderClient.ts index f024ab4229..15eb5dbd93 100644 --- a/src/ghidra/GhidraProviderClient.ts +++ b/src/ghidra/GhidraProviderClient.ts @@ -28,7 +28,7 @@ import { AnalysisResourceConstraintError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js"; import { ProviderAdapterError } from "../domain/providerAdapterError.js"; import { err, ok, type Result } from "../domain/result.js"; diff --git a/src/hopper/HopperAnalysisProfile.ts b/src/hopper/HopperAnalysisProfile.ts index 3ac7640dfe..9c1f40a1ad 100644 --- a/src/hopper/HopperAnalysisProfile.ts +++ b/src/hopper/HopperAnalysisProfile.ts @@ -14,7 +14,7 @@ import { } from "../domain/analysisErrorCore.js"; import { BinaryTargetError } from "../domain/configurationErrors.js"; import { ProviderAdapterError } from "../domain/providerAdapterError.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../domain/result.js"; import { diff --git a/src/hopper/HopperClient.ts b/src/hopper/HopperClient.ts index c001c3e5ee..0db051556d 100644 --- a/src/hopper/HopperClient.ts +++ b/src/hopper/HopperClient.ts @@ -17,7 +17,7 @@ import { HopperStartError, HopperTimeoutError, } from "../domain/hopperErrors.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { hopperStartupFailure, type HopperStartupFailureDiagnostic, diff --git a/src/inspector/V8InspectorEndpoint.ts b/src/inspector/V8InspectorEndpoint.ts index 24146d469c..fdb172591d 100644 --- a/src/inspector/V8InspectorEndpoint.ts +++ b/src/inspector/V8InspectorEndpoint.ts @@ -5,7 +5,7 @@ import type { JavaScriptRuntimeTargetLocation, } from "../domain/javascript/javascriptRuntimeObservation.js"; import { BrowserObservationError } from "../domain/browserObservationError.js"; -import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; +import type { BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { parseCdpEndpointValue, readCdpJson } from "../browser/CdpEndpoint.js"; const versionSchema = z diff --git a/src/inspector/V8InspectorProvider.ts b/src/inspector/V8InspectorProvider.ts index 78a22fe100..33a0116510 100644 --- a/src/inspector/V8InspectorProvider.ts +++ b/src/inspector/V8InspectorProvider.ts @@ -15,7 +15,7 @@ import { AnalysisError } from "../domain/analysisErrorBase.js"; import { BrowserObservationError } from "../domain/browserObservationError.js"; import type { AnalysisPartialObservation } from "../domain/analysisErrorBase.js"; import { ProviderAdapterError } from "../domain/providerAdapterError.js"; -import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; +import type { BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { err, ok, type Result } from "../domain/result.js"; import { numberValue, diff --git a/src/javascript/recovery/WakaruProvider.ts b/src/javascript/recovery/WakaruProvider.ts index 008f480968..2838738d0e 100644 --- a/src/javascript/recovery/WakaruProvider.ts +++ b/src/javascript/recovery/WakaruProvider.ts @@ -2,9 +2,9 @@ import { mkdir, mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import type { JavaScriptRecoveryPort } from "../../application/javascript/JavaScriptRecoveryPort.js"; -import { - type AnalysisExecution, - type ExecutionOptions, +import type { + AnalysisExecution, + ExecutionOptions, } from "../../application/AnalysisProvider.js"; import { SafeOutputTree } from "../../artifacts/SafeOutputTree.js"; import { SafeOutputTreeCreationFailure } from "../../artifacts/SafeOutputTreeCreationFailure.js"; diff --git a/src/native/NativeUiObservation.ts b/src/native/NativeUiObservation.ts index 9dc3371894..021e0d1322 100644 --- a/src/native/NativeUiObservation.ts +++ b/src/native/NativeUiObservation.ts @@ -13,7 +13,7 @@ import { AnalysisInputError, } from "../domain/analysisErrorCore.js"; import { ProviderAdapterError } from "../domain/providerAdapterError.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../domain/result.js"; import { createNativeUiHelperRuntime, diff --git a/src/process/ProcessOwnership.part3.test.ts b/src/process/ProcessOwnership.part3.test.ts index b782c6f77a..bab43d7a97 100644 --- a/src/process/ProcessOwnership.part3.test.ts +++ b/src/process/ProcessOwnership.part3.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from "vitest"; -import { type ProcessOwnershipHost } from "./ProcessOwnership.js"; +import type { ProcessOwnershipHost } from "./ProcessOwnership.js"; import { observeOwnedProcessLineage } from "./ProcessOwnershipObservation.js"; const ownership = { runId: "run-token", diff --git a/src/process/capture/ProcessCaptureObservation.test.ts b/src/process/capture/ProcessCaptureObservation.test.ts index 7bd54a124c..ddf0ffd428 100644 --- a/src/process/capture/ProcessCaptureObservation.test.ts +++ b/src/process/capture/ProcessCaptureObservation.test.ts @@ -5,7 +5,7 @@ import { buildCaptureResult } from "./ProcessCaptureLifecycle.js"; import { isInitializedPtyRoot, readLinuxChildren } from "./ProcessSampling.js"; import { TerminalRenderer } from "./TerminalRenderer.js"; import { parseProcessScenario } from "../../domain/process/processScenario.js"; -import { type ProcessCapture } from "../../domain/process/processCaptureParsing.js"; +import type { ProcessCapture } from "../../domain/process/processCaptureParsing.js"; import type { ProcessCaptureTruncationDetails } from "../../domain/process/processCaptureCoverage.js"; import { emptyProcessCapture as emptyCapture } from "../../domain/process/processCapture.fixture.js"; diff --git a/src/process/capture/ProcessHarness.ts b/src/process/capture/ProcessHarness.ts index 10275a7e31..352b13ba93 100644 --- a/src/process/capture/ProcessHarness.ts +++ b/src/process/capture/ProcessHarness.ts @@ -5,7 +5,7 @@ import type { ProcessScenario } from "../../domain/process/processScenario.js"; import { parseProcessCapture } from "../../domain/process/processCaptureParsing.js"; import { err, ok, type Result } from "../../domain/result.js"; import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../../domain/analysisErrorBase.js"; import { describeProcessCaptureExecutionFailure, ProcessCaptureError, diff --git a/src/reference/ReferenceSourceReader.ts b/src/reference/ReferenceSourceReader.ts index aa1e3b1d49..e8e8650a16 100644 --- a/src/reference/ReferenceSourceReader.ts +++ b/src/reference/ReferenceSourceReader.ts @@ -3,11 +3,11 @@ import { err, ok } from "../domain/result.js"; import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js"; import type { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js"; import { traverseDirectory } from "./ReferenceSourceReaderEntries.js"; -import { - type ReferenceSourceReaderOptions, - type ReferenceSourceRead, - type ReferenceSourceResult, - type TraversalState, +import type { + ReferenceSourceReaderOptions, + ReferenceSourceRead, + ReferenceSourceResult, + TraversalState, } from "./ReferenceSourceReaderTypes.js"; import { isAborted, diff --git a/src/reference/ReferenceSourceReaderEntries.ts b/src/reference/ReferenceSourceReaderEntries.ts index cad5b7864b..a746c01e48 100644 --- a/src/reference/ReferenceSourceReaderEntries.ts +++ b/src/reference/ReferenceSourceReaderEntries.ts @@ -22,12 +22,12 @@ import { validateDirectory, bigLstat, } from "./ReferenceSourceReaderValidate.js"; -import { - type PendingDirectory, - type ReferenceSourceEntry, - type ReferenceSourceEntryKind, - type ReferenceSourceResult, - type TraversalState, +import type { + PendingDirectory, + ReferenceSourceEntry, + ReferenceSourceEntryKind, + ReferenceSourceResult, + TraversalState, } from "./ReferenceSourceReaderTypes.js"; export const traverseDirectory = async ( diff --git a/src/reference/ReferenceSourceReaderErrors.ts b/src/reference/ReferenceSourceReaderErrors.ts index 49877be725..6ddd02a3f2 100644 --- a/src/reference/ReferenceSourceReaderErrors.ts +++ b/src/reference/ReferenceSourceReaderErrors.ts @@ -1,7 +1,7 @@ -import { - type ReferenceSourceEntry, - type ReferenceSourceFailureCode, - type ReferenceSourceReaderError, +import type { + ReferenceSourceEntry, + ReferenceSourceFailureCode, + ReferenceSourceReaderError, } from "./ReferenceSourceReaderTypes.js"; export const failure = ( diff --git a/src/reference/ReferenceSourceReaderFile.ts b/src/reference/ReferenceSourceReaderFile.ts index 27b5c37ef5..e8cabdaeb3 100644 --- a/src/reference/ReferenceSourceReaderFile.ts +++ b/src/reference/ReferenceSourceReaderFile.ts @@ -21,9 +21,9 @@ import { sameFile, validateDirectory, } from "./ReferenceSourceReaderValidate.js"; -import { - type ReferenceSourceEntry, - type StableFileRequest, +import type { + ReferenceSourceEntry, + StableFileRequest, } from "./ReferenceSourceReaderTypes.js"; const READ_CHUNK_BYTES = 64 * 1024; diff --git a/src/reference/ReferenceSourceReaderTypes.ts b/src/reference/ReferenceSourceReaderTypes.ts index 76096ef713..3b0a368b51 100644 --- a/src/reference/ReferenceSourceReaderTypes.ts +++ b/src/reference/ReferenceSourceReaderTypes.ts @@ -1,6 +1,6 @@ -import { type BigIntStats } from "node:fs"; +import type { BigIntStats } from "node:fs"; -import { type Result } from "../domain/result.js"; +import type { Result } from "../domain/result.js"; import type { AnalysisCleanupObservation } from "../domain/analysisErrorBase.js"; import type { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js"; diff --git a/src/reference/ReferenceSourceReaderValidate.ts b/src/reference/ReferenceSourceReaderValidate.ts index 750426e1ab..33cfbf6685 100644 --- a/src/reference/ReferenceSourceReaderValidate.ts +++ b/src/reference/ReferenceSourceReaderValidate.ts @@ -10,9 +10,9 @@ import { rootFilesystemFailure, } from "./ReferenceSourceReaderErrors.js"; import { isPathWithinRoot } from "../domain/localPath.js"; -import { - type ReferenceSourceFailureCode, - type ReferenceSourceResult, +import type { + ReferenceSourceFailureCode, + ReferenceSourceResult, } from "./ReferenceSourceReaderTypes.js"; export const bigLstat = (path: string): Promise => diff --git a/src/server/registerInvestigationTools/helpers.ts b/src/server/registerInvestigationTools/helpers.ts index ed5ab83348..1d342c0b56 100644 --- a/src/server/registerInvestigationTools/helpers.ts +++ b/src/server/registerInvestigationTools/helpers.ts @@ -1,7 +1,7 @@ import type { BinarySessionPort } from "../../application/binary/BinarySessionPort.js"; import type { Evidence } from "../../domain/evidence.js"; import { EvidenceIntegrityError } from "../../domain/evidenceErrors.js"; -import { type AnalysisError } from "../../domain/analysisErrorBase.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/registerProcessComparisonTool.ts b/src/server/registerProcessComparisonTool.ts index ce5feb5970..3123f0e4b4 100644 --- a/src/server/registerProcessComparisonTool.ts +++ b/src/server/registerProcessComparisonTool.ts @@ -3,7 +3,7 @@ import type { EvidenceMcpServer } from "./EvidenceMcpServer.js"; import type { BinarySessionPort } from "../application/binary/BinarySessionPort.js"; import { toolContract } from "../contracts/toolContracts.js"; import { AnalysisInputError } from "../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import { describeValidationFailure } from "../domain/evidenceBundle.js"; import { EvidenceIntegrityError } from "../domain/evidenceErrors.js"; import { diff --git a/src/server/registerSessionTools.ts b/src/server/registerSessionTools.ts index 3541af8503..b716d96f54 100644 --- a/src/server/registerSessionTools.ts +++ b/src/server/registerSessionTools.ts @@ -13,7 +13,7 @@ import { ProcessCaptureError } from "../process/capture/ProcessCaptureError.js"; import { toolContract } from "../contracts/toolContracts.js"; import type { AnalysisSnapshot } from "../domain/analysisSnapshot.js"; import { UnknownRegistryError } from "../domain/unknownRegistryError.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import type { ProcessCapture } from "../domain/process/processCaptureParsing.js"; import { err, ok, type Result } from "../domain/result.js"; diff --git a/src/server/toolResult.ts b/src/server/toolResult.ts index 6daddc6952..e1d4b775fe 100644 --- a/src/server/toolResult.ts +++ b/src/server/toolResult.ts @@ -7,7 +7,7 @@ import { projectAnalysisError, type AnalysisErrorProjection, } from "../domain/analysisErrorProjection.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { JsonValue } from "../domain/jsonValue.js"; import type { Result } from "../domain/result.js"; import { AnalysisResourceConstraintError } from "../domain/analysisErrorCore.js"; diff --git a/tests/boundary/cli/cliStartupImports.test.ts b/tests/boundary/cli/cliStartupImports.test.ts index c5511cf6d2..2b8bf93592 100644 --- a/tests/boundary/cli/cliStartupImports.test.ts +++ b/tests/boundary/cli/cliStartupImports.test.ts @@ -1,3 +1,5 @@ +import { Client } from "@modelcontextprotocol/client"; +import { StdioClientTransport } from "@modelcontextprotocol/client/stdio"; import { execFile } from "node:child_process"; import { mkdir, writeFile } from "node:fs/promises"; import { join } from "node:path"; @@ -42,6 +44,14 @@ registerHooks({ }); `)}`; +const resolvedMarkers = (stderr: string): ReadonlySet => + new Set( + stderr + .split("\n") + .filter((line) => line.startsWith(MARKER)) + .map((line) => line.slice(MARKER.length)), + ); + const resolvedPackages = async ( arguments_: readonly string[], ): Promise> => { @@ -50,12 +60,7 @@ const resolvedPackages = async ( [`--import=${RESOLUTION_HOOK}`, ...arguments_], { cwd: process.cwd(), maxBuffer: 16 * 1_024 * 1_024 }, ); - return new Set( - stderr - .split("\n") - .filter((line) => line.startsWith(MARKER)) - .map((line) => line.slice(MARKER.length)), - ); + return resolvedMarkers(stderr); }; const evaluate = (source: string): readonly string[] => [ @@ -66,9 +71,19 @@ const evaluate = (source: string): readonly string[] => [ describe("CLI startup imports", () => { it("detects each deferred package when its command code loads", async () => { + const missingBrowser = join( + await createTestTempDirectory("rea-startup-browser-"), + "missing-browser", + ); + const scenario = { + browser: { mode: "launch", executable_path: missingBrowser }, + environment: { viewport: { width: 1, height: 1 } }, + }; await expect( resolvedPackages( - evaluate('await import("./dist/composition/browserScenario.js");'), + evaluate( + `const { openPlaywrightScenarioBrowser } = await import("./dist/browser/PlaywrightScenarioBrowser.js"); await openPlaywrightScenarioBrowser(${JSON.stringify(scenario)}, {}).catch(() => undefined);`, + ), ), ).resolves.toContain("playwright-core"); const source = await createTestTempDirectory("rea-startup-imports-"); @@ -124,3 +139,32 @@ describe("CLI startup imports", () => { ).resolves.toContain("binary-composition"); }); }); + +describe("MCP startup imports", () => { + it("does not load command-specific dependencies to initialize and list tools", async () => { + const transport = new StdioClientTransport({ + command: process.execPath, + args: [`--import=${RESOLUTION_HOOK}`, "scripts/rea.mjs", "mcp"], + cwd: process.cwd(), + env: { PATH: process.env.PATH ?? "" }, + stderr: "pipe", + }); + let stderr = ""; + transport.stderr?.on("data", (chunk: Buffer) => { + stderr += chunk.toString("utf8"); + }); + const client = new Client({ name: "rea-startup-imports", version: "1" }); + try { + await client.connect(transport); + const { tools } = await client.listTools(); + expect(tools.map((tool) => tool.name)).toContain( + "capture_browser_scenario", + ); + } finally { + await client.close(); + } + const resolved = resolvedMarkers(stderr); + expect(resolved).not.toContain("playwright-core"); + expect(resolved).not.toContain("isomorphic-git"); + }); +}); diff --git a/tests/boundary/filesystem/directoryArtifactReaderOpen.test.ts b/tests/boundary/filesystem/directoryArtifactReaderOpen.test.ts index 387eced40a..b8124dcf2f 100644 --- a/tests/boundary/filesystem/directoryArtifactReaderOpen.test.ts +++ b/tests/boundary/filesystem/directoryArtifactReaderOpen.test.ts @@ -4,7 +4,7 @@ import { buffer } from "node:stream/consumers"; import { describe, expect, it } from "vitest"; -import { type ArtifactEntry } from "../../../src/artifacts/ArtifactReader.js"; +import type { ArtifactEntry } from "../../../src/artifacts/ArtifactReader.js"; import { DirectoryArtifactReader } from "../../../src/artifacts/DirectoryArtifactReader.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; diff --git a/tests/boundary/filesystem/javascriptArtifactReconstruction.test.ts b/tests/boundary/filesystem/javascriptArtifactReconstruction.test.ts index 27b953ef9d..b1c6952ba5 100644 --- a/tests/boundary/filesystem/javascriptArtifactReconstruction.test.ts +++ b/tests/boundary/filesystem/javascriptArtifactReconstruction.test.ts @@ -11,9 +11,9 @@ import { readJavaScriptArtifactFiles, } from "../../support/javascriptApplicationScope.js"; import { scanArtifactInventory } from "../../fixtures/artifactInventory.js"; -import { - type ArtifactEntry, - type ArtifactReader, +import type { + ArtifactEntry, + ArtifactReader, } from "../../../src/artifacts/ArtifactReader.js"; import { writeJavaScriptArtifactFixture } from "../../fixtures/javascriptArtifactApplication.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 0da86dfc51..5d031b940a 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 @@ -7,7 +7,7 @@ import { MANAGED_WORKFLOW_TOOL_CONTRACTS } from "../../../src/contracts/managed/ import { ENHANCED_TOOL_CONTRACTS } from "../../../src/contracts/enhancedToolContracts.js"; import { SESSION_TOOL_CONTRACTS } from "../../../src/contracts/sessionToolContracts.js"; import { TOOL_CONTRACTS } from "../../../src/contracts/toolContracts.js"; -import {} from "../../../src/domain/jsonValue.js"; +import type {} from "../../../src/domain/jsonValue.js"; import { createServer } from "../../../src/server/createServer.js"; import { observed as ok } from "../../fixtures/analysisExecution.js"; import { createAnalysisExecution } from "../../../src/application/AnalysisProvider.js"; diff --git a/tests/boundary/process/processCaptureLifecycle.test.ts b/tests/boundary/process/processCaptureLifecycle.test.ts index 24563c8831..b64b13078f 100644 --- a/tests/boundary/process/processCaptureLifecycle.test.ts +++ b/tests/boundary/process/processCaptureLifecycle.test.ts @@ -23,7 +23,7 @@ import { } from "../../../src/process/capture/ProcessCaptureLifecycle.js"; import { parseProcessScenario } from "../../../src/domain/process/processScenario.js"; import { emptyProcessCapture } from "../../../src/domain/process/processCapture.fixture.js"; -import { type ProcessCapture } from "../../../src/domain/process/processCaptureParsing.js"; +import type { ProcessCapture } from "../../../src/domain/process/processCaptureParsing.js"; const processFixture = fileURLToPath( new URL("../../fixtures/processFidelity.mjs", import.meta.url), diff --git a/tests/conformance/contracts/analysisErrorProjection.test.ts b/tests/conformance/contracts/analysisErrorProjection.test.ts index e98804bc0c..bb7014dde5 100644 --- a/tests/conformance/contracts/analysisErrorProjection.test.ts +++ b/tests/conformance/contracts/analysisErrorProjection.test.ts @@ -7,7 +7,7 @@ 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"; +import type { AnalysisError } from "../../../src/domain/analysisErrorBase.js"; describe("analysis error projection contract", () => { it("accepts every closed error-reason variant", () => { diff --git a/tests/fixtures/fakeCdpBrowserEvents.ts b/tests/fixtures/fakeCdpBrowserEvents.ts index 536cc8b726..1d1dd5fe3e 100644 --- a/tests/fixtures/fakeCdpBrowserEvents.ts +++ b/tests/fixtures/fakeCdpBrowserEvents.ts @@ -1,4 +1,4 @@ -import { type WebSocket } from "ws"; +import type { WebSocket } from "ws"; import type { FakeCdpCommand, FakeOptions } from "./fakeCdpBrowserTypes.js";