From 0ecf3f2438ec96a6b543942869808018e8d84452 Mon Sep 17 00:00:00 2001 From: Kaoru0822 Date: Sat, 10 Oct 2026 21:04:05 -0700 Subject: [PATCH] perf(mcp): keep Playwright and type-only imports off MCP startup (#1691) * fix(build): emit no runtime imports for type-only bindings Under verbatimModuleSyntax, an import whose specifiers all carry inline `type` modifiers compiles to `import {} from "..."`, a side-effect import that still resolves and evaluates the module. 78 compiled modules carried one, including `import {} from "playwright-core"` in the browser scenario session, which loaded Playwright's module graph at MCP startup. Use top-level `import type` for these bindings and enable oxlint's typescript/no-import-type-side-effects rule so the pattern cannot return. Refs #1685 Co-Authored-By: Claude Opus 5.5 * perf(mcp): load Playwright when a scenario launches, not at startup The browser scenario and Electron active providers are constructed before the stdio server serves, and both bound Playwright's launchers at module load. Resolve `chromium` and `_electron` from playwright-core when a capture opens instead, as the web module resolver already does. MCP startup now resolves 1,312 modules (4,902 resolutions) instead of 1,598 (6,076) before reading the first request, and no longer loads playwright-core. Provider construction, the tool catalog, and capability inventory are unchanged. A boundary test spawns the stdio server, initializes, lists tools, and asserts playwright-core and isomorphic-git were not resolved; the CLI probe now exercises the real launch path to prove detection. Closes #1685 Co-Authored-By: Claude Opus 5.5 --------- Co-authored-by: Claude Opus 5.5 --- .oxlintrc.json | 3 +- src/application/AnalysisContextQueries.ts | 2 +- src/application/BrowserObservationService.ts | 2 +- .../BrowserScenarioCaptureService.ts | 2 +- src/application/CallPathTracing.ts | 2 +- src/application/DirectAnalysis.ts | 2 +- src/application/EnhancedLiteralTracing.ts | 2 +- src/application/EnhancedToolTypes.ts | 2 +- src/application/EnhancedTools.ts | 2 +- src/application/EvidenceBundleCommands.ts | 2 +- .../InventoryProjectionEvidence.ts | 2 +- .../ReconstructionCoverageService.ts | 2 +- .../ReconstructionObligationLedgerService.ts | 2 +- src/application/ReferenceSourceImport.ts | 6 +- src/application/Setup.fixture.ts | 12 ++-- .../binary/AnalysisSnapshotCache.ts | 2 +- src/application/binary/BinarySession.ts | 2 +- .../binary/BinarySessionExecution.ts | 2 +- src/application/binary/BinarySessionOpen.ts | 4 +- .../binary/BinarySessionRecords.ts | 4 +- .../binary/SessionProviderRouter.ts | 2 +- .../ElectronActiveObservationService.ts | 2 +- .../javascript/ElectronObservationService.ts | 2 +- .../JavaScriptApplicationWorkflowService.ts | 2 +- .../JavaScriptRuntimeObservationService.ts | 2 +- .../JavaScriptRuntimeReconciliationService.ts | 2 +- .../JavaScriptSemanticTraceService.ts | 2 +- .../managed/ManagedApplicationGraphService.ts | 2 +- .../managed/ManagedMemberComparisonService.ts | 2 +- .../ManagedNativeVerificationService.ts | 2 +- .../managed/ManagedReconstructionService.ts | 2 +- src/artifacts/ArtifactProvider.ts | 2 +- .../extraction/ArtifactExtraction.ts | 6 +- src/artifacts/inventory/classify.ts | 2 +- src/artifacts/inventory/scanCanonical.ts | 2 +- src/browser/CdpBrowserProvider.ts | 2 +- src/browser/CdpCaptureValues.ts | 2 +- src/browser/CdpConnection.ts | 2 +- src/browser/CdpElectronProvider.ts | 2 +- src/browser/CdpEndpoint.ts | 2 +- src/browser/CdpPageCapture.ts | 2 +- src/browser/CdpTargetSession.ts | 2 +- .../PlaywrightElectronActiveProvider.ts | 7 ++- src/browser/PlaywrightScenarioBrowser.ts | 11 ++-- src/browser/PlaywrightScenarioSession.ts | 2 +- src/cli/applicationCommands.ts | 2 +- src/cli/streamedJsonOutput.ts | 2 +- src/cliEvidenceCommands.ts | 2 +- src/domain/analysisErrorPresentation.ts | 7 +-- src/domain/analysisErrorProjection.ts | 5 +- src/domain/artifactComparison.ts | 8 +-- .../javascript/javascriptNativeHandoff.ts | 6 +- .../javascriptRuntimeReconciliationResult.ts | 2 +- .../managed/managedApplicationGraphNodes.ts | 8 +-- src/domain/process/processComparison.ts | 2 +- .../process/processTraceComparison.fixture.ts | 2 +- .../process/processTraceComparison.test.ts | 2 +- src/dotnet/ManagedMemberInspectorCore.ts | 6 +- src/dotnet/ManagedNativeBoundaryHelpers.ts | 2 +- src/ghidra/GhidraAnalysisProfile.ts | 2 +- src/ghidra/GhidraLoadImageAttest.ts | 2 +- src/ghidra/GhidraProvider.ts | 18 +++--- src/ghidra/GhidraProviderClient.ts | 2 +- src/hopper/HopperAnalysisProfile.ts | 2 +- src/hopper/HopperClient.ts | 2 +- src/inspector/V8InspectorEndpoint.ts | 2 +- src/inspector/V8InspectorProvider.ts | 2 +- src/javascript/recovery/WakaruProvider.ts | 6 +- src/native/NativeUiObservation.ts | 2 +- src/process/ProcessOwnership.part3.test.ts | 2 +- .../capture/ProcessCaptureObservation.test.ts | 2 +- src/process/capture/ProcessHarness.ts | 2 +- src/reference/ReferenceSourceReader.ts | 10 ++-- src/reference/ReferenceSourceReaderEntries.ts | 12 ++-- src/reference/ReferenceSourceReaderErrors.ts | 8 +-- src/reference/ReferenceSourceReaderFile.ts | 6 +- src/reference/ReferenceSourceReaderTypes.ts | 4 +- .../ReferenceSourceReaderValidate.ts | 6 +- .../registerInvestigationTools/helpers.ts | 2 +- src/server/registerProcessComparisonTool.ts | 2 +- src/server/registerSessionTools.ts | 2 +- src/server/toolResult.ts | 2 +- tests/boundary/cli/cliStartupImports.test.ts | 58 ++++++++++++++++--- .../directoryArtifactReaderOpen.test.ts | 2 +- .../javascriptArtifactReconstruction.test.ts | 6 +- ....01-lists-the-complete-target-open.test.ts | 2 +- .../process/processCaptureLifecycle.test.ts | 2 +- .../contracts/analysisErrorProjection.test.ts | 2 +- tests/fixtures/fakeCdpBrowserEvents.ts | 2 +- 89 files changed, 197 insertions(+), 160 deletions(-) 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";