rea-agents 6.0.0 → 6.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 +26 -18
- package/bridge/android/ReaJadxBridge.java +14 -5
- package/bridge/ghidra/ReaGhidraBridge.java +205 -51
- package/bridge/hopper_bridge.py +314 -127
- package/bridge/mitmproxy/capture.py +0 -2
- package/bridge/native/rea_lldb_tracer.py +630 -94
- package/bridge/process/ProcessRunTokenReader.swift +39 -5
- package/bridge/pwntools/recorded_crash_impl.py +4 -0
- package/dist/android/JadxConfiguration.js +274 -31
- package/dist/android/JadxMcpTransport.js +18 -2
- package/dist/android/JadxProtocol.js +6 -0
- package/dist/android/JadxProvider.js +76 -37
- package/dist/android/JadxSession.js +23 -4
- package/dist/application/AnalysisContextQueries.js +8 -35
- package/dist/application/AnalysisDocument.js +32 -0
- package/dist/application/AppBundleExecutable.js +67 -21
- package/dist/application/BinaryTargetResolver.js +5 -3
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +2 -18
- package/dist/application/CallPathTracing.js +19 -3
- package/dist/application/CapabilityInventory.js +48 -11
- package/dist/application/ClientConfigurationDocument.js +917 -8
- package/dist/application/ClientRegistrationIdentity.js +26 -5
- package/dist/application/ClientRegistrationStatus.js +29 -14
- package/dist/application/DirectAnalysis.js +56 -51
- package/dist/application/DirectAnalysisCleanup.js +72 -0
- package/dist/application/DirectAnalysisStatus.js +4 -5
- package/dist/application/Doctor.js +19 -21
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +25 -13
- package/dist/application/EnhancedLiteralTracing.js +22 -25
- package/dist/application/EnhancedTools.js +64 -17
- package/dist/application/EvidenceBundleFiles.js +30 -13
- package/dist/application/FunctionAnalysisEvidence.js +2 -3
- package/dist/application/InventoryProjectionEvidence.js +4 -3
- package/dist/application/InvestigationProviders.js +11 -2
- package/dist/application/JsonFiles.js +83 -28
- package/dist/application/LinuxHopper.js +9 -6
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/ProcedureAddressResolution.js +11 -0
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionCoverageService.js +7 -4
- package/dist/application/ReconstructionObligationCandidates.js +1 -1
- package/dist/application/ReconstructionObligationLedgerService.js +4 -3
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/Setup.js +21 -17
- package/dist/application/SetupClientConfiguration.js +10 -15
- package/dist/application/SetupHost.js +21 -29
- package/dist/application/SetupPlan.js +11 -9
- package/dist/application/SupportedClients.js +34 -1
- package/dist/application/Uninstall.js +82 -29
- package/dist/application/Update.js +18 -3
- package/dist/application/UpdateMaintenance.js +7 -5
- package/dist/application/UpdateRuntime.js +57 -36
- package/dist/application/WebModuleTraceService.js +4 -2
- package/dist/application/WebNetworkCaptureService.js +4 -2
- package/dist/application/WebRuntimeService.js +5 -3
- package/dist/application/WebScriptExportService.js +32 -6
- package/dist/application/WebSourceLocationService.js +4 -2
- package/dist/application/WorkflowEvidence.js +105 -0
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
- package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
- package/dist/application/binary/BinarySession.js +161 -93
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +4 -4
- package/dist/application/binary/BinarySessionRecords.js +26 -4
- package/dist/application/binary/BinarySessionStatus.js +18 -7
- package/dist/application/binary/CompositeProvider.js +16 -17
- package/dist/application/binary/LazyAnalysisProvider.js +8 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
- package/dist/application/evm/EvmInterfaceService.js +4 -2
- package/dist/application/homebrew.js +48 -0
- package/dist/application/investigation/EvidenceLedger.js +21 -7
- package/dist/application/investigation/InvestigationRecords.js +8 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
- package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
- package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
- package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
- package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
- package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
- package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
- package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
- package/dist/application/managed/ManagedReconstructionService.js +4 -3
- package/dist/application/process/ProcessCli.js +25 -17
- package/dist/application/process/ProcessEvidence.js +4 -4
- package/dist/application/workflowInputError.js +18 -0
- package/dist/artifacts/ArtifactProvider.js +48 -13
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
- package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
- package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
- package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
- package/dist/artifacts/apple/NibArchive.js +81 -14
- package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
- package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
- package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +59 -38
- package/dist/artifacts/inventory/scanReader.js +5 -9
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +2 -3
- package/dist/browser/CdpCaptureCompleteness.js +2 -0
- package/dist/browser/CdpCaptureEventHandlers.js +78 -15
- package/dist/browser/CdpCaptureEventTypes.js +5 -1
- package/dist/browser/CdpCaptureEvents.js +25 -1
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpConnection.js +30 -11
- package/dist/browser/CdpElectronProvider.js +0 -2
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +2 -3
- package/dist/browser/CdpOptionalCommand.js +2 -3
- package/dist/browser/CdpPageCapture.js +23 -1
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
- package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
- package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +39 -22
- package/dist/browser/WebSourceMapFetcher.js +426 -72
- package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +41 -1
- package/dist/browser/history/CaptureRelease.js +5 -0
- package/dist/browser/history/HarCaptureAdapter.js +3 -3
- package/dist/browser/history/HarJson.js +3 -2
- package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisSelector.js +23 -0
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/applicationCommands.js +2 -3
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +100 -37
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +10 -9
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +7 -3
- package/dist/cli/jsonOutput.js +4 -99
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +3 -5
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/utilityCommands.js +9 -9
- package/dist/cli/webRuntimeCommands.js +8 -8
- package/dist/cli.js +18 -9
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -1
- package/dist/cliJsonInput.js +24 -5
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -13
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +10 -0
- package/dist/config/ghidraStartupTimeout.js +12 -0
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +30 -0
- package/dist/config/parseConfig.js +8 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +2 -2
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +7 -5
- package/dist/contracts/enhancedToolContracts.js +7 -6
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/hopperMemoryContracts.js +2 -5
- package/dist/contracts/inputSchemaPresentation.js +90 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +2 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/managed/managedToolContracts.js +7 -14
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +5 -3
- package/dist/contracts/officialToolContracts.js +16 -16
- package/dist/contracts/promptContracts.js +5 -5
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +3 -7
- package/dist/contracts/sessionStatusContract.js +2 -4
- package/dist/contracts/sessionToolContracts.js +18 -8
- package/dist/contracts/sessionToolSchemas.js +3 -19
- package/dist/contracts/toolContractExamples.js +0 -1
- package/dist/contracts/toolContractHelpers.js +4 -1
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -1
- package/dist/contracts/toolOutputSchemaGroups.js +160 -115
- package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
- package/dist/contracts/toolSchemaMetadata.js +41 -33
- package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +8 -3
- package/dist/domain/analysisErrorCore.js +6 -1
- package/dist/domain/analysisErrorPresentation.js +90 -20
- package/dist/domain/analysisErrorProjection.js +130 -32
- package/dist/domain/analysisSnapshot.js +29 -31
- package/dist/domain/analysisView/analysisView.js +243 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidAnalysis.js +2 -4
- package/dist/domain/android/androidApplication.js +18 -10
- package/dist/domain/apple/appleApplication.js +42 -15
- package/dist/domain/apple/dyldEnvironment.js +73 -0
- package/dist/domain/apple/dylibResolution.js +130 -12
- package/dist/domain/apple/dylibResolutionFindings.js +9 -7
- package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
- package/dist/domain/apple/keyedArchive.js +35 -3
- package/dist/domain/apple/machoContainer.js +54 -0
- package/dist/domain/apple/plistNumbers.js +76 -0
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +16 -3
- package/dist/domain/artifactIdentity.js +29 -0
- package/dist/domain/artifactInventoryEvidence.js +28 -40
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/bridgeCandidateProjection.js +71 -0
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +1 -0
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationError.js +24 -5
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioValues.js +5 -10
- package/dist/domain/bundleComparison.js +3 -2
- package/dist/domain/callPath.js +8 -9
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalJsonDigestSteps.js +133 -0
- package/dist/domain/canonicalOrdering.js +9 -5
- package/dist/domain/changedBehavior.js +9 -9
- package/dist/domain/comparisonSourceEvidence.js +40 -0
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +13 -1
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/evidence.js +65 -36
- package/dist/domain/evidenceBundle.js +47 -8
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/evidenceErrors.js +12 -1
- package/dist/domain/explicitSensitiveFailure.js +17 -1
- package/dist/domain/firmware/firmwareAnalysis.js +6 -7
- package/dist/domain/functionComparison.js +4 -5
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +23 -34
- package/dist/domain/functionComparisonResults.js +1 -4
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +2 -37
- package/dist/domain/hopperErrors.js +23 -2
- package/dist/domain/hopperValues.js +51 -8
- package/dist/domain/immutableJson.js +114 -0
- package/dist/domain/inputIssueProjection.js +3 -0
- package/dist/domain/javascript/electronActiveObservation.js +47 -64
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
- package/dist/domain/javascript/javascriptAstValues.js +20 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
- package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
- package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
- package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
- package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
- package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascript/javascriptRecovery.js +3 -8
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
- package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
- package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
- package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
- package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
- package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
- package/dist/domain/javascript/javascriptSourceParser.js +6 -2
- package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
- package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
- package/dist/domain/jsonSerialization.js +109 -0
- package/dist/domain/jsonValue.js +90 -6
- package/dist/domain/localPath.js +6 -0
- package/dist/domain/managed/managedApplicationGraph.js +10 -10
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedInspectionEvidence.js +16 -0
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
- package/dist/domain/managed/managedNativeVerification.js +3 -11
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +37 -13
- package/dist/domain/native/nativeCallPartialObservation.js +33 -0
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +21 -16
- package/dist/domain/process/processCaptureCoverage.js +67 -0
- package/dist/domain/process/processCaptureExample.js +2 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +81 -13
- package/dist/domain/process/processComparison.js +79 -26
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +35 -12
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +15 -11
- package/dist/domain/process/processTraceSpecification.js +3 -4
- package/dist/domain/propertyListKeys.js +1 -1
- package/dist/domain/propertyListXmlText.js +19 -0
- package/dist/domain/providerAdapterError.js +3 -1
- package/dist/domain/providerOperationHealth.js +54 -0
- package/dist/domain/reconstructionCoverage.js +5 -2
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionVerification.js +9 -46
- package/dist/domain/reconstructionVerificationSchemas.js +4 -3
- package/dist/domain/referenceSourceGraph.js +20 -21
- package/dist/domain/staticRuntimeCorrelation.js +8 -45
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +61 -0
- package/dist/domain/symbolAnalysis.js +66 -18
- package/dist/domain/webBundleAnalysis.js +20 -8
- package/dist/domain/webBundleAnalyzerInspection.js +13 -8
- package/dist/domain/webBundleAnalyzerResult.js +41 -2
- package/dist/domain/webCaptureDiff.js +0 -1
- package/dist/domain/webCaptureDiffSchemas.js +6 -3
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webRuntime.js +19 -7
- package/dist/domain/webScriptExport.js +1 -1
- package/dist/domain/webSourceLocation.js +1 -0
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +3 -5
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareFiles.js +1 -1
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
- package/dist/ghidra/GhidraClient.js +126 -34
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDiagnostics.js +7 -7
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +13 -12
- package/dist/ghidra/GhidraInstallation.js +58 -33
- package/dist/ghidra/GhidraInventoryValues.js +14 -4
- package/dist/ghidra/GhidraJavaLaunch.js +66 -0
- package/dist/ghidra/GhidraLauncher.js +47 -22
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
- package/dist/ghidra/GhidraProviderClient.js +36 -15
- package/dist/ghidra/GhidraSessionError.js +13 -7
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
- package/dist/ghidra/GhidraTransport.js +20 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +65 -56
- package/dist/hopper/HopperAnalysisProfile.js +65 -12
- package/dist/hopper/HopperCleanup.js +63 -22
- package/dist/hopper/HopperClient.js +288 -59
- package/dist/hopper/HopperFileOffset.js +237 -0
- package/dist/hopper/HopperMachOImage.js +197 -0
- package/dist/hopper/HopperOperationStage.js +6 -0
- package/dist/hopper/HopperProvider.js +71 -19
- package/dist/hopper/HopperProviderCapabilities.js +19 -1
- package/dist/hopper/HopperRegexSearch.js +134 -0
- package/dist/hopper/HopperRegexWorker.js +27 -0
- package/dist/hopper/HopperRequestQueue.js +68 -19
- package/dist/hopper/HopperTargetLease.js +133 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +3 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +20 -18
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
- package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
- package/dist/inspector/V8InspectorProvider.js +82 -36
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
- package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
- package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
- package/dist/main/shutdown.js +11 -3
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +22 -2
- package/dist/main.js +11 -18
- package/dist/mcpDoctor.js +62 -2
- package/dist/native/AppleDispatchCoverage.js +47 -6
- package/dist/native/AppleDispatchDecodeFacts.js +6 -0
- package/dist/native/AppleDispatchMetadata.js +6 -3
- package/dist/native/AppleMachoFixups.js +48 -24
- package/dist/native/AppleMachoSelection.js +48 -22
- package/dist/native/AppleObjcCategories.js +6 -2
- package/dist/native/AppleObjcDispatchFacets.js +5 -2
- package/dist/native/AppleObjcProperties.js +2 -1
- package/dist/native/AppleSwiftDispatchFacets.js +27 -21
- package/dist/native/AppleSwiftVtables.js +21 -15
- package/dist/native/CommandRunner.js +87 -88
- package/dist/native/LldbCallTracer.js +372 -103
- package/dist/native/LldbRetainedObservations.js +178 -0
- package/dist/native/NativeCallObservation.js +62 -3
- package/dist/native/NativeMacOSProvider.js +122 -31
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/SignatureTargetBinding.js +155 -0
- package/dist/native/parsers/lipo.js +71 -1
- package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
- package/dist/process/DarwinProcessRunTokenReader.js +23 -10
- package/dist/process/ExecFileOutput.js +108 -6
- package/dist/process/OwnedCommand.js +7 -2
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +204 -57
- package/dist/process/ProcessOwnershipObservation.js +60 -9
- package/dist/process/ProviderProcess.js +39 -10
- package/dist/process/capture/FilesystemSnapshot.js +50 -13
- package/dist/process/capture/ProcessCaptureError.js +15 -2
- package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
- package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
- package/dist/process/capture/ProcessHarness.js +21 -25
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +157 -0
- package/dist/server/createServer.js +61 -41
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -5
- package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +1 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +13 -10
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
- package/dist/server/registerBrowserScenarioTool.js +3 -6
- package/dist/server/registerBrowserTools.js +13 -18
- package/dist/server/registerBundleComparisonTool.js +5 -7
- package/dist/server/registerCloseLifecycleTool.js +9 -20
- package/dist/server/registerElectronTools.js +10 -15
- package/dist/server/registerEnhancedTools.js +36 -77
- package/dist/server/registerEvidenceTools.js +3 -6
- package/dist/server/registerEvmTools.js +2 -5
- package/dist/server/registerFirmwareTools.js +2 -5
- package/dist/server/registerFunctionComparisonTool.js +15 -12
- package/dist/server/registerInvestigationTools.js +16 -17
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
- package/dist/server/registerOfficialTools.js +4 -21
- package/dist/server/registerProcessComparisonTool.js +74 -48
- package/dist/server/registerRecordedCrashTools.js +2 -5
- package/dist/server/registerSessionRecordTools.js +19 -24
- package/dist/server/registerSessionStatusTool.js +19 -6
- package/dist/server/registerSessionTools.js +20 -18
- package/dist/server/registerWebModuleTool.js +2 -5
- package/dist/server/registerWebNetworkCaptureTool.js +2 -5
- package/dist/server/registerWebRuntimeTools.js +4 -9
- package/dist/server/registerWebScriptTool.js +2 -5
- package/dist/server/registerWebSourceLocationTool.js +2 -5
- package/dist/server/runDerivedOperation.js +15 -3
- package/dist/server/sessionAvailabilityPolicy.js +0 -1
- package/dist/server/toolRegistrationOptions.js +2 -2
- package/dist/server/toolResult.js +75 -51
- package/dist/server/toolResultEncoding.js +34 -0
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/install.sh +1 -1
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +44 -30
- package/scripts/electron-active-hook-boundaries.cjs +18 -20
- package/scripts/electron-active-hook.cjs +241 -37
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +12 -3
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/ghidra/GhidraDefaults.js +0 -2
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -112,6 +112,31 @@ enum RunTokenReadError: Error {
|
|
|
112
112
|
case ambiguousEnvironmentBoundary
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
@_silgen_name("csops")
|
|
116
|
+
private func csops(
|
|
117
|
+
_ pid: Int32,
|
|
118
|
+
_ ops: UInt32,
|
|
119
|
+
_ addr: UnsafeMutableRawPointer?,
|
|
120
|
+
_ size: Int
|
|
121
|
+
) -> Int32
|
|
122
|
+
|
|
123
|
+
private let csOpsStatus: UInt32 = 0
|
|
124
|
+
private let csPlatformBinary: UInt32 = 0x0400_0000
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Whether the target image is an Apple platform binary. Current macOS omits
|
|
128
|
+
* the environment of platform binaries from KERN_PROCARGS2 for every caller,
|
|
129
|
+
* so this distinguishes a policy-withheld environment from a process whose
|
|
130
|
+
* environment is genuinely absent or transiently unreadable.
|
|
131
|
+
*/
|
|
132
|
+
func isPlatformBinary(pid: Int32) -> Bool {
|
|
133
|
+
var flags: UInt32 = 0
|
|
134
|
+
let result = withUnsafeMutablePointer(to: &flags) { pointer in
|
|
135
|
+
csops(pid, csOpsStatus, UnsafeMutableRawPointer(pointer), MemoryLayout<UInt32>.size)
|
|
136
|
+
}
|
|
137
|
+
return result == 0 && (flags & csPlatformBinary) != 0
|
|
138
|
+
}
|
|
139
|
+
|
|
115
140
|
private func readRunToken(pid: Int32, pointerSize: Int) -> RunTokenObservation {
|
|
116
141
|
var mib = [CTL_KERN, KERN_PROCARGS2, Int32(pid)]
|
|
117
142
|
var size = 0
|
|
@@ -127,13 +152,25 @@ private func readRunToken(pid: Int32, pointerSize: Int) -> RunTokenObservation {
|
|
|
127
152
|
}
|
|
128
153
|
bytes = Array(bytes.prefix(size))
|
|
129
154
|
do {
|
|
130
|
-
|
|
155
|
+
let runId = try token(in: bytes, pointerSize: pointerSize)
|
|
156
|
+
// A complete empty environment is readable for an ordinary image. Apple
|
|
157
|
+
// platform images can expose the same layout after the kernel withholds
|
|
158
|
+
// their environment, so they remain explicitly unverified without a token.
|
|
159
|
+
if runId == nil && isPlatformBinary(pid: pid) {
|
|
160
|
+
return unavailable(pid: pid, reason: "platform_binary_environment_withheld")
|
|
161
|
+
}
|
|
162
|
+
return RunTokenObservation(pid: pid, state: "readable", run_id: runId, reason: nil)
|
|
131
163
|
} catch RunTokenReadError.duplicateToken {
|
|
132
164
|
return unavailable(pid: pid, reason: "duplicate_run_token")
|
|
133
165
|
} catch RunTokenReadError.invalidTokenEncoding {
|
|
134
166
|
return unavailable(pid: pid, reason: "invalid_run_token_encoding")
|
|
135
167
|
} catch RunTokenReadError.environmentUnavailable {
|
|
136
|
-
return unavailable(
|
|
168
|
+
return unavailable(
|
|
169
|
+
pid: pid,
|
|
170
|
+
reason: isPlatformBinary(pid: pid)
|
|
171
|
+
? "platform_binary_environment_withheld"
|
|
172
|
+
: "environment_unavailable"
|
|
173
|
+
)
|
|
137
174
|
} catch RunTokenReadError.appleVectorUnavailable {
|
|
138
175
|
return unavailable(pid: pid, reason: "apple_vector_unavailable")
|
|
139
176
|
} catch RunTokenReadError.ambiguousEnvironmentBoundary {
|
|
@@ -229,9 +266,6 @@ func token(in bytes: [UInt8], pointerSize: Int = MemoryLayout<UnsafeRawPointer>.
|
|
|
229
266
|
throw RunTokenReadError.ambiguousEnvironmentBoundary
|
|
230
267
|
}
|
|
231
268
|
let environmentEntries = trailingEntries[..<appleVectorStart]
|
|
232
|
-
guard !environmentEntries.isEmpty else {
|
|
233
|
-
throw RunTokenReadError.environmentUnavailable
|
|
234
|
-
}
|
|
235
269
|
var found: String?
|
|
236
270
|
for entry in environmentEntries {
|
|
237
271
|
if entry.starts(with: Array("REA_PROCESS_RUN_ID=".utf8)) {
|
|
@@ -43,6 +43,10 @@ def inspect_core(path, cache):
|
|
|
43
43
|
raise CoreFailure("unsupported-target", "Initial recorded-core profile requires ELF64 little-endian.")
|
|
44
44
|
if len(content) < 64:
|
|
45
45
|
raise CoreFailure("format", "Selected ELF64 core header is truncated.")
|
|
46
|
+
if content[6] != 1:
|
|
47
|
+
raise CoreFailure("format", "ELF identification version is not EV_CURRENT.")
|
|
48
|
+
if int.from_bytes(content[20:24], "little") != 1:
|
|
49
|
+
raise CoreFailure("format", "ELF header version is not EV_CURRENT.")
|
|
46
50
|
# Linux commonly emits ELFOSABI_NONE (0), also accepted as GNU/Linux (3).
|
|
47
51
|
# Other declared OSABIs must never select Linux note ctypes.
|
|
48
52
|
if content[7] not in (0, 3) or content[8] != 0:
|
|
@@ -1,44 +1,210 @@
|
|
|
1
|
-
import { access, realpath, stat } from "node:fs/promises";
|
|
2
1
|
import { constants } from "node:fs";
|
|
3
|
-
import {
|
|
2
|
+
import { access, realpath, stat } from "node:fs/promises";
|
|
3
|
+
import { delimiter, isAbsolute, join, resolve } from "node:path";
|
|
4
|
+
import { systemWindowsNativeAuthority } from "../windows/WindowsNativeLoader.js";
|
|
4
5
|
import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js";
|
|
6
|
+
import { ZipArtifactReader } from "../artifacts/ZipArtifactReader.js";
|
|
7
|
+
import { execFileOutput, execFileOutputFailure, } from "../process/ExecFileOutput.js";
|
|
5
8
|
import { JADX_JAR_CONFIGURATION_REMEDIATION } from "./JadxRelease.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const JAVA_MODULE_LISTING_TIMEOUT_MS = 10_000;
|
|
10
|
+
const JAVA_MODULE_LISTING_MAX_OUTPUT_BYTES = 1024 * 1024;
|
|
11
|
+
// Bound ZIP metadata allocation during discovery. The audited 0.7.1 JAR's
|
|
12
|
+
// central directory occupies 2,294,350 bytes; class bodies are not read here.
|
|
13
|
+
const JAR_METADATA_READ_MAX_BYTES = 8 * 1024 * 1024;
|
|
14
|
+
class JadxConfigurationFailure extends Error {
|
|
15
|
+
code;
|
|
16
|
+
diagnostics;
|
|
17
|
+
constructor(code, message, diagnostics, options) {
|
|
18
|
+
super(message, options);
|
|
19
|
+
this.code = code;
|
|
20
|
+
this.diagnostics = diagnostics;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Inspect the same JAR and Java prerequisites that gate actual execution. */
|
|
24
|
+
export const inspectJadxAvailability = async (environment, signal) => {
|
|
25
|
+
try {
|
|
26
|
+
const configuration = await readJadxConfiguration(environment, signal);
|
|
27
|
+
return {
|
|
28
|
+
status: "available",
|
|
29
|
+
code: null,
|
|
30
|
+
reason: null,
|
|
31
|
+
diagnostics: {
|
|
32
|
+
configured: true,
|
|
33
|
+
java_executable: configuration.java,
|
|
34
|
+
jdk_compiler: true,
|
|
35
|
+
jar_path: configuration.jar,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (cause) {
|
|
40
|
+
if (signal?.aborted === true)
|
|
41
|
+
throw cause;
|
|
42
|
+
if (cause instanceof JadxConfigurationFailure)
|
|
43
|
+
return {
|
|
44
|
+
status: "unavailable",
|
|
45
|
+
code: cause.code,
|
|
46
|
+
reason: cause.message,
|
|
47
|
+
diagnostics: cause.diagnostics,
|
|
48
|
+
};
|
|
49
|
+
throw cause;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
/** Resolve caller-selected tools and preserve the same prerequisite diagnostics. */
|
|
53
|
+
export const resolveJadxConfiguration = async (environment, operation, signal) => {
|
|
54
|
+
try {
|
|
55
|
+
return await readJadxConfiguration(environment, signal);
|
|
56
|
+
}
|
|
57
|
+
catch (cause) {
|
|
58
|
+
if (signal?.aborted === true)
|
|
59
|
+
throw cause;
|
|
60
|
+
if (!(cause instanceof JadxConfigurationFailure))
|
|
61
|
+
throw cause;
|
|
62
|
+
const output = cause.diagnostics;
|
|
63
|
+
throw new AnalysisCapabilityUnavailableError("jadx", operation, cause.message, {
|
|
64
|
+
cause,
|
|
65
|
+
userMessage: cause.message,
|
|
66
|
+
...(typeof output.stdout === "string" &&
|
|
67
|
+
typeof output.stderr === "string"
|
|
68
|
+
? {
|
|
69
|
+
capturedOutput: {
|
|
70
|
+
stdout: output.stdout,
|
|
71
|
+
stderr: output.stderr,
|
|
72
|
+
truncated: output.output_truncated === true,
|
|
73
|
+
},
|
|
74
|
+
}
|
|
75
|
+
: {}),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const readJadxConfiguration = async (environment, signal) => {
|
|
80
|
+
requireSupportedHost();
|
|
81
|
+
const jar = await resolveJar(environment);
|
|
82
|
+
const java = await resolveJava(environment, signal);
|
|
83
|
+
await requireJavaHomeExecutable(environment.JAVA_HOME, java);
|
|
84
|
+
const jvmArguments = resolveJvmArguments(environment);
|
|
85
|
+
await inspectJavaRuntime(java, environment, signal);
|
|
86
|
+
await requireEngineArchive(jar, signal);
|
|
87
|
+
return { jar, java, jvmArguments };
|
|
88
|
+
};
|
|
89
|
+
const requireEngineArchive = async (jar, signal) => {
|
|
90
|
+
// These classes are consumed directly by ReaJadxBridge.java. This checks the
|
|
91
|
+
// classpath inventory without loading engine code or starting a JADX session.
|
|
92
|
+
const missing = new Set([
|
|
93
|
+
"com/atxx/jhmcp/JadxSession.class",
|
|
94
|
+
"com/atxx/jhmcp/SessionHolder.class",
|
|
95
|
+
"jadx/api/JadxDecompiler.class",
|
|
96
|
+
"com/google/gson/Gson.class",
|
|
97
|
+
"io/modelcontextprotocol/kotlin/sdk/server/Server.class",
|
|
98
|
+
]);
|
|
99
|
+
const reader = new ZipArtifactReader(jar, "zip", JAR_METADATA_READ_MAX_BYTES);
|
|
100
|
+
try {
|
|
101
|
+
for await (const entry of reader.entries(signal)) {
|
|
102
|
+
if (entry.kind === "file" && !entry.encrypted)
|
|
103
|
+
missing.delete(entry.path);
|
|
104
|
+
if (missing.size === 0)
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (cause) {
|
|
109
|
+
if (signal?.aborted === true)
|
|
110
|
+
throw cause;
|
|
111
|
+
const reason = cause instanceof Error ? cause.message : String(cause);
|
|
112
|
+
throw configurationFailure("version_unresolved", `Cannot inspect REA_JADX_MCP_JAR ${jar} as a Java archive: ${reason}. ${JADX_JAR_CONFIGURATION_REMEDIATION}`, {
|
|
113
|
+
jar_path: jar,
|
|
114
|
+
phase: "jar-inspection",
|
|
115
|
+
archive_error: reason,
|
|
116
|
+
maximum_metadata_read_bytes: JAR_METADATA_READ_MAX_BYTES,
|
|
117
|
+
}, cause);
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
await reader.close();
|
|
121
|
+
}
|
|
122
|
+
throw configurationFailure("unsupported_version", `REA_JADX_MCP_JAR ${jar} does not contain the required metadata bridge classes: ${[...missing].join(", ")}. ${JADX_JAR_CONFIGURATION_REMEDIATION}`, { jar_path: jar, phase: "jar-inspection", missing_classes: [...missing] });
|
|
123
|
+
};
|
|
124
|
+
const requireSupportedHost = () => {
|
|
125
|
+
if (process.platform === "linux" || process.platform === "darwin")
|
|
126
|
+
return;
|
|
127
|
+
if (process.platform === "win32" && process.arch === "x64") {
|
|
128
|
+
const loaded = systemWindowsNativeAuthority();
|
|
129
|
+
if (loaded.available && loaded.authority.inspection.protocolStdin === true)
|
|
130
|
+
return;
|
|
131
|
+
throw configurationFailure("runtime_missing", loaded.available
|
|
132
|
+
? "The bundled Windows native artifact lacks owned protocol stdin; use a matching current Windows x64 REA package."
|
|
133
|
+
: loaded.reason, {
|
|
134
|
+
platform: process.platform,
|
|
135
|
+
architecture: process.arch,
|
|
136
|
+
phase: "process-ownership",
|
|
137
|
+
owned_protocol_stdin: false,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
throw configurationFailure("unsupported_host", `Android JADX subprocess ownership is unsupported on ${process.platform}/${process.arch}; use Linux, macOS, or Windows x64 with its bundled native controls.`, { platform: process.platform });
|
|
141
|
+
};
|
|
142
|
+
const resolveJar = async (environment) => {
|
|
11
143
|
const jar = environment.REA_JADX_MCP_JAR;
|
|
12
|
-
if (environment.JAVA_HOME !== undefined && !isAbsolute(environment.JAVA_HOME))
|
|
13
|
-
throw unavailable("JAVA_HOME must select an existing JDK by absolute path; omit it to use java on PATH.");
|
|
14
144
|
if (jar === undefined || !isAbsolute(jar))
|
|
15
|
-
throw
|
|
16
|
-
const java = environment.JAVA_HOME === undefined
|
|
17
|
-
? "java"
|
|
18
|
-
: join(environment.JAVA_HOME, "bin", "java");
|
|
145
|
+
throw configurationFailure("not_configured", JADX_JAR_CONFIGURATION_REMEDIATION, { jar_configured: false });
|
|
19
146
|
try {
|
|
20
147
|
await access(jar, constants.R_OK);
|
|
21
148
|
if (!(await stat(jar)).isFile())
|
|
22
|
-
throw
|
|
149
|
+
throw configurationFailure("executable_missing", `REA_JADX_MCP_JAR is not a regular file: ${jar}`, { jar_path: jar });
|
|
150
|
+
return await realpath(jar);
|
|
23
151
|
}
|
|
24
152
|
catch (cause) {
|
|
25
|
-
if (cause instanceof
|
|
153
|
+
if (cause instanceof JadxConfigurationFailure)
|
|
26
154
|
throw cause;
|
|
27
|
-
throw
|
|
155
|
+
throw configurationFailure("executable_missing", `Cannot read REA_JADX_MCP_JAR ${jar}: ${cause instanceof Error ? cause.message : String(cause)}`, { jar_path: jar }, cause);
|
|
28
156
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
157
|
+
};
|
|
158
|
+
const resolveJava = async (environment, signal) => {
|
|
159
|
+
const executable = process.platform === "win32" ? "java.exe" : "java";
|
|
160
|
+
if (environment.JAVA_HOME === undefined) {
|
|
161
|
+
if (process.platform !== "win32")
|
|
162
|
+
return executable;
|
|
163
|
+
const path = Object.entries(environment).find(([key]) => key.toLowerCase() === "path")?.[1] ?? "";
|
|
164
|
+
for (const directory of [process.cwd(), ...path.split(delimiter)]) {
|
|
165
|
+
signal?.throwIfAborted();
|
|
166
|
+
// Windows PATH commonly quotes individual entries containing spaces.
|
|
167
|
+
const selected = directory.startsWith('"') && directory.endsWith('"')
|
|
168
|
+
? directory.slice(1, -1)
|
|
169
|
+
: directory;
|
|
170
|
+
const candidate = resolve(selected, executable);
|
|
171
|
+
try {
|
|
172
|
+
await access(candidate, constants.R_OK | constants.X_OK);
|
|
173
|
+
if ((await stat(candidate)).isFile())
|
|
174
|
+
return await realpath(candidate);
|
|
175
|
+
}
|
|
176
|
+
catch (cause) {
|
|
177
|
+
if (typeof cause === "object" &&
|
|
178
|
+
cause !== null &&
|
|
179
|
+
"code" in cause &&
|
|
180
|
+
(cause.code === "ENOENT" || cause.code === "ENOTDIR"))
|
|
181
|
+
continue;
|
|
182
|
+
throw configurationFailure("runtime_missing", `Cannot inspect selected Java executable ${candidate}: ${errorText(cause)}`, { java_executable: candidate }, cause);
|
|
183
|
+
}
|
|
39
184
|
}
|
|
185
|
+
throw configurationFailure("runtime_missing", "Cannot find java.exe on the selected Windows PATH. Select a full JDK with JAVA_HOME or PATH, then verify it with java --list-modules. REA does not install Java.", { java_executable: executable });
|
|
40
186
|
}
|
|
41
|
-
|
|
187
|
+
if (isAbsolute(environment.JAVA_HOME))
|
|
188
|
+
return join(environment.JAVA_HOME, "bin", executable);
|
|
189
|
+
throw configurationFailure("open_options_invalid", "JAVA_HOME must select an existing JDK by absolute path; omit it to use java on PATH.", { java_home: environment.JAVA_HOME });
|
|
190
|
+
};
|
|
191
|
+
const requireJavaHomeExecutable = async (javaHome, java) => {
|
|
192
|
+
if (javaHome === undefined)
|
|
193
|
+
return;
|
|
194
|
+
try {
|
|
195
|
+
await access(java, constants.R_OK | constants.X_OK);
|
|
196
|
+
if ((await stat(java)).isFile())
|
|
197
|
+
return;
|
|
198
|
+
throw configurationFailure("runtime_missing", `JAVA_HOME java is not a regular file: ${java}`, { java_executable: java });
|
|
199
|
+
}
|
|
200
|
+
catch (cause) {
|
|
201
|
+
if (cause instanceof JadxConfigurationFailure)
|
|
202
|
+
throw cause;
|
|
203
|
+
throw configurationFailure("runtime_missing", `Cannot execute JAVA_HOME java ${java}: ${cause instanceof Error ? cause.message : String(cause)}`, { java_executable: java }, cause);
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
const resolveJvmArguments = (environment) => {
|
|
207
|
+
const result = [];
|
|
42
208
|
for (const [name, prefix, suffix] of [
|
|
43
209
|
["REA_JADX_HEAP_MIB", "-Xmx", "m"],
|
|
44
210
|
["REA_JADX_ACTIVE_PROCESSOR_COUNT", "-XX:ActiveProcessorCount=", ""],
|
|
@@ -47,11 +213,88 @@ export const resolveJadxConfiguration = async (environment, operation) => {
|
|
|
47
213
|
if (value === undefined)
|
|
48
214
|
continue;
|
|
49
215
|
if (!/^[1-9]\d*$/u.test(value) || !Number.isSafeInteger(Number(value)))
|
|
50
|
-
throw
|
|
216
|
+
throw configurationFailure("open_options_invalid", `${name} must be a positive safe integer; received ${value}.`, { setting: name, value });
|
|
51
217
|
if (name === "REA_JADX_ACTIVE_PROCESSOR_COUNT" &&
|
|
52
218
|
Number(value) > 2_147_483_647)
|
|
53
|
-
throw
|
|
54
|
-
|
|
219
|
+
throw configurationFailure("open_options_invalid", `${name} exceeds the JVM's signed 32-bit processor-count range.`, { setting: name, value });
|
|
220
|
+
result.push(`${prefix}${value}${suffix}`);
|
|
221
|
+
}
|
|
222
|
+
return result;
|
|
223
|
+
};
|
|
224
|
+
const inspectJavaRuntime = async (java, environment, signal) => {
|
|
225
|
+
let stdout;
|
|
226
|
+
let stderr;
|
|
227
|
+
try {
|
|
228
|
+
({ stdout, stderr } = await execFileOutput(java, ["--list-modules"], {
|
|
229
|
+
env: { ...environment },
|
|
230
|
+
timeout: JAVA_MODULE_LISTING_TIMEOUT_MS,
|
|
231
|
+
maxBuffer: JAVA_MODULE_LISTING_MAX_OUTPUT_BYTES,
|
|
232
|
+
...(signal === undefined ? {} : { signal }),
|
|
233
|
+
}));
|
|
234
|
+
}
|
|
235
|
+
catch (cause) {
|
|
236
|
+
if (signal?.aborted === true)
|
|
237
|
+
throw cause;
|
|
238
|
+
const output = execFileOutputFailure(cause);
|
|
239
|
+
if (output === undefined)
|
|
240
|
+
throw cause;
|
|
241
|
+
const diagnostics = {
|
|
242
|
+
java_executable: java,
|
|
243
|
+
phase: "module-inspection",
|
|
244
|
+
exit_code: typeof output.code === "number" ? output.code : null,
|
|
245
|
+
process_error_code: typeof output.code === "string" ? output.code : null,
|
|
246
|
+
signal: output.signal,
|
|
247
|
+
killed: output.killed,
|
|
248
|
+
stdout: output.stdout,
|
|
249
|
+
stderr: output.stderr,
|
|
250
|
+
output_truncated: output.outputTruncated,
|
|
251
|
+
};
|
|
252
|
+
if (output.outputTruncated)
|
|
253
|
+
throw configurationFailure("version_unresolved", `The selected Java launcher ${java} exceeded the ${JAVA_MODULE_LISTING_MAX_OUTPUT_BYTES / (1024 * 1024)} MiB output budget while listing modules. REA retained partial output but could not establish compiler or version availability. Inspect the selected launcher for verbose or unbounded output; ` +
|
|
254
|
+
"java --list-modules should return a concise module listing.", {
|
|
255
|
+
...diagnostics,
|
|
256
|
+
failure: "output_limit",
|
|
257
|
+
output_limit_bytes: JAVA_MODULE_LISTING_MAX_OUTPUT_BYTES,
|
|
258
|
+
}, cause);
|
|
259
|
+
if (output.killed)
|
|
260
|
+
throw configurationFailure("version_unresolved", `The selected Java launcher ${java} was terminated or did not finish the module-listing probe within ${JAVA_MODULE_LISTING_TIMEOUT_MS / 1000} seconds. Inspect the launcher and its startup responsiveness, then verify it returns compiler and version modules with java --list-modules.`, {
|
|
261
|
+
...diagnostics,
|
|
262
|
+
failure: "probe_terminated",
|
|
263
|
+
deadline_ms: JAVA_MODULE_LISTING_TIMEOUT_MS,
|
|
264
|
+
}, cause);
|
|
265
|
+
throw configurationFailure("runtime_missing", `Cannot inspect selected Java runtime ${java}: ${output.stderr.trim() || errorText(cause)}. Select a full JDK including jdk.compiler via JAVA_HOME or PATH; verify it with java --list-modules.`, diagnostics, cause);
|
|
55
266
|
}
|
|
56
|
-
|
|
267
|
+
const compiler = /^jdk\.compiler(?:@|$)/mu.test(stdout);
|
|
268
|
+
if (!compiler)
|
|
269
|
+
throw configurationFailure("runtime_missing", `Selected Java runtime ${java} does not provide jdk.compiler. Select a full JDK including jdk.compiler via JAVA_HOME or PATH; verify it with java --list-modules. A JRE cannot compile REA's source bridge.`, {
|
|
270
|
+
java_executable: java,
|
|
271
|
+
phase: "module-inspection",
|
|
272
|
+
jdk_compiler: false,
|
|
273
|
+
stdout,
|
|
274
|
+
stderr,
|
|
275
|
+
output_truncated: false,
|
|
276
|
+
});
|
|
277
|
+
const major = /^java\.base@(\d+)(?:[.+_-]|$)/mu.exec(stdout)?.[1];
|
|
278
|
+
if (major === undefined)
|
|
279
|
+
throw configurationFailure("version_unresolved", `The selected Java launcher ${java} did not report a parseable java.base version in its module listing. Inspect the launcher output and verify it with java --list-modules.`, {
|
|
280
|
+
java_executable: java,
|
|
281
|
+
phase: "module-inspection",
|
|
282
|
+
jdk_compiler: true,
|
|
283
|
+
java_major: null,
|
|
284
|
+
stdout,
|
|
285
|
+
stderr,
|
|
286
|
+
output_truncated: false,
|
|
287
|
+
});
|
|
288
|
+
if (Number(major) < 17)
|
|
289
|
+
throw configurationFailure("unsupported_version", `Selected Java runtime ${java} must be JDK 17 or newer and include jdk.compiler; verify it with java --list-modules.`, {
|
|
290
|
+
java_executable: java,
|
|
291
|
+
phase: "module-inspection",
|
|
292
|
+
jdk_compiler: true,
|
|
293
|
+
java_major: major ?? null,
|
|
294
|
+
stdout,
|
|
295
|
+
stderr,
|
|
296
|
+
output_truncated: false,
|
|
297
|
+
});
|
|
57
298
|
};
|
|
299
|
+
const configurationFailure = (code, message, diagnostics, cause) => new JadxConfigurationFailure(code, message, diagnostics, cause === undefined ? undefined : { cause });
|
|
300
|
+
const errorText = (cause) => cause instanceof Error ? cause.message : String(cause);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { deserializeMessage, serializeMessage, } from "@modelcontextprotocol/client";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { finished } from "node:stream/promises";
|
|
3
4
|
import { ProviderProcessSupervisor, spawnOwnedProviderProcess, } from "../process/ProviderProcess.js";
|
|
4
5
|
import { cleanupOwnedProcessGroup } from "../process/ProcessOwnership.js";
|
|
5
6
|
import { ProviderCleanupError } from "../domain/providerCleanupError.js";
|
|
@@ -71,13 +72,20 @@ export class JadxMcpTransport {
|
|
|
71
72
|
}
|
|
72
73
|
/** Verifies owned process exit before declaring the transport closed. */
|
|
73
74
|
close() {
|
|
74
|
-
this.#closePromise ??= this.#stop()
|
|
75
|
+
this.#closePromise ??= this.#stop().catch((cause) => {
|
|
76
|
+
this.#closePromise = undefined;
|
|
77
|
+
throw cause;
|
|
78
|
+
});
|
|
75
79
|
return this.#closePromise;
|
|
76
80
|
}
|
|
77
81
|
/** Captured provider stderr without persisting inherited environment values. */
|
|
78
82
|
diagnostics() {
|
|
79
83
|
return this.#supervisor?.snapshot().stderr.text ?? "";
|
|
80
84
|
}
|
|
85
|
+
/** Whether the retained startup/operation diagnostics lost bytes. */
|
|
86
|
+
diagnosticsTruncated() {
|
|
87
|
+
return this.#supervisor?.snapshot().diagnosticTruncated ?? false;
|
|
88
|
+
}
|
|
81
89
|
/** Preserve the failed protocol/resource constraint after the SDK closes requests. */
|
|
82
90
|
failureReason() {
|
|
83
91
|
return this.#failure;
|
|
@@ -98,8 +106,16 @@ export class JadxMcpTransport {
|
|
|
98
106
|
process?.stderr?.off("data", this.#countStderr);
|
|
99
107
|
process?.off("error", this.#error);
|
|
100
108
|
process?.off("exit", this.#exit);
|
|
101
|
-
process?.stdin
|
|
109
|
+
const input = process?.stdin;
|
|
110
|
+
// A job termination can complete an in-flight pipe write asynchronously.
|
|
111
|
+
// Observe its errors until the owned Writable has finished closing.
|
|
112
|
+
const inputClosed = input === undefined || input === null
|
|
113
|
+
? undefined
|
|
114
|
+
: finished(input, { readable: false, cleanup: true }).catch(() => undefined);
|
|
102
115
|
const stopped = await this.#supervisor?.stop();
|
|
116
|
+
input?.destroy();
|
|
117
|
+
await inputClosed;
|
|
118
|
+
input?.off("error", this.#error);
|
|
103
119
|
this.onclose?.();
|
|
104
120
|
if (stopped?.status === "incomplete")
|
|
105
121
|
throw new ProviderCleanupError("jadx", [this.runId], {
|
|
@@ -2,6 +2,12 @@ import { z } from "zod";
|
|
|
2
2
|
import { AnalysisOutputError } from "../domain/analysisErrorCore.js";
|
|
3
3
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
4
4
|
const count = z.number().int().nonnegative();
|
|
5
|
+
/** Selector failures authored by REA's bridge, separate from arbitrary engine errors. */
|
|
6
|
+
export const jadxInputFailureSchema = z.strictObject({
|
|
7
|
+
kind: z.literal("invalid-input"),
|
|
8
|
+
field: z.enum(["class_name", "method_name", "overload_index"]),
|
|
9
|
+
message: z.string().min(1),
|
|
10
|
+
});
|
|
5
11
|
/** Values observed inside the exact JVM producing the analysis. */
|
|
6
12
|
export const jadxRuntimeSchema = z.object({
|
|
7
13
|
engine_reported_version: z.string().min(1),
|