rea-agents 6.2.0 → 6.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -23
- package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
- package/bridge/ghidra/ReaGhidraBridge.java +597 -209
- package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
- package/bridge/hopper_bridge.py +2 -0
- package/dist/adb/AdbConfiguration.js +88 -0
- package/dist/adb/AdbDeviceOutput.js +186 -0
- package/dist/adb/AdbProvider.js +1190 -0
- package/dist/adb/AdbShellOutput.js +309 -0
- package/dist/android/AndroidTargetSnapshot.js +104 -22
- package/dist/android/JadxConfiguration.js +44 -24
- package/dist/android/JadxProvider.js +59 -21
- package/dist/android/JadxSession.js +51 -9
- package/dist/apktool/ApktoolConfiguration.js +84 -0
- package/dist/apktool/ApktoolDecodeOutput.js +59 -0
- package/dist/apktool/ApktoolProvider.js +506 -0
- package/dist/application/AnalysisProvider.js +8 -2
- package/dist/application/AppBundleExecutable.js +27 -22
- package/dist/application/BinaryTargetResolver.js +85 -19
- package/dist/application/BrowserScenarioEvidence.js +2 -2
- package/dist/application/CapabilityInventory.js +11 -1
- package/dist/application/ClientConfigurationDocument.js +98 -0
- package/dist/application/ClientConfigurationFiles.js +91 -0
- package/dist/application/ClientRegistrationEnvironment.js +35 -0
- package/dist/application/ClientRegistrationStatus.js +75 -27
- package/dist/application/DirectAnalysis.js +14 -8
- package/dist/application/DirectAnalysisCleanup.js +1 -2
- package/dist/application/DirectAnalysisStatus.js +3 -6
- package/dist/application/Doctor.js +27 -34
- package/dist/application/DoctorDiagnostics.js +1 -1
- package/dist/application/EvidenceBundleCommands.js +6 -12
- package/dist/application/EvidenceBundleFiles.js +1 -1
- package/dist/application/GeminiClientSettings.js +139 -0
- package/dist/application/HermesClientHome.js +115 -0
- package/dist/application/HopperDownload.js +39 -0
- package/dist/application/InvestigationProviders.js +10 -4
- package/dist/application/JsonFiles.js +16 -15
- package/dist/application/JsonInputFile.js +252 -0
- package/dist/application/LinuxHopper.js +6 -13
- package/dist/application/MacHopper.js +172 -149
- package/dist/application/MipsElfAbiFlags.js +140 -0
- package/dist/application/ProviderOperationExecution.js +31 -0
- package/dist/application/ReconstructionObligationCandidates.js +16 -3
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
- package/dist/application/ReferenceSourceImport.js +76 -29
- package/dist/application/ReferenceSourceImportEntries.js +18 -9
- package/dist/application/ReferenceSourceImportPolicy.js +99 -23
- package/dist/application/ReferenceSourceImportTypes.js +30 -22
- package/dist/application/ReferenceSourceVcsAdapter.js +145 -30
- package/dist/application/RegularFileRead.js +103 -0
- package/dist/application/Setup.js +69 -10
- package/dist/application/SetupClientConfiguration.js +134 -23
- package/dist/application/SetupHost.js +102 -22
- package/dist/application/SetupPlan.js +18 -17
- package/dist/application/SetupSkill.js +81 -13
- package/dist/application/SupportedClients.js +305 -37
- package/dist/application/Uninstall.js +172 -8
- package/dist/application/UpdateMaintenance.js +23 -23
- package/dist/application/Utf8JsonInput.js +71 -0
- package/dist/application/WebScriptExportService.js +130 -57
- package/dist/application/WebSourceLocationService.js +3 -0
- package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
- package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
- package/dist/application/analysisView/AnalysisViewService.js +40 -2
- package/dist/application/android/AndroidAnalysisService.js +1 -1
- package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
- package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
- package/dist/application/binary/AnalysisClientCleanup.js +0 -24
- package/dist/application/binary/AnalysisSnapshotCache.js +5 -4
- package/dist/application/binary/BinarySession.js +18 -1
- package/dist/application/binary/BinarySessionOpen.js +9 -1
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +2 -1
- package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
- package/dist/application/binaryDiagnostics/PeResourcesService.js +111 -0
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +2 -1
- package/dist/application/evm/EvmInterfaceService.js +3 -0
- package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
- package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +2 -2
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
- package/dist/application/javascript/ElectronBoundaryGraphIpc.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +20 -3
- package/dist/application/javascript/ElectronBoundaryGraphWindows.js +3 -3
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +1 -0
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
- package/dist/application/javascript/JavaScriptApplicationService.js +23 -11
- package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +171 -36
- package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +14 -16
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +74 -36
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +11 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +53 -42
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +92 -10
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +293 -238
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +120 -28
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +4 -0
- package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
- package/dist/application/javascript/JavaScriptModuleRelationships.js +10 -20
- package/dist/application/javascript/JavaScriptRecoveryService.js +3 -0
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +11 -5
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +206 -66
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +18 -23
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +5 -2
- package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +7 -5
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +6 -4
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +29 -15
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
- package/dist/application/jeb/JebAnalysisPort.js +1 -0
- package/dist/application/jeb/JebAnalysisService.js +13 -0
- package/dist/application/managed/ManagedApplicationGraphService.js +1 -1
- package/dist/application/native/NativeCallRoutes.js +2 -4
- package/dist/application/native/NativeUiActionTrace.js +16 -8
- package/dist/application/native/NativeValueTrace.js +23 -6
- package/dist/application/process/ProcessCli.js +25 -20
- package/dist/artifacts/ArtifactPaths.js +129 -8
- package/dist/artifacts/ArtifactProvider.js +34 -31
- package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
- package/dist/artifacts/ArtifactReader.js +23 -0
- package/dist/artifacts/ArtifactResourceScope.js +100 -0
- package/dist/artifacts/AsarArtifactReader.js +218 -80
- package/dist/artifacts/AsarHeader.js +24 -0
- package/dist/artifacts/DirectoryArtifactReader.js +168 -65
- package/dist/artifacts/MachOSliceArtifactReader.js +116 -39
- package/dist/artifacts/NativeDmgArtifactReader.js +179 -87
- package/dist/artifacts/NativeDmgOwnership.js +109 -0
- package/dist/artifacts/SafeOutputTree.js +245 -70
- package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
- package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
- package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
- package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
- package/dist/artifacts/ZipArtifactReader.js +77 -27
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +58 -18
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +62 -24
- package/dist/artifacts/apple/KeyedArchiveReader.js +76 -49
- package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
- package/dist/artifacts/extraction/ArtifactExtraction.js +134 -92
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +116 -50
- package/dist/artifacts/inventory/ArtifactInventory.js +5 -4
- package/dist/artifacts/inventory/classify.js +87 -25
- package/dist/artifacts/inventory/hashStableRootArtifact.js +70 -0
- package/dist/artifacts/inventory/reader.js +13 -5
- package/dist/artifacts/inventory/scanCanonical.js +73 -30
- package/dist/artifacts/inventory/scanReader.js +43 -20
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +72 -28
- package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
- package/dist/browser/BrowserScenarioPartialObservation.js +8 -2
- package/dist/browser/BrowserScenarioSecrets.js +52 -37
- package/dist/browser/CdpBrowserProvider.js +9 -3
- package/dist/browser/CdpCaptureDocuments.js +40 -6
- package/dist/browser/CdpCaptureDomSvg.js +210 -0
- package/dist/browser/CdpCaptureEventBodyShapes.js +4 -8
- package/dist/browser/CdpCaptureEventHandlers.js +26 -9
- package/dist/browser/CdpCaptureEvents.js +4 -9
- package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
- package/dist/browser/CdpConnection.js +22 -5
- package/dist/browser/CdpElectronInspection.js +2 -2
- package/dist/browser/CdpElectronProvider.js +4 -3
- package/dist/browser/CdpElectronScripts.js +2 -2
- package/dist/browser/CdpPageCapture.js +1 -1
- package/dist/browser/CdpTargetSession.js +30 -34
- package/dist/browser/CdpWebMcpDiscovery.js +48 -23
- package/dist/browser/ElectronFileScope.js +99 -9
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +63 -7
- package/dist/browser/PlaywrightElectronActiveProvider.js +11 -6
- package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
- package/dist/browser/PlaywrightScenarioBrowser.js +208 -43
- package/dist/browser/PlaywrightScenarioSession.js +130 -65
- package/dist/browser/PlaywrightScenarioStorage.js +507 -0
- package/dist/browser/PngVisualDiff.js +198 -29
- package/dist/browser/WebSourceMapFetcher.js +35 -9
- package/dist/browser/assets/LocalWebScriptArtifacts.js +3 -1
- package/dist/browser/assets/PublishWebScripts.js +75 -20
- package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
- package/dist/browser/assets/WebArtifactReads.js +23 -1
- package/dist/browser/assets/WebSourceLocationArtifacts.js +1 -0
- package/dist/browser/execution/CdpExecutionCapture.js +3 -3
- package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
- package/dist/browser/history/HarCapture.js +14 -0
- package/dist/browser/history/HarCaptureProcess.js +2 -10
- package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
- package/dist/browser/modules/WebModuleArtifacts.js +1 -0
- package/dist/cli/adbCommands.js +337 -0
- package/dist/cli/analysisViewCommands.js +39 -1
- package/dist/cli/apktoolCommands.js +53 -0
- package/dist/cli/artifactCommands.js +8 -11
- package/dist/cli/binaryDiagnosticsCommands.js +19 -1
- package/dist/cli/browserAdvancedCommands.js +65 -36
- package/dist/cli/coreAnalysisCommands.js +2 -2
- package/dist/cli/coreBinaryCommands.js +12 -13
- package/dist/cli/coreNativeCommands.js +1 -14
- package/dist/cli/electronCommands.js +14 -10
- package/dist/cli/evmCommands.js +13 -4
- package/dist/cli/firmwareCommands.js +7 -2
- package/dist/cli/javascriptApplicationAnalysis.js +19 -13
- package/dist/cli/javascriptRecoveryCommands.js +22 -15
- package/dist/cli/jebCommands.js +99 -0
- package/dist/cli/jsonOutput.js +12 -4
- package/dist/cli/referenceSourceImportStatus.js +7 -0
- package/dist/cli/setupCommands.js +15 -3
- package/dist/cli/streamedJsonOutput.js +83 -4
- package/dist/cli/utilityCommands.js +68 -22
- package/dist/cli/webScriptCommands.js +20 -1
- package/dist/cli/webSourceLocationCommands.js +21 -9
- package/dist/cli.js +11 -2
- package/dist/cliBrowserScenarioCommands.js +2 -1
- package/dist/cliCommandNames.js +32 -0
- package/dist/cliJsonInput.js +47 -34
- package/dist/cliObservationOptions.js +7 -0
- package/dist/composition/adb.js +3 -0
- package/dist/composition/apktool.js +3 -0
- package/dist/composition/auxiliaryAnalysisProviders.js +5 -4
- package/dist/composition/binaryDiagnostics.js +4 -0
- package/dist/composition/browserScenario.js +2 -2
- package/dist/composition/directAnalysis.js +14 -7
- package/dist/composition/javascriptAnalysisWorkerProcess.js +48 -0
- package/dist/composition/jeb.js +6 -0
- package/dist/config/environment.js +10 -0
- package/dist/config/ghidraLanguageOverride.js +9 -0
- package/dist/config/mcpInputSchemaProfile.js +27 -0
- package/dist/config/parseConfig.js +28 -1
- package/dist/contracts/adb/adbToolContracts.js +353 -0
- package/dist/contracts/advertisedInputExamples.js +48 -0
- package/dist/contracts/analysisDetail.js +10 -0
- package/dist/contracts/analysisViewToolContracts.js +17 -2
- package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
- package/dist/contracts/artifactComparisonExample.js +5 -5
- package/dist/contracts/artifactToolContracts.js +8 -5
- package/dist/contracts/browserToolContracts.js +1 -1
- package/dist/contracts/compactInputSchema.js +256 -0
- package/dist/contracts/errorSchemas.js +3 -1
- package/dist/contracts/functionComparisonExample.js +8 -0
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +104 -13
- package/dist/contracts/javascript/electronToolContracts.js +16 -3
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -2
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +6 -3
- package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
- package/dist/contracts/jeb/jebToolContracts.js +64 -0
- package/dist/contracts/managed/managedToolContracts.js +3 -2
- package/dist/contracts/mobileApplicationGraphExamples.js +5 -5
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +25 -3
- package/dist/contracts/native/nativeToolContracts.js +1 -1
- package/dist/contracts/officialToolContracts.js +5 -5
- package/dist/contracts/sessionLifecycleInputs.js +4 -3
- package/dist/contracts/sessionStatusContract.js +3 -2
- package/dist/contracts/sessionToolContracts.js +5 -4
- package/dist/contracts/sessionToolSchemas.js +9 -4
- package/dist/contracts/toolContractExamples.js +6 -0
- package/dist/contracts/toolContractTypes.js +3 -0
- package/dist/contracts/toolContracts.js +6 -0
- package/dist/contracts/toolEffects.js +167 -0
- package/dist/contracts/toolOutputSchemaGroups.js +7 -5
- package/dist/contracts/toolOutputSchemaPrimitives.js +2 -5
- package/dist/contracts/toolSchemaMetadata.js +82 -7
- package/dist/domain/adb/adbDeviceAnalysis.js +583 -0
- package/dist/domain/analysisErrorBase.js +5 -0
- package/dist/domain/analysisErrorCleanup.js +29 -0
- package/dist/domain/analysisErrorPresentation.js +18 -4
- package/dist/domain/analysisErrorProjection.js +4 -1
- package/dist/domain/analysisSnapshot.js +5 -2
- package/dist/domain/analysisView/analysisView.js +53 -5
- package/dist/domain/analysisView/binaryLayoutView.js +2 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +2 -0
- package/dist/domain/analysisView/nativeFunctionView.js +155 -0
- package/dist/domain/android/androidApplication.js +25 -20
- package/dist/domain/android/androidPartialObservation.js +36 -0
- package/dist/domain/apktool/apktoolResourceAnalysis.js +77 -0
- package/dist/domain/apple/appleApplication.js +40 -23
- package/dist/domain/apple/appleBundleAnatomy.js +95 -28
- package/dist/domain/apple/dyldPaths.js +9 -1
- package/dist/domain/apple/dylibResolution.js +3 -3
- package/dist/domain/apple/interfaceBuilderGraph.js +22 -19
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +10 -1
- package/dist/domain/artifactComparison.js +39 -11
- package/dist/domain/artifactGraph.js +6 -4
- package/dist/domain/artifactIdentity.js +37 -9
- package/dist/domain/artifactInspection.js +10 -50
- package/dist/domain/artifactIntegrityPolicy.js +10 -0
- package/dist/domain/artifactInventoryEvidence.js +16 -17
- package/dist/domain/artifactPathSyntax.js +1 -1
- package/dist/domain/binaryTarget.js +16 -0
- package/dist/domain/binaryTargetTypes.js +8 -1
- package/dist/domain/browserCompleteness.js +3 -2
- package/dist/domain/browserObservationSchemas.js +8 -4
- package/dist/domain/browserScenarioCaptureValues.js +2 -2
- package/dist/domain/browserScenarioNormalization.js +3 -3
- package/dist/domain/browserScenarioValues.js +3 -2
- package/dist/domain/callPath.js +8 -10
- package/dist/domain/canonicalDigest.js +7 -1
- package/dist/domain/canonicalJsonDigestSteps.js +34 -12
- package/dist/domain/canonicalOrdering.js +1 -13
- package/dist/domain/changedBehavior.js +2 -3
- package/dist/domain/compactStringIdentity.js +9 -0
- package/dist/domain/comparisonSemantics.js +0 -5
- package/dist/domain/digests.js +0 -3
- package/dist/domain/evidence.js +12 -6
- package/dist/domain/evidenceBundle.js +51 -33
- package/dist/domain/evidenceRecordSummary.js +144 -0
- package/dist/domain/firmware/firmwareAnalysis.js +4 -3
- package/dist/domain/functionComparison.js +2 -1
- package/dist/domain/functionComparisonNormalization.js +4 -3
- package/dist/domain/functionComparisonResults.js +2 -2
- package/dist/domain/functionDossierEvidence.js +2 -1
- package/dist/domain/hopperValues.js +11 -15
- package/dist/domain/inputIssueProjection.js +16 -1
- package/dist/domain/javascript/electronActiveObservation.js +4 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +14 -15
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +20 -21
- package/dist/domain/javascript/electronStaticAnalysisNative.js +73 -41
- package/dist/domain/javascript/electronStaticAnalysisValues.js +24 -4
- package/dist/domain/javascript/javascriptAnalysisResourceControls.js +45 -0
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +6 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +18 -14
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +4 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +91 -28
- package/dist/domain/javascript/javascriptApplicationProjectionResources.js +35 -0
- package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
- package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +72 -45
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +16 -8
- package/dist/domain/javascript/javascriptAstFingerprint.js +60 -33
- package/dist/domain/javascript/javascriptAstValues.js +54 -0
- package/dist/domain/javascript/javascriptElectronMemberWrites.js +50 -0
- package/dist/domain/javascript/javascriptExportShapeComparison.js +3 -2
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +31 -23
- package/dist/domain/javascript/javascriptExportShapeSelection.js +2 -2
- package/dist/domain/javascript/javascriptExportShapeVariants.js +3 -2
- package/dist/domain/javascript/javascriptFeatureSeed.js +5 -3
- package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
- package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -4
- package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
- package/dist/domain/javascript/javascriptNativeHandoff.js +12 -7
- package/dist/domain/javascript/javascriptRpcEndpoints.js +253 -0
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +1 -3
- package/dist/domain/javascript/javascriptRuntimeObservation.js +8 -5
- package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
- package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +12 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +5 -5
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -223
- package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +15 -17
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +379 -30
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
- package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
- package/dist/domain/javascript/javascriptSemanticCalls.js +8 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -2
- package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
- package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
- package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +43 -42
- package/dist/domain/javascript/javascriptSemanticGraph.js +205 -52
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +21 -11
- package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +139 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +774 -136
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +98 -41
- package/dist/domain/javascript/javascriptSemanticObjectReferences.js +381 -0
- package/dist/domain/javascript/javascriptSemanticObjects.js +9 -7
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +7 -2
- package/dist/domain/javascript/javascriptSemanticProjection.js +72 -28
- package/dist/domain/javascript/javascriptSemanticPromises.js +15 -21
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +100 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
- package/dist/domain/javascript/javascriptSemanticQuery.js +33 -29
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +4 -5
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
- package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +219 -0
- package/dist/domain/javascript/javascriptSemanticReturns.js +34 -48
- package/dist/domain/javascript/javascriptSemanticState.js +22 -2
- package/dist/domain/javascript/javascriptSemanticTraversal.js +25 -2
- package/dist/domain/javascript/javascriptSemanticValues.js +169 -30
- package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
- package/dist/domain/javascript/javascriptSourceMapPaths.js +11 -1
- package/dist/domain/javascript/javascriptSourceParser.js +34 -9
- package/dist/domain/javascript/javascriptStaticAnalysis.js +29 -17
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +13 -12
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +49 -5
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -15
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
- package/dist/domain/javascript/sourceToBundleComparison.js +7 -5
- package/dist/domain/javascript/sourceToBundleSignals.js +7 -7
- package/dist/domain/jeb/jebAnalysis.js +114 -0
- package/dist/domain/jsonSerialization.js +109 -55
- package/dist/domain/jsonShape.js +69 -31
- package/dist/domain/jsonValue.js +3 -0
- package/dist/domain/localPath.js +10 -4
- package/dist/domain/managed/managedApplicationGraph.js +47 -6
- package/dist/domain/managed/managedApplicationGraphCoverage.js +8 -2
- package/dist/domain/managed/managedApplicationGraphNodes.js +94 -59
- package/dist/domain/managed/managedArtifact.js +1 -0
- package/dist/domain/managed/managedInspectionEvidence.js +13 -0
- package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
- package/dist/domain/native/nativeAotPe.js +1408 -0
- package/dist/domain/native/nativeCallObservation.js +2 -4
- package/dist/domain/native/nativeInstruction.js +21 -0
- package/dist/domain/native/nativeMetadataRecovery.js +79 -6
- package/dist/domain/native/nativeValueFlow.js +5 -11
- package/dist/domain/native/objcSwiftMetadata.js +15 -17
- package/dist/domain/native/peResources.js +94 -0
- package/dist/domain/nativeConvention.js +33 -0
- package/dist/domain/process/processCapture.js +102 -11
- package/dist/domain/process/processCaptureCoverage.js +8 -5
- package/dist/domain/process/processCaptureExample.js +67 -0
- package/dist/domain/process/processCaptureValidation.js +83 -3
- package/dist/domain/process/processComparison.js +0 -23
- package/dist/domain/process/processScenario.js +62 -10
- package/dist/domain/process/processTraceEvaluation.js +4 -4
- package/dist/domain/process/processTraceSpecification.js +1 -3
- package/dist/domain/propertyListKeys.js +3 -1
- package/dist/domain/providerCleanupError.js +6 -2
- package/dist/domain/reconstructionCoverage.js +2 -1
- package/dist/domain/reconstructionUnknowns.js +4 -3
- package/dist/domain/reconstructionVerification.js +3 -2
- package/dist/domain/referenceSourceGraph.js +32 -23
- package/dist/domain/referenceSourceImportParsing.js +40 -48
- package/dist/domain/referenceSourcePathIdentity.js +22 -0
- package/dist/domain/referenceSourceRequireBindings.js +137 -0
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/staticRuntimeCorrelation.js +2 -1
- package/dist/domain/swiftSymbolClassification.js +6 -1
- package/dist/domain/symbolAnalysis.js +17 -2
- package/dist/domain/unicodeCodePointOrder.js +6 -0
- package/dist/domain/webBundleAnalyzerInspection.js +23 -3
- package/dist/domain/webCaptureDiff.js +170 -30
- package/dist/domain/webCaptureDiffSchemas.js +2 -8
- package/dist/domain/webInventory.js +3 -2
- package/dist/domain/webMcpDiscovery.js +4 -3
- package/dist/domain/webScriptExport.js +1 -1
- package/dist/domain/webScriptExportError.js +10 -4
- package/dist/domain/webScriptExportPlan.js +7 -13
- package/dist/domain/zipPackageFormat.js +4 -1
- package/dist/domain/zodCollectionSteps.js +24 -0
- package/dist/dotnet/ManagedArtifactInspector.js +55 -43
- package/dist/dotnet/ManagedDecodeBudget.js +80 -0
- package/dist/dotnet/ManagedMemberInspector.js +13 -6
- package/dist/dotnet/ManagedMemberInspectorCore.js +2 -2
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +5 -4
- package/dist/dotnet/ManagedMemberRows.js +9 -4
- package/dist/dotnet/ManagedMetadataHeaps.js +15 -5
- package/dist/dotnet/ManagedMetadataInventoryRows.js +20 -11
- package/dist/dotnet/ManagedMetadataLayout.js +10 -4
- package/dist/dotnet/ManagedMethodBodyReader.js +8 -3
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +3 -2
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +49 -34
- package/dist/dotnet/ManagedPeReader.js +41 -25
- package/dist/dotnet/ManagedReaderFailure.js +2 -1
- package/dist/dotnet/ManagedStaticProvider.js +65 -31
- package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
- package/dist/evaluation/AgentEvaluationReport.js +9 -5
- package/dist/evaluation/CodexAgentEval.js +43 -13
- package/dist/evm/EvmoleFailures.js +0 -2
- package/dist/evm/EvmoleInterfaceProvider.js +67 -2
- package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
- package/dist/filesystem/OwnedFileHandle.js +36 -0
- package/dist/filesystem/RegularFile.js +73 -0
- package/dist/filesystem/StableFileHash.js +46 -0
- package/dist/filesystem/readFileHandleChunks.js +26 -0
- package/dist/firmware/FirmwareCommand.js +25 -3
- package/dist/firmware/FirmwareFiles.js +23 -8
- package/dist/firmware/FirmwareProvider.js +156 -32
- package/dist/firmware/FirmwarePublication.js +24 -3
- package/dist/firmware/FirmwareRelease.js +1 -0
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +55 -4
- package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
- package/dist/ghidra/GhidraClient.js +90 -8
- package/dist/ghidra/GhidraDiagnostics.js +11 -8
- package/dist/ghidra/GhidraFunctionValues.js +26 -2
- package/dist/ghidra/GhidraInstallation.js +111 -10
- package/dist/ghidra/GhidraInventoryValues.js +23 -1
- package/dist/ghidra/GhidraLanguageCatalog.js +99 -0
- package/dist/ghidra/GhidraLauncher.js +123 -58
- package/dist/ghidra/GhidraLoadImageAttest.js +49 -2
- package/dist/ghidra/GhidraMipsProfile.js +79 -0
- package/dist/ghidra/GhidraProvider.js +57 -9
- package/dist/ghidra/GhidraProviderCapabilities.js +18 -8
- package/dist/ghidra/GhidraProviderClient.js +282 -21
- package/dist/ghidra/GhidraSessionValues.js +9 -2
- package/dist/hopper/HopperAnalysisProfile.js +2 -0
- package/dist/hopper/HopperCleanup.js +1 -1
- package/dist/hopper/HopperClient.js +15 -6
- package/dist/hopper/HopperMachOImage.js +2 -0
- package/dist/hopper/HopperProvider.js +13 -2
- package/dist/ida/IdaOperationRunner.js +10 -2
- package/dist/ida/IdaProvider.js +7 -0
- package/dist/ida/IdaSessionClient.js +7 -3
- package/dist/ida/IdaWorkspace.js +4 -2
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
- package/dist/inspector/V8InspectorCaptureProjection.js +46 -13
- package/dist/inspector/V8InspectorProvider.js +60 -8
- package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +326 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +520 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +63 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +521 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +116 -0
- package/dist/javascript/recovery/RecoveryFiles.js +18 -7
- package/dist/javascript/recovery/WakaruCommand.js +22 -9
- package/dist/javascript/recovery/WakaruExecution.js +11 -7
- package/dist/javascript/recovery/WakaruProvider.js +139 -16
- package/dist/javascript/recovery/WakaruPublication.js +14 -4
- package/dist/javascript/recovery/WakaruRelease.js +10 -3
- package/dist/javascript/recovery/WakaruReport.js +12 -7
- package/dist/javascript/recovery/WakaruVersion.js +24 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -3
- package/dist/javascript/sourceMaps/SourceMapDecoder.js +63 -7
- package/dist/javascript/sourceMaps/SourceMapFormat.js +15 -4
- package/dist/jeb/JebMcpConnection.js +179 -0
- package/dist/jeb/JebMcpEndpoint.js +40 -0
- package/dist/jeb/JebProvider.js +299 -0
- package/dist/main/shutdown.js +76 -32
- package/dist/main/transport.js +1 -1
- package/dist/mcpDoctor.js +15 -6
- package/dist/native/AppleDispatchCoverage.js +25 -12
- package/dist/native/AppleDispatchMetadata.js +14 -7
- package/dist/native/AppleMachoFixups.js +71 -15
- package/dist/native/AppleMachoSelection.js +23 -3
- package/dist/native/AppleObjcDispatchFacets.js +3 -3
- package/dist/native/AppleObjcProperties.js +17 -7
- package/dist/native/LldbCallTracer.js +241 -75
- package/dist/native/NativeMacOSProvider.js +100 -20
- package/dist/native/NativeMacOSProviderMetadata.js +1 -2
- package/dist/native/NativeMachoInspection.js +11 -7
- package/dist/native/NativeUiHelperRuntime.js +6 -1
- package/dist/native/NativeUiObservation.js +4 -3
- package/dist/native/pe/PeResourceLayout.js +120 -0
- package/dist/native/pe/PeResourceParser.js +286 -0
- package/dist/native/pe/PeResourcesProvider.js +63 -0
- package/dist/process/BoundedFileBytes.js +30 -7
- package/dist/process/DarwinProcessRunTokenReader.js +8 -3
- package/dist/process/OwnedCommand.js +4 -3
- package/dist/process/ProcessOwnership.js +104 -112
- package/dist/process/ProcessOwnershipObservation.js +104 -51
- package/dist/process/ProcessOwnershipProcessTree.js +4 -4
- package/dist/process/ProcessRunTokenObservations.js +48 -0
- package/dist/process/ProviderDiagnosticRedaction.js +17 -0
- package/dist/process/ProviderProcess.js +4 -3
- package/dist/process/capture/FilesystemSnapshot.js +116 -22
- package/dist/process/capture/ProcessCaptureLifecycle.js +363 -86
- package/dist/process/capture/ProcessCaptureProgress.js +62 -0
- package/dist/process/capture/ProcessFilesystemEffects.js +19 -4
- package/dist/process/capture/ProcessHarness.js +202 -47
- package/dist/process/capture/ProcessNormalization.js +3 -1
- package/dist/process/capture/ProcessScenarioRuntimeValidation.js +5 -2
- package/dist/process/capture/TerminalRenderer.js +24 -7
- package/dist/reference/ReferenceSourceReader.js +22 -5
- package/dist/reference/ReferenceSourceReaderEntries.js +114 -51
- package/dist/reference/ReferenceSourceReaderErrors.js +12 -0
- package/dist/reference/ReferenceSourceReaderFile.js +50 -10
- package/dist/reference/ReferenceSourceReaderValidate.js +4 -4
- package/dist/server/EvidenceMcpServer.js +36 -1
- package/dist/server/admittedToolOperation.js +9 -0
- package/dist/server/analysisAdmission.js +8 -0
- package/dist/server/contractToolHandler.js +21 -0
- package/dist/server/createServer.js +118 -47
- package/dist/server/registerAdbTools.js +36 -0
- package/dist/server/registerAnalysisViewTool.js +4 -9
- package/dist/server/registerAndroidTools.js +3 -12
- package/dist/server/registerApktoolTools.js +14 -0
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -7
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +3 -2
- package/dist/server/registerApplicationTools/coverage.js +3 -2
- package/dist/server/registerApplicationTools/helpers.js +3 -2
- package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -2
- package/dist/server/registerApplicationTools/traceFeature.js +3 -2
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +5 -2
- package/dist/server/registerArtifactTools.js +2 -2
- package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
- package/dist/server/registerBrowserScenarioTool.js +10 -7
- package/dist/server/registerBrowserTools.js +12 -9
- package/dist/server/registerBundleComparisonTool.js +16 -2
- package/dist/server/registerCloseLifecycleTool.js +36 -5
- package/dist/server/registerElectronTools.js +28 -10
- package/dist/server/registerEnhancedTools.js +78 -73
- package/dist/server/registerEvidenceTools.js +54 -46
- package/dist/server/registerEvmTools.js +4 -9
- package/dist/server/registerFirmwareTools.js +3 -11
- package/dist/server/registerFunctionComparisonTool.js +5 -2
- package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -6
- package/dist/server/registerJebTools.js +16 -0
- package/dist/server/registerManagedTools.js +7 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
- package/dist/server/registerOfficialTools.js +31 -25
- package/dist/server/registerPeResourcesTool.js +9 -0
- package/dist/server/registerProcessComparisonTool.js +5 -2
- package/dist/server/registerRecordedCrashTools.js +4 -9
- package/dist/server/registerSessionRecordTools.js +2 -1
- package/dist/server/registerSessionTools.js +58 -21
- package/dist/server/registerWebModuleTool.js +4 -9
- package/dist/server/registerWebNetworkCaptureTool.js +4 -9
- package/dist/server/registerWebRuntimeTools.js +6 -5
- package/dist/server/registerWebScriptTool.js +6 -3
- package/dist/server/registerWebSourceLocationTool.js +4 -9
- package/dist/server/toolResult.js +21 -2
- package/dist/windows/WindowsPrivateRuntime.js +12 -5
- package/install.sh +7 -4
- package/licenses/nativeaot-parser-MIT.txt +28 -0
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +38 -7
- package/scripts/rea.mjs +16 -1
- package/skills/reverse-engineer-anything/SKILL.md +52 -51
- package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -0
- package/skills/reverse-engineer-anything/references/javascript-applications.md +92 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +31 -1
- package/dist/artifacts/inventory/policy.js +0 -2
- package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
- package/dist/server/registerNativeTools.js +0 -6
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { ArtifactReaderFailure } from "../../artifacts/ArtifactReader.js";
|
|
3
3
|
import { analyzeJavaScriptApplicationInputSchema, parseOwnedJavaScriptApplicationAnalysisSteps, } from "../../domain/javascript/javascriptApplicationAnalysis.js";
|
|
4
|
-
import {
|
|
4
|
+
import { AnalysisOutputError } from "../../domain/analysisErrorCore.js";
|
|
5
5
|
import { ArtifactOperationError } from "../../domain/artifactOperationError.js";
|
|
6
|
-
import {} from "../../domain/analysisErrorBase.js";
|
|
6
|
+
import { AnalysisError } from "../../domain/analysisErrorBase.js";
|
|
7
7
|
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
|
8
8
|
import { err, ok } from "../../domain/result.js";
|
|
9
9
|
import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
|
|
@@ -13,14 +13,14 @@ import { reconstructJavaScriptArtifact } from "./JavaScriptArtifactReconstructio
|
|
|
13
13
|
import { JAVASCRIPT_APPLICATION_PROVIDER } from "../InvestigationProviders.js";
|
|
14
14
|
const OPERATION = "analyze_javascript_application";
|
|
15
15
|
/** Statically analyze one local JavaScript/Electron application. */
|
|
16
|
-
export const analyzeJavaScriptApplication = async (rawInput, options = {}) => {
|
|
16
|
+
export const analyzeJavaScriptApplication = async (rawInput, scope, options = {}) => {
|
|
17
17
|
const parsed = analyzeJavaScriptApplicationInputSchema.safeParse(rawInput);
|
|
18
18
|
if (!parsed.success)
|
|
19
19
|
return err(analysisInputErrorFromIssues(OPERATION, parsed.error.issues, rawInput));
|
|
20
|
-
return analyzeJavaScriptApplicationValidated(parsed.data, options);
|
|
20
|
+
return analyzeJavaScriptApplicationValidated(parsed.data, scope, options);
|
|
21
21
|
};
|
|
22
22
|
/** Analyze input already parsed by a trusted adapter boundary. */
|
|
23
|
-
export const analyzeJavaScriptApplicationValidated = async (input, options = {}) => {
|
|
23
|
+
export const analyzeJavaScriptApplicationValidated = async (input, scope, options = {}) => {
|
|
24
24
|
try {
|
|
25
25
|
assertJavaScriptAnalysisActive(options.signal);
|
|
26
26
|
await options.progress?.report({
|
|
@@ -33,7 +33,14 @@ export const analyzeJavaScriptApplicationValidated = async (input, options = {})
|
|
|
33
33
|
const reconstructed = await reconstructJavaScriptArtifact({
|
|
34
34
|
input_path: input.input_path,
|
|
35
35
|
format: input.format,
|
|
36
|
-
|
|
36
|
+
integrity_policy: input.integrity_policy,
|
|
37
|
+
...(input.max_heap_mb === undefined
|
|
38
|
+
? {}
|
|
39
|
+
: { max_heap_mb: input.max_heap_mb }),
|
|
40
|
+
...(input.analysis_timeout_ms === undefined
|
|
41
|
+
? {}
|
|
42
|
+
: { analysis_timeout_ms: input.analysis_timeout_ms }),
|
|
43
|
+
}, scope, options.signal, options.progress);
|
|
37
44
|
const { electron_summary: summary, ...application } = reconstructed;
|
|
38
45
|
await options.progress?.report({
|
|
39
46
|
phase: "validate_javascript_application_result",
|
|
@@ -67,13 +74,11 @@ export const analyzeJavaScriptApplicationValidated = async (input, options = {})
|
|
|
67
74
|
return ok(evidence);
|
|
68
75
|
}
|
|
69
76
|
catch (cause) {
|
|
70
|
-
//
|
|
71
|
-
if (cause instanceof
|
|
72
|
-
cause instanceof AnalysisUnsupportedTargetError ||
|
|
73
|
-
cause instanceof AnalysisAccessDeniedError)
|
|
77
|
+
// Preserve execution constraints and their completed partial Evidence.
|
|
78
|
+
if (cause instanceof AnalysisError)
|
|
74
79
|
return err(cause);
|
|
75
80
|
if (cause instanceof ArtifactReaderFailure)
|
|
76
|
-
return err(
|
|
81
|
+
return err(artifactFailureToOperationError(cause));
|
|
77
82
|
if (cause instanceof z.ZodError)
|
|
78
83
|
return err(new AnalysisOutputError(OPERATION, describeResultSchemaFailure(cause), {
|
|
79
84
|
cause,
|
|
@@ -97,6 +102,13 @@ export const analyzeJavaScriptApplicationValidated = async (input, options = {})
|
|
|
97
102
|
}));
|
|
98
103
|
}
|
|
99
104
|
};
|
|
105
|
+
const artifactFailureToOperationError = (cause) => new ArtifactOperationError(OPERATION, cause.reason, cause.details, cause.message, {
|
|
106
|
+
cause,
|
|
107
|
+
...(cause.cleanup === undefined ? {} : { cleanup: cause.cleanup }),
|
|
108
|
+
...(cause.partialObservation === undefined
|
|
109
|
+
? {}
|
|
110
|
+
: { partialObservation: cause.partialObservation }),
|
|
111
|
+
});
|
|
100
112
|
const describeResultSchemaFailure = (cause) => {
|
|
101
113
|
const issue = cause.issues[0];
|
|
102
114
|
if (issue === undefined)
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { createEvidence, } from "../../domain/evidence.js";
|
|
2
|
-
import { jsonValueSchema } from "../../domain/jsonValue.js";
|
|
3
2
|
import { JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER } from "../InvestigationProviders.js";
|
|
4
3
|
/** Create derived Evidence for one bounded application-graph feature trace. */
|
|
5
4
|
export const createApplicationFeatureTraceEvidence = (parameters, result) => createEvidence(undefined, JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER, {
|
|
6
5
|
predicateType: "rea.application-feature-trace",
|
|
7
6
|
operation: "trace_application_feature",
|
|
8
7
|
parameters,
|
|
9
|
-
result
|
|
8
|
+
result,
|
|
10
9
|
rawResult: null,
|
|
11
10
|
confidence: "inferred",
|
|
12
11
|
authority: "analyst-inference",
|
|
@@ -19,7 +18,7 @@ export const createJavaScriptSemanticTraceEvidence = (parameters, result) => cre
|
|
|
19
18
|
predicateType: "rea.javascript-semantic-trace",
|
|
20
19
|
operation: "trace_javascript_semantics",
|
|
21
20
|
parameters,
|
|
22
|
-
result
|
|
21
|
+
result,
|
|
23
22
|
rawResult: null,
|
|
24
23
|
confidence: "inferred",
|
|
25
24
|
authority: "analyst-inference",
|
|
@@ -32,7 +31,7 @@ export const createApplicationVersionComparisonEvidence = (parameters, result) =
|
|
|
32
31
|
predicateType: "rea.application-version-comparison",
|
|
33
32
|
operation: "compare_application_versions",
|
|
34
33
|
parameters,
|
|
35
|
-
result
|
|
34
|
+
result,
|
|
36
35
|
rawResult: null,
|
|
37
36
|
confidence: "inferred",
|
|
38
37
|
authority: "analyst-inference",
|
|
@@ -45,7 +44,7 @@ export const createSourceToBundleComparisonEvidence = (parameters, result) => cr
|
|
|
45
44
|
predicateType: "rea.source-to-bundle-comparison",
|
|
46
45
|
operation: "compare_source_to_bundle",
|
|
47
46
|
parameters,
|
|
48
|
-
result
|
|
47
|
+
result,
|
|
49
48
|
rawResult: null,
|
|
50
49
|
confidence: "inferred",
|
|
51
50
|
authority: "analyst-inference",
|
|
@@ -58,7 +57,7 @@ export const createJavaScriptExportShapeComparisonEvidence = (parameters, result
|
|
|
58
57
|
predicateType: "rea.javascript-export-shape-comparison",
|
|
59
58
|
operation: "compare_javascript_export_shapes",
|
|
60
59
|
parameters,
|
|
61
|
-
result
|
|
60
|
+
result,
|
|
62
61
|
rawResult: null,
|
|
63
62
|
confidence: "inferred",
|
|
64
63
|
authority: "analyst-inference",
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
2
|
+
import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
|
|
3
3
|
import {} from "../../domain/analysisErrorBase.js";
|
|
4
4
|
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
|
5
5
|
import { compareJavaScriptApplicationVersions } from "../../domain/javascript/javascriptApplicationVersionComparison.js";
|
|
6
|
-
import { compareApplicationVersionsInputSchema } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js";
|
|
6
|
+
import { compareApplicationVersionsInputSchema, applicationVersionIdentitiesSchema, } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js";
|
|
7
7
|
import { compareJavaScriptExportShapes } from "../../domain/javascript/javascriptExportShapeComparison.js";
|
|
8
|
-
import { compareJavaScriptExportShapesInputSchema } from "../../domain/javascript/javascriptExportShapeComparisonSchemas.js";
|
|
8
|
+
import { compareJavaScriptExportShapesInputSchema, javaScriptExportShapeIdentitiesSchema, } from "../../domain/javascript/javascriptExportShapeComparisonSchemas.js";
|
|
9
9
|
import { traceApplicationFeature } from "../../domain/javascript/javascriptFeatureTrace.js";
|
|
10
|
-
import { traceApplicationFeatureInputSchema } from "../../domain/javascript/javascriptFeatureTraceSchemas.js";
|
|
10
|
+
import { traceApplicationFeatureInputSchema, applicationTraceIdentitiesSchema, } from "../../domain/javascript/javascriptFeatureTraceSchemas.js";
|
|
11
11
|
import { err, ok } from "../../domain/result.js";
|
|
12
12
|
import { compareSourceToBundle } from "../../domain/javascript/sourceToBundleComparison.js";
|
|
13
13
|
import { compareSourceToBundleInputSchema } from "../../domain/javascript/sourceToBundleComparisonSchemas.js";
|
|
14
|
-
import { parseApplicationGraphEvidence, parseNativeApplicationEvidence, } from "./JavaScriptApplicationEvidenceGraph.js";
|
|
14
|
+
import { applicationGraphEvidenceInputError, parseApplicationGraphEvidence, parseNativeApplicationEvidence, } from "./JavaScriptApplicationEvidenceGraph.js";
|
|
15
15
|
import { createApplicationFeatureTraceEvidence, createApplicationVersionComparisonEvidence, createJavaScriptExportShapeComparisonEvidence, createSourceToBundleComparisonEvidence, } from "./JavaScriptApplicationWorkflowEvidence.js";
|
|
16
16
|
/** Authenticate Evidence and derive one bounded cross-layer feature trace. */
|
|
17
17
|
export const traceApplicationFeatureEvidence = (rawInput) => {
|
|
@@ -24,9 +24,20 @@ export const traceApplicationFeatureEvidence = (rawInput) => {
|
|
|
24
24
|
/** Derive one feature trace from input parsed by a trusted adapter. */
|
|
25
25
|
export const traceApplicationFeatureEvidenceValidated = (input) => {
|
|
26
26
|
const operation = "trace_application_feature";
|
|
27
|
+
const identities = applicationTraceIdentitiesSchema.safeParse(input);
|
|
28
|
+
if (!identities.success)
|
|
29
|
+
return err(analysisInputErrorFromIssues(operation, identities.error.issues, input));
|
|
30
|
+
const sourceResult = parseApplicationGraphEvidence(input.application, [
|
|
31
|
+
"application",
|
|
32
|
+
]);
|
|
33
|
+
if (!sourceResult.ok)
|
|
34
|
+
return err(applicationGraphEvidenceInputError(operation, sourceResult.error));
|
|
35
|
+
const nativeResult = parseNativeApplicationEvidence(input.native_observations, ["native_observations"]);
|
|
36
|
+
if (!nativeResult.ok)
|
|
37
|
+
return err(applicationGraphEvidenceInputError(operation, nativeResult.error));
|
|
27
38
|
try {
|
|
28
|
-
const source =
|
|
29
|
-
const nativeEvidence =
|
|
39
|
+
const source = sourceResult.value;
|
|
40
|
+
const nativeEvidence = nativeResult.value;
|
|
30
41
|
const result = traceApplicationFeature({
|
|
31
42
|
sourceEvidenceId: source.evidence.evidence_id,
|
|
32
43
|
graph: source.graph,
|
|
@@ -42,7 +53,7 @@ export const traceApplicationFeatureEvidenceValidated = (input) => {
|
|
|
42
53
|
}, result));
|
|
43
54
|
}
|
|
44
55
|
catch (cause) {
|
|
45
|
-
return workflowFailure(operation, cause
|
|
56
|
+
return workflowFailure(operation, cause);
|
|
46
57
|
}
|
|
47
58
|
};
|
|
48
59
|
/** Authenticate both graphs and derive a tiered cross-version change graph. */
|
|
@@ -56,11 +67,26 @@ export const compareApplicationVersionsEvidence = (rawInput) => {
|
|
|
56
67
|
/** Compare versions from input parsed by a trusted adapter. */
|
|
57
68
|
export const compareApplicationVersionsEvidenceValidated = (input) => {
|
|
58
69
|
const operation = "compare_application_versions";
|
|
70
|
+
const identities = applicationVersionIdentitiesSchema.safeParse(input);
|
|
71
|
+
if (!identities.success)
|
|
72
|
+
return err(analysisInputErrorFromIssues(operation, identities.error.issues, input));
|
|
73
|
+
const leftResult = parseApplicationGraphEvidence(input.left, ["left"]);
|
|
74
|
+
if (!leftResult.ok)
|
|
75
|
+
return err(applicationGraphEvidenceInputError(operation, leftResult.error));
|
|
76
|
+
const rightResult = parseApplicationGraphEvidence(input.right, ["right"]);
|
|
77
|
+
if (!rightResult.ok)
|
|
78
|
+
return err(applicationGraphEvidenceInputError(operation, rightResult.error));
|
|
79
|
+
const leftNativeResult = parseNativeApplicationEvidence(input.left_native_observations, ["left_native_observations"]);
|
|
80
|
+
if (!leftNativeResult.ok)
|
|
81
|
+
return err(applicationGraphEvidenceInputError(operation, leftNativeResult.error));
|
|
82
|
+
const rightNativeResult = parseNativeApplicationEvidence(input.right_native_observations, ["right_native_observations"]);
|
|
83
|
+
if (!rightNativeResult.ok)
|
|
84
|
+
return err(applicationGraphEvidenceInputError(operation, rightNativeResult.error));
|
|
59
85
|
try {
|
|
60
|
-
const left =
|
|
61
|
-
const right =
|
|
62
|
-
const leftNative =
|
|
63
|
-
const rightNative =
|
|
86
|
+
const left = leftResult.value;
|
|
87
|
+
const right = rightResult.value;
|
|
88
|
+
const leftNative = leftNativeResult.value;
|
|
89
|
+
const rightNative = rightNativeResult.value;
|
|
64
90
|
const result = compareJavaScriptApplicationVersions({
|
|
65
91
|
left: {
|
|
66
92
|
evidenceId: left.evidence.evidence_id,
|
|
@@ -83,14 +109,19 @@ export const compareApplicationVersionsEvidenceValidated = (input) => {
|
|
|
83
109
|
}, result));
|
|
84
110
|
}
|
|
85
111
|
catch (cause) {
|
|
86
|
-
return workflowFailure(operation, cause
|
|
112
|
+
return workflowFailure(operation, cause);
|
|
87
113
|
}
|
|
88
114
|
};
|
|
89
115
|
/** Compare source and bundle inputs already parsed by a trusted adapter. */
|
|
90
116
|
export const compareSourceToBundleEvidenceValidated = (input) => {
|
|
91
117
|
const operation = "compare_source_to_bundle";
|
|
118
|
+
const applicationResult = parseApplicationGraphEvidence(input.application, [
|
|
119
|
+
"application",
|
|
120
|
+
]);
|
|
121
|
+
if (!applicationResult.ok)
|
|
122
|
+
return err(applicationGraphEvidenceInputError(operation, applicationResult.error));
|
|
92
123
|
try {
|
|
93
|
-
const application =
|
|
124
|
+
const application = applicationResult.value;
|
|
94
125
|
const result = compareSourceToBundle({
|
|
95
126
|
reference: input.reference,
|
|
96
127
|
application: {
|
|
@@ -105,7 +136,7 @@ export const compareSourceToBundleEvidenceValidated = (input) => {
|
|
|
105
136
|
}, result));
|
|
106
137
|
}
|
|
107
138
|
catch (cause) {
|
|
108
|
-
return workflowFailure(operation, cause
|
|
139
|
+
return workflowFailure(operation, cause);
|
|
109
140
|
}
|
|
110
141
|
};
|
|
111
142
|
/**
|
|
@@ -122,9 +153,18 @@ export const compareJavaScriptExportShapesEvidence = (rawInput) => {
|
|
|
122
153
|
/** Compare exact export shapes from input parsed by a trusted adapter. */
|
|
123
154
|
export const compareJavaScriptExportShapesEvidenceValidated = (input) => {
|
|
124
155
|
const operation = "compare_javascript_export_shapes";
|
|
156
|
+
const identities = javaScriptExportShapeIdentitiesSchema.safeParse(input);
|
|
157
|
+
if (!identities.success)
|
|
158
|
+
return err(analysisInputErrorFromIssues(operation, identities.error.issues, input));
|
|
159
|
+
const leftResult = parseApplicationGraphEvidence(input.left, ["left"]);
|
|
160
|
+
if (!leftResult.ok)
|
|
161
|
+
return err(applicationGraphEvidenceInputError(operation, leftResult.error));
|
|
162
|
+
const rightResult = parseApplicationGraphEvidence(input.right, ["right"]);
|
|
163
|
+
if (!rightResult.ok)
|
|
164
|
+
return err(applicationGraphEvidenceInputError(operation, rightResult.error));
|
|
125
165
|
try {
|
|
126
|
-
const left =
|
|
127
|
-
const right =
|
|
166
|
+
const left = leftResult.value;
|
|
167
|
+
const right = rightResult.value;
|
|
128
168
|
const result = compareJavaScriptExportShapes({
|
|
129
169
|
left: {
|
|
130
170
|
evidenceId: left.evidence.evidence_id,
|
|
@@ -149,33 +189,7 @@ export const compareJavaScriptExportShapesEvidenceValidated = (input) => {
|
|
|
149
189
|
}, result));
|
|
150
190
|
}
|
|
151
191
|
catch (cause) {
|
|
152
|
-
return workflowFailure(operation, cause
|
|
192
|
+
return workflowFailure(operation, cause);
|
|
153
193
|
}
|
|
154
194
|
};
|
|
155
|
-
const workflowFailure = (operation, cause
|
|
156
|
-
? err(analysisInputErrorFromIssues(operation, cause.issues, input))
|
|
157
|
-
: cause instanceof TypeError &&
|
|
158
|
-
SAFE_APPLICATION_INPUT_CONSTRAINTS.has(cause.message)
|
|
159
|
-
? err(new AnalysisInputError(operation, undefined, [
|
|
160
|
-
{ path: [], reason: "invalid_value", message: cause.message },
|
|
161
|
-
]))
|
|
162
|
-
: err(new AnalysisProtocolError("JavaScript application workflow produced an invalid result", { cause }));
|
|
163
|
-
const SAFE_APPLICATION_INPUT_CONSTRAINTS = new Set([
|
|
164
|
-
"Evidence semantic identifier does not match its record",
|
|
165
|
-
"Application workflow requires authenticated analyze_javascript_application, reconcile_javascript_runtime, or project_managed_application_graph Evidence",
|
|
166
|
-
"JavaScript application Evidence authority or confidence is invalid",
|
|
167
|
-
"JavaScript application Evidence predicate does not match its result shape",
|
|
168
|
-
"JavaScript application Evidence subject does not match its result",
|
|
169
|
-
"Runtime reconciliation Evidence authority or confidence is invalid",
|
|
170
|
-
"Runtime reconciliation result references Evidence outside its envelope",
|
|
171
|
-
"Runtime reconciliation application layer is missing",
|
|
172
|
-
"Managed application graph Evidence authority or confidence is invalid",
|
|
173
|
-
"Managed application graph result references Evidence outside its envelope",
|
|
174
|
-
"Native handoff Evidence requires an artifact subject",
|
|
175
|
-
"Native handoff Evidence must be unique",
|
|
176
|
-
...[
|
|
177
|
-
"analyze_javascript_application",
|
|
178
|
-
"reconcile_javascript_runtime",
|
|
179
|
-
"project_managed_application_graph",
|
|
180
|
-
].map((operation) => `Evidence does not match the supported ${operation} contract`),
|
|
181
|
-
]);
|
|
195
|
+
const workflowFailure = (operation, cause) => err(new AnalysisProtocolError(`JavaScript application workflow failed while producing ${operation}`, { cause }));
|
|
@@ -1,52 +1,188 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { setImmediate } from "node:timers/promises";
|
|
3
3
|
import { resolveJavaScriptSourceMapReference } from "../../domain/javascript/javascriptSourceMapPaths.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { analyzeParsedJavaScriptStaticSourceSteps } from "../../domain/javascript/javascriptStaticAnalysis.js";
|
|
5
|
+
import { analyzeParsedJavaScriptSemanticsSteps, classifyParsedJavaScriptOpenReceiversSteps, } from "../../domain/javascript/javascriptSemanticAnalysis.js";
|
|
6
|
+
import { projectJavaScriptModuleSemantics } from "../../domain/javascript/javascriptModuleSemanticIr.js";
|
|
6
7
|
import { parseJavaScriptSource } from "../../domain/javascript/javascriptSourceParser.js";
|
|
7
8
|
import { hasValidSourceMapContents } from "../../domain/sourceMapContents.js";
|
|
8
9
|
import { flattenSourceMapLeaves } from "../../domain/sourceMapEnvelope.js";
|
|
9
10
|
import { failedJavaScriptStaticAnalysis } from "../../domain/javascript/javascriptStaticAnalysisHelpers.js";
|
|
10
11
|
import { analyzeJavaScriptJsonModule } from "./JavaScriptJsonModules.js";
|
|
12
|
+
import { completeJavaScriptAnalysisSteps } from "./JavaScriptAnalysisControl.js";
|
|
11
13
|
import { htmlArtifactReferences } from "../../domain/javascript/htmlArtifactReferences.js";
|
|
14
|
+
import { AnalysisError } from "../../domain/analysisErrorBase.js";
|
|
15
|
+
import { projectAnalysisError } from "../../domain/analysisErrorProjection.js";
|
|
16
|
+
import { AnalysisCancelledError, AnalysisResourceConstraintError, AnalysisTimeoutError, } from "../../domain/analysisErrorCore.js";
|
|
12
17
|
/** Analyze every text source from the artifact without a result quota. */
|
|
13
|
-
export const analyzeJavaScriptArtifactFiles = (fileSet) => analyzeArtifactFiles(fileSet, (_file, ir)
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
export const analyzeJavaScriptArtifactFiles = (fileSet) => analyzeArtifactFiles(fileSet, function* (_file, ir) {
|
|
19
|
+
// The full IR needs no projection; one step keeps the shared protocol.
|
|
20
|
+
yield;
|
|
21
|
+
return ir;
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Project each file's full IR immediately, retaining only later module facts.
|
|
25
|
+
* Parsing, analysis and each projection pass run as separate steps, so control
|
|
26
|
+
* messages and cancellation are handled within one large file as well.
|
|
27
|
+
*/
|
|
28
|
+
export const analyzeAndProjectJavaScriptArtifactFiles = async (fileSet, projectSemantics, beforeFile, signal) => {
|
|
16
29
|
const state = emptyArtifactAnalysis();
|
|
17
|
-
const projectFileSemantics = (file, ir)
|
|
18
|
-
projectSemantics(file, ir);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
scopes: programScopes,
|
|
25
|
-
bindings: ir.bindings.filter(({ name, scopeId }) => scopeId === programScopeId && localNames.has(name)),
|
|
26
|
-
callables: ir.callables.filter(({ callableId }) => callableIds.has(callableId)),
|
|
27
|
-
moduleLinks: ir.moduleLinks,
|
|
28
|
-
coverage: ir.coverage,
|
|
29
|
-
limitations: ir.limitations,
|
|
30
|
-
};
|
|
30
|
+
const projectFileSemantics = function* (file, ir) {
|
|
31
|
+
const projection = projectSemantics(file, ir);
|
|
32
|
+
if (projection !== undefined)
|
|
33
|
+
while (projection.next().done !== true)
|
|
34
|
+
yield;
|
|
35
|
+
return projectJavaScriptModuleSemantics(ir);
|
|
31
36
|
};
|
|
32
37
|
const context = { state, projectSemantics: projectFileSemantics };
|
|
33
38
|
for (const [index, file] of fileSet.files.entries()) {
|
|
34
39
|
// Let progress, cancellation and garbage collection run between files.
|
|
35
40
|
await setImmediate();
|
|
36
41
|
await beforeFile?.(file, index, fileSet.files.length);
|
|
37
|
-
|
|
42
|
+
await completeJavaScriptAnalysisSteps(analyzeArtifactFileSteps(file, context), signal);
|
|
38
43
|
}
|
|
39
44
|
return finalizeArtifactAnalysis(state);
|
|
40
45
|
};
|
|
46
|
+
/** Analyze sources behind a hard heap boundary, retaining collected facts on interruption. */
|
|
47
|
+
export const analyzeAndAdoptJavaScriptArtifactFiles = async (fileSet, worker, projection, beforeFile, signal) => {
|
|
48
|
+
const state = emptyArtifactAnalysis();
|
|
49
|
+
let interruption = null;
|
|
50
|
+
for (const [index, file] of fileSet.files.entries()) {
|
|
51
|
+
try {
|
|
52
|
+
await setImmediate();
|
|
53
|
+
await beforeFile(file, index, fileSet.files.length);
|
|
54
|
+
if (signal?.aborted === true)
|
|
55
|
+
throw new AnalysisCancelledError("analyze_javascript_application");
|
|
56
|
+
if (file.kind !== "javascript" || !file.text.included) {
|
|
57
|
+
const steps = analyzeArtifactFileSteps(file, {
|
|
58
|
+
state,
|
|
59
|
+
projectSemantics: function* (_file, ir) {
|
|
60
|
+
yield;
|
|
61
|
+
return projectJavaScriptModuleSemantics(ir);
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
await completeJavaScriptAnalysisSteps(steps, signal);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const result = await worker.analyze(file, projection.remainingFileNodeBudget(), signal);
|
|
68
|
+
const facts = result.ok ? result.value : result.error;
|
|
69
|
+
const applicationProjectionFailure = facts.applicationProjectionFailure;
|
|
70
|
+
if (facts.projection !== null)
|
|
71
|
+
projection.adoptFileProjection(facts.projection);
|
|
72
|
+
const error = result.ok ? null : result.error.error;
|
|
73
|
+
const limits = error instanceof AnalysisResourceConstraintError
|
|
74
|
+
? error.reportedLimits
|
|
75
|
+
: error instanceof AnalysisTimeoutError
|
|
76
|
+
? { worker_timeout_ms: error.timeoutMs }
|
|
77
|
+
: null;
|
|
78
|
+
const failure = error === null
|
|
79
|
+
? undefined
|
|
80
|
+
: {
|
|
81
|
+
reason: `${file.path}: ${error.message}`,
|
|
82
|
+
error: projectAnalysisError(error),
|
|
83
|
+
limits,
|
|
84
|
+
};
|
|
85
|
+
state.files.push({
|
|
86
|
+
file,
|
|
87
|
+
javascript: facts.javascript,
|
|
88
|
+
semantic: facts.module === null ? null : { ir: facts.module },
|
|
89
|
+
...(failure === undefined ? {} : { analysis_failure: failure }),
|
|
90
|
+
...(applicationProjectionFailure === undefined
|
|
91
|
+
? {}
|
|
92
|
+
: {
|
|
93
|
+
application_projection_failure: {
|
|
94
|
+
reason: applicationProjectionFailure.message,
|
|
95
|
+
error: projectAnalysisError(applicationProjectionFailure),
|
|
96
|
+
limits: applicationProjectionFailure.reportedLimits,
|
|
97
|
+
},
|
|
98
|
+
}),
|
|
99
|
+
});
|
|
100
|
+
if (failure !== undefined && facts.projection === null)
|
|
101
|
+
projection.recordUnavailableFile(file, failure.reason, failure.limits, error instanceof AnalysisResourceConstraintError ||
|
|
102
|
+
error instanceof AnalysisTimeoutError
|
|
103
|
+
? "resource-limit"
|
|
104
|
+
: "incomplete-module");
|
|
105
|
+
if (facts.javascript !== null) {
|
|
106
|
+
state.visitedNodes += facts.javascript.visited_ast_nodes;
|
|
107
|
+
state.findings +=
|
|
108
|
+
findingCount(facts.javascript) +
|
|
109
|
+
(facts.module?.moduleLinks.length ?? 0);
|
|
110
|
+
state.modules += facts.javascript.bundler_registrations.reduce((count, item) => count + item.modules.length, 0);
|
|
111
|
+
if (facts.javascript.parse_status === "failed")
|
|
112
|
+
state.parseFailures += 1;
|
|
113
|
+
}
|
|
114
|
+
if (error !== null &&
|
|
115
|
+
(!(error instanceof AnalysisResourceConstraintError) ||
|
|
116
|
+
error.reportedLimits?.parent_result_budget_exhausted === true)) {
|
|
117
|
+
interruption = error;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (cause) {
|
|
122
|
+
if (signal?.aborted !== true && !(cause instanceof AnalysisError))
|
|
123
|
+
throw cause;
|
|
124
|
+
interruption =
|
|
125
|
+
signal?.aborted === true
|
|
126
|
+
? new AnalysisCancelledError("analyze_javascript_application")
|
|
127
|
+
: cause instanceof AnalysisError
|
|
128
|
+
? cause
|
|
129
|
+
: null;
|
|
130
|
+
if (interruption !== null) {
|
|
131
|
+
state.files.push({
|
|
132
|
+
file,
|
|
133
|
+
javascript: null,
|
|
134
|
+
semantic: null,
|
|
135
|
+
analysis_failure: {
|
|
136
|
+
reason: `${file.path}: ${interruption.message}`,
|
|
137
|
+
error: projectAnalysisError(interruption),
|
|
138
|
+
limits: null,
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
projection.recordUnavailableFile(file, interruption.message, null, "incomplete-module");
|
|
142
|
+
}
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (interruption !== null) {
|
|
147
|
+
const analyzedPaths = new Set(state.files.map(({ file }) => file.path));
|
|
148
|
+
const failure = {
|
|
149
|
+
reason: `Source analysis was interrupted: ${interruption.message}`,
|
|
150
|
+
error: projectAnalysisError(interruption),
|
|
151
|
+
limits: interruption instanceof AnalysisResourceConstraintError
|
|
152
|
+
? interruption.reportedLimits
|
|
153
|
+
: interruption instanceof AnalysisTimeoutError
|
|
154
|
+
? { worker_timeout_ms: interruption.timeoutMs }
|
|
155
|
+
: null,
|
|
156
|
+
};
|
|
157
|
+
for (const file of fileSet.files) {
|
|
158
|
+
if (analyzedPaths.has(file.path))
|
|
159
|
+
continue;
|
|
160
|
+
state.files.push({
|
|
161
|
+
file,
|
|
162
|
+
javascript: null,
|
|
163
|
+
semantic: null,
|
|
164
|
+
analysis_failure: failure,
|
|
165
|
+
});
|
|
166
|
+
if (file.kind === "javascript")
|
|
167
|
+
projection.recordUnavailableFile(file, failure.reason, failure.limits, interruption instanceof AnalysisResourceConstraintError ||
|
|
168
|
+
interruption instanceof AnalysisTimeoutError
|
|
169
|
+
? "resource-limit"
|
|
170
|
+
: "incomplete-module");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return { analysis: finalizeArtifactAnalysis(state), interruption };
|
|
174
|
+
};
|
|
41
175
|
const analyzeArtifactFiles = (fileSet, projectSemantics) => {
|
|
42
176
|
const state = emptyArtifactAnalysis();
|
|
43
177
|
const context = { state, projectSemantics };
|
|
44
|
-
for (const file of fileSet.files)
|
|
45
|
-
|
|
178
|
+
for (const file of fileSet.files) {
|
|
179
|
+
const steps = analyzeArtifactFileSteps(file, context);
|
|
180
|
+
while (steps.next().done !== true)
|
|
181
|
+
;
|
|
182
|
+
}
|
|
46
183
|
return finalizeArtifactAnalysis(state);
|
|
47
184
|
};
|
|
48
185
|
const finalizeArtifactAnalysis = (state) => {
|
|
49
|
-
const truncatedScopes = state.truncatedScopes;
|
|
50
186
|
return {
|
|
51
187
|
files: state.files,
|
|
52
188
|
packages: state.packages,
|
|
@@ -57,17 +193,14 @@ const finalizeArtifactAnalysis = (state) => {
|
|
|
57
193
|
findings: state.findings + state.htmlScripts.length,
|
|
58
194
|
modules: state.modules,
|
|
59
195
|
parse_failures: state.parseFailures,
|
|
60
|
-
truncated_scopes: truncatedScopes,
|
|
61
196
|
limitations: [
|
|
62
197
|
"JavaScript and HTML were parsed as inert text; bundle bootstrap code was never executed.",
|
|
63
198
|
"Static paths and relationships may remain unresolved when expressions are dynamic or obfuscated.",
|
|
64
|
-
...(
|
|
65
|
-
? []
|
|
66
|
-
: ["Some static-analysis scopes were truncated."]),
|
|
199
|
+
...state.files.flatMap(({ analysis_failure, application_projection_failure }) => [analysis_failure, application_projection_failure].flatMap((failure) => (failure === undefined ? [] : [failure.reason]))),
|
|
67
200
|
],
|
|
68
201
|
};
|
|
69
202
|
};
|
|
70
|
-
|
|
203
|
+
function* analyzeArtifactFileSteps(file, context) {
|
|
71
204
|
const { state } = context;
|
|
72
205
|
addStructuredObservations(file, state);
|
|
73
206
|
if (file.kind === "html" && file.text.included)
|
|
@@ -79,31 +212,34 @@ const analyzeArtifactFile = (file, context) => {
|
|
|
79
212
|
return;
|
|
80
213
|
}
|
|
81
214
|
const parsed = parseJavaScriptSource(file.text.value, file.path);
|
|
215
|
+
yield;
|
|
82
216
|
if (parsed === null) {
|
|
83
217
|
const analysis = failedJavaScriptStaticAnalysis();
|
|
84
218
|
state.files.push({ file, javascript: analysis, semantic: null });
|
|
85
219
|
state.parseFailures += 1;
|
|
86
220
|
return;
|
|
87
221
|
}
|
|
88
|
-
const openReceiverFacts =
|
|
89
|
-
const analysis =
|
|
222
|
+
const openReceiverFacts = yield* classifyParsedJavaScriptOpenReceiversSteps(parsed);
|
|
223
|
+
const analysis = yield* analyzeParsedJavaScriptStaticSourceSteps(file.text.value, parsed, openReceiverFacts);
|
|
90
224
|
const staticFindings = findingCount(analysis);
|
|
225
|
+
yield;
|
|
91
226
|
const semantics = analysis.parse_status === "complete" || analysis.parse_status === "partial"
|
|
92
|
-
?
|
|
227
|
+
? yield* analyzeParsedJavaScriptSemanticsSteps(parsed)
|
|
93
228
|
: null;
|
|
229
|
+
const projected = semantics === null
|
|
230
|
+
? null
|
|
231
|
+
: yield* context.projectSemantics(file, semantics);
|
|
94
232
|
state.files.push({
|
|
95
233
|
file,
|
|
96
234
|
javascript: analysis,
|
|
97
|
-
semantic:
|
|
98
|
-
? null
|
|
99
|
-
: { ir: context.projectSemantics(file, semantics) },
|
|
235
|
+
semantic: projected === null ? null : { ir: projected },
|
|
100
236
|
});
|
|
101
237
|
state.visitedNodes += analysis.visited_ast_nodes;
|
|
102
238
|
state.findings += staticFindings + (semantics?.moduleLinks.length ?? 0);
|
|
103
239
|
state.modules += analysis.bundler_registrations.reduce((count, registration) => count + registration.modules.length, 0);
|
|
104
240
|
if (analysis.parse_status === "failed")
|
|
105
241
|
state.parseFailures += 1;
|
|
106
|
-
}
|
|
242
|
+
}
|
|
107
243
|
const addSourceMap = (file, context) => {
|
|
108
244
|
const sourceMap = parseSourceMap(file);
|
|
109
245
|
context.state.sourceMaps.push(sourceMap);
|
|
@@ -118,7 +254,6 @@ const emptyArtifactAnalysis = () => ({
|
|
|
118
254
|
findings: 0,
|
|
119
255
|
modules: 0,
|
|
120
256
|
parseFailures: 0,
|
|
121
|
-
truncatedScopes: 0,
|
|
122
257
|
});
|
|
123
258
|
const addStructuredObservations = (file, state) => {
|
|
124
259
|
if (file.kind === "package-json")
|
|
@@ -3,7 +3,7 @@ import { createJavaScriptApplicationEdge, createJavaScriptApplicationNode, } fro
|
|
|
3
3
|
export class JavaScriptArtifactGraphAccumulator {
|
|
4
4
|
#nodes = new Map();
|
|
5
5
|
#edges = new Map();
|
|
6
|
-
/** Create or merge one canonical node. */
|
|
6
|
+
/** Create or merge one canonical node, retaining a stable live construction reference. */
|
|
7
7
|
addNode(input) {
|
|
8
8
|
const created = createJavaScriptApplicationNode(displayableNode(input));
|
|
9
9
|
const existing = this.#nodes.get(created.node_id);
|
|
@@ -13,18 +13,20 @@ export class JavaScriptArtifactGraphAccumulator {
|
|
|
13
13
|
}
|
|
14
14
|
const bySemanticId = new Map([...existing.observations, ...created.observations].map((observation) => [
|
|
15
15
|
observation.observation_id,
|
|
16
|
-
|
|
16
|
+
observation,
|
|
17
17
|
]));
|
|
18
|
-
const observations = [...bySemanticId.
|
|
19
|
-
|
|
20
|
-
.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
const observations = [...bySemanticId.values()].sort((left, right) => left.observation_id < right.observation_id
|
|
19
|
+
? -1
|
|
20
|
+
: left.observation_id > right.observation_id
|
|
21
|
+
? 1
|
|
22
|
+
: 0);
|
|
23
|
+
// Both factories already validated and identified these observations.
|
|
24
|
+
// Replacing the node retained every previous observation array through
|
|
25
|
+
// path/chunk/IPC indexes when multiple paths shared an entity identity.
|
|
26
|
+
existing.observations.length = 0;
|
|
27
|
+
for (const observation of observations)
|
|
28
|
+
existing.observations.push(observation);
|
|
29
|
+
return existing;
|
|
28
30
|
}
|
|
29
31
|
/** Create or replace one canonical edge by semantic identifier. */
|
|
30
32
|
addEdge(input) {
|
|
@@ -41,10 +43,6 @@ export class JavaScriptArtifactGraphAccumulator {
|
|
|
41
43
|
return [...this.#edges.values()];
|
|
42
44
|
}
|
|
43
45
|
}
|
|
44
|
-
const observationInput = (observation) => {
|
|
45
|
-
const { observation_id: _observationId, identifier_strategy: _strategy, ...input } = observation;
|
|
46
|
-
return input;
|
|
47
|
-
};
|
|
48
46
|
/**
|
|
49
47
|
* Static findings can carry legal empty strings, such as `fetch("")`,
|
|
50
48
|
* `require("")`, or a source map's `sources: [""]`. Labels must be nonempty,
|