mirror of
https://github.com/morluto/rea.git
synced 2026-10-11 21:39:55 +00:00
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 <[email protected]>
* 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 <[email protected]>
---------
Co-authored-by: Claude Opus 5.5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
a56f7bb668
commit
0ecf3f2438
+2
-1
@@ -22,7 +22,8 @@
|
|||||||
],
|
],
|
||||||
"max-params": ["warn", 4],
|
"max-params": ["warn", 4],
|
||||||
"no-var": "warn",
|
"no-var": "warn",
|
||||||
"no-var-requires": "error"
|
"no-var-requires": "error",
|
||||||
|
"typescript/no-import-type-side-effects": "error"
|
||||||
},
|
},
|
||||||
"overrides": [
|
"overrides": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import type {
|
|||||||
AnalysisOperationPort,
|
AnalysisOperationPort,
|
||||||
} from "./AnalysisProvider.js";
|
} from "./AnalysisProvider.js";
|
||||||
import { AnalysisOutputError } from "../domain/analysisErrorCore.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 type { JsonValue } from "../domain/jsonValue.js";
|
||||||
import { analysisBookmarkSchema } from "../domain/hopperValues.js";
|
import { analysisBookmarkSchema } from "../domain/hopperValues.js";
|
||||||
import { resolveAnalysisDocument } from "./AnalysisDocument.js";
|
import { resolveAnalysisDocument } from "./AnalysisDocument.js";
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import type {
|
|||||||
CompareWebScreenshotsInput,
|
CompareWebScreenshotsInput,
|
||||||
} from "../domain/webScreenshot.js";
|
} from "../domain/webScreenshot.js";
|
||||||
import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.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 { err, ok, type Result } from "../domain/result.js";
|
||||||
import type { ExecutionOptions } from "./AnalysisProvider.js";
|
import type { ExecutionOptions } from "./AnalysisProvider.js";
|
||||||
import type { BrowserObservationPort } from "./BrowserObservationPort.js";
|
import type { BrowserObservationPort } from "./BrowserObservationPort.js";
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import type { ExecutionOptions } from "./AnalysisProvider.js";
|
|||||||
import type { BrowserScenarioCapturePort } from "./BrowserScenarioCapturePort.js";
|
import type { BrowserScenarioCapturePort } from "./BrowserScenarioCapturePort.js";
|
||||||
import { createBrowserScenarioEvidence } from "./BrowserScenarioEvidence.js";
|
import { createBrowserScenarioEvidence } from "./BrowserScenarioEvidence.js";
|
||||||
import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.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 { Evidence } from "../domain/evidence.js";
|
||||||
import type { BrowserScenario } from "../domain/browserScenario.js";
|
import type { BrowserScenario } from "../domain/browserScenario.js";
|
||||||
import { err, type Result } from "../domain/result.js";
|
import { err, type Result } from "../domain/result.js";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { AnalysisOperation } from "./AnalysisProvider.js";
|
import type { AnalysisOperation } from "./AnalysisProvider.js";
|
||||||
import { projectAnalysisError } from "../domain/analysisErrorProjection.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 { parseRelatedAddresses } from "../domain/hopperValues.js";
|
||||||
import type { JsonValue } from "../domain/jsonValue.js";
|
import type { JsonValue } from "../domain/jsonValue.js";
|
||||||
import { ok, type Result } from "../domain/result.js";
|
import { ok, type Result } from "../domain/result.js";
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import {
|
|||||||
} from "../contracts/managed/managedToolContracts.js";
|
} from "../contracts/managed/managedToolContracts.js";
|
||||||
import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
|
import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
|
||||||
import { projectAnalysisError } from "../domain/analysisErrorProjection.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 { access } from "node:fs/promises";
|
||||||
import {
|
import {
|
||||||
readAnalysisSnapshot,
|
readAnalysisSnapshot,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import type { AnalysisOperation } from "./AnalysisProvider.js";
|
import type { AnalysisOperation } from "./AnalysisProvider.js";
|
||||||
import { AnalysisOutputError } from "../domain/analysisErrorCore.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 type { JsonValue } from "../domain/jsonValue.js";
|
||||||
import { err, ok, type Result } from "../domain/result.js";
|
import { err, ok, type Result } from "../domain/result.js";
|
||||||
import type {
|
import type {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { z } from "zod";
|
import type { z } from "zod";
|
||||||
|
|
||||||
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
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 type { JsonValue } from "../domain/jsonValue.js";
|
||||||
import { err, type Result } from "../domain/result.js";
|
import { err, type Result } from "../domain/result.js";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import {
|
|||||||
AnalysisOutputError,
|
AnalysisOutputError,
|
||||||
} from "../domain/analysisErrorCore.js";
|
} from "../domain/analysisErrorCore.js";
|
||||||
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
||||||
import { type AnalysisError } from "../domain/analysisErrorBase.js";
|
import type { AnalysisError } from "../domain/analysisErrorBase.js";
|
||||||
import {
|
import {
|
||||||
addressDistance,
|
addressDistance,
|
||||||
functionDossierSchema,
|
functionDossierSchema,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
|
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 { EvidenceBundle } from "../domain/evidenceBundle.js";
|
||||||
import type { JsonValue } from "../domain/jsonValue.js";
|
import type { JsonValue } from "../domain/jsonValue.js";
|
||||||
import { jsonValueSchema } from "../domain/jsonValue.js";
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { AnalysisProtocolError } from "../domain/analysisErrorCore.js";
|
import { AnalysisProtocolError } from "../domain/analysisErrorCore.js";
|
||||||
import { type AnalysisError } from "../domain/analysisErrorBase.js";
|
import type { AnalysisError } from "../domain/analysisErrorBase.js";
|
||||||
import {
|
import {
|
||||||
createEvidence,
|
createEvidence,
|
||||||
type Evidence,
|
type Evidence,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { z } from "zod";
|
|||||||
|
|
||||||
import { reconstructionCoverageEvaluationInputSchema } from "../domain/reconstructionCoverageInput.js";
|
import { reconstructionCoverageEvaluationInputSchema } from "../domain/reconstructionCoverageInput.js";
|
||||||
import { AnalysisInputError } from "../domain/analysisErrorCore.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 { evaluateReconstructionClosure } from "../domain/reconstructionCoverage.js";
|
||||||
import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js";
|
import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js";
|
||||||
import { err, ok, type Result } from "../domain/result.js";
|
import { err, ok, type Result } from "../domain/result.js";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { AnalysisProtocolError } from "../domain/analysisErrorCore.js";
|
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 { createEvidence, type Evidence } from "../domain/evidence.js";
|
||||||
import { jsonObjectSchema, jsonValueSchema } from "../domain/jsonValue.js";
|
import { jsonObjectSchema, jsonValueSchema } from "../domain/jsonValue.js";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ import type {
|
|||||||
} from "../reference/ReferenceSourceReaderTypes.js";
|
} from "../reference/ReferenceSourceReaderTypes.js";
|
||||||
import { parseReferenceSourceEntries } from "./ReferenceSourceImportEntries.js";
|
import { parseReferenceSourceEntries } from "./ReferenceSourceImportEntries.js";
|
||||||
import { readReferenceSourceVcs } from "./ReferenceSourceVcsAdapter.js";
|
import { readReferenceSourceVcs } from "./ReferenceSourceVcsAdapter.js";
|
||||||
import {
|
import type {
|
||||||
type ReferenceSourceImportError,
|
ReferenceSourceImportError,
|
||||||
type ReferenceSourceImportOptions,
|
ReferenceSourceImportOptions,
|
||||||
} from "./ReferenceSourceImportTypes.js";
|
} from "./ReferenceSourceImportTypes.js";
|
||||||
import {
|
import {
|
||||||
prepareReferenceSourceImport,
|
prepareReferenceSourceImport,
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { skillDestinations } from "./SetupSkill.js";
|
import { skillDestinations } from "./SetupSkill.js";
|
||||||
import {
|
import type {
|
||||||
type ClientConfigurationInspection,
|
ClientConfigurationInspection,
|
||||||
type ClientConfigurationResult,
|
ClientConfigurationResult,
|
||||||
type SetupHost,
|
SetupHost,
|
||||||
type SetupOptions,
|
SetupOptions,
|
||||||
type SetupProviderEnvironment,
|
SetupProviderEnvironment,
|
||||||
} from "./SetupTypes.js";
|
} from "./SetupTypes.js";
|
||||||
import type { SetupClient } from "./SupportedClients.js";
|
import type { SetupClient } from "./SupportedClients.js";
|
||||||
import type { SetupHopperInstallResult } from "./SetupInstallFailure.js";
|
import type { SetupHopperInstallResult } from "./SetupInstallFailure.js";
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
AnalysisSnapshotMismatchError,
|
AnalysisSnapshotMismatchError,
|
||||||
} from "../../domain/evidenceErrors.js";
|
} from "../../domain/evidenceErrors.js";
|
||||||
import { NoBinaryOpenError } from "../../domain/configurationErrors.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 { err, ok, type Result } from "../../domain/result.js";
|
||||||
import {
|
import {
|
||||||
analysisQueryId,
|
analysisQueryId,
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
type AnalysisProfileCommitment,
|
type AnalysisProfileCommitment,
|
||||||
} from "../../domain/analysisProfile.js";
|
} from "../../domain/analysisProfile.js";
|
||||||
import { AnalysisCancelledError } from "../../domain/analysisErrorCore.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 { err, ok, type Result } from "../../domain/result.js";
|
||||||
import type { JsonValue } from "../../domain/jsonValue.js";
|
import type { JsonValue } from "../../domain/jsonValue.js";
|
||||||
import { createEvidence } from "../../domain/evidence.js";
|
import { createEvidence } from "../../domain/evidence.js";
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import type { BinaryTarget } from "../../domain/binaryTargetTypes.js";
|
|||||||
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
||||||
import { NoBinaryOpenError } from "../../domain/configurationErrors.js";
|
import { NoBinaryOpenError } from "../../domain/configurationErrors.js";
|
||||||
import { ProviderAdapterError } from "../../domain/providerAdapterError.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 { JsonValue } from "../../domain/jsonValue.js";
|
||||||
import type { EvidenceSubjectTarget } from "../../domain/evidence.js";
|
import type { EvidenceSubjectTarget } from "../../domain/evidence.js";
|
||||||
import { err, ok, type Result } from "../../domain/result.js";
|
import { err, ok, type Result } from "../../domain/result.js";
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ import {
|
|||||||
} from "../../domain/analysisSnapshot.js";
|
} from "../../domain/analysisSnapshot.js";
|
||||||
import type { AnalysisSnapshot } from "../../domain/analysisSnapshot.js";
|
import type { AnalysisSnapshot } from "../../domain/analysisSnapshot.js";
|
||||||
import { parseBinaryTarget } from "../BinaryTargetResolver.js";
|
import { parseBinaryTarget } from "../BinaryTargetResolver.js";
|
||||||
import { type BinaryTarget } from "../../domain/binaryTargetTypes.js";
|
import type { BinaryTarget } from "../../domain/binaryTargetTypes.js";
|
||||||
import {
|
import {
|
||||||
EvidenceIntegrityError,
|
EvidenceIntegrityError,
|
||||||
AnalysisSnapshotMismatchError,
|
AnalysisSnapshotMismatchError,
|
||||||
} from "../../domain/evidenceErrors.js";
|
} 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 { err, type Result } from "../../domain/result.js";
|
||||||
import type { SessionProviderRoute } from "./SessionProviderRouter.js";
|
import type { SessionProviderRoute } from "./SessionProviderRouter.js";
|
||||||
import { SessionProviderRouter } from "./SessionProviderRouter.js";
|
import { SessionProviderRouter } from "./SessionProviderRouter.js";
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import {
|
|||||||
EvidenceIntegrityError,
|
EvidenceIntegrityError,
|
||||||
AnalysisSnapshotMismatchError,
|
AnalysisSnapshotMismatchError,
|
||||||
} from "../../domain/evidenceErrors.js";
|
} from "../../domain/evidenceErrors.js";
|
||||||
import { type AnalysisError } from "../../domain/analysisErrorBase.js";
|
import type { AnalysisError } from "../../domain/analysisErrorBase.js";
|
||||||
import { type UnknownRegistryError } from "../../domain/unknownRegistryError.js";
|
import type { UnknownRegistryError } from "../../domain/unknownRegistryError.js";
|
||||||
import type {
|
import type {
|
||||||
RecordUnknownInput,
|
RecordUnknownInput,
|
||||||
ResidualUnknown,
|
ResidualUnknown,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import type { AnalysisProfileCommitment } from "../../domain/analysisProfile.js"
|
|||||||
import type { BinaryTarget } from "../../domain/binaryTargetTypes.js";
|
import type { BinaryTarget } from "../../domain/binaryTargetTypes.js";
|
||||||
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
||||||
import { ProviderSelectionError } from "../../domain/providerSelectionError.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 { err, ok, type Result } from "../../domain/result.js";
|
||||||
import type {
|
import type {
|
||||||
AnalysisClient,
|
AnalysisClient,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
AnalysisCapabilityUnavailableError,
|
AnalysisCapabilityUnavailableError,
|
||||||
AnalysisInputError,
|
AnalysisInputError,
|
||||||
} from "../../domain/analysisErrorCore.js";
|
} 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 { Evidence } from "../../domain/evidence.js";
|
||||||
import type { ElectronActiveObservationInput } from "../../domain/javascript/electronActiveObservation.js";
|
import type { ElectronActiveObservationInput } from "../../domain/javascript/electronActiveObservation.js";
|
||||||
import { err, type Result } from "../../domain/result.js";
|
import { err, type Result } from "../../domain/result.js";
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import type {
|
|||||||
ListElectronTargetsInput,
|
ListElectronTargetsInput,
|
||||||
} from "../../domain/javascript/electronObservation.js";
|
} from "../../domain/javascript/electronObservation.js";
|
||||||
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.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 { err, ok, type Result } from "../../domain/result.js";
|
||||||
import { createElectronEvidence } from "./ElectronEvidence.js";
|
import { createElectronEvidence } from "./ElectronEvidence.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
|
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 type { Evidence } from "../../domain/evidence.js";
|
||||||
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
||||||
import { compareJavaScriptApplicationVersions } from "../../domain/javascript/javascriptApplicationVersionComparison.js";
|
import { compareJavaScriptApplicationVersions } from "../../domain/javascript/javascriptApplicationVersionComparison.js";
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
AnalysisCancelledError,
|
AnalysisCancelledError,
|
||||||
AnalysisCapabilityUnavailableError,
|
AnalysisCapabilityUnavailableError,
|
||||||
} from "../../domain/analysisErrorCore.js";
|
} from "../../domain/analysisErrorCore.js";
|
||||||
import { type AnalysisError } from "../../domain/analysisErrorBase.js";
|
import type { AnalysisError } from "../../domain/analysisErrorBase.js";
|
||||||
import type {
|
import type {
|
||||||
ListJavaScriptRuntimeTargetsInput,
|
ListJavaScriptRuntimeTargetsInput,
|
||||||
ObserveJavaScriptRuntimeInput,
|
ObserveJavaScriptRuntimeInput,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { resolve } from "node:path";
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
|
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 type { Evidence } from "../../domain/evidence.js";
|
||||||
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
AnalysisInputError,
|
AnalysisInputError,
|
||||||
AnalysisProtocolError,
|
AnalysisProtocolError,
|
||||||
} from "../../domain/analysisErrorCore.js";
|
} from "../../domain/analysisErrorCore.js";
|
||||||
import { type AnalysisError } from "../../domain/analysisErrorBase.js";
|
import type { AnalysisError } from "../../domain/analysisErrorBase.js";
|
||||||
import {
|
import {
|
||||||
applicationGraphEvidenceInputError,
|
applicationGraphEvidenceInputError,
|
||||||
parseApplicationGraphEvidence,
|
parseApplicationGraphEvidence,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
|
import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
|
||||||
import { type AnalysisError } from "../../domain/analysisErrorBase.js";
|
import type { AnalysisError } from "../../domain/analysisErrorBase.js";
|
||||||
import {
|
import {
|
||||||
createEvidence,
|
createEvidence,
|
||||||
type Evidence,
|
type Evidence,
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
import { parseManagedMemberEvidence } from "../../domain/managed/managedMemberComparisonMatch.js";
|
import { parseManagedMemberEvidence } from "../../domain/managed/managedMemberComparisonMatch.js";
|
||||||
import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
|
import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
|
||||||
import { EvidenceIntegrityError } from "../../domain/evidenceErrors.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 { createEvidence, type Evidence } from "../../domain/evidence.js";
|
||||||
import { jsonValueSchema } from "../../domain/jsonValue.js";
|
import { jsonValueSchema } from "../../domain/jsonValue.js";
|
||||||
import { parseBinaryTarget } from "../BinaryTargetResolver.js";
|
import { parseBinaryTarget } from "../BinaryTargetResolver.js";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
|
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 { createEvidence, type Evidence } from "../../domain/evidence.js";
|
||||||
import { jsonValueSchema } from "../../domain/jsonValue.js";
|
import { jsonValueSchema } from "../../domain/jsonValue.js";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
|
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 { createEvidence, type Evidence } from "../../domain/evidence.js";
|
||||||
import { jsonValueSchema } from "../../domain/jsonValue.js";
|
import { jsonValueSchema } from "../../domain/jsonValue.js";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import {
|
|||||||
AnalysisUnsupportedTargetError,
|
AnalysisUnsupportedTargetError,
|
||||||
} from "../domain/analysisErrorCore.js";
|
} from "../domain/analysisErrorCore.js";
|
||||||
import { ArtifactOperationError } from "../domain/artifactOperationError.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 type { JsonValue } from "../domain/jsonValue.js";
|
||||||
import { interfaceBuilderLimitsSchema } from "../domain/apple/interfaceBuilderGraph.js";
|
import { interfaceBuilderLimitsSchema } from "../domain/apple/interfaceBuilderGraph.js";
|
||||||
import { err, ok, type Result } from "../domain/result.js";
|
import { err, ok, type Result } from "../domain/result.js";
|
||||||
|
|||||||
@@ -27,9 +27,9 @@ import {
|
|||||||
type IntegrityContradiction,
|
type IntegrityContradiction,
|
||||||
} from "../../domain/artifactGraph.js";
|
} from "../../domain/artifactGraph.js";
|
||||||
import { AnalysisUnsupportedTargetError } from "../../domain/analysisErrorCore.js";
|
import { AnalysisUnsupportedTargetError } from "../../domain/analysisErrorCore.js";
|
||||||
import {
|
import type {
|
||||||
type ArtifactResourceOwner,
|
ArtifactResourceOwner,
|
||||||
type ArtifactResourceScope,
|
ArtifactResourceScope,
|
||||||
} from "../ArtifactResourceScope.js";
|
} from "../ArtifactResourceScope.js";
|
||||||
import type { BinaryTarget } from "../../domain/binaryTargetTypes.js";
|
import type { BinaryTarget } from "../../domain/binaryTargetTypes.js";
|
||||||
import type { ArtifactInventorySnapshot } from "../../domain/artifactInventorySnapshot.js";
|
import type { ArtifactInventorySnapshot } from "../../domain/artifactInventorySnapshot.js";
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import {
|
|||||||
zipPackageFormatForPath,
|
zipPackageFormatForPath,
|
||||||
} from "../../domain/zipPackageFormat.js";
|
} from "../../domain/zipPackageFormat.js";
|
||||||
import { ArtifactReaderFailure } from "../ArtifactReader.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 type { HashResult } from "../ArtifactHash.js";
|
||||||
import {
|
import {
|
||||||
hashStableRootArtifactHandle,
|
hashStableRootArtifactHandle,
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ import {
|
|||||||
artifactManifestId,
|
artifactManifestId,
|
||||||
} from "../../domain/artifactIdentity.js";
|
} from "../../domain/artifactIdentity.js";
|
||||||
import { classifyAndHashRootForInventory } from "./classify.js";
|
import { classifyAndHashRootForInventory } from "./classify.js";
|
||||||
import { type HashResult } from "../ArtifactHash.js";
|
import type { HashResult } from "../ArtifactHash.js";
|
||||||
import {
|
import {
|
||||||
hashStableRootArtifact,
|
hashStableRootArtifact,
|
||||||
hashStableRootArtifactHandle,
|
hashStableRootArtifactHandle,
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ import { AnalysisError } from "../domain/analysisErrorBase.js";
|
|||||||
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
||||||
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
||||||
import { ProviderAdapterError } from "../domain/providerAdapterError.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 { err, ok, type Result } from "../domain/result.js";
|
||||||
import {
|
import {
|
||||||
discoverCdpEndpoint,
|
discoverCdpEndpoint,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
|
import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
|
||||||
import { BrowserObservationError } from "../domain/browserObservationError.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 { sanitizeBrowserUrl } from "../domain/browserObservation.js";
|
||||||
import { createWebTextArtifact } from "../domain/webContentArtifact.js";
|
import { createWebTextArtifact } from "../domain/webContentArtifact.js";
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
|
|||||||
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
||||||
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
||||||
import { CdpCommandRejection } from "./CdpCommandRejection.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 { safeParseJson } from "../domain/safeJson.js";
|
||||||
import { WEB_RUNTIME_LIMITS } from "../domain/webRuntime.js";
|
import { WEB_RUNTIME_LIMITS } from "../domain/webRuntime.js";
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import {
|
|||||||
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
||||||
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
||||||
import { ProviderAdapterError } from "../domain/providerAdapterError.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 { err, ok, type Result } from "../domain/result.js";
|
||||||
import {
|
import {
|
||||||
discoverCdpEndpoint,
|
discoverCdpEndpoint,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { z } from "zod";
|
|||||||
import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
|
import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
|
||||||
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
||||||
import { BrowserObservationError } from "../domain/browserObservationError.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 { sanitizeBrowserUrl } from "../domain/browserObservation.js";
|
||||||
import { safeParseJson } from "../domain/safeJson.js";
|
import { safeParseJson } from "../domain/safeJson.js";
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import type { InspectWebPageInput } from "../domain/browserObservation.js";
|
|||||||
import type { WebPageInspection } from "../domain/browserObservationSchemas.js";
|
import type { WebPageInspection } from "../domain/browserObservationSchemas.js";
|
||||||
import type { ProgressReporter } from "../application/ProgressReporter.js";
|
import type { ProgressReporter } from "../application/ProgressReporter.js";
|
||||||
import { BrowserObservationError } from "../domain/browserObservationError.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 { stableWebResources } from "../domain/webInventory.js";
|
||||||
import type { CdpEndpointDiscovery, CdpEndpointTarget } from "./CdpEndpoint.js";
|
import type { CdpEndpointDiscovery, CdpEndpointTarget } from "./CdpEndpoint.js";
|
||||||
import { CdpConnection } from "./CdpConnection.js";
|
import { CdpConnection } from "./CdpConnection.js";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
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 { CdpConnection } from "./CdpConnection.js";
|
||||||
import {
|
import {
|
||||||
cdpTargetWebSocket,
|
cdpTargetWebSocket,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { dirname } from "node:path";
|
|||||||
import { randomUUID } from "node:crypto";
|
import { randomUUID } from "node:crypto";
|
||||||
import { fileURLToPath } from "node:url";
|
import { fileURLToPath } from "node:url";
|
||||||
|
|
||||||
import { _electron as electron } from "playwright-core";
|
import type { _electron as electron } from "playwright-core";
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
ExecutionOptions,
|
ExecutionOptions,
|
||||||
@@ -60,8 +60,9 @@ type ElectronPaths = {
|
|||||||
export class PlaywrightElectronActiveProvider implements ElectronActiveObservationPort {
|
export class PlaywrightElectronActiveProvider implements ElectronActiveObservationPort {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly environment: Readonly<Record<string, string | undefined>>,
|
private readonly environment: Readonly<Record<string, string | undefined>>,
|
||||||
private readonly launch: typeof electron.launch = (options) =>
|
// Load Playwright only when a capture launches; MCP startup stays off its module graph.
|
||||||
electron.launch(options),
|
private readonly launch: typeof electron.launch = async (options) =>
|
||||||
|
(await import("playwright-core"))._electron.launch(options),
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
identity(): ProviderIdentity {
|
identity(): ProviderIdentity {
|
||||||
|
|||||||
@@ -2,12 +2,7 @@ import { chmod, mkdtemp, rm } from "node:fs/promises";
|
|||||||
import { tmpdir } from "node:os";
|
import { tmpdir } from "node:os";
|
||||||
import { join, resolve } from "node:path";
|
import { join, resolve } from "node:path";
|
||||||
|
|
||||||
import {
|
import type { Browser, BrowserContext, Page, chromium } from "playwright-core";
|
||||||
chromium,
|
|
||||||
type Browser,
|
|
||||||
type BrowserContext,
|
|
||||||
type Page,
|
|
||||||
} from "playwright-core";
|
|
||||||
|
|
||||||
import type { BrowserScenario } from "../domain/browserScenario.js";
|
import type { BrowserScenario } from "../domain/browserScenario.js";
|
||||||
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
||||||
@@ -479,7 +474,9 @@ export const openPlaywrightScenarioBrowser = async (
|
|||||||
readonly retainCleanup?: (close: () => Promise<unknown>) => void;
|
readonly retainCleanup?: (close: () => Promise<unknown>) => void;
|
||||||
} = {},
|
} = {},
|
||||||
): Promise<OpenedScenarioBrowser> => {
|
): Promise<OpenedScenarioBrowser> => {
|
||||||
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")
|
if (scenario.browser.mode === "connect")
|
||||||
return openAttachedScenarioBrowser(
|
return openAttachedScenarioBrowser(
|
||||||
scenario.browser,
|
scenario.browser,
|
||||||
|
|||||||
@@ -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 { BrowserScenario } from "../domain/browserScenario.js";
|
||||||
import type { BrowserScenarioAction } from "../domain/browserScenarioValues.js";
|
import type { BrowserScenarioAction } from "../domain/browserScenarioValues.js";
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|||||||
import { parseCliJsonInput } from "../cliJsonInput.js";
|
import { parseCliJsonInput } from "../cliJsonInput.js";
|
||||||
import { logCliCommand } from "../cliLogging.js";
|
import { logCliCommand } from "../cliLogging.js";
|
||||||
import { projectAnalysisError } from "../domain/analysisErrorProjection.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 { androidApplicationProjectionInputSchema } from "../domain/android/androidApplication.js";
|
||||||
import { appleApplicationProjectionInputSchema } from "../domain/apple/appleApplication.js";
|
import { appleApplicationProjectionInputSchema } from "../domain/apple/appleApplication.js";
|
||||||
import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js";
|
import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { constants } from "node:buffer";
|
import { constants } from "node:buffer";
|
||||||
import { type Writable } from "node:stream";
|
import type { Writable } from "node:stream";
|
||||||
|
|
||||||
import { Cli, Filter } from "incur";
|
import { Cli, Filter } from "incur";
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import type { Logger } from "pino";
|
|||||||
import { CLI_COMMANDS } from "./cliCommandNames.js";
|
import { CLI_COMMANDS } from "./cliCommandNames.js";
|
||||||
import type { JsonValue } from "./domain/jsonValue.js";
|
import type { JsonValue } from "./domain/jsonValue.js";
|
||||||
import { projectAnalysisError } from "./domain/analysisErrorProjection.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. */
|
/** Register caller-path Evidence commands. */
|
||||||
export const registerEvidenceCommands = (
|
export const registerEvidenceCommands = (
|
||||||
|
|||||||
@@ -27,11 +27,8 @@ import {
|
|||||||
import { ProviderSelectionError } from "./providerSelectionError.js";
|
import { ProviderSelectionError } from "./providerSelectionError.js";
|
||||||
import { UnknownRegistryError } from "./unknownRegistryError.js";
|
import { UnknownRegistryError } from "./unknownRegistryError.js";
|
||||||
import { providerRetryAction } from "./providerOperationHealth.js";
|
import { providerRetryAction } from "./providerOperationHealth.js";
|
||||||
import {
|
import type { AnalysisError, AnalysisErrorTag } from "./analysisErrorBase.js";
|
||||||
type AnalysisError,
|
import type { AnalysisErrorProjection } from "./analysisErrorProjection.js";
|
||||||
type AnalysisErrorTag,
|
|
||||||
} from "./analysisErrorBase.js";
|
|
||||||
import { type AnalysisErrorProjection } from "./analysisErrorProjection.js";
|
|
||||||
|
|
||||||
export const analysisErrorRemediationAction = (
|
export const analysisErrorRemediationAction = (
|
||||||
error: AnalysisError,
|
error: AnalysisError,
|
||||||
|
|||||||
@@ -40,10 +40,7 @@ import { ProviderAdapterError } from "./providerAdapterError.js";
|
|||||||
import { ProviderSelectionError } from "./providerSelectionError.js";
|
import { ProviderSelectionError } from "./providerSelectionError.js";
|
||||||
import { UnknownRegistryError } from "./unknownRegistryError.js";
|
import { UnknownRegistryError } from "./unknownRegistryError.js";
|
||||||
import { providerRetryAction } from "./providerOperationHealth.js";
|
import { providerRetryAction } from "./providerOperationHealth.js";
|
||||||
import {
|
import type { AnalysisError, AnalysisErrorTag } from "./analysisErrorBase.js";
|
||||||
type AnalysisError,
|
|
||||||
type AnalysisErrorTag,
|
|
||||||
} from "./analysisErrorBase.js";
|
|
||||||
|
|
||||||
/** Project expected failures into exhaustive, secret-safe caller fields. */
|
/** Project expected failures into exhaustive, secret-safe caller fields. */
|
||||||
export const projectAnalysisError = (
|
export const projectAnalysisError = (
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { compareUnicodeCodePoints } from "./unicodeCodePointOrder.js";
|
import { compareUnicodeCodePoints } from "./unicodeCodePointOrder.js";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import {
|
import type {
|
||||||
type ArtifactInventoryResult,
|
ArtifactInventoryResult,
|
||||||
type ArtifactNode,
|
ArtifactNode,
|
||||||
type ArtifactOccurrence,
|
ArtifactOccurrence,
|
||||||
} from "./artifactGraph.js";
|
} from "./artifactGraph.js";
|
||||||
import { evidenceSchema } from "./evidence.js";
|
import { evidenceSchema } from "./evidence.js";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
||||||
import type { Evidence } from "../evidence.js";
|
import type { Evidence } from "../evidence.js";
|
||||||
import {
|
import type {
|
||||||
type ApplicationEdge,
|
ApplicationEdge,
|
||||||
type ApplicationNode,
|
ApplicationNode,
|
||||||
} from "./javascriptApplicationGraphSchemas.js";
|
} from "./javascriptApplicationGraphSchemas.js";
|
||||||
import type { ApplicationFeatureTraceResult } from "./javascriptFeatureTraceSchemas.js";
|
import type { ApplicationFeatureTraceResult } from "./javascriptFeatureTraceSchemas.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { type JavaScriptApplicationGraph } from "./javascriptApplicationGraph.js";
|
import type { JavaScriptApplicationGraph } from "./javascriptApplicationGraph.js";
|
||||||
import { digestCanonicalValue } from "../canonicalDigest.js";
|
import { digestCanonicalValue } from "../canonicalDigest.js";
|
||||||
import { uniqueSorted } from "../canonicalOrdering.js";
|
import { uniqueSorted } from "../canonicalOrdering.js";
|
||||||
import type { StaticLoadStateProjection } from "./javascriptRuntimeLoadState.js";
|
import type { StaticLoadStateProjection } from "./javascriptRuntimeLoadState.js";
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ import type { ApplicationNode } from "../javascript/javascriptApplicationGraphSc
|
|||||||
import { managedSourceCoverage } from "./managedApplicationGraphCoverage.js";
|
import { managedSourceCoverage } from "./managedApplicationGraphCoverage.js";
|
||||||
import type { Evidence } from "../evidence.js";
|
import type { Evidence } from "../evidence.js";
|
||||||
import { managedTokenScopesMatch } from "./managedInspectionEvidence.js";
|
import { managedTokenScopesMatch } from "./managedInspectionEvidence.js";
|
||||||
import {
|
import type {
|
||||||
type ManagedArtifactInspection,
|
ManagedArtifactInspection,
|
||||||
type ManagedMemberInspection,
|
ManagedMemberInspection,
|
||||||
type ManagedNativeBoundaryInspection,
|
ManagedNativeBoundaryInspection,
|
||||||
} from "./managedArtifact.js";
|
} from "./managedArtifact.js";
|
||||||
import type {
|
import type {
|
||||||
GraphBuildState,
|
GraphBuildState,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import type { ProcessCapture } from "./processCaptureParsing.js";
|
|||||||
import { comparableTerminalFrame } from "./processObservation.js";
|
import { comparableTerminalFrame } from "./processObservation.js";
|
||||||
import { AnalysisInputError } from "../analysisErrorCore.js";
|
import { AnalysisInputError } from "../analysisErrorCore.js";
|
||||||
import { jsonValueSchema } from "../jsonValue.js";
|
import { jsonValueSchema } from "../jsonValue.js";
|
||||||
import { type ProcessTraceSpecification } from "./processTraceSpecification.js";
|
import type { ProcessTraceSpecification } from "./processTraceSpecification.js";
|
||||||
import { processTraceComparisonResultSchema } from "./processTraceEvaluation.js";
|
import { processTraceComparisonResultSchema } from "./processTraceEvaluation.js";
|
||||||
import {
|
import {
|
||||||
dimensionsForTraceSources,
|
dimensionsForTraceSources,
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
parseProcessCapture,
|
parseProcessCapture,
|
||||||
type ProcessCapture,
|
type ProcessCapture,
|
||||||
} from "./processCaptureParsing.js";
|
} 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 emptyCapture = parseProcessCapture(EMPTY_PROCESS_CAPTURE_EXAMPLE);
|
||||||
export const terminal = { sequence: 0, at_ms: 900, data: "Ready" };
|
export const terminal = { sequence: 0, at_ms: 900, data: "Ready" };
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
import { parseProcessCapture } from "./processCaptureParsing.js";
|
import { parseProcessCapture } from "./processCaptureParsing.js";
|
||||||
import { type ProcessTraceSpecification } from "./processTraceSpecification.js";
|
import type { ProcessTraceSpecification } from "./processTraceSpecification.js";
|
||||||
import { processTraceComparisonResultSchema } from "./processTraceEvaluation.js";
|
import { processTraceComparisonResultSchema } from "./processTraceEvaluation.js";
|
||||||
import {
|
import {
|
||||||
capture,
|
capture,
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ import type {
|
|||||||
ManagedMemberInspection,
|
ManagedMemberInspection,
|
||||||
ManagedParseIssue,
|
ManagedParseIssue,
|
||||||
} from "../domain/managed/managedArtifact.js";
|
} from "../domain/managed/managedArtifact.js";
|
||||||
import {
|
import type {
|
||||||
type ManagedMetadataLayout,
|
ManagedMetadataLayout,
|
||||||
type MetadataTableLayout,
|
MetadataTableLayout,
|
||||||
} from "./ManagedMetadataLayout.js";
|
} from "./ManagedMetadataLayout.js";
|
||||||
import {
|
import {
|
||||||
metadataRowCursor,
|
metadataRowCursor,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
type ManagedNativeBoundaryInspection,
|
type ManagedNativeBoundaryInspection,
|
||||||
type ManagedParseIssue,
|
type ManagedParseIssue,
|
||||||
} from "../domain/managed/managedArtifact.js";
|
} from "../domain/managed/managedArtifact.js";
|
||||||
import { type ManagedMetadataLayout } from "./ManagedMetadataLayout.js";
|
import type { ManagedMetadataLayout } from "./ManagedMetadataLayout.js";
|
||||||
import {
|
import {
|
||||||
metadataRowCursor,
|
metadataRowCursor,
|
||||||
metadataCodedToken,
|
metadataCodedToken,
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import {
|
|||||||
AnalysisUnsupportedTargetError,
|
AnalysisUnsupportedTargetError,
|
||||||
} from "../domain/analysisErrorCore.js";
|
} from "../domain/analysisErrorCore.js";
|
||||||
import { ProviderAdapterError } from "../domain/providerAdapterError.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 { err, ok, type Result } from "../domain/result.js";
|
||||||
import type { GhidraInstallationInspection } from "./GhidraInstallation.js";
|
import type { GhidraInstallationInspection } from "./GhidraInstallation.js";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import {
|
|||||||
attestGhidraDosComLoadImage,
|
attestGhidraDosComLoadImage,
|
||||||
attestGhidraDosLoadImage,
|
attestGhidraDosLoadImage,
|
||||||
} from "./GhidraLoadImageValues.js";
|
} 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 { GhidraTargetSnapshot } from "./GhidraClient.js";
|
||||||
import type { GhidraSessionError } from "./GhidraSessionError.js";
|
import type { GhidraSessionError } from "./GhidraSessionError.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
|
import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
|
||||||
import {
|
import type {
|
||||||
type AnalysisClient,
|
AnalysisClient,
|
||||||
type AnalysisClientContext,
|
AnalysisClientContext,
|
||||||
type AnalysisProfileResolutionOptions,
|
AnalysisProfileResolutionOptions,
|
||||||
type AnalysisProviderCandidate,
|
AnalysisProviderCandidate,
|
||||||
type CapabilityDescriptor,
|
CapabilityDescriptor,
|
||||||
type ProviderAvailability,
|
ProviderAvailability,
|
||||||
type ProviderIdentity,
|
ProviderIdentity,
|
||||||
type ProviderTargetSupport,
|
ProviderTargetSupport,
|
||||||
} from "../application/AnalysisProvider.js";
|
} from "../application/AnalysisProvider.js";
|
||||||
import type { AppConfig } from "../config/types.js";
|
import type { AppConfig } from "../config/types.js";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import {
|
|||||||
AnalysisResourceConstraintError,
|
AnalysisResourceConstraintError,
|
||||||
AnalysisTimeoutError,
|
AnalysisTimeoutError,
|
||||||
} from "../domain/analysisErrorCore.js";
|
} 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 { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js";
|
||||||
import { ProviderAdapterError } from "../domain/providerAdapterError.js";
|
import { ProviderAdapterError } from "../domain/providerAdapterError.js";
|
||||||
import { err, ok, type Result } from "../domain/result.js";
|
import { err, ok, type Result } from "../domain/result.js";
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import {
|
|||||||
} from "../domain/analysisErrorCore.js";
|
} from "../domain/analysisErrorCore.js";
|
||||||
import { BinaryTargetError } from "../domain/configurationErrors.js";
|
import { BinaryTargetError } from "../domain/configurationErrors.js";
|
||||||
import { ProviderAdapterError } from "../domain/providerAdapterError.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 { err, ok, type Result } from "../domain/result.js";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import {
|
|||||||
HopperStartError,
|
HopperStartError,
|
||||||
HopperTimeoutError,
|
HopperTimeoutError,
|
||||||
} from "../domain/hopperErrors.js";
|
} from "../domain/hopperErrors.js";
|
||||||
import { type AnalysisError } from "../domain/analysisErrorBase.js";
|
import type { AnalysisError } from "../domain/analysisErrorBase.js";
|
||||||
import {
|
import {
|
||||||
hopperStartupFailure,
|
hopperStartupFailure,
|
||||||
type HopperStartupFailureDiagnostic,
|
type HopperStartupFailureDiagnostic,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import type {
|
|||||||
JavaScriptRuntimeTargetLocation,
|
JavaScriptRuntimeTargetLocation,
|
||||||
} from "../domain/javascript/javascriptRuntimeObservation.js";
|
} from "../domain/javascript/javascriptRuntimeObservation.js";
|
||||||
import { BrowserObservationError } from "../domain/browserObservationError.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";
|
import { parseCdpEndpointValue, readCdpJson } from "../browser/CdpEndpoint.js";
|
||||||
|
|
||||||
const versionSchema = z
|
const versionSchema = z
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import { AnalysisError } from "../domain/analysisErrorBase.js";
|
|||||||
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
||||||
import type { AnalysisPartialObservation } from "../domain/analysisErrorBase.js";
|
import type { AnalysisPartialObservation } from "../domain/analysisErrorBase.js";
|
||||||
import { ProviderAdapterError } from "../domain/providerAdapterError.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 { err, ok, type Result } from "../domain/result.js";
|
||||||
import {
|
import {
|
||||||
numberValue,
|
numberValue,
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ import { mkdir, mkdtemp, rm } from "node:fs/promises";
|
|||||||
import { tmpdir } from "node:os";
|
import { tmpdir } from "node:os";
|
||||||
import { join } from "node:path";
|
import { join } from "node:path";
|
||||||
import type { JavaScriptRecoveryPort } from "../../application/javascript/JavaScriptRecoveryPort.js";
|
import type { JavaScriptRecoveryPort } from "../../application/javascript/JavaScriptRecoveryPort.js";
|
||||||
import {
|
import type {
|
||||||
type AnalysisExecution,
|
AnalysisExecution,
|
||||||
type ExecutionOptions,
|
ExecutionOptions,
|
||||||
} from "../../application/AnalysisProvider.js";
|
} from "../../application/AnalysisProvider.js";
|
||||||
import { SafeOutputTree } from "../../artifacts/SafeOutputTree.js";
|
import { SafeOutputTree } from "../../artifacts/SafeOutputTree.js";
|
||||||
import { SafeOutputTreeCreationFailure } from "../../artifacts/SafeOutputTreeCreationFailure.js";
|
import { SafeOutputTreeCreationFailure } from "../../artifacts/SafeOutputTreeCreationFailure.js";
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import {
|
|||||||
AnalysisInputError,
|
AnalysisInputError,
|
||||||
} from "../domain/analysisErrorCore.js";
|
} from "../domain/analysisErrorCore.js";
|
||||||
import { ProviderAdapterError } from "../domain/providerAdapterError.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 { err, ok, type Result } from "../domain/result.js";
|
||||||
import {
|
import {
|
||||||
createNativeUiHelperRuntime,
|
createNativeUiHelperRuntime,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { describe, expect, it, vi } from "vitest";
|
import { describe, expect, it, vi } from "vitest";
|
||||||
import { type ProcessOwnershipHost } from "./ProcessOwnership.js";
|
import type { ProcessOwnershipHost } from "./ProcessOwnership.js";
|
||||||
import { observeOwnedProcessLineage } from "./ProcessOwnershipObservation.js";
|
import { observeOwnedProcessLineage } from "./ProcessOwnershipObservation.js";
|
||||||
const ownership = {
|
const ownership = {
|
||||||
runId: "run-token",
|
runId: "run-token",
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { buildCaptureResult } from "./ProcessCaptureLifecycle.js";
|
|||||||
import { isInitializedPtyRoot, readLinuxChildren } from "./ProcessSampling.js";
|
import { isInitializedPtyRoot, readLinuxChildren } from "./ProcessSampling.js";
|
||||||
import { TerminalRenderer } from "./TerminalRenderer.js";
|
import { TerminalRenderer } from "./TerminalRenderer.js";
|
||||||
import { parseProcessScenario } from "../../domain/process/processScenario.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 type { ProcessCaptureTruncationDetails } from "../../domain/process/processCaptureCoverage.js";
|
||||||
import { emptyProcessCapture as emptyCapture } from "../../domain/process/processCapture.fixture.js";
|
import { emptyProcessCapture as emptyCapture } from "../../domain/process/processCapture.fixture.js";
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import type { ProcessScenario } from "../../domain/process/processScenario.js";
|
|||||||
import { parseProcessCapture } from "../../domain/process/processCaptureParsing.js";
|
import { parseProcessCapture } from "../../domain/process/processCaptureParsing.js";
|
||||||
import { err, ok, type Result } from "../../domain/result.js";
|
import { err, ok, type Result } from "../../domain/result.js";
|
||||||
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
||||||
import { type AnalysisError } from "../../domain/analysisErrorBase.js";
|
import type { AnalysisError } from "../../domain/analysisErrorBase.js";
|
||||||
import {
|
import {
|
||||||
describeProcessCaptureExecutionFailure,
|
describeProcessCaptureExecutionFailure,
|
||||||
ProcessCaptureError,
|
ProcessCaptureError,
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ import { err, ok } from "../domain/result.js";
|
|||||||
import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
|
import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
|
||||||
import type { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js";
|
import type { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js";
|
||||||
import { traverseDirectory } from "./ReferenceSourceReaderEntries.js";
|
import { traverseDirectory } from "./ReferenceSourceReaderEntries.js";
|
||||||
import {
|
import type {
|
||||||
type ReferenceSourceReaderOptions,
|
ReferenceSourceReaderOptions,
|
||||||
type ReferenceSourceRead,
|
ReferenceSourceRead,
|
||||||
type ReferenceSourceResult,
|
ReferenceSourceResult,
|
||||||
type TraversalState,
|
TraversalState,
|
||||||
} from "./ReferenceSourceReaderTypes.js";
|
} from "./ReferenceSourceReaderTypes.js";
|
||||||
import {
|
import {
|
||||||
isAborted,
|
isAborted,
|
||||||
|
|||||||
@@ -22,12 +22,12 @@ import {
|
|||||||
validateDirectory,
|
validateDirectory,
|
||||||
bigLstat,
|
bigLstat,
|
||||||
} from "./ReferenceSourceReaderValidate.js";
|
} from "./ReferenceSourceReaderValidate.js";
|
||||||
import {
|
import type {
|
||||||
type PendingDirectory,
|
PendingDirectory,
|
||||||
type ReferenceSourceEntry,
|
ReferenceSourceEntry,
|
||||||
type ReferenceSourceEntryKind,
|
ReferenceSourceEntryKind,
|
||||||
type ReferenceSourceResult,
|
ReferenceSourceResult,
|
||||||
type TraversalState,
|
TraversalState,
|
||||||
} from "./ReferenceSourceReaderTypes.js";
|
} from "./ReferenceSourceReaderTypes.js";
|
||||||
|
|
||||||
export const traverseDirectory = async (
|
export const traverseDirectory = async (
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import {
|
import type {
|
||||||
type ReferenceSourceEntry,
|
ReferenceSourceEntry,
|
||||||
type ReferenceSourceFailureCode,
|
ReferenceSourceFailureCode,
|
||||||
type ReferenceSourceReaderError,
|
ReferenceSourceReaderError,
|
||||||
} from "./ReferenceSourceReaderTypes.js";
|
} from "./ReferenceSourceReaderTypes.js";
|
||||||
|
|
||||||
export const failure = (
|
export const failure = (
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ import {
|
|||||||
sameFile,
|
sameFile,
|
||||||
validateDirectory,
|
validateDirectory,
|
||||||
} from "./ReferenceSourceReaderValidate.js";
|
} from "./ReferenceSourceReaderValidate.js";
|
||||||
import {
|
import type {
|
||||||
type ReferenceSourceEntry,
|
ReferenceSourceEntry,
|
||||||
type StableFileRequest,
|
StableFileRequest,
|
||||||
} from "./ReferenceSourceReaderTypes.js";
|
} from "./ReferenceSourceReaderTypes.js";
|
||||||
|
|
||||||
const READ_CHUNK_BYTES = 64 * 1024;
|
const READ_CHUNK_BYTES = 64 * 1024;
|
||||||
|
|||||||
@@ -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 { AnalysisCleanupObservation } from "../domain/analysisErrorBase.js";
|
||||||
import type { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js";
|
import type { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js";
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ import {
|
|||||||
rootFilesystemFailure,
|
rootFilesystemFailure,
|
||||||
} from "./ReferenceSourceReaderErrors.js";
|
} from "./ReferenceSourceReaderErrors.js";
|
||||||
import { isPathWithinRoot } from "../domain/localPath.js";
|
import { isPathWithinRoot } from "../domain/localPath.js";
|
||||||
import {
|
import type {
|
||||||
type ReferenceSourceFailureCode,
|
ReferenceSourceFailureCode,
|
||||||
type ReferenceSourceResult,
|
ReferenceSourceResult,
|
||||||
} from "./ReferenceSourceReaderTypes.js";
|
} from "./ReferenceSourceReaderTypes.js";
|
||||||
|
|
||||||
export const bigLstat = (path: string): Promise<BigIntStats> =>
|
export const bigLstat = (path: string): Promise<BigIntStats> =>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { BinarySessionPort } from "../../application/binary/BinarySessionPort.js";
|
import type { BinarySessionPort } from "../../application/binary/BinarySessionPort.js";
|
||||||
import type { Evidence } from "../../domain/evidence.js";
|
import type { Evidence } from "../../domain/evidence.js";
|
||||||
import { EvidenceIntegrityError } from "../../domain/evidenceErrors.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 { err, ok, type Result } from "../../domain/result.js";
|
||||||
import { recordDerivedEvidence } from "../recordDerivedEvidence.js";
|
import { recordDerivedEvidence } from "../recordDerivedEvidence.js";
|
||||||
import type { WorkflowUnknownInput } from "./types.js";
|
import type { WorkflowUnknownInput } from "./types.js";
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import type { EvidenceMcpServer } from "./EvidenceMcpServer.js";
|
|||||||
import type { BinarySessionPort } from "../application/binary/BinarySessionPort.js";
|
import type { BinarySessionPort } from "../application/binary/BinarySessionPort.js";
|
||||||
import { toolContract } from "../contracts/toolContracts.js";
|
import { toolContract } from "../contracts/toolContracts.js";
|
||||||
import { AnalysisInputError } from "../domain/analysisErrorCore.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 { describeValidationFailure } from "../domain/evidenceBundle.js";
|
||||||
import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
|
import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { ProcessCaptureError } from "../process/capture/ProcessCaptureError.js";
|
|||||||
import { toolContract } from "../contracts/toolContracts.js";
|
import { toolContract } from "../contracts/toolContracts.js";
|
||||||
import type { AnalysisSnapshot } from "../domain/analysisSnapshot.js";
|
import type { AnalysisSnapshot } from "../domain/analysisSnapshot.js";
|
||||||
import { UnknownRegistryError } from "../domain/unknownRegistryError.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 { Evidence } from "../domain/evidence.js";
|
||||||
import type { ProcessCapture } from "../domain/process/processCaptureParsing.js";
|
import type { ProcessCapture } from "../domain/process/processCaptureParsing.js";
|
||||||
import { err, ok, type Result } from "../domain/result.js";
|
import { err, ok, type Result } from "../domain/result.js";
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
projectAnalysisError,
|
projectAnalysisError,
|
||||||
type AnalysisErrorProjection,
|
type AnalysisErrorProjection,
|
||||||
} from "../domain/analysisErrorProjection.js";
|
} 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 { JsonValue } from "../domain/jsonValue.js";
|
||||||
import type { Result } from "../domain/result.js";
|
import type { Result } from "../domain/result.js";
|
||||||
import { AnalysisResourceConstraintError } from "../domain/analysisErrorCore.js";
|
import { AnalysisResourceConstraintError } from "../domain/analysisErrorCore.js";
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { Client } from "@modelcontextprotocol/client";
|
||||||
|
import { StdioClientTransport } from "@modelcontextprotocol/client/stdio";
|
||||||
import { execFile } from "node:child_process";
|
import { execFile } from "node:child_process";
|
||||||
import { mkdir, writeFile } from "node:fs/promises";
|
import { mkdir, writeFile } from "node:fs/promises";
|
||||||
import { join } from "node:path";
|
import { join } from "node:path";
|
||||||
@@ -42,6 +44,14 @@ registerHooks({
|
|||||||
});
|
});
|
||||||
`)}`;
|
`)}`;
|
||||||
|
|
||||||
|
const resolvedMarkers = (stderr: string): ReadonlySet<string> =>
|
||||||
|
new Set(
|
||||||
|
stderr
|
||||||
|
.split("\n")
|
||||||
|
.filter((line) => line.startsWith(MARKER))
|
||||||
|
.map((line) => line.slice(MARKER.length)),
|
||||||
|
);
|
||||||
|
|
||||||
const resolvedPackages = async (
|
const resolvedPackages = async (
|
||||||
arguments_: readonly string[],
|
arguments_: readonly string[],
|
||||||
): Promise<ReadonlySet<string>> => {
|
): Promise<ReadonlySet<string>> => {
|
||||||
@@ -50,12 +60,7 @@ const resolvedPackages = async (
|
|||||||
[`--import=${RESOLUTION_HOOK}`, ...arguments_],
|
[`--import=${RESOLUTION_HOOK}`, ...arguments_],
|
||||||
{ cwd: process.cwd(), maxBuffer: 16 * 1_024 * 1_024 },
|
{ cwd: process.cwd(), maxBuffer: 16 * 1_024 * 1_024 },
|
||||||
);
|
);
|
||||||
return new Set(
|
return resolvedMarkers(stderr);
|
||||||
stderr
|
|
||||||
.split("\n")
|
|
||||||
.filter((line) => line.startsWith(MARKER))
|
|
||||||
.map((line) => line.slice(MARKER.length)),
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const evaluate = (source: string): readonly string[] => [
|
const evaluate = (source: string): readonly string[] => [
|
||||||
@@ -66,9 +71,19 @@ const evaluate = (source: string): readonly string[] => [
|
|||||||
|
|
||||||
describe("CLI startup imports", () => {
|
describe("CLI startup imports", () => {
|
||||||
it("detects each deferred package when its command code loads", async () => {
|
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(
|
await expect(
|
||||||
resolvedPackages(
|
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");
|
).resolves.toContain("playwright-core");
|
||||||
const source = await createTestTempDirectory("rea-startup-imports-");
|
const source = await createTestTempDirectory("rea-startup-imports-");
|
||||||
@@ -124,3 +139,32 @@ describe("CLI startup imports", () => {
|
|||||||
).resolves.toContain("binary-composition");
|
).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");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { buffer } from "node:stream/consumers";
|
|||||||
|
|
||||||
import { describe, expect, it } from "vitest";
|
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 { DirectoryArtifactReader } from "../../../src/artifacts/DirectoryArtifactReader.js";
|
||||||
import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js";
|
import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js";
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import {
|
|||||||
readJavaScriptArtifactFiles,
|
readJavaScriptArtifactFiles,
|
||||||
} from "../../support/javascriptApplicationScope.js";
|
} from "../../support/javascriptApplicationScope.js";
|
||||||
import { scanArtifactInventory } from "../../fixtures/artifactInventory.js";
|
import { scanArtifactInventory } from "../../fixtures/artifactInventory.js";
|
||||||
import {
|
import type {
|
||||||
type ArtifactEntry,
|
ArtifactEntry,
|
||||||
type ArtifactReader,
|
ArtifactReader,
|
||||||
} from "../../../src/artifacts/ArtifactReader.js";
|
} from "../../../src/artifacts/ArtifactReader.js";
|
||||||
import { writeJavaScriptArtifactFixture } from "../../fixtures/javascriptArtifactApplication.js";
|
import { writeJavaScriptArtifactFixture } from "../../fixtures/javascriptArtifactApplication.js";
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { MANAGED_WORKFLOW_TOOL_CONTRACTS } from "../../../src/contracts/managed/
|
|||||||
import { ENHANCED_TOOL_CONTRACTS } from "../../../src/contracts/enhancedToolContracts.js";
|
import { ENHANCED_TOOL_CONTRACTS } from "../../../src/contracts/enhancedToolContracts.js";
|
||||||
import { SESSION_TOOL_CONTRACTS } from "../../../src/contracts/sessionToolContracts.js";
|
import { SESSION_TOOL_CONTRACTS } from "../../../src/contracts/sessionToolContracts.js";
|
||||||
import { TOOL_CONTRACTS } from "../../../src/contracts/toolContracts.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 { createServer } from "../../../src/server/createServer.js";
|
||||||
import { observed as ok } from "../../fixtures/analysisExecution.js";
|
import { observed as ok } from "../../fixtures/analysisExecution.js";
|
||||||
import { createAnalysisExecution } from "../../../src/application/AnalysisProvider.js";
|
import { createAnalysisExecution } from "../../../src/application/AnalysisProvider.js";
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import {
|
|||||||
} from "../../../src/process/capture/ProcessCaptureLifecycle.js";
|
} from "../../../src/process/capture/ProcessCaptureLifecycle.js";
|
||||||
import { parseProcessScenario } from "../../../src/domain/process/processScenario.js";
|
import { parseProcessScenario } from "../../../src/domain/process/processScenario.js";
|
||||||
import { emptyProcessCapture } from "../../../src/domain/process/processCapture.fixture.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(
|
const processFixture = fileURLToPath(
|
||||||
new URL("../../fixtures/processFidelity.mjs", import.meta.url),
|
new URL("../../fixtures/processFidelity.mjs", import.meta.url),
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { EvidenceFileError } from "../../../src/domain/evidenceErrors.js";
|
|||||||
import { HopperRemoteError } from "../../../src/domain/hopperErrors.js";
|
import { HopperRemoteError } from "../../../src/domain/hopperErrors.js";
|
||||||
import { UnknownRegistryError } from "../../../src/domain/unknownRegistryError.js";
|
import { UnknownRegistryError } from "../../../src/domain/unknownRegistryError.js";
|
||||||
import { projectAnalysisError } from "../../../src/domain/analysisErrorProjection.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", () => {
|
describe("analysis error projection contract", () => {
|
||||||
it("accepts every closed error-reason variant", () => {
|
it("accepts every closed error-reason variant", () => {
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
import { type WebSocket } from "ws";
|
import type { WebSocket } from "ws";
|
||||||
|
|
||||||
import type { FakeCdpCommand, FakeOptions } from "./fakeCdpBrowserTypes.js";
|
import type { FakeCdpCommand, FakeOptions } from "./fakeCdpBrowserTypes.js";
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user