rea-agents 3.1.0 → 3.2.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 +72 -95
- package/bridge/ghidra/ReaGhidraBridge.java +609 -841
- package/bridge/hopper_bridge.py +99 -344
- package/dist/application/AbortablePromise.js +6 -3
- package/dist/application/AnalysisSnapshotCache.js +0 -1
- package/dist/application/AnalysisSnapshotFiles.js +7 -7
- package/dist/application/AndroidApplicationService.js +1 -1
- package/dist/application/AppleApplicationService.js +1 -1
- package/dist/application/ArtifactExtraction.js +35 -54
- package/dist/application/ArtifactExtractionDestination.js +17 -0
- package/dist/application/ArtifactGraphConstruction.js +2 -17
- package/dist/application/ArtifactInventory/classify.js +2 -6
- package/dist/application/ArtifactInventory/hash.js +2 -20
- package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
- package/dist/application/ArtifactInventory/scanReader.js +69 -51
- package/dist/application/ArtifactInventory.js +6 -14
- package/dist/application/AuthorizedArtifactInventory.js +3 -13
- package/dist/application/BinarySession.js +41 -13
- package/dist/application/BinarySessionComposition.js +0 -11
- package/dist/application/BinarySessionOpen.js +2 -1
- package/dist/application/BinarySessionRecords.js +5 -93
- package/dist/application/BinarySessionStatus.js +5 -16
- package/dist/application/BinaryTargetResolver.js +216 -0
- package/dist/application/BrowserEvidence.js +42 -58
- package/dist/application/BrowserObservationService.js +3 -6
- package/dist/application/BrowserScenarioCaptureService.js +3 -6
- package/dist/application/BrowserScenarioEvidence.js +3 -3
- package/dist/application/CallPathTracing.js +2 -36
- package/dist/application/CapabilityInventory.js +10 -15
- package/dist/application/ClientConfigurationDocument.js +27 -0
- package/dist/application/ClientRegistrationStatus.js +16 -13
- package/dist/application/CommandShimReplay.js +14 -1
- package/dist/application/DirectAnalysis.js +22 -46
- package/dist/application/DirectAnalysisStatus.js +5 -61
- package/dist/application/Doctor.js +11 -32
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +1 -1
- package/dist/application/ElectronActiveEvidence.js +3 -8
- package/dist/application/ElectronActiveObservationService.js +3 -6
- package/dist/application/ElectronBoundaryAnalysis.js +7 -8
- package/dist/application/ElectronBoundaryGraphContext.js +1 -1
- package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
- package/dist/application/ElectronBoundaryGraphNative.js +1 -2
- package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
- package/dist/application/ElectronEvidence.js +4 -7
- package/dist/application/ElectronObservationService.js +5 -9
- package/dist/application/EnhancedLiteralTracing.js +42 -65
- package/dist/application/EnhancedTools.js +76 -44
- package/dist/application/EvidenceBundleCommands.js +11 -11
- package/dist/application/EvidenceBundleFiles.js +9 -15
- package/dist/application/EvidenceLedger.js +6 -41
- package/dist/application/FilesystemSnapshot.js +2 -3
- package/dist/application/InterfaceBuilderAnalysis.js +266 -0
- package/dist/application/InventoryProjectionEvidence.js +4 -2
- package/dist/application/InvestigationProviders.js +1 -1
- package/dist/application/JavaScriptApplicationEvidence.js +2 -5
- package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
- package/dist/application/JavaScriptApplicationService.js +6 -29
- package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
- package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
- package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
- package/dist/application/JavaScriptArtifactFiles.js +67 -107
- package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
- package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
- package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
- package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
- package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
- package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
- package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
- package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
- package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
- package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
- package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
- package/dist/application/JavaScriptJsonModules.js +2 -2
- package/dist/application/JavaScriptModuleRelationships.js +22 -27
- package/dist/application/JavaScriptReplayPlanning.js +9 -3
- package/dist/application/JavaScriptReplayService.js +6 -32
- package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
- package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
- package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
- package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
- package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
- package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
- package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
- package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
- package/dist/application/JavaScriptSemanticTraceService.js +1 -10
- package/dist/application/JsonFiles.js +79 -0
- package/dist/application/LinuxHopper.js +11 -9
- package/dist/application/LoopbackReplay.js +26 -23
- package/dist/application/LoopbackReplayRecorder.js +29 -1
- package/dist/application/ManagedApplicationGraphService.js +1 -2
- package/dist/application/ManagedMemberComparisonService.js +11 -41
- package/dist/application/ManagedNativeVerificationService.js +1 -2
- package/dist/application/ManagedReconstructionService.js +1 -1
- package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
- package/dist/application/NativeApiInspection.js +2 -7
- package/dist/application/NativeUiActionTrace.js +394 -0
- package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
- package/dist/application/PermissionAuthority.js +15 -7
- package/dist/application/PermissionFailure.js +5 -0
- package/dist/application/ProcessCaptureAuthority.js +5 -7
- package/dist/application/ProcessCaptureJournal.js +3 -2
- package/dist/application/ProcessCaptureLifecycle.js +5 -12
- package/dist/application/ProcessCheckpoints.js +29 -11
- package/dist/application/ProcessCli.js +6 -16
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessHarness.js +52 -17
- package/dist/application/ProcessReactiveCoordinator.js +2 -4
- package/dist/application/ProcessReactiveEffects.js +9 -3
- package/dist/application/ProcessReactiveHarness.js +13 -7
- package/dist/application/ProcessSampling.js +2 -4
- package/dist/application/ProcessTimer.js +39 -0
- package/dist/application/ProjectPermissionStore.js +39 -96
- package/dist/application/RealHopperAssertions.js +20 -66
- package/dist/application/ReconstructionCoverageService.js +12 -58
- package/dist/application/ReconstructionObligationAuthority.js +2 -2
- package/dist/application/ReconstructionObligationCandidates.js +4 -4
- package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
- package/dist/application/ReconstructionObligationLedgerService.js +19 -38
- package/dist/application/ReferenceSourceImport.js +19 -45
- package/dist/application/ReferenceSourceImportEntries.js +2 -4
- package/dist/application/ReferenceSourceImportPolicy.js +5 -32
- package/dist/application/ReferenceSourceImportTypes.js +0 -16
- package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
- package/dist/application/SessionProviderRouter.js +2 -2
- package/dist/application/Setup.js +1 -3
- package/dist/application/SetupClientConfiguration.js +22 -93
- package/dist/application/SetupRegistrationEnvironment.js +0 -7
- package/dist/application/StoreFileLock.js +119 -0
- package/dist/application/TerminalRenderer.js +2 -3
- package/dist/application/Uninstall.js +9 -14
- package/dist/application/UnknownEvidence.js +1 -1
- package/dist/artifacts/ArtifactPaths.js +2 -5
- package/dist/artifacts/ArtifactProvider.js +36 -58
- package/dist/artifacts/DirectoryArtifactReader.js +13 -8
- package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
- package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
- package/dist/artifacts/NibArchive.js +269 -0
- package/dist/artifacts/SafeOutputTree.js +15 -24
- package/dist/browser/BrowserProcessStartup.js +1 -2
- package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
- package/dist/browser/CdpBrowserProvider.js +3 -13
- package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
- package/dist/browser/CdpCaptureDocuments.js +28 -76
- package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
- package/dist/browser/CdpCaptureEventHandlers.js +22 -87
- package/dist/browser/CdpCaptureEvents.js +2 -8
- package/dist/browser/CdpCaptureStorage.js +9 -20
- package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
- package/dist/browser/CdpCaptureValues.js +21 -21
- package/dist/browser/CdpConnection.js +10 -25
- package/dist/browser/CdpElectronInspection.js +26 -50
- package/dist/browser/CdpElectronProvider.js +10 -35
- package/dist/browser/CdpElectronScriptEvents.js +8 -16
- package/dist/browser/CdpElectronScripts.js +6 -35
- package/dist/browser/CdpElectronWorkers.js +6 -10
- package/dist/browser/CdpEndpoint.js +25 -41
- package/dist/browser/CdpObservationSession.js +14 -26
- package/dist/browser/CdpPageCapture.js +34 -48
- package/dist/browser/CdpPageCaptureScripts.js +1 -19
- package/dist/browser/CdpPageCaptureWorkers.js +6 -10
- package/dist/browser/CdpSafeMetadata.js +19 -22
- package/dist/browser/CdpScreenshot.js +3 -5
- package/dist/browser/CdpTargetSession.js +1 -2
- package/dist/browser/CdpWebMcpDiscovery.js +13 -22
- package/dist/browser/ElectronFileScope.js +8 -19
- package/dist/browser/JavaScriptRuntimeScope.js +9 -14
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
- package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
- package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
- package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
- package/dist/browser/PlaywrightScenarioActions.js +3 -7
- package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
- package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
- package/dist/browser/PlaywrightScenarioEvents.js +45 -94
- package/dist/browser/PlaywrightScenarioSession.js +14 -30
- package/dist/browser/PngVisualDiff.js +22 -14
- package/dist/browser/SensitiveTextCapture.js +0 -17
- package/dist/browser/V8InspectorCaptureProjection.js +7 -8
- package/dist/browser/V8InspectorEndpoint.js +12 -14
- package/dist/browser/V8InspectorProvider.js +20 -61
- package/dist/browser/WebSourceMapFetcher.js +56 -176
- package/dist/catalogIdentity.js +0 -54
- package/dist/cli/artifactCommands.js +49 -77
- package/dist/cli/coreAnalysisCommands.js +83 -133
- package/dist/cli/javascriptApplicationAnalysis.js +1 -9
- package/dist/cli/managedCommands.js +5 -270
- package/dist/cli/setupCommands.js +3 -12
- package/dist/cli/utilityCommands.js +7 -41
- package/dist/cli.js +0 -2
- package/dist/cliApplicationCommands.js +42 -112
- package/dist/cliBrowserAdvancedCommands.js +10 -106
- package/dist/cliBrowserCommands.js +15 -127
- package/dist/cliBrowserContext.js +30 -0
- package/dist/cliCommandNames.js +4 -5
- package/dist/cliElectronCommands.js +8 -72
- package/dist/cliEvidenceCommands.js +8 -77
- package/dist/cliJavaScriptRuntimeCommands.js +9 -91
- package/dist/cliJsonInput.js +4 -14
- package/dist/cliObservationOptions.js +11 -96
- package/dist/cliPolicyCommands.js +2 -17
- package/dist/cliProcessCommands.js +3 -3
- package/dist/cliSetup.js +0 -13
- package/dist/config/browserScenario.js +2 -2
- package/dist/config/environment.js +0 -9
- package/dist/config/parseConfig.js +1 -33
- package/dist/config/parsers.js +6 -27
- package/dist/config/passiveObservation.js +7 -77
- package/dist/config/permissions.js +0 -7
- package/dist/contracts/analysisSearchContract.js +2 -5
- package/dist/contracts/applicationToolContracts.js +56 -109
- package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
- package/dist/contracts/artifactComparisonExample.js +58 -60
- package/dist/contracts/artifactToolContracts.js +20 -67
- package/dist/contracts/browserScenarioToolContracts.js +6 -51
- package/dist/contracts/browserToolContracts.js +8 -73
- package/dist/contracts/electronToolContracts.js +8 -108
- package/dist/contracts/enhancedInputs.js +23 -54
- package/dist/contracts/errorSchemas.js +0 -1
- package/dist/contracts/functionComparisonExample.js +10 -24
- package/dist/contracts/functionInstructionContract.js +1 -3
- package/dist/contracts/functionWorkflowToolContracts.js +2 -2
- package/dist/contracts/hopperMemoryContracts.js +3 -3
- package/dist/contracts/investigationExamples.js +14 -11
- package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
- package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
- package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
- package/dist/contracts/managedToolContracts.js +6 -95
- package/dist/contracts/managedWorkflowExamples.js +77 -128
- package/dist/contracts/managedWorkflowToolContracts.js +51 -77
- package/dist/contracts/nativeToolContracts.js +7 -11
- package/dist/contracts/processCaptureExample.js +2 -69
- package/dist/contracts/promptContracts.js +49 -67
- package/dist/contracts/providerSelection.js +0 -1
- package/dist/contracts/reconstructionReadinessExample.js +1 -6
- package/dist/contracts/sessionStatusContract.js +1 -17
- package/dist/contracts/sessionToolSchemas.js +6 -15
- package/dist/contracts/toolContractExamples.js +11 -11
- package/dist/contracts/toolContractHelpers.js +0 -4
- package/dist/contracts/toolContracts.js +60 -71
- package/dist/contracts/toolEffects.js +5 -13
- package/dist/contracts/toolOutputSchemaGroups.js +37 -91
- package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
- package/dist/contracts/toolSchemaMetadata.js +8 -19
- package/dist/contracts/unknownContractExamples.js +0 -2
- package/dist/domain/analysisErrorPresentation.js +46 -54
- package/dist/domain/analysisErrorProjection.js +28 -37
- package/dist/domain/analysisProfile.js +3 -31
- package/dist/domain/analysisSnapshot.js +3 -12
- package/dist/domain/androidApplication.js +15 -54
- package/dist/domain/appleApplication.js +24 -67
- package/dist/domain/artifactComparison.js +11 -29
- package/dist/domain/artifactGraph.js +14 -44
- package/dist/domain/artifactInspection.js +38 -69
- package/dist/domain/artifactInventoryEvidence.js +27 -21
- package/dist/domain/binaryTarget.js +2 -221
- package/dist/domain/browserCaptureComparison.js +47 -24
- package/dist/domain/browserObservation.js +28 -193
- package/dist/domain/browserObservationSchemas.js +5 -23
- package/dist/domain/browserScenario.js +11 -14
- package/dist/domain/browserScenarioCapture.js +11 -12
- package/dist/domain/browserScenarioCaptureValues.js +146 -84
- package/dist/domain/browserScenarioDiff.js +2 -59
- package/dist/domain/browserScenarioDiffEvidence.js +51 -0
- package/dist/domain/browserScenarioDiffValues.js +21 -38
- package/dist/domain/browserScenarioValues.js +80 -109
- package/dist/domain/browserSession.js +4 -7
- package/dist/domain/bundleComparison.js +6 -32
- package/dist/domain/bytecodeProvider.js +20 -19
- package/dist/domain/callPath.js +47 -167
- package/dist/domain/callPathSchemas.js +79 -0
- package/dist/domain/changedBehavior.js +34 -60
- package/dist/domain/completionLedgerGeneration.js +8 -14
- package/dist/domain/conformancePackage.js +126 -97
- package/dist/domain/conformanceReplay.js +36 -8
- package/dist/domain/conformanceTrustGate.js +23 -14
- package/dist/domain/customProtocolCapture.js +1 -1
- package/dist/domain/electronActiveObservation.js +70 -103
- package/dist/domain/electronObservation.js +14 -80
- package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
- package/dist/domain/electronStaticAnalysisIpc.js +38 -14
- package/dist/domain/electronStaticAnalysisNative.js +1 -8
- package/dist/domain/electronStaticAnalysisValues.js +10 -17
- package/dist/domain/errors.js +33 -54
- package/dist/domain/eventProcessTree.js +20 -12
- package/dist/domain/evidence.js +2 -10
- package/dist/domain/evidenceBundle.js +3 -5
- package/dist/domain/evidenceCompletionLedger.js +6 -8
- package/dist/domain/functionComparison.js +4 -14
- package/dist/domain/functionComparisonNormalization.js +4 -11
- package/dist/domain/functionComparisonResults.js +25 -15
- package/dist/domain/functionComparisonSchemas.js +49 -33
- package/dist/domain/functionDossierEvidence.js +31 -156
- package/dist/domain/hopperStartupFailure.js +1 -1
- package/dist/domain/hopperValues.js +15 -136
- package/dist/domain/interfaceBuilderGraph.js +654 -0
- package/dist/domain/javascriptApplicationAnalysis.js +8 -112
- package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
- package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
- package/dist/domain/javascriptApplicationGraph.js +3 -13
- package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
- package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
- package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
- package/dist/domain/javascriptApplicationVersionItems.js +120 -53
- package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
- package/dist/domain/javascriptAstFingerprint.js +25 -58
- package/dist/domain/javascriptAstValues.js +9 -0
- package/dist/domain/javascriptExportInstrumentation.js +2 -4
- package/dist/domain/javascriptExportShapeComparison.js +6 -7
- package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
- package/dist/domain/javascriptExportShapeSelection.js +17 -19
- package/dist/domain/javascriptFeatureSeed.js +20 -12
- package/dist/domain/javascriptFeatureTrace.js +13 -67
- package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
- package/dist/domain/javascriptFeatureTraversal.js +1 -44
- package/dist/domain/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascriptReplay.js +24 -41
- package/dist/domain/javascriptRuntimeLoadState.js +3 -8
- package/dist/domain/javascriptRuntimeObservation.js +42 -103
- package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
- package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
- package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
- package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
- package/dist/domain/javascriptSemanticAnalysis.js +12 -45
- package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
- package/dist/domain/javascriptSemanticCallResolution.js +6 -16
- package/dist/domain/javascriptSemanticCalls.js +5 -32
- package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
- package/dist/domain/javascriptSemanticCoverage.js +11 -0
- package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
- package/dist/domain/javascriptSemanticDataEffects.js +1 -11
- package/dist/domain/javascriptSemanticFingerprints.js +3 -5
- package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
- package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
- package/dist/domain/javascriptSemanticIr.js +1 -29
- package/dist/domain/javascriptSemanticObjects.js +1 -5
- package/dist/domain/javascriptSemanticPrimitives.js +2 -9
- package/dist/domain/javascriptSemanticProjection.js +0 -18
- package/dist/domain/javascriptSemanticPromises.js +9 -16
- package/dist/domain/javascriptSemanticProvenance.js +16 -19
- package/dist/domain/javascriptSemanticQuery.js +17 -139
- package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
- package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
- package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
- package/dist/domain/javascriptSemanticResources.js +1 -6
- package/dist/domain/javascriptSemanticReturns.js +10 -27
- package/dist/domain/javascriptSemanticValueTypes.js +1 -0
- package/dist/domain/javascriptSemanticValues.js +44 -62
- package/dist/domain/javascriptStaticAnalysis.js +21 -43
- package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
- package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
- package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
- package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
- package/dist/domain/javascriptStaticAnalysisState.js +1 -5
- package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
- package/dist/domain/jsonShape.js +7 -33
- package/dist/domain/localPath.js +7 -0
- package/dist/domain/managedApplicationGraph.js +9 -41
- package/dist/domain/managedApplicationGraphCoverage.js +24 -156
- package/dist/domain/managedApplicationGraphNodes.js +10 -13
- package/dist/domain/managedArtifact.js +14 -27
- package/dist/domain/managedMemberComparison.js +90 -92
- package/dist/domain/managedMemberComparisonCoverage.js +11 -33
- package/dist/domain/managedMemberComparisonItems.js +221 -0
- package/dist/domain/managedMemberComparisonMatch.js +8 -208
- package/dist/domain/managedNativeVerification.js +3 -6
- package/dist/domain/managedNativeVerificationMatch.js +55 -59
- package/dist/domain/managedNativeVerificationSchemas.js +83 -47
- package/dist/domain/managedReconstruction.js +19 -23
- package/dist/domain/managedRuntimeCorrelation.js +6 -9
- package/dist/domain/nativeApiBoundary.js +2 -7
- package/dist/domain/nativeInspection.js +0 -2
- package/dist/domain/nativeInvestigationGraph.js +351 -0
- package/dist/domain/nativeValueFlow.js +61 -0
- package/dist/domain/nodeRuntimeCharacterization.js +1 -5
- package/dist/domain/objcSwiftMetadata.js +254 -0
- package/dist/domain/peInspection.js +1 -1
- package/dist/domain/permissionPolicy.js +13 -0
- package/dist/domain/processCapture.js +76 -113
- package/dist/domain/processCaptureExample.js +68 -0
- package/dist/domain/processCaptureParsing.js +21 -0
- package/dist/domain/processCaptureReactiveSchema.js +68 -0
- package/dist/domain/processCaptureValidation.js +1 -7
- package/dist/domain/processComparison.js +3 -12
- package/dist/domain/processReactiveMatching.js +29 -50
- package/dist/domain/processReactiveRuntime.js +4 -8
- package/dist/domain/processReactiveScenario.js +28 -94
- package/dist/domain/processReactiveScenarioPreflight.js +5 -30
- package/dist/domain/processReactiveTransition.js +33 -18
- package/dist/domain/processScenario.js +56 -90
- package/dist/domain/processTraceComparison.js +0 -8
- package/dist/domain/processTraceEvaluation.js +14 -4
- package/dist/domain/processTraceSpecification.js +11 -17
- package/dist/domain/protocolCapture.js +3 -3
- package/dist/domain/reconstructionCoverage.js +62 -129
- package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
- package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
- package/dist/domain/reconstructionReadiness.js +1 -2
- package/dist/domain/reconstructionReadinessSchemas.js +36 -38
- package/dist/domain/reconstructionUnknowns.js +3 -3
- package/dist/domain/reconstructionVerification.js +13 -47
- package/dist/domain/reconstructionVerificationSchemas.js +50 -38
- package/dist/domain/referenceSourceGraph.js +53 -61
- package/dist/domain/referenceSourceImportParsing.js +1 -5
- package/dist/domain/replayMachine.js +19 -31
- package/dist/domain/replayMachineRun.js +15 -63
- package/dist/domain/replayMachineRuntime.js +41 -41
- package/dist/domain/replayMachineValues.js +84 -0
- package/dist/domain/residualUnknown.js +25 -30
- package/dist/domain/runtimeCharacterization.js +15 -16
- package/dist/domain/runtimeIdentification.js +48 -47
- package/dist/domain/sourceToBundleComparison.js +9 -85
- package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
- package/dist/domain/sourceToBundleSignals.js +4 -15
- package/dist/domain/staticRuntimeCorrelation.js +37 -49
- package/dist/domain/symbolAnalysis.js +10 -19
- package/dist/domain/unicodeCodePointOrder.js +12 -0
- package/dist/domain/webBundleAnalysis.js +70 -99
- package/dist/domain/webBundleAnalyzer.js +2 -4
- package/dist/domain/webBundleAnalyzerAst.js +0 -13
- package/dist/domain/webBundleAnalyzerInspection.js +26 -52
- package/dist/domain/webBundleAnalyzerResult.js +7 -24
- package/dist/domain/webCaptureDiff.js +33 -73
- package/dist/domain/webCaptureDiffSchemas.js +86 -0
- package/dist/domain/webContentArtifact.js +1 -10
- package/dist/domain/webMcpDiscovery.js +3 -14
- package/dist/domain/webScreenshot.js +58 -34
- package/dist/domain/zipPackageFormat.js +7 -0
- package/dist/dotnet/ManagedArtifactInspector.js +17 -50
- package/dist/dotnet/ManagedMemberInspector.js +27 -58
- package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
- package/dist/dotnet/ManagedMemberRows.js +16 -16
- package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
- package/dist/dotnet/ManagedMetadataInventory.js +21 -30
- package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
- package/dist/dotnet/ManagedMetadataLayout.js +3 -5
- package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
- package/dist/dotnet/ManagedPeReader.js +2 -2
- package/dist/dotnet/ManagedStaticProvider.js +13 -71
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +1 -1
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
- package/dist/ghidra/GhidraClient.js +4 -12
- package/dist/ghidra/GhidraClientWire.js +9 -5
- package/dist/ghidra/GhidraDefaults.js +0 -18
- package/dist/ghidra/GhidraDiagnostics.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +16 -12
- package/dist/ghidra/GhidraFunctionValues.js +65 -108
- package/dist/ghidra/GhidraInstallation.js +98 -42
- package/dist/ghidra/GhidraInventoryValues.js +16 -85
- package/dist/ghidra/GhidraLauncher.js +0 -8
- package/dist/ghidra/GhidraProvider.js +15 -22
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
- package/dist/ghidra/GhidraRequestQueue.js +6 -30
- package/dist/ghidra/GhidraResponseBuffer.js +1 -7
- package/dist/ghidra/GhidraSessionValues.js +0 -2
- package/dist/ghidra/GhidraTransport.js +4 -7
- package/dist/ghidra/protocol.js +2 -2
- package/dist/hopper/BridgeLauncher.js +112 -36
- package/dist/hopper/HopperAnalysisProfile.js +1 -1
- package/dist/hopper/HopperCleanup.js +6 -3
- package/dist/hopper/HopperClient.js +4 -7
- package/dist/hopper/HopperProcessDiagnostic.js +2 -2
- package/dist/hopper/HopperProvider.js +0 -16
- package/dist/hopper/HopperRequestQueue.js +21 -40
- package/dist/hopper/HopperResponseStream.js +1 -9
- package/dist/hopper/HopperSessionValues.js +3 -2
- package/dist/hopper/HopperTargetLease.js +119 -0
- package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
- package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
- package/dist/hopper/protocol.js +6 -4
- package/dist/main/reload.js +0 -3
- package/dist/main/shutdown.js +1 -1
- package/dist/main/state.js +0 -9
- package/dist/main/transport.js +0 -5
- package/dist/mcpDoctor.js +25 -45
- package/dist/native/CommandRunner.js +18 -25
- package/dist/native/NativeMacOSProvider.js +13 -38
- package/dist/native/NativeMachoInspection.js +1 -1
- package/dist/process/BoundedFileBytes.js +17 -0
- package/dist/process/ExecFileOutput.js +11 -0
- package/dist/process/PendingOperations.js +8 -6
- package/dist/process/ProcessOwnership.js +3 -2
- package/dist/process/ProcessOwnershipObservation.js +0 -1
- package/dist/process/ProviderProcess.js +7 -28
- package/dist/reference/ReferenceSourceReader.js +8 -24
- package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
- package/dist/reference/ReferenceSourceReaderFile.js +13 -31
- package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
- package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
- package/dist/replay/JavaScriptReplayWorker.js +3 -5
- package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
- package/dist/replay/LinuxRuntimeClosure.js +1 -3
- package/dist/replay/ReplayOutcome.js +1 -3
- package/dist/replay/ReplayProcessLifecycle.js +32 -7
- package/dist/replay/ReplaySeccompFile.js +29 -0
- package/dist/replay/ReplayWorkerProtocol.js +0 -2
- package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
- package/dist/server/ProcessCaptureElicitation.js +4 -8
- package/dist/server/createServer.js +6 -44
- package/dist/server/promptCompletion.js +37 -61
- package/dist/server/recordDerivedEvidence.js +1 -1
- package/dist/server/registerApplicationTools/characterization.js +4 -8
- package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
- package/dist/server/registerApplicationTools/compareVersions.js +5 -10
- package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
- package/dist/server/registerApplicationTools/coverage.js +6 -71
- package/dist/server/registerApplicationTools/helpers.js +1 -13
- package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
- package/dist/server/registerApplicationTools/traceFeature.js +5 -9
- package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
- package/dist/server/registerApplicationTools.js +0 -2
- package/dist/server/registerArtifactComparisonTool.js +23 -27
- package/dist/server/registerBrowserScenarioTool.js +4 -4
- package/dist/server/registerBrowserTools.js +5 -8
- package/dist/server/registerBundleComparisonTool.js +5 -7
- package/dist/server/registerCloseLifecycleTool.js +2 -16
- package/dist/server/registerElectronTools.js +10 -29
- package/dist/server/registerEnhancedTools.js +10 -11
- package/dist/server/registerEvidenceTools.js +15 -22
- package/dist/server/registerFunctionComparisonTool.js +30 -25
- package/dist/server/registerInvestigationTools/helpers.js +3 -32
- package/dist/server/registerInvestigationTools.js +20 -116
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
- package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
- package/dist/server/registerOfficialTools.js +1 -43
- package/dist/server/registerProcessComparisonTool.js +33 -23
- package/dist/server/registerPrompts.js +19 -17
- package/dist/server/registerSessionRecordTools.js +10 -156
- package/dist/server/registerSessionStatusTool.js +6 -69
- package/dist/server/registerSessionTools.js +10 -51
- package/dist/server/sessionAvailabilityPolicy.js +0 -2
- package/dist/server/sessionEvidence.js +9 -15
- package/dist/server/sessionToolPolicies.js +0 -8
- package/dist/server/toolResult.js +14 -50
- package/dist/serverIdentity.js +0 -20
- package/install.sh +1 -1
- package/package.json +11 -7
- package/scripts/electron-active-hook.cjs +23 -55
- package/scripts/hopper-demo-x11.py +13 -32
- package/skills/reverse-engineer-anything/SKILL.md +47 -12
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
- package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
- package/dist/application/BoundedJsonFiles.js +0 -86
- package/dist/application/CrossVersionInventory.js +0 -129
- package/dist/application/CrossVersionInvestigation.js +0 -301
- package/dist/application/CrossVersionInvestigationCollections.js +0 -23
- package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
- package/dist/application/CrossVersionInvestigationReplay.js +0 -170
- package/dist/application/DeferredFileAuthorization.js +0 -61
- package/dist/application/DoctorProjection.js +0 -43
- package/dist/application/EnhancedToolPagination.js +0 -22
- package/dist/application/EvidenceReferenceResolver.js +0 -26
- package/dist/application/InvestigationWorkspaceStore.js +0 -204
- package/dist/application/ProcessPairedExperiment.js +0 -72
- package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
- package/dist/application/ReconstructionReadinessService.js +0 -48
- package/dist/cliInvestigationCommands.js +0 -173
- package/dist/domain/boundedCartesianProjection.js +0 -15
- package/dist/domain/investigationWorkspace.js +0 -347
- package/dist/domain/jsonLimits.js +0 -26
- package/dist/domain/knownPageCoverage.js +0 -29
- package/dist/domain/processPairedExperiment.js +0 -128
- package/dist/server/javascriptApplicationResult.js +0 -106
- package/dist/server/permissionFailure.js +0 -12
- package/dist/server/registerApplicationTools/readiness.js +0 -50
- package/dist/server/registerEvidenceResources.js +0 -315
- package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
- package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
- package/dist/server/registerReconstructionReadinessResource.js +0 -32
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createEvidence, } from "../domain/evidence.js";
|
|
2
2
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
3
|
-
/** Create deterministic Evidence
|
|
3
|
+
/** Create deterministic Evidence for one passive Inspector operation. */
|
|
4
4
|
export const createJavaScriptRuntimeObservationEvidence = (operation, input, result, provider) => createEvidence(undefined, provider, {
|
|
5
5
|
predicateType: operation === "list_javascript_runtime_targets"
|
|
6
|
-
? "rea.javascript-runtime-target-list
|
|
7
|
-
: "rea.javascript-runtime-observation
|
|
6
|
+
? "rea.javascript-runtime-target-list"
|
|
7
|
+
: "rea.javascript-runtime-observation",
|
|
8
8
|
operation,
|
|
9
9
|
parameters: parameters(input),
|
|
10
10
|
result: jsonValueSchema.parse(result),
|
|
@@ -21,14 +21,13 @@ export const createJavaScriptRuntimeObservationEvidence = (operation, input, res
|
|
|
21
21
|
});
|
|
22
22
|
const parameters = (input) => ({
|
|
23
23
|
inspector_endpoint: input.inspector_endpoint,
|
|
24
|
-
allowed_file_roots: input.allowed_file_roots,
|
|
25
|
-
allowed_origins: input.allowed_origins,
|
|
26
24
|
...("target_id" in input
|
|
27
25
|
? {
|
|
28
26
|
target_id: input.target_id,
|
|
29
|
-
|
|
27
|
+
...(input.runtime_kind === undefined
|
|
28
|
+
? {}
|
|
29
|
+
: { runtime_kind: input.runtime_kind }),
|
|
30
30
|
observation_ms: input.observation_ms,
|
|
31
|
-
limits: input.limits,
|
|
32
31
|
}
|
|
33
|
-
: {
|
|
32
|
+
: {}),
|
|
34
33
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { projectPermissionFailure } from "./PermissionFailure.js";
|
|
1
2
|
import { createJavaScriptRuntimeObservationEvidence } from "./JavaScriptRuntimeObservationEvidence.js";
|
|
2
|
-
import { AnalysisCapabilityUnavailableError,
|
|
3
|
+
import { AnalysisCapabilityUnavailableError, } from "../domain/errors.js";
|
|
3
4
|
import { err, ok } from "../domain/result.js";
|
|
4
5
|
/** Authorize and list attachable Node/Electron Inspector targets. */
|
|
5
6
|
export const listJavaScriptRuntimeTargets = async (provider, authority, input, options = {}) => {
|
|
@@ -26,20 +27,15 @@ const prepare = async (provider, authority, input, operation) => {
|
|
|
26
27
|
return err(new AnalysisCapabilityUnavailableError("rea-v8-inspector", operation, "V8 Inspector observation permission policy is not configured"));
|
|
27
28
|
const authorized = await authority.authorize({
|
|
28
29
|
capability: "v8_inspector_observe",
|
|
29
|
-
roots:
|
|
30
|
+
roots: [],
|
|
30
31
|
executables: [],
|
|
31
32
|
environment_names: [],
|
|
32
|
-
origins: [input.inspector_endpoint, ...input.allowed_origins],
|
|
33
33
|
network: "loopback",
|
|
34
34
|
mount: false,
|
|
35
35
|
operation_identity: `${operation}:${"target_id" in input ? input.target_id : input.inspector_endpoint}`,
|
|
36
36
|
}, "read");
|
|
37
37
|
if (!authorized.ok)
|
|
38
|
-
return err(authorized.error
|
|
39
|
-
? authorized.error
|
|
40
|
-
: new AnalysisProtocolError(authorized.error.message, {
|
|
41
|
-
cause: authorized.error,
|
|
42
|
-
}));
|
|
38
|
+
return err(projectPermissionFailure(authorized.error));
|
|
43
39
|
return provider === undefined
|
|
44
40
|
? err(new AnalysisCapabilityUnavailableError("rea-v8-inspector", operation, "V8 Inspector observation provider is not configured"))
|
|
45
41
|
: ok(provider);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createEvidence, } from "../domain/evidence.js";
|
|
2
2
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
3
3
|
import { JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER } from "./InvestigationProviders.js";
|
|
4
|
-
/** Create derived Evidence
|
|
4
|
+
/** Create derived Evidence for one exact set of static/runtime inputs. */
|
|
5
5
|
export const createJavaScriptRuntimeReconciliationEvidence = (input, result) => createEvidence(undefined, JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER, {
|
|
6
|
-
predicateType: "rea.javascript-runtime-reconciliation
|
|
6
|
+
predicateType: "rea.javascript-runtime-reconciliation",
|
|
7
7
|
operation: "reconcile_javascript_runtime",
|
|
8
8
|
parameters: parameters(input),
|
|
9
9
|
result: jsonValueSchema.parse(result),
|
|
@@ -21,5 +21,4 @@ const parameters = (input) => ({
|
|
|
21
21
|
runtime_mappings: layer.runtime_mappings,
|
|
22
22
|
})),
|
|
23
23
|
runtime_evidence_ids: input.runtime_observations.map(({ evidence_id: id }) => id),
|
|
24
|
-
limits: input.limits,
|
|
25
24
|
});
|
|
@@ -9,10 +9,10 @@ import { projectSemanticObjects } from "./JavaScriptSemanticGraphObjectProjectio
|
|
|
9
9
|
import { projectSemanticValues } from "./JavaScriptSemanticGraphValueProjection.js";
|
|
10
10
|
import { inferredSemanticEvidenceAt } from "./JavaScriptSemanticGraphEvidence.js";
|
|
11
11
|
import { projectSemanticFunctionFingerprints } from "./JavaScriptSemanticGraphFingerprintProjection.js";
|
|
12
|
-
import { projectSemanticClosureCaptures, projectSemanticFrontiers, projectSemanticPromises, projectSemanticReturnValues,
|
|
12
|
+
import { projectSemanticClosureCaptures, projectSemanticFrontiers, projectSemanticPromises, projectSemanticReturnValues, } from "./JavaScriptSemanticGraphFlowProjection.js";
|
|
13
13
|
import { owningSemanticCallableNode, semanticFamilyStatus, semanticNodesWithinRange, } from "./JavaScriptSemanticGraphProjection.js";
|
|
14
|
-
import { addSemanticFallbackRoot as addFallbackRoot, addSemanticGraphNode as addNode, addSemanticGraphRelation as addRelation, constructSemanticGraphNode as semanticNode, createSemanticGraphProjectionState as emptyState,
|
|
15
|
-
/** Project
|
|
14
|
+
import { addSemanticFallbackRoot as addFallbackRoot, addSemanticGraphNode as addNode, addSemanticGraphRelation as addRelation, constructSemanticGraphNode as semanticNode, createSemanticGraphProjectionState as emptyState, } from "./JavaScriptSemanticGraphConstruction.js";
|
|
15
|
+
/** Project per-file semantic IR into an artifact-bound companion graph. */
|
|
16
16
|
export const buildJavaScriptSemanticGraph = ({ rootArtifactSha256, applicationGraph, analysis, }) => {
|
|
17
17
|
const state = emptyState(applicationGraph);
|
|
18
18
|
const fingerprints = [];
|
|
@@ -23,12 +23,9 @@ export const buildJavaScriptSemanticGraph = ({ rootArtifactSha256, applicationGr
|
|
|
23
23
|
}
|
|
24
24
|
if (state.roots.size === 0)
|
|
25
25
|
addFallbackRoot(rootArtifactSha256, state);
|
|
26
|
-
const semanticTruncated = analysis.files.some(({ semantic }) => semantic?.ir.coverage.status === "truncated");
|
|
27
|
-
const truncated = state.limitsReached.size > 0 || semanticTruncated;
|
|
28
26
|
const unknowns = [...state.unknowns.values()];
|
|
29
27
|
return createJavaScriptSemanticGraph({
|
|
30
28
|
schema: "JavaScriptSemanticRelationGraph",
|
|
31
|
-
schema_version: 1,
|
|
32
29
|
root_artifact_sha256: rootArtifactSha256,
|
|
33
30
|
application_graph_id: applicationGraph.graph_id,
|
|
34
31
|
root_node_ids: [...state.roots],
|
|
@@ -37,38 +34,16 @@ export const buildJavaScriptSemanticGraph = ({ rootArtifactSha256, applicationGr
|
|
|
37
34
|
fingerprints,
|
|
38
35
|
unknowns,
|
|
39
36
|
coverage: {
|
|
40
|
-
status:
|
|
41
|
-
truncated,
|
|
42
|
-
omitted_nodes:
|
|
43
|
-
omitted_relations:
|
|
44
|
-
limits: [
|
|
45
|
-
{
|
|
46
|
-
name: "max_nodes",
|
|
47
|
-
value: MAX_SEMANTIC_GRAPH_NODES,
|
|
48
|
-
unit: "items",
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
name: "max_relations",
|
|
52
|
-
value: MAX_SEMANTIC_GRAPH_RELATIONS,
|
|
53
|
-
unit: "items",
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
name: "max_unknowns",
|
|
57
|
-
value: MAX_SEMANTIC_GRAPH_UNKNOWNS,
|
|
58
|
-
unit: "items",
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
name: "max_application_node_ids_per_semantic_node",
|
|
62
|
-
value: MAX_APPLICATION_NODE_IDS_PER_SEMANTIC_NODE,
|
|
63
|
-
unit: "items",
|
|
64
|
-
},
|
|
65
|
-
...semanticRecoveryLimits(analysis),
|
|
66
|
-
],
|
|
37
|
+
status: "unknown",
|
|
38
|
+
truncated: false,
|
|
39
|
+
omitted_nodes: 0,
|
|
40
|
+
omitted_relations: 0,
|
|
41
|
+
limits: [],
|
|
67
42
|
families: JAVASCRIPT_SEMANTIC_RELATION_FAMILIES.map((family) => ({
|
|
68
43
|
family,
|
|
69
|
-
status: semanticFamilyStatus(family, analysis
|
|
44
|
+
status: semanticFamilyStatus(family, analysis),
|
|
70
45
|
retained_relations: [...state.relations.values()].filter((relation) => JAVASCRIPT_SEMANTIC_RELATION_FAMILY[relation.relation] === family).length,
|
|
71
|
-
omitted_relations:
|
|
46
|
+
omitted_relations: 0,
|
|
72
47
|
unknown_ids: unknowns
|
|
73
48
|
.filter((unknown) => unknown.family === family)
|
|
74
49
|
.map(({ unknown_id: identifier }) => identifier),
|
|
@@ -78,7 +53,7 @@ export const buildJavaScriptSemanticGraph = ({ rootArtifactSha256, applicationGr
|
|
|
78
53
|
"The semantic graph contains static syntax observations and conservative relationship candidates; it does not claim runtime execution.",
|
|
79
54
|
"Local data flow does not claim control-flow-sensitive reaching definitions or arbitrary dynamic property resolution.",
|
|
80
55
|
"Promise ownership covers explicit unshadowed Promise construction, static factories, aggregation, chaining, and await syntax only.",
|
|
81
|
-
"Function fingerprints are
|
|
56
|
+
"Function fingerprints are static candidates; equal digests can remain ambiguous and do not prove behavioral equivalence.",
|
|
82
57
|
"Event extraction covers EventEmitter-style literal registrations, removals, and dispatch candidates; dynamic names remain unknown.",
|
|
83
58
|
"Timer extraction covers global or node:timers scheduling and exact local-handle cancellation.",
|
|
84
59
|
"Child-process extraction covers asynchronous node:child_process creation, literal argv/env/stdio options, exit/error listeners, and kill signals.",
|
|
@@ -86,11 +61,6 @@ export const buildJavaScriptSemanticGraph = ({ rootArtifactSha256, applicationGr
|
|
|
86
61
|
"Request extraction covers fetch, WebSocket, node:http/node:https construction, direct option fields, and exact local response consumers.",
|
|
87
62
|
"Boundary extraction covers unshadowed JSON/global coercions plus parse and validation method candidates.",
|
|
88
63
|
"Resource extraction covers built-in filesystem/network acquisition and exact local close/destroy/end handles.",
|
|
89
|
-
...(truncated
|
|
90
|
-
? [
|
|
91
|
-
"Semantic graph projection reached one or more explicit hard limits.",
|
|
92
|
-
]
|
|
93
|
-
: []),
|
|
94
64
|
],
|
|
95
65
|
});
|
|
96
66
|
};
|
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import { createJavaScriptSemanticGraphNode, createJavaScriptSemanticGraphRelation, } from "../domain/javascriptSemanticGraph.js";
|
|
2
2
|
import { inferredSemanticEvidence, observedSemanticEvidence, unavailableSemanticRootEvidence, } from "./JavaScriptSemanticGraphEvidence.js";
|
|
3
|
-
/** Hard semantic graph node bound enforced during artifact projection. */
|
|
4
|
-
export const MAX_SEMANTIC_GRAPH_NODES = 100_000;
|
|
5
|
-
/** Hard semantic graph relation bound enforced during artifact projection. */
|
|
6
|
-
export const MAX_SEMANTIC_GRAPH_RELATIONS = 200_000;
|
|
7
|
-
/** Hard unresolved-frontier bound enforced across all analyzed files. */
|
|
8
|
-
export const MAX_SEMANTIC_GRAPH_UNKNOWNS = 100_000;
|
|
9
|
-
/** Maximum structural nodes linked to one exact semantic location. */
|
|
10
|
-
export const MAX_APPLICATION_NODE_IDS_PER_SEMANTIC_NODE = 64;
|
|
11
3
|
/** Create empty projection state with structural application-node mappings. */
|
|
12
4
|
export const createSemanticGraphProjectionState = (applicationGraph) => {
|
|
13
5
|
const index = indexApplicationNodes(applicationGraph.nodes);
|
|
@@ -16,7 +8,6 @@ export const createSemanticGraphProjectionState = (applicationGraph) => {
|
|
|
16
8
|
relations: new Map(),
|
|
17
9
|
unknowns: new Map(),
|
|
18
10
|
roots: new Set(),
|
|
19
|
-
limitsReached: new Set(index.truncated ? ["max_application_node_ids_per_semantic_node"] : []),
|
|
20
11
|
applicationNodeIdsByLocation: index.identifiers,
|
|
21
12
|
};
|
|
22
13
|
};
|
|
@@ -35,19 +26,15 @@ export const constructSemanticGraphNode = (file, input, state) => createJavaScri
|
|
|
35
26
|
properties: input.properties ?? {},
|
|
36
27
|
evidence: observedSemanticEvidence(file, input.location),
|
|
37
28
|
});
|
|
38
|
-
/** Retain one canonical node
|
|
29
|
+
/** Retain one canonical semantic node. */
|
|
39
30
|
export const addSemanticGraphNode = (state, node) => {
|
|
40
31
|
const existing = state.nodes.get(node.node_id);
|
|
41
32
|
if (existing !== undefined)
|
|
42
33
|
return existing;
|
|
43
|
-
if (state.nodes.size >= MAX_SEMANTIC_GRAPH_NODES) {
|
|
44
|
-
state.limitsReached.add("max_nodes");
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
34
|
state.nodes.set(node.node_id, node);
|
|
48
35
|
return node;
|
|
49
36
|
};
|
|
50
|
-
/** Retain one non-self semantic relationship
|
|
37
|
+
/** Retain one non-self semantic relationship. */
|
|
51
38
|
export const addSemanticGraphRelation = (state, input) => {
|
|
52
39
|
if (input.source === undefined ||
|
|
53
40
|
input.source === null ||
|
|
@@ -65,20 +52,12 @@ export const addSemanticGraphRelation = (state, input) => {
|
|
|
65
52
|
});
|
|
66
53
|
if (state.relations.has(value.relation_id))
|
|
67
54
|
return;
|
|
68
|
-
if (state.relations.size >= MAX_SEMANTIC_GRAPH_RELATIONS) {
|
|
69
|
-
state.limitsReached.add("max_relations");
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
55
|
state.relations.set(value.relation_id, value);
|
|
73
56
|
};
|
|
74
|
-
/** Retain one unresolved frontier
|
|
57
|
+
/** Retain one unresolved frontier. */
|
|
75
58
|
export const addSemanticGraphUnknown = (state, unknown) => {
|
|
76
59
|
if (state.unknowns.has(unknown.unknown_id))
|
|
77
60
|
return;
|
|
78
|
-
if (state.unknowns.size >= MAX_SEMANTIC_GRAPH_UNKNOWNS) {
|
|
79
|
-
state.limitsReached.add("max_unknowns");
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
61
|
state.unknowns.set(unknown.unknown_id, unknown);
|
|
83
62
|
};
|
|
84
63
|
/** Add a truthful root when no source file could produce semantic IR. */
|
|
@@ -118,14 +97,11 @@ const indexApplicationNodes = (nodes) => {
|
|
|
118
97
|
}
|
|
119
98
|
}
|
|
120
99
|
}
|
|
121
|
-
let truncated = false;
|
|
122
100
|
const indexed = new Map([...identifiers].map(([key, values]) => {
|
|
123
101
|
const sorted = [...values].sort();
|
|
124
|
-
|
|
125
|
-
truncated = true;
|
|
126
|
-
return [key, sorted.slice(0, MAX_APPLICATION_NODE_IDS_PER_SEMANTIC_NODE)];
|
|
102
|
+
return [key, sorted];
|
|
127
103
|
}));
|
|
128
|
-
return { identifiers: indexed
|
|
104
|
+
return { identifiers: indexed };
|
|
129
105
|
};
|
|
130
106
|
const matchingApplicationNodeIds = (file, input, state) => [
|
|
131
107
|
...(state.applicationNodeIdsByLocation.get(applicationLocationKey(file.sha256, file.path, input.location)) ?? []),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const INFERENCE_LIMITATION = "This relationship is a
|
|
1
|
+
const INFERENCE_LIMITATION = "This relationship is a conservative static candidate; it does not prove runtime execution or causal flow.";
|
|
2
2
|
/** Exact artifact-backed syntax evidence for one semantic graph node. */
|
|
3
3
|
export const observedSemanticEvidence = (file, location) => ({
|
|
4
4
|
authority: "ast-static-analysis",
|
|
@@ -8,7 +8,7 @@ export const projectSemanticFunctionFingerprints = (file, ir, callableNodes) =>
|
|
|
8
8
|
return [
|
|
9
9
|
createJavaScriptSemanticFingerprint({
|
|
10
10
|
function_node_id: callable.node_id,
|
|
11
|
-
algorithm: "rea.javascript-semantic-function
|
|
11
|
+
algorithm: "rea.javascript-semantic-function",
|
|
12
12
|
status: fingerprint.status,
|
|
13
13
|
components: {
|
|
14
14
|
parameter_arity: fingerprint.components.parameterArity,
|
|
@@ -178,16 +178,3 @@ export const projectSemanticFrontiers = (context) => {
|
|
|
178
178
|
addSemanticGraphUnknown(context.state, unknown);
|
|
179
179
|
}
|
|
180
180
|
};
|
|
181
|
-
/** Publish exact semantic analyzer limits reached by any admitted source file. */
|
|
182
|
-
export const semanticRecoveryLimits = (analysis) => {
|
|
183
|
-
const limits = new Map();
|
|
184
|
-
for (const { semantic } of analysis.files) {
|
|
185
|
-
if (semantic === null)
|
|
186
|
-
continue;
|
|
187
|
-
for (const name of semantic.ir.coverage.limitsReached)
|
|
188
|
-
limits.set(`semantic.${name}`, semantic.limits[name]);
|
|
189
|
-
}
|
|
190
|
-
return [...limits]
|
|
191
|
-
.sort(([left], [right]) => left.localeCompare(right))
|
|
192
|
-
.map(([name, value]) => ({ name, value, unit: "items" }));
|
|
193
|
-
};
|
|
@@ -14,7 +14,7 @@ export const owningSemanticCallableNode = (location, ir, nodes) => {
|
|
|
14
14
|
export const semanticNodesWithinRange = (nodes, range) => nodes.filter((node) => node.identity.source_range !== null &&
|
|
15
15
|
contains(range, node.identity.source_range));
|
|
16
16
|
/** Report extractor support without treating missing families as absence. */
|
|
17
|
-
export const semanticFamilyStatus = (family, analysis
|
|
17
|
+
export const semanticFamilyStatus = (family, analysis) => {
|
|
18
18
|
if (![
|
|
19
19
|
"call-flow",
|
|
20
20
|
"boundary",
|
|
@@ -30,8 +30,6 @@ export const semanticFamilyStatus = (family, analysis, truncated) => {
|
|
|
30
30
|
"timer",
|
|
31
31
|
].includes(family))
|
|
32
32
|
return "unsupported";
|
|
33
|
-
if (truncated)
|
|
34
|
-
return "unknown";
|
|
35
33
|
return analysis.truncated_scopes === 0 ? "partial" : "unknown";
|
|
36
34
|
};
|
|
37
35
|
const contains = (outer, inner) => pointCompare(outer.start, inner.start) <= 0 &&
|
|
@@ -2,7 +2,6 @@ import { z } from "zod";
|
|
|
2
2
|
import { AnalysisInputError, AnalysisProtocolError, } from "../domain/errors.js";
|
|
3
3
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
4
4
|
import { queryJavaScriptSemanticGraph } from "../domain/javascriptSemanticQuery.js";
|
|
5
|
-
import { JavaScriptSemanticQueryCursorError } from "../domain/javascriptSemanticQueryIdentity.js";
|
|
6
5
|
import { javaScriptSemanticTraceResultSchema, traceJavaScriptSemanticsInputSchema, } from "../domain/javascriptSemanticTraceSchemas.js";
|
|
7
6
|
import { err, ok } from "../domain/result.js";
|
|
8
7
|
import { parseApplicationGraphEvidence } from "./JavaScriptApplicationEvidenceGraph.js";
|
|
@@ -17,7 +16,7 @@ export const traceJavaScriptSemanticsEvidenceValidated = (input) => {
|
|
|
17
16
|
{
|
|
18
17
|
path: ["application"],
|
|
19
18
|
reason: "invalid_value",
|
|
20
|
-
expected: "
|
|
19
|
+
expected: "inline Evidence from analyze_javascript_application with a semantic graph",
|
|
21
20
|
},
|
|
22
21
|
]));
|
|
23
22
|
const query = queryJavaScriptSemanticGraph(source.semanticGraph, input.query);
|
|
@@ -32,14 +31,6 @@ export const traceJavaScriptSemanticsEvidenceValidated = (input) => {
|
|
|
32
31
|
}, result));
|
|
33
32
|
}
|
|
34
33
|
catch (cause) {
|
|
35
|
-
if (cause instanceof JavaScriptSemanticQueryCursorError)
|
|
36
|
-
return err(new AnalysisInputError(OPERATION, undefined, [
|
|
37
|
-
{
|
|
38
|
-
path: ["query", "cursor"],
|
|
39
|
-
reason: "invalid_value",
|
|
40
|
-
expected: "a cursor returned by the same graph, query, and limits",
|
|
41
|
-
},
|
|
42
|
-
]));
|
|
43
34
|
return err(new AnalysisProtocolError("JavaScript semantic trace failed", { cause }));
|
|
44
35
|
}
|
|
45
36
|
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { link, lstat, mkdtemp, readFile, realpath, rm } from "node:fs/promises";
|
|
2
|
+
import { basename, dirname, resolve } from "node:path";
|
|
3
|
+
import writeFileAtomic from "write-file-atomic";
|
|
4
|
+
import { EvidenceFileError } from "../domain/errors.js";
|
|
5
|
+
import { err, ok } from "../domain/result.js";
|
|
6
|
+
/** Read JSON data from a regular file at the caller-supplied path. */
|
|
7
|
+
export const readJsonFile = async (path) => {
|
|
8
|
+
try {
|
|
9
|
+
const canonicalPath = await realpath(resolve(path));
|
|
10
|
+
const stats = await lstat(canonicalPath);
|
|
11
|
+
if (!stats.isFile())
|
|
12
|
+
return err(new EvidenceFileError("read", "not-file"));
|
|
13
|
+
const encoded = await readFile(canonicalPath);
|
|
14
|
+
let decoded;
|
|
15
|
+
try {
|
|
16
|
+
decoded = JSON.parse(encoded.toString("utf8"));
|
|
17
|
+
}
|
|
18
|
+
catch (cause) {
|
|
19
|
+
return err(new EvidenceFileError("read", "invalid-json", { cause }));
|
|
20
|
+
}
|
|
21
|
+
return ok(decoded);
|
|
22
|
+
}
|
|
23
|
+
catch (cause) {
|
|
24
|
+
return err(new EvidenceFileError("read", "io", { cause }));
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
/** Atomically write text to the caller-supplied path. */
|
|
28
|
+
export const writeTextFile = async (encoded, path, overwrite) => {
|
|
29
|
+
const bytes = Buffer.byteLength(encoded, "utf8");
|
|
30
|
+
try {
|
|
31
|
+
const requestedPath = resolve(path);
|
|
32
|
+
const canonicalParent = await realpath(dirname(requestedPath));
|
|
33
|
+
const destination = resolve(canonicalParent, basename(requestedPath));
|
|
34
|
+
const existing = await lstat(destination).catch((cause) => {
|
|
35
|
+
if (fileErrorCode(cause) === "ENOENT")
|
|
36
|
+
return undefined;
|
|
37
|
+
throw cause;
|
|
38
|
+
});
|
|
39
|
+
if (existing !== undefined) {
|
|
40
|
+
if (!overwrite)
|
|
41
|
+
return err(new EvidenceFileError("write", "exists"));
|
|
42
|
+
if (!existing.isFile() || existing.isSymbolicLink())
|
|
43
|
+
return err(new EvidenceFileError("write", "not-file"));
|
|
44
|
+
}
|
|
45
|
+
if (overwrite)
|
|
46
|
+
await writeFileAtomic(destination, encoded, {
|
|
47
|
+
encoding: "utf8",
|
|
48
|
+
mode: 0o600,
|
|
49
|
+
fsync: true,
|
|
50
|
+
});
|
|
51
|
+
else
|
|
52
|
+
await publishNewFile(destination, encoded);
|
|
53
|
+
return ok({ path: requestedPath, bytes });
|
|
54
|
+
}
|
|
55
|
+
catch (cause) {
|
|
56
|
+
if (!overwrite && fileErrorCode(cause) === "EEXIST")
|
|
57
|
+
return err(new EvidenceFileError("write", "exists", { cause }));
|
|
58
|
+
return err(new EvidenceFileError("write", "io", { cause }));
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const publishNewFile = async (destination, encoded) => {
|
|
62
|
+
const stagingDirectory = await mkdtemp(resolve(dirname(destination), ".rea-write-"));
|
|
63
|
+
try {
|
|
64
|
+
const staged = resolve(stagingDirectory, "content");
|
|
65
|
+
await writeFileAtomic(staged, encoded, {
|
|
66
|
+
encoding: "utf8",
|
|
67
|
+
mode: 0o600,
|
|
68
|
+
fsync: true,
|
|
69
|
+
});
|
|
70
|
+
// A hard link publishes complete bytes atomically and cannot replace an existing name.
|
|
71
|
+
await link(staged, destination);
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
await rm(stagingDirectory, { recursive: true, force: true });
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const fileErrorCode = (cause) => typeof cause === "object" && cause !== null && "code" in cause
|
|
78
|
+
? cause.code
|
|
79
|
+
: undefined;
|
|
@@ -5,6 +5,7 @@ import { access, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
|
5
5
|
import { tmpdir } from "node:os";
|
|
6
6
|
import { join } from "node:path";
|
|
7
7
|
import { promisify } from "node:util";
|
|
8
|
+
import { execFileOutput } from "../process/ExecFileOutput.js";
|
|
8
9
|
const execFileAsync = promisify(execFile);
|
|
9
10
|
const DOWNLOAD_PREFIX = "https://www.hopperapp.com:443/downloader/public/";
|
|
10
11
|
const MAX_PACKAGE_BYTES = 100_000_000;
|
|
@@ -55,15 +56,17 @@ export const parseLinuxDistribution = (text) => {
|
|
|
55
56
|
const id = (fields.get("ID") ?? "unknown").toLowerCase();
|
|
56
57
|
const versionId = fields.get("VERSION_ID");
|
|
57
58
|
const packageFamily = packageFamilyFor(id, fields.get("ID_LIKE"));
|
|
58
|
-
const supported =
|
|
59
|
-
(id === "
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
const supported = packageFamily !== undefined &&
|
|
60
|
+
(id === "arch" ||
|
|
61
|
+
(id === "ubuntu" && versionAtLeast(versionId, 24)) ||
|
|
62
|
+
(id === "fedora" && versionAtLeast(versionId, 41)));
|
|
63
|
+
const identity = {
|
|
62
64
|
id,
|
|
63
65
|
...(versionId === undefined ? {} : { versionId }),
|
|
64
|
-
packageFamily,
|
|
65
|
-
supported,
|
|
66
66
|
};
|
|
67
|
+
return supported
|
|
68
|
+
? { ...identity, packageFamily, supported: true }
|
|
69
|
+
: { ...identity, packageFamily, supported: false };
|
|
67
70
|
};
|
|
68
71
|
/** Read and classify the current Linux distribution. */
|
|
69
72
|
export const readLinuxDistribution = async () => {
|
|
@@ -79,8 +82,7 @@ export const installLinuxHopper = async (host = systemLinuxHopperInstallHost(),
|
|
|
79
82
|
if (options.signal?.aborted === true)
|
|
80
83
|
return { status: "failed", reason: "cancelled" };
|
|
81
84
|
const distribution = await host.distribution();
|
|
82
|
-
if (distribution?.supported !== true
|
|
83
|
-
distribution.packageFamily === undefined)
|
|
85
|
+
if (distribution?.supported !== true)
|
|
84
86
|
return { status: "failed", reason: "unsupported_host" };
|
|
85
87
|
let temporary;
|
|
86
88
|
try {
|
|
@@ -134,7 +136,7 @@ const systemLinuxHopperInstallHost = () => ({
|
|
|
134
136
|
async launcherStatus(path) {
|
|
135
137
|
try {
|
|
136
138
|
await access(path);
|
|
137
|
-
const linked = await
|
|
139
|
+
const linked = await execFileOutput("ldd", [path]);
|
|
138
140
|
if (!linuxSharedLibrariesAvailable(`${linked.stdout}\n${linked.stderr}`))
|
|
139
141
|
return "runtime_dependencies";
|
|
140
142
|
return (await linuxHopperBinarySupported(path))
|