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
|
@@ -102,7 +102,7 @@ export const readFirmwareReport = async (path, operation) => {
|
|
|
102
102
|
if (bytes === undefined)
|
|
103
103
|
throw new AnalysisOutputError(operation, `Report exceeded ${FIRMWARE_LIMITS.reportBytes} bytes`);
|
|
104
104
|
try {
|
|
105
|
-
const value = JSON.parse(
|
|
105
|
+
const value = JSON.parse(new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(bytes));
|
|
106
106
|
return value;
|
|
107
107
|
}
|
|
108
108
|
catch (cause) {
|
|
@@ -3,7 +3,7 @@ import { z } from "zod";
|
|
|
3
3
|
import { createAnalysisExecution, } from "../application/AnalysisProvider.js";
|
|
4
4
|
import { firmwareResultSchemas, } from "../domain/firmware/firmwareAnalysis.js";
|
|
5
5
|
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
|
6
|
-
import { AnalysisCancelledError,
|
|
6
|
+
import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
|
|
7
7
|
import { ProviderAdapterError } from "../domain/providerAdapterError.js";
|
|
8
8
|
import { ProviderCleanupError } from "../domain/providerCleanupError.js";
|
|
9
9
|
import { err, ok } from "../domain/result.js";
|
|
@@ -11,7 +11,7 @@ import { PrivateRuntimeRoot } from "../process/PrivateRuntimeRoot.js";
|
|
|
11
11
|
import { publishFirmwareExtraction } from "./FirmwarePublication.js";
|
|
12
12
|
import { FIRMWARE_LIMITS, BINWALK_PROVIDER_IDENTITY, UNBLOB_PROVIDER_IDENTITY, } from "./FirmwareRelease.js";
|
|
13
13
|
import { admitFirmwareVersion } from "./FirmwareVersion.js";
|
|
14
|
-
import { resolveFirmwareCommand, runFirmwareCommand, readFirmwareCommandReport, } from "./FirmwareCommand.js";
|
|
14
|
+
import { firmwareToolUnavailable, resolveFirmwareCommand, runFirmwareCommand, readFirmwareCommandReport, } from "./FirmwareCommand.js";
|
|
15
15
|
import { inventoryFirmwareOutput, snapshotFirmware } from "./FirmwareFiles.js";
|
|
16
16
|
import { normalizeBinwalkReport, normalizeUnblobReport, } from "./FirmwareReports.js";
|
|
17
17
|
const waitForPredecessor = (predecessor, operation, signal) => new Promise((resolve, reject) => {
|
|
@@ -96,10 +96,10 @@ export class FirmwareProvider {
|
|
|
96
96
|
const versionRun = await run(["--version"]);
|
|
97
97
|
const version = versionRun.stdout.text.trim();
|
|
98
98
|
if (versionRun.stdout.bytes > 1024)
|
|
99
|
-
throw
|
|
99
|
+
throw firmwareToolUnavailable(engineName, request.operation, `Tool version banner is ${String(versionRun.stdout.bytes)} bytes; expected a short ${engineName} version line.`);
|
|
100
100
|
const admitted = admitFirmwareVersion(engineName, version);
|
|
101
101
|
if (admitted.status === "unsupported" || admitted.status === "unresolved")
|
|
102
|
-
throw
|
|
102
|
+
throw firmwareToolUnavailable(engineName, request.operation, admitted.message);
|
|
103
103
|
const engine = {
|
|
104
104
|
name: engineName,
|
|
105
105
|
version: admitted.version,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/** Generated from package.json and package-lock.json; do not edit. */
|
|
2
2
|
export const PACKAGE_METADATA = {
|
|
3
3
|
name: "rea-agents",
|
|
4
|
-
version: "6.
|
|
4
|
+
version: "6.2.0", // x-release-please-version
|
|
5
5
|
serverSdkVersion: "2.3.1",
|
|
6
6
|
clientSdkVersion: "2.3.1",
|
|
7
7
|
coreSdkVersion: "2.3.1",
|
|
8
|
-
skillVersion: "
|
|
8
|
+
skillVersion: "34",
|
|
9
9
|
};
|
|
@@ -8,7 +8,7 @@ export const resolveGhidraAnalysisProfile = (target, identity, installation, sig
|
|
|
8
8
|
if (signal?.aborted === true)
|
|
9
9
|
return Promise.resolve(err(new AnalysisCancelledError("open_binary")));
|
|
10
10
|
if (target.kind !== "executable")
|
|
11
|
-
return Promise.resolve(ok({ profile: null
|
|
11
|
+
return Promise.resolve(ok({ profile: null }));
|
|
12
12
|
if (installation.status === "unavailable")
|
|
13
13
|
return Promise.resolve(err(new ProviderAdapterError(identity.id, "resolve_analysis_profile")));
|
|
14
14
|
const provider = { ...identity, version: installation.providerVersion };
|
|
@@ -27,6 +27,12 @@ export const resolveGhidraAnalysisProfile = (target, identity, installation, sig
|
|
|
27
27
|
annotation_policy: "atomic-function-entry-metadata-v1",
|
|
28
28
|
load_image_observations: "source-mappings-entry-context-v2",
|
|
29
29
|
function_body_evidence: "complete-inclusive-ranges-v1",
|
|
30
|
+
function_references: "complete-body-and-entry-reference-manager-v2",
|
|
31
|
+
location_resolution: "explicit-address-exact-entry-symbol-first-v3",
|
|
32
|
+
instruction_flow_evidence: "decoded-return-pcode-v1",
|
|
33
|
+
process_launch: installation.platform === "win32"
|
|
34
|
+
? "official-headless-script-v1"
|
|
35
|
+
: "inspected-jvm-launch-support-v1",
|
|
30
36
|
...(dos
|
|
31
37
|
? {
|
|
32
38
|
load_image_evidence: dosCom
|
|
@@ -63,9 +69,5 @@ export const resolveGhidraAnalysisProfile = (target, identity, installation, sig
|
|
|
63
69
|
: {}),
|
|
64
70
|
analyzer_preset: "ghidra-default",
|
|
65
71
|
}),
|
|
66
|
-
compatibility: {
|
|
67
|
-
languageId: dos ? "x86:LE:16:Real Mode" : "auto",
|
|
68
|
-
compilerSpecId: dos ? "default" : "auto",
|
|
69
|
-
},
|
|
70
72
|
}));
|
|
71
73
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { randomBytes, randomUUID } from "node:crypto";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
|
3
|
+
import { ProviderCleanupError } from "../domain/providerCleanupError.js";
|
|
4
4
|
import { err, ok } from "../domain/result.js";
|
|
5
5
|
import { silentLogger } from "../logger.js";
|
|
6
6
|
import { PendingOperations } from "../process/PendingOperations.js";
|
|
@@ -8,7 +8,7 @@ import { PrivateRuntimeRoot } from "../process/PrivateRuntimeRoot.js";
|
|
|
8
8
|
import { ProviderStartupDeadline } from "../process/ProviderDeadline.js";
|
|
9
9
|
import { ProviderRunLineage } from "../process/ProviderRunLineage.js";
|
|
10
10
|
import { ProviderProcessSupervisor, } from "../process/ProviderProcess.js";
|
|
11
|
-
import {
|
|
11
|
+
import { DEFAULT_GHIDRA_STARTUP_TIMEOUT_MS } from "../config/ghidraStartupTimeout.js";
|
|
12
12
|
import { createGhidraDiagnostics } from "./GhidraDiagnostics.js";
|
|
13
13
|
import { GhidraResponseBuffer } from "./GhidraResponseBuffer.js";
|
|
14
14
|
import { GhidraResponseRouter } from "./GhidraResponseRouter.js";
|
|
@@ -18,10 +18,12 @@ import { isGhidraShutdownAcknowledgement, parseGhidraSessionInfo, } from "./Ghid
|
|
|
18
18
|
import { createGhidraTargetSnapshot } from "./GhidraTargetSnapshot.js";
|
|
19
19
|
import { readFile } from "node:fs/promises";
|
|
20
20
|
import { connectGhidraSocket } from "./GhidraSocketConnection.js";
|
|
21
|
+
import { createGhidraEndpoint, } from "./GhidraTransport.js";
|
|
21
22
|
import { GhidraWire } from "./GhidraClientWire.js";
|
|
22
23
|
import { completeGhidraStartupHandshake } from "./GhidraClientStartup.js";
|
|
24
|
+
import { ghidraSessionRoot } from "./GhidraSessionRoot.js";
|
|
23
25
|
const SHUTDOWN_TIMEOUT_MS = 10_000;
|
|
24
|
-
const SESSION_ROOT =
|
|
26
|
+
const SESSION_ROOT = ghidraSessionRoot();
|
|
25
27
|
/** Owns an authenticated private Ghidra session with transport-bound mutation authority. */
|
|
26
28
|
export class GhidraClient {
|
|
27
29
|
#options;
|
|
@@ -32,6 +34,8 @@ export class GhidraClient {
|
|
|
32
34
|
#launch;
|
|
33
35
|
#process;
|
|
34
36
|
#runtimeRoot;
|
|
37
|
+
#socketRoot;
|
|
38
|
+
#endpointPath;
|
|
35
39
|
#snapshotPath;
|
|
36
40
|
#targetAdmission;
|
|
37
41
|
#token;
|
|
@@ -71,7 +75,7 @@ export class GhidraClient {
|
|
|
71
75
|
constructor(options) {
|
|
72
76
|
this.#options = {
|
|
73
77
|
...options,
|
|
74
|
-
startupTimeoutMs: options.startupTimeoutMs ??
|
|
78
|
+
startupTimeoutMs: options.startupTimeoutMs ?? DEFAULT_GHIDRA_STARTUP_TIMEOUT_MS,
|
|
75
79
|
platform: options.platform ?? process.platform,
|
|
76
80
|
transport: options.transport ?? "unix-socket",
|
|
77
81
|
};
|
|
@@ -89,9 +93,14 @@ export class GhidraClient {
|
|
|
89
93
|
/** Launch Ghidra once and require its exact post-analysis handshake. */
|
|
90
94
|
start(signal) {
|
|
91
95
|
if (this.#closePromise !== undefined)
|
|
92
|
-
return this.#closePromise.then(() => this.start(signal));
|
|
93
|
-
if (this.#startPromise !== undefined)
|
|
96
|
+
return this.#closePromise.then(() => this.start(signal), (cause) => err(new GhidraSessionError("process", "Ghidra cleanup remains incomplete", this.#diagnostics(), { cause, cleanupFailure: this.#cleanupError(cause) })));
|
|
97
|
+
if (this.#startPromise !== undefined) {
|
|
98
|
+
if (this.#startupController?.signal.aborted && !signal?.aborted)
|
|
99
|
+
return this.#startPromise.then((result) => result.ok || result.error.cleanupFailure !== undefined
|
|
100
|
+
? result
|
|
101
|
+
: this.start(signal));
|
|
94
102
|
return this.#startPromise;
|
|
103
|
+
}
|
|
95
104
|
const controller = new AbortController();
|
|
96
105
|
const onAbort = () => controller.abort(signal?.reason);
|
|
97
106
|
if (signal?.aborted === true)
|
|
@@ -148,8 +157,43 @@ export class GhidraClient {
|
|
|
148
157
|
}
|
|
149
158
|
}
|
|
150
159
|
/** Stop the owned process group and remove all project/runtime artifacts. */
|
|
151
|
-
close() {
|
|
152
|
-
|
|
160
|
+
async close() {
|
|
161
|
+
try {
|
|
162
|
+
await this.#requestClose(false);
|
|
163
|
+
return ok(null);
|
|
164
|
+
}
|
|
165
|
+
catch (cause) {
|
|
166
|
+
return err(this.#cleanupError(cause));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
#cleanupError(cause) {
|
|
170
|
+
if (cause instanceof AnalysisError && cause.cleanupIncomplete)
|
|
171
|
+
return cause;
|
|
172
|
+
return new ProviderCleanupError("ghidra", [
|
|
173
|
+
...(this.#process === undefined ? [] : ["ghidra-process"]),
|
|
174
|
+
...[this.#runtimeRoot, this.#socketRoot].flatMap((root) => root === undefined ? [] : [root.path]),
|
|
175
|
+
], {
|
|
176
|
+
reason: cause instanceof Error ? cause.message : String(cause),
|
|
177
|
+
diagnostics: this.#diagnostics(),
|
|
178
|
+
}, { cause });
|
|
179
|
+
}
|
|
180
|
+
async #startupFailure(primary) {
|
|
181
|
+
try {
|
|
182
|
+
await this.#cleanup();
|
|
183
|
+
return err(primary);
|
|
184
|
+
}
|
|
185
|
+
catch (cause) {
|
|
186
|
+
return err(new GhidraSessionError(primary.kind, primary.message, primary.diagnostics, {
|
|
187
|
+
...(primary.cause === undefined ? {} : { cause: primary.cause }),
|
|
188
|
+
...(primary.timeoutMs === undefined
|
|
189
|
+
? {}
|
|
190
|
+
: { timeoutMs: primary.timeoutMs }),
|
|
191
|
+
...(primary.remoteCode === undefined
|
|
192
|
+
? {}
|
|
193
|
+
: { remoteCode: primary.remoteCode }),
|
|
194
|
+
cleanupFailure: this.#cleanupError(cause),
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
153
197
|
}
|
|
154
198
|
#requestClose(forceStop) {
|
|
155
199
|
const starting = this.#startPromise;
|
|
@@ -177,10 +221,16 @@ export class GhidraClient {
|
|
|
177
221
|
return err(this.#failure("cancelled", "Ghidra startup was cancelled"));
|
|
178
222
|
if (this.#socket !== undefined || this.#runtimeRoot !== undefined)
|
|
179
223
|
return err(this.#failure("protocol", "Ghidra client is already started"));
|
|
224
|
+
this.#processSnapshot = undefined;
|
|
180
225
|
const deadline = new ProviderStartupDeadline(this.#options.startupTimeoutMs, signal);
|
|
181
226
|
try {
|
|
182
227
|
return await this.#startWithin(deadline);
|
|
183
228
|
}
|
|
229
|
+
catch (cause) {
|
|
230
|
+
if (cause instanceof GhidraSessionError)
|
|
231
|
+
return err(cause);
|
|
232
|
+
throw cause;
|
|
233
|
+
}
|
|
184
234
|
finally {
|
|
185
235
|
deadline.dispose();
|
|
186
236
|
}
|
|
@@ -198,12 +248,17 @@ export class GhidraClient {
|
|
|
198
248
|
}
|
|
199
249
|
if (deadline.signal.aborted)
|
|
200
250
|
return this.#startupInterrupted(deadline);
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
251
|
+
let endpoint;
|
|
252
|
+
try {
|
|
253
|
+
const allocated = await createGhidraEndpoint(this.#runtimeRoot.path, this.#options.transport, this.#options.platform);
|
|
254
|
+
endpoint = allocated.endpoint;
|
|
255
|
+
this.#socketRoot = allocated.socketRoot;
|
|
256
|
+
this.#endpointPath = endpoint.path;
|
|
257
|
+
}
|
|
258
|
+
catch (cause) {
|
|
259
|
+
const failure = this.#failure("start", "Ghidra private endpoint allocation failed", cause);
|
|
260
|
+
return this.#startupFailure(failure);
|
|
261
|
+
}
|
|
207
262
|
try {
|
|
208
263
|
const snapshot = await createGhidraTargetSnapshot(this.#options.targetPath, this.#runtimeRoot.path, this.#options.targetSha256, { signal: deadline.signal, platform: this.#options.platform });
|
|
209
264
|
this.#snapshotPath = snapshot.path;
|
|
@@ -213,8 +268,7 @@ export class GhidraClient {
|
|
|
213
268
|
if (deadline.signal.aborted)
|
|
214
269
|
return this.#startupInterrupted(deadline);
|
|
215
270
|
const failure = this.#failure("start", "Ghidra target snapshot failed admission", cause);
|
|
216
|
-
|
|
217
|
-
return err(failure);
|
|
271
|
+
return this.#startupFailure(failure);
|
|
218
272
|
}
|
|
219
273
|
if (deadline.signal.aborted)
|
|
220
274
|
return this.#startupInterrupted(deadline);
|
|
@@ -241,8 +295,7 @@ export class GhidraClient {
|
|
|
241
295
|
: launched.error instanceof GhidraSessionError
|
|
242
296
|
? launched.error
|
|
243
297
|
: this.#failure("start", launched.error.message, launched.error);
|
|
244
|
-
|
|
245
|
-
return err(failure);
|
|
298
|
+
return this.#startupFailure(failure);
|
|
246
299
|
}
|
|
247
300
|
this.#launch = launched.value;
|
|
248
301
|
this.#process = new ProviderProcessSupervisor(launched.value, {
|
|
@@ -251,21 +304,19 @@ export class GhidraClient {
|
|
|
251
304
|
const connected = await this.#connect(endpoint, deadline);
|
|
252
305
|
if (!connected.ok) {
|
|
253
306
|
const failure = connected.error;
|
|
254
|
-
|
|
255
|
-
return err(failure);
|
|
307
|
+
return this.#startupFailure(failure);
|
|
256
308
|
}
|
|
257
309
|
const completed = await completeGhidraStartupHandshake({
|
|
258
310
|
deadline,
|
|
259
311
|
request: (method, params, requestOptions) => this.#wire.request(method, params, requestOptions),
|
|
260
312
|
parseSessionInfo: (value) => this.#parseSessionInfo(value),
|
|
261
|
-
cleanup: () => this.#cleanup(),
|
|
262
313
|
failure: this.#failure,
|
|
263
314
|
startupTimeoutMs: this.#options.startupTimeoutMs,
|
|
264
315
|
});
|
|
265
|
-
if (completed.ok)
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
316
|
+
if (!completed.ok)
|
|
317
|
+
return this.#startupFailure(completed.error);
|
|
318
|
+
await this.#lineage.observe(this.#launch);
|
|
319
|
+
this.#requestQueue.reopen();
|
|
269
320
|
return completed;
|
|
270
321
|
}
|
|
271
322
|
async #connect(endpoint, deadline) {
|
|
@@ -274,7 +325,7 @@ export class GhidraClient {
|
|
|
274
325
|
deadline,
|
|
275
326
|
failure: this.#failure,
|
|
276
327
|
isClosed: () => this.#closing,
|
|
277
|
-
processExited: () => this.#
|
|
328
|
+
processExited: () => this.#process?.snapshot().exitCode !== undefined,
|
|
278
329
|
startupTimeoutMs: this.#options.startupTimeoutMs,
|
|
279
330
|
handlers: {
|
|
280
331
|
data: this.#onSocketData,
|
|
@@ -364,17 +415,16 @@ export class GhidraClient {
|
|
|
364
415
|
reason: stopped.reason,
|
|
365
416
|
});
|
|
366
417
|
this.#logger.warn({ reason: stopped.reason }, "Ghidra process cleanup failed closed");
|
|
367
|
-
|
|
368
|
-
|
|
418
|
+
// Keep the supervisor and private files available for a later close.
|
|
419
|
+
// A still-live JVM can recreate files if its runtime is removed here.
|
|
420
|
+
throw this.#failure("process", `Ghidra process cleanup was incomplete: ${stopped.reason}`);
|
|
369
421
|
}
|
|
370
422
|
}
|
|
371
423
|
this.#lastDiagnostics = this.#diagnostics();
|
|
372
424
|
this.#process = undefined;
|
|
373
425
|
this.#launch = undefined;
|
|
374
|
-
const runtimeRoot = this.#runtimeRoot;
|
|
375
|
-
this.#runtimeRoot = undefined;
|
|
376
426
|
try {
|
|
377
|
-
await
|
|
427
|
+
await this.#removeRuntimeRoots();
|
|
378
428
|
}
|
|
379
429
|
catch (cause) {
|
|
380
430
|
if (forceStop)
|
|
@@ -383,6 +433,7 @@ export class GhidraClient {
|
|
|
383
433
|
throw cause;
|
|
384
434
|
}
|
|
385
435
|
this.#snapshotPath = undefined;
|
|
436
|
+
this.#endpointPath = undefined;
|
|
386
437
|
this.#token = undefined;
|
|
387
438
|
this.#runId = undefined;
|
|
388
439
|
this.#responseBuffer.reset();
|
|
@@ -393,6 +444,42 @@ export class GhidraClient {
|
|
|
393
444
|
this.#closing = false;
|
|
394
445
|
}
|
|
395
446
|
}
|
|
447
|
+
/**
|
|
448
|
+
* Remove the runtime and socket roots, keeping each one that could not be
|
|
449
|
+
* removed so a later close retries it rather than reporting success.
|
|
450
|
+
*/
|
|
451
|
+
async #removeRuntimeRoots() {
|
|
452
|
+
const roots = [
|
|
453
|
+
{
|
|
454
|
+
root: this.#runtimeRoot,
|
|
455
|
+
release: () => (this.#runtimeRoot = undefined),
|
|
456
|
+
},
|
|
457
|
+
{ root: this.#socketRoot, release: () => (this.#socketRoot = undefined) },
|
|
458
|
+
];
|
|
459
|
+
const leftovers = [];
|
|
460
|
+
let firstCause;
|
|
461
|
+
for (const { root, release } of roots) {
|
|
462
|
+
if (root === undefined)
|
|
463
|
+
continue;
|
|
464
|
+
try {
|
|
465
|
+
await root.close();
|
|
466
|
+
release();
|
|
467
|
+
}
|
|
468
|
+
catch (cause) {
|
|
469
|
+
firstCause ??= cause;
|
|
470
|
+
leftovers.push({
|
|
471
|
+
path: root.path,
|
|
472
|
+
reason: cause instanceof Error ? cause.message : String(cause),
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
if (leftovers.length > 0)
|
|
477
|
+
throw new ProviderCleanupError("ghidra", leftovers.map(({ path }) => path), {
|
|
478
|
+
reason: "Ghidra's private runtime directory could not be removed; it is retained for a later close.",
|
|
479
|
+
leftover_paths: leftovers.map(({ path }) => path),
|
|
480
|
+
failures: leftovers.map(({ path, reason }) => `${path}: ${reason}`),
|
|
481
|
+
}, { cause: firstCause });
|
|
482
|
+
}
|
|
396
483
|
#redactAuthentication(value) {
|
|
397
484
|
for (const token of this.#authenticationTokens)
|
|
398
485
|
value = value.replaceAll(token, "[REDACTED]");
|
|
@@ -430,8 +517,7 @@ export class GhidraClient {
|
|
|
430
517
|
}
|
|
431
518
|
async #startupInterrupted(deadline) {
|
|
432
519
|
const failure = this.#interruptionFailure(deadline);
|
|
433
|
-
|
|
434
|
-
return err(failure);
|
|
520
|
+
return this.#startupFailure(failure);
|
|
435
521
|
}
|
|
436
522
|
#interruptionFailure(deadline) {
|
|
437
523
|
return deadline.interruption === "cancelled"
|
|
@@ -455,6 +541,12 @@ export class GhidraClient {
|
|
|
455
541
|
...(this.#runtimeRoot === undefined
|
|
456
542
|
? {}
|
|
457
543
|
: { runtimeRoot: this.#runtimeRoot.path }),
|
|
544
|
+
...(this.#socketRoot === undefined
|
|
545
|
+
? {}
|
|
546
|
+
: { socketRoot: this.#socketRoot.path }),
|
|
547
|
+
...(this.#endpointPath === undefined
|
|
548
|
+
? {}
|
|
549
|
+
: { endpointPath: this.#endpointPath }),
|
|
458
550
|
...(this.#launch === undefined ? {} : { launch: this.#launch }),
|
|
459
551
|
...(snapshot === undefined ? {} : { snapshot }),
|
|
460
552
|
...(this.#token === undefined ? {} : { token: this.#token }),
|
|
@@ -9,7 +9,6 @@ export async function completeGhidraStartupHandshake(options) {
|
|
|
9
9
|
const failure = options.deadline.signal.aborted
|
|
10
10
|
? interruptionFailure(options)
|
|
11
11
|
: ping.error;
|
|
12
|
-
await options.cleanup();
|
|
13
12
|
return err(failure);
|
|
14
13
|
}
|
|
15
14
|
const parsed = options.parseSessionInfo(ping.value);
|
|
@@ -17,7 +16,6 @@ export async function completeGhidraStartupHandshake(options) {
|
|
|
17
16
|
const failure = parsed.ok
|
|
18
17
|
? options.failure("analysis_timeout", "Ghidra auto-analysis reached its per-file deadline")
|
|
19
18
|
: parsed.error;
|
|
20
|
-
await options.cleanup();
|
|
21
19
|
return err(failure);
|
|
22
20
|
}
|
|
23
21
|
return parsed;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
2
1
|
/** Preserve actionable runtime coordinates after cleanup and redact bearer data. */
|
|
3
2
|
export const createGhidraDiagnostics = (options) => {
|
|
4
3
|
if (options.runtimeRoot === undefined &&
|
|
@@ -20,12 +19,13 @@ export const createGhidraDiagnostics = (options) => {
|
|
|
20
19
|
...(options.runId === undefined ? {} : { run_id: options.runId }),
|
|
21
20
|
...(options.runtimeRoot === undefined
|
|
22
21
|
? {}
|
|
23
|
-
: {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
22
|
+
: { runtime_root: options.runtimeRoot }),
|
|
23
|
+
...(options.socketRoot === undefined
|
|
24
|
+
? {}
|
|
25
|
+
: { socket_root: options.socketRoot }),
|
|
26
|
+
...(options.endpointPath === undefined
|
|
27
|
+
? {}
|
|
28
|
+
: { endpoint_path: options.endpointPath }),
|
|
29
29
|
...(options.launch === undefined
|
|
30
30
|
? {}
|
|
31
31
|
: {
|
|
@@ -38,13 +38,14 @@ export const projectGhidraDoctorInspection = (inspection) => {
|
|
|
38
38
|
};
|
|
39
39
|
};
|
|
40
40
|
/** Inspect the process-configured BYO Ghidra installation for `rea doctor`. */
|
|
41
|
-
export const inspectSystemGhidraProvider = () => Promise.resolve(projectGhidraDoctorInspection(inspectGhidraInstallation({
|
|
42
|
-
|
|
41
|
+
export const inspectSystemGhidraProvider = (environment) => Promise.resolve(projectGhidraDoctorInspection(inspectGhidraInstallation({
|
|
42
|
+
environment,
|
|
43
|
+
...(environment.GHIDRA_INSTALL_DIR === undefined
|
|
43
44
|
? {}
|
|
44
|
-
: { installDir:
|
|
45
|
-
...(
|
|
45
|
+
: { installDir: environment.GHIDRA_INSTALL_DIR }),
|
|
46
|
+
...(environment.JAVA_HOME === undefined
|
|
46
47
|
? {}
|
|
47
|
-
: { javaHome:
|
|
48
|
+
: { javaHome: environment.JAVA_HOME }),
|
|
48
49
|
})));
|
|
49
50
|
const selectedChecks = (inspection) => {
|
|
50
51
|
const byName = new Map(inspection.checks.map((candidate) => [candidate.name, candidate]));
|
|
@@ -2,13 +2,14 @@ import { z } from "zod";
|
|
|
2
2
|
import { nativeFunctionAnnotationsInputSchema, nativeFunctionAnnotationsSchema, } from "../domain/native/nativeFunctionAnnotations.js";
|
|
3
3
|
import { nativeDataTypeSchema } from "../domain/native/nativeDataType.js";
|
|
4
4
|
import { nativeInstructionSchema, nativeCallTargetsSchema, } from "../domain/native/nativeInstruction.js";
|
|
5
|
-
import {
|
|
5
|
+
import { AnalysisOutputError, } from "../domain/analysisErrorCore.js";
|
|
6
6
|
import { functionBodyEntryAgrees, functionInstructionWindowSchema, functionDossierSchema, } from "../domain/hopperValues.js";
|
|
7
7
|
import { jsonObjectSchema, jsonValueSchema, } from "../domain/jsonValue.js";
|
|
8
8
|
import { nativeApiBoundarySchema } from "../domain/native/nativeApiBoundary.js";
|
|
9
9
|
import { nativeValueFlowSchema } from "../domain/native/nativeValueFlow.js";
|
|
10
10
|
import { err, ok } from "../domain/result.js";
|
|
11
|
-
import {
|
|
11
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
12
|
+
import { ghidraIdentifierSchema, ghidraInputAddressSchema, ghidraCanonicalAddressSchema, ghidraFunctionClassificationSchema as classification, ghidraFunctionBodySchema as ghidraFunctionBody, ghidraProcedureIdentitySchema as procedureIdentity, } from "./GhidraInventoryValues.js";
|
|
12
13
|
/** Function analysis and annotation operations admitted by the Ghidra adapter. */
|
|
13
14
|
export const GHIDRA_FUNCTION_OPERATIONS = [
|
|
14
15
|
"annotate_native_function",
|
|
@@ -37,15 +38,15 @@ const inputSchemas = {
|
|
|
37
38
|
.object({
|
|
38
39
|
document,
|
|
39
40
|
type: z.string().min(1).nullable().default(null),
|
|
40
|
-
address:
|
|
41
|
+
address: ghidraInputAddressSchema.nullable().default(null),
|
|
41
42
|
})
|
|
42
43
|
.strict()
|
|
43
44
|
.refine((value) => (value.type === null) !== (value.address === null), "Supply exactly one of type or address"),
|
|
44
45
|
inspect_native_instruction: z
|
|
45
|
-
.object({ document, address:
|
|
46
|
+
.object({ document, address: ghidraInputAddressSchema })
|
|
46
47
|
.strict(),
|
|
47
48
|
resolve_native_call_targets: z
|
|
48
|
-
.object({ document, address:
|
|
49
|
+
.object({ document, address: ghidraInputAddressSchema })
|
|
49
50
|
.strict(),
|
|
50
51
|
analyze_function: z.object({ procedure }).strict(),
|
|
51
52
|
procedure_assembly: z.object(directProcedure).strict(),
|
|
@@ -60,14 +61,16 @@ const inputSchemas = {
|
|
|
60
61
|
direction: z.enum(["incoming", "outgoing"]).default("outgoing"),
|
|
61
62
|
})
|
|
62
63
|
.strict(),
|
|
63
|
-
xrefs: z.object({ document, address:
|
|
64
|
+
xrefs: z.object({ document, address: ghidraInputAddressSchema }).strict(),
|
|
64
65
|
};
|
|
65
66
|
/** Validate and default one function request before it crosses the socket. */
|
|
66
67
|
export const parseGhidraFunctionInput = (operation, value) => {
|
|
67
68
|
const parsed = inputSchemas[operation].safeParse(value);
|
|
68
69
|
return parsed.success
|
|
69
70
|
? ok(jsonObjectSchema.parse(Object.fromEntries(Object.entries(parsed.data).filter(([, value]) => value !== undefined))))
|
|
70
|
-
: err(
|
|
71
|
+
: err(analysisInputErrorFromIssues(operation, parsed.error.issues, value, {
|
|
72
|
+
cause: parsed.error,
|
|
73
|
+
}));
|
|
71
74
|
};
|
|
72
75
|
const localVariable = z
|
|
73
76
|
.object({
|
|
@@ -109,13 +112,11 @@ const procedureReferences = z
|
|
|
109
112
|
procedure: procedureIdentity,
|
|
110
113
|
direction: z.enum(["incoming", "outgoing"]),
|
|
111
114
|
references: z.array(referenceEdge),
|
|
112
|
-
reference_kinds_available: z.boolean()
|
|
113
|
-
unresolved_calls: z
|
|
114
|
-
.array(z.strictObject({
|
|
115
|
+
reference_kinds_available: z.boolean(),
|
|
116
|
+
unresolved_calls: z.array(z.strictObject({
|
|
115
117
|
address: ghidraCanonicalAddressSchema,
|
|
116
118
|
reason: z.string(),
|
|
117
|
-
}))
|
|
118
|
-
.default([]),
|
|
119
|
+
})),
|
|
119
120
|
})
|
|
120
121
|
.strict();
|
|
121
122
|
const procedureInfo = z
|