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
|
@@ -11,7 +11,7 @@ import { projectInputIssues } from "./domain/inputIssueProjection.js";
|
|
|
11
11
|
import { browserScenarioSchema } from "./domain/browserScenario.js";
|
|
12
12
|
const OPERATION = "capture_browser_scenario";
|
|
13
13
|
/** Register the one-shot controlled browser scenario command. */
|
|
14
|
-
export const registerBrowserScenarioCommands = (cli, logger) => {
|
|
14
|
+
export const registerBrowserScenarioCommands = (cli, logger, environment) => {
|
|
15
15
|
cli.command(CLI_COMMANDS.captureBrowserScenario, {
|
|
16
16
|
description: "Run one bounded Playwright browser scenario and return Evidence",
|
|
17
17
|
args: z.object({
|
|
@@ -26,7 +26,7 @@ export const registerBrowserScenarioCommands = (cli, logger) => {
|
|
|
26
26
|
const scenario = browserScenarioSchema.safeParse(resolveCliJsonPaths(input.value, [["browser", "executable_path"]]));
|
|
27
27
|
if (!scenario.success)
|
|
28
28
|
return cliError(new AnalysisInputError(OPERATION, { cause: scenario.error }, projectInputIssues(scenario.error.issues, input.value)));
|
|
29
|
-
const result = await captureBrowserScenario(createBrowserScenarioProvider(), scenario.data);
|
|
29
|
+
const result = await captureBrowserScenario(createBrowserScenarioProvider(environment), scenario.data);
|
|
30
30
|
return result.ok ? result.value : cliError(result.error);
|
|
31
31
|
}),
|
|
32
32
|
});
|
package/dist/cliCommandNames.js
CHANGED
|
@@ -41,6 +41,7 @@ export const CLI_COMMANDS = Object.freeze({
|
|
|
41
41
|
inspectManagedArtifact: "inspect-managed-artifact",
|
|
42
42
|
inspectRecordedCrash: "inspect-recorded-crash",
|
|
43
43
|
inspectBinaryLayout: "inspect-binary-layout",
|
|
44
|
+
inspectAnalysisView: "inspect-analysis-view",
|
|
44
45
|
inspectFirmwareRegions: "inspect-firmware-regions",
|
|
45
46
|
extractFirmware: "extract-firmware",
|
|
46
47
|
inspectAndroidPackage: "inspect-android-package",
|
|
@@ -139,7 +140,6 @@ export const MCP_TOOLS_WITHOUT_DEDICATED_CLI = Object.freeze([
|
|
|
139
140
|
"set_addresses_names",
|
|
140
141
|
"set_bookmark",
|
|
141
142
|
"set_comment",
|
|
142
|
-
"set_current_document",
|
|
143
143
|
"set_inline_comment",
|
|
144
144
|
"unset_bookmark",
|
|
145
145
|
"get_objc_classes",
|
package/dist/cliJsonInput.js
CHANGED
|
@@ -27,9 +27,9 @@ export const parseCliJsonInput = async (value, operation) => {
|
|
|
27
27
|
/**
|
|
28
28
|
* Resolve named string fields of CLI-supplied JSON against the operator
|
|
29
29
|
* working directory. Each entry is a key path from the document root; only
|
|
30
|
-
* fields holding strings are resolved, everything else passes through
|
|
31
|
-
* untouched
|
|
32
|
-
* resolve operator-relative values before validation.
|
|
30
|
+
* fields holding nonblank strings are resolved, everything else passes through
|
|
31
|
+
* untouched so shared schemas can reject blank paths. Shared MCP contracts reject
|
|
32
|
+
* relative paths, so CLI workflows resolve operator-relative values before validation.
|
|
33
33
|
*/
|
|
34
34
|
export const resolveCliJsonPaths = (value, paths) => {
|
|
35
35
|
let resolved = value;
|
|
@@ -45,7 +45,12 @@ const resolveJsonPath = (value, keys) => {
|
|
|
45
45
|
if (key !== head)
|
|
46
46
|
return [key, entry];
|
|
47
47
|
if (tail.length === 0)
|
|
48
|
-
return [
|
|
48
|
+
return [
|
|
49
|
+
key,
|
|
50
|
+
typeof entry === "string" && entry.trim().length > 0
|
|
51
|
+
? resolve(entry)
|
|
52
|
+
: entry,
|
|
53
|
+
];
|
|
49
54
|
return [key, resolveJsonPath(entry, tail)];
|
|
50
55
|
});
|
|
51
56
|
return Object.fromEntries(entries);
|
|
@@ -90,8 +95,22 @@ const jsonFileError = (path, operation, reason, cause) => ({
|
|
|
90
95
|
error: "Application workflow failed",
|
|
91
96
|
...projectAnalysisError(new AnalysisInputError(operation, cause === undefined ? undefined : { cause }, reason === "invalid-json"
|
|
92
97
|
? [{ path: [], reason: "invalid_format", expected: "JSON" }]
|
|
93
|
-
: [])),
|
|
98
|
+
: [readFailureIssue(path, cause)])),
|
|
94
99
|
...(path === undefined ? {} : { input_path: path }),
|
|
95
100
|
input_reason: reason,
|
|
96
101
|
},
|
|
97
102
|
});
|
|
103
|
+
/** Name the system error so the caller can tell a typo from a permission denial. */
|
|
104
|
+
const readFailureIssue = (path, cause) => {
|
|
105
|
+
const code = typeof cause === "object" &&
|
|
106
|
+
cause !== null &&
|
|
107
|
+
"code" in cause &&
|
|
108
|
+
typeof cause.code === "string"
|
|
109
|
+
? ` (${cause.code})`
|
|
110
|
+
: "";
|
|
111
|
+
return {
|
|
112
|
+
path: [],
|
|
113
|
+
reason: "invalid_value",
|
|
114
|
+
message: `The JSON input file could not be read${code}: ${path ?? ""}`,
|
|
115
|
+
};
|
|
116
|
+
};
|
package/dist/cliOutput.js
CHANGED
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
import { safeParseJson } from "./domain/safeJson.js";
|
|
2
|
-
const SAFE_VALIDATION_MESSAGE = "REA could not read the command arguments. Run `rea --help`, correct the arguments, then try again.";
|
|
3
1
|
const UNSUPPORTED_OUTPUT_COMBINATION_MESSAGE = "Token windows cannot preserve structured output. Remove --token-limit/--token-offset and use --filter-output or command pagination.";
|
|
4
2
|
const INCUR_OUTPUT_FORMATS = new Set(["toon", "json", "yaml", "md", "jsonl"]);
|
|
5
|
-
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6
|
-
const validationError = (value) => {
|
|
7
|
-
if (value.code === "VALIDATION_ERROR")
|
|
8
|
-
return value;
|
|
9
|
-
if (value.ok === false && isRecord(value.error))
|
|
10
|
-
return value.error.code === "VALIDATION_ERROR" ? value.error : undefined;
|
|
11
|
-
return undefined;
|
|
12
|
-
};
|
|
13
3
|
/** Read effective Incur output controls at the executable boundary. */
|
|
14
4
|
export const parseCliOutputArguments = (arguments_) => {
|
|
15
5
|
let format = "toon";
|
|
@@ -105,31 +95,3 @@ export const renderCliOutputArgumentError = (error) => {
|
|
|
105
95
|
return `ok: false\nerror:\n code: ${error.code}\n message: ${JSON.stringify(error.message)}\n`;
|
|
106
96
|
return `${JSON.stringify(value)}\n`;
|
|
107
97
|
};
|
|
108
|
-
/** Remove validator internals from Incur's caller-visible CLI output. */
|
|
109
|
-
export const sanitizeCliOutput = (output) => {
|
|
110
|
-
const trimmed = output.trimStart();
|
|
111
|
-
if (trimmed.startsWith("{")) {
|
|
112
|
-
const decoded = safeParseJson(trimmed);
|
|
113
|
-
if (!decoded.ok)
|
|
114
|
-
return output;
|
|
115
|
-
const parsed = decoded.value;
|
|
116
|
-
if (!isRecord(parsed))
|
|
117
|
-
return output;
|
|
118
|
-
const error = validationError(parsed);
|
|
119
|
-
if (error !== undefined) {
|
|
120
|
-
const safeError = {
|
|
121
|
-
code: "VALIDATION_ERROR",
|
|
122
|
-
message: SAFE_VALIDATION_MESSAGE,
|
|
123
|
-
};
|
|
124
|
-
if (error === parsed)
|
|
125
|
-
return `${JSON.stringify(safeError)}\n`;
|
|
126
|
-
return `${JSON.stringify({ ...parsed, error: safeError })}\n`;
|
|
127
|
-
}
|
|
128
|
-
return output;
|
|
129
|
-
}
|
|
130
|
-
if (/^ok: false\r?\nerror:\r?\n code: VALIDATION_ERROR(?:\r?\n|$)/u.test(trimmed))
|
|
131
|
-
return `ok: false\nerror:\n code: VALIDATION_ERROR\n message: "${SAFE_VALIDATION_MESSAGE}"\n`;
|
|
132
|
-
if (!/^code: VALIDATION_ERROR(?:\r?\n|$)/u.test(trimmed))
|
|
133
|
-
return output;
|
|
134
|
-
return `code: VALIDATION_ERROR\nmessage: "${SAFE_VALIDATION_MESSAGE}"\n`;
|
|
135
|
-
};
|
|
@@ -1,30 +1,34 @@
|
|
|
1
|
+
import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
|
|
1
2
|
import { ARTIFACT_PROVIDER_IDENTITY, artifactCapabilities, } from "../artifacts/ArtifactProviderMetadata.js";
|
|
2
3
|
import { MANAGED_STATIC_PROVIDER_IDENTITY, managedStaticCapabilities, } from "../dotnet/ManagedStaticProviderMetadata.js";
|
|
3
4
|
import { NATIVE_MACOS_PROVIDER_IDENTITY, nativeMacOSCapabilities, } from "../native/NativeMacOSProviderMetadata.js";
|
|
4
5
|
/** Wire the three existing auxiliary AnalysisProvider implementations lazily. */
|
|
5
|
-
export const auxiliaryAnalysisProviderDeclarations = (platform = process.platform) =>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
export const auxiliaryAnalysisProviderDeclarations = (selectedEnvironment, platform = process.platform) => {
|
|
7
|
+
const environment = snapshotEnvironment(selectedEnvironment, platform);
|
|
8
|
+
return [
|
|
9
|
+
{
|
|
10
|
+
identity: ARTIFACT_PROVIDER_IDENTITY,
|
|
11
|
+
capabilities: artifactCapabilities(platform),
|
|
12
|
+
load: async () => {
|
|
13
|
+
const { ArtifactProvider } = await import("../artifacts/ArtifactProvider.js");
|
|
14
|
+
return new ArtifactProvider(environment, platform);
|
|
15
|
+
},
|
|
12
16
|
},
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
{
|
|
18
|
+
identity: NATIVE_MACOS_PROVIDER_IDENTITY,
|
|
19
|
+
capabilities: nativeMacOSCapabilities(platform),
|
|
20
|
+
load: async () => {
|
|
21
|
+
const { NativeMacOSProvider } = await import("../native/NativeMacOSProvider.js");
|
|
22
|
+
return new NativeMacOSProvider(environment, undefined, platform);
|
|
23
|
+
},
|
|
20
24
|
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
{
|
|
26
|
+
identity: MANAGED_STATIC_PROVIDER_IDENTITY,
|
|
27
|
+
capabilities: managedStaticCapabilities(),
|
|
28
|
+
load: async () => {
|
|
29
|
+
const { ManagedStaticProvider } = await import("../dotnet/ManagedStaticProvider.js");
|
|
30
|
+
return new ManagedStaticProvider();
|
|
31
|
+
},
|
|
28
32
|
},
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
];
|
|
34
|
+
};
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
+
import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
|
|
1
2
|
import { HopperProvider } from "../hopper/HopperProvider.js";
|
|
2
3
|
import { GhidraProvider } from "../ghidra/GhidraProvider.js";
|
|
3
4
|
import { IdaProvider } from "../ida/IdaProvider.js";
|
|
4
|
-
import { silentLogger } from "../logger.js";
|
|
5
5
|
import { auxiliaryAnalysisProviderDeclarations } from "./auxiliaryAnalysisProviders.js";
|
|
6
6
|
import { AnalysisProviderRegistry } from "../application/binary/AnalysisProviderRegistry.js";
|
|
7
7
|
import { composeBinarySession } from "../application/binary/BinarySessionComposition.js";
|
|
8
8
|
import { LazyAnalysisProvider } from "../application/binary/LazyAnalysisProvider.js";
|
|
9
9
|
import { ManagedStaticProvider } from "../dotnet/ManagedStaticProvider.js";
|
|
10
|
-
import { SessionProviderRouter } from "../application/binary/SessionProviderRouter.js";
|
|
11
10
|
/**
|
|
12
11
|
* Compose the target-switching runtime shared directly by CLI and MCP adapters.
|
|
13
12
|
* This is the sole production wiring point, so both adapters share identical
|
|
14
13
|
* provider selection, profile, lifecycle, and Evidence semantics.
|
|
15
14
|
*/
|
|
16
|
-
export const createBinarySession = (config, logger
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
15
|
+
export const createBinarySession = (config, logger, selectedEnvironment) => {
|
|
16
|
+
const environment = snapshotEnvironment(selectedEnvironment);
|
|
17
|
+
const hopper = new HopperProvider(config, logger, environment);
|
|
18
|
+
const ghidra = new GhidraProvider(config, logger, environment);
|
|
19
|
+
const ida = new IdaProvider(config, environment);
|
|
20
|
+
return composeBinarySession(new AnalysisProviderRegistry([hopper, ghidra, ida], config.analysisProvider), auxiliaryAnalysisProviderDeclarations(environment).map((declaration) => new LazyAnalysisProvider(declaration)));
|
|
21
21
|
};
|
|
22
22
|
/** Compose an execution-free managed session without native provider selection. */
|
|
23
|
-
export const createManagedBinarySession = () => composeBinarySession(
|
|
23
|
+
export const createManagedBinarySession = () => composeBinarySession(new AnalysisProviderRegistry([]), [
|
|
24
24
|
new ManagedStaticProvider(),
|
|
25
|
-
])
|
|
25
|
+
]);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { PlaywrightBrowserScenarioProvider } from "../browser/PlaywrightBrowserScenarioProvider.js";
|
|
2
|
+
import { PlaywrightScenarioSessionFactory } from "../browser/PlaywrightScenarioSession.js";
|
|
2
3
|
/** Construct a fresh provider without opening a target or acquiring an engine. */
|
|
3
|
-
export const createBrowserScenarioProvider = () => new PlaywrightBrowserScenarioProvider();
|
|
4
|
+
export const createBrowserScenarioProvider = (environment) => new PlaywrightBrowserScenarioProvider(new PlaywrightScenarioSessionFactory(environment));
|
|
@@ -1,17 +1,24 @@
|
|
|
1
|
+
import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
|
|
2
|
+
import { parseConfig } from "../config/parseConfig.js";
|
|
1
3
|
import { runDirectAnalysis as executeDirectAnalysis, runProviderAnalysis as executeProviderAnalysis, runManagedProviderExecution as executeManagedProvider, } from "../application/DirectAnalysis.js";
|
|
2
4
|
import { runCapabilityStatus as executeCapabilityStatus, runProviderStatus as executeProviderStatus, } from "../application/DirectAnalysisStatus.js";
|
|
3
5
|
import { createBinarySession, createManagedBinarySession } from "./binary.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
/** Bind one-shot analysis and status commands to one caller-selected environment. */
|
|
7
|
+
export const createDirectAnalysis = (selectedEnvironment) => {
|
|
8
|
+
const environment = snapshotEnvironment(selectedEnvironment);
|
|
9
|
+
const dependencies = {
|
|
10
|
+
readConfiguration: () => parseConfig(environment),
|
|
11
|
+
createBinarySession: (config, logger) => createBinarySession(config, logger, environment),
|
|
12
|
+
createManagedBinarySession,
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
runDirectAnalysis: executeDirectAnalysis.bind(undefined, dependencies),
|
|
16
|
+
runProviderAnalysis: executeProviderAnalysis.bind(undefined, dependencies),
|
|
17
|
+
runProviderStatus: executeProviderStatus.bind(undefined, dependencies),
|
|
18
|
+
runCapabilityStatus: executeCapabilityStatus.bind(undefined, dependencies),
|
|
19
|
+
};
|
|
7
20
|
};
|
|
8
|
-
/**
|
|
9
|
-
export const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/** Execute managed metadata without constructing native provider candidates. */
|
|
13
|
-
export const runManagedProviderExecution = executeManagedProvider.bind(undefined, dependencies);
|
|
14
|
-
/** Report production provider candidates without opening a target. */
|
|
15
|
-
export const runProviderStatus = executeProviderStatus.bind(undefined, dependencies);
|
|
16
|
-
/** Report production session operations without opening a target. */
|
|
17
|
-
export const runCapabilityStatus = executeCapabilityStatus.bind(undefined, dependencies);
|
|
21
|
+
/** Execute managed metadata without configuration or native provider candidates. */
|
|
22
|
+
export const runManagedProviderExecution = executeManagedProvider.bind(undefined, {
|
|
23
|
+
createManagedBinarySession,
|
|
24
|
+
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { PlaywrightElectronActiveProvider } from "../browser/PlaywrightElectronActiveProvider.js";
|
|
2
2
|
/** Construct a fresh provider without opening a target or acquiring an engine. */
|
|
3
|
-
export const createElectronScenarioProvider = () => new PlaywrightElectronActiveProvider();
|
|
3
|
+
export const createElectronScenarioProvider = (environment) => new PlaywrightElectronActiveProvider(environment);
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
|
|
1
2
|
import { CDP_BROWSER_PROVIDER_IDENTITY, PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY, CDP_ELECTRON_PROVIDER_IDENTITY, PLAYWRIGHT_ELECTRON_ACTIVE_PROVIDER_IDENTITY, } from "../browser/providerIdentities.js";
|
|
2
3
|
import { V8_INSPECTOR_PROVIDER_IDENTITY } from "../inspector/providerIdentity.js";
|
|
3
4
|
import { err, ok } from "../domain/result.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
/** Bind optional provider construction to one caller-selected process environment. */
|
|
6
|
+
export const createOptionalObservationFactories = (selectedEnvironment) => {
|
|
7
|
+
const environment = snapshotEnvironment(selectedEnvironment);
|
|
8
|
+
return {
|
|
9
|
+
browserObservation: async () => (await import("./browserObservation.js")).createBrowserObservationProvider(),
|
|
10
|
+
browserScenarioCapture: async () => (await import("./browserScenario.js")).createBrowserScenarioProvider(environment),
|
|
11
|
+
electronObservation: async () => (await import("./electronObservation.js")).createElectronObservationProvider(),
|
|
12
|
+
electronActiveObservation: async () => (await import("./electronScenario.js")).createElectronScenarioProvider(environment),
|
|
13
|
+
javascriptRuntimeObservation: async () => (await import("./javascriptRuntimeObservation.js")).createJavaScriptRuntimeObservationProvider(),
|
|
14
|
+
};
|
|
10
15
|
};
|
|
11
16
|
const loadPort = async (factory, providerId) => {
|
|
12
17
|
try {
|
|
@@ -20,7 +25,7 @@ const loadPort = async (factory, providerId) => {
|
|
|
20
25
|
}
|
|
21
26
|
};
|
|
22
27
|
/** Load each adapter independently, retaining healthy peers and exact failures. */
|
|
23
|
-
export const loadOptionalObservationProviders = async (factories
|
|
28
|
+
export const loadOptionalObservationProviders = async (factories) => {
|
|
24
29
|
const [browser, scenario, electron, electronActive, runtime] = await Promise.all([
|
|
25
30
|
loadPort(factories.browserObservation, CDP_BROWSER_PROVIDER_IDENTITY.id),
|
|
26
31
|
loadPort(factories.browserScenarioCapture, PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY.id),
|
|
@@ -3,8 +3,11 @@ import { isAbsolute } from "node:path";
|
|
|
3
3
|
import { ConfigurationError } from "../domain/configurationErrors.js";
|
|
4
4
|
import { err, ok } from "../domain/result.js";
|
|
5
5
|
import { analysisProviderSelectorSchema } from "../contracts/providerSelection.js";
|
|
6
|
+
import { ghidraStartupTimeoutSchema } from "./ghidraStartupTimeout.js";
|
|
7
|
+
import { mcpResponseBudgetSchema } from "./mcpResponseBudget.js";
|
|
6
8
|
const environmentSchema = z.object({
|
|
7
9
|
REA_ANALYSIS_PROVIDER: analysisProviderSelectorSchema.default("auto"),
|
|
10
|
+
REA_MCP_MAX_RESPONSE_BYTES: mcpResponseBudgetSchema.optional(),
|
|
8
11
|
REA_IDA_MCP_CONFIG: z
|
|
9
12
|
.string()
|
|
10
13
|
.min(1)
|
|
@@ -25,6 +28,7 @@ const environmentSchema = z.object({
|
|
|
25
28
|
.min(1)
|
|
26
29
|
.refine(isAbsolute, "REA_GHIDRA_NATIVEAOT_JAR must be absolute")
|
|
27
30
|
.optional(),
|
|
31
|
+
REA_GHIDRA_STARTUP_TIMEOUT_MS: ghidraStartupTimeoutSchema,
|
|
28
32
|
REA_ILSPY_CMD_PATH: z
|
|
29
33
|
.string()
|
|
30
34
|
.min(1)
|
|
@@ -42,8 +46,14 @@ const environmentSchema = z.object({
|
|
|
42
46
|
export const parseEnvironment = (environment) => {
|
|
43
47
|
const parsed = environmentSchema.safeParse(environment);
|
|
44
48
|
if (!parsed.success) {
|
|
49
|
+
// Zod messages name the constraint, never the rejected value.
|
|
50
|
+
const settings = parsed.error.issues.map((issue) => ({
|
|
51
|
+
setting: String(issue.path[0] ?? "environment"),
|
|
52
|
+
constraint: issue.message,
|
|
53
|
+
}));
|
|
45
54
|
return err(new ConfigurationError("Invalid REA environment configuration", {
|
|
46
55
|
cause: parsed.error,
|
|
56
|
+
settings,
|
|
47
57
|
}));
|
|
48
58
|
}
|
|
49
59
|
return ok(parsed.data);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Default absolute deadline for Ghidra import, analysis, bridge, and readiness. */
|
|
3
|
+
export const DEFAULT_GHIDRA_STARTUP_TIMEOUT_MS = 330_000;
|
|
4
|
+
// Node schedules delays above this signed 32-bit boundary as a 1 ms timer.
|
|
5
|
+
const MAX_TIMER_DELAY_MS = 2_147_483_647;
|
|
6
|
+
/** Parse the optional setting without reading the ambient process environment. */
|
|
7
|
+
export const ghidraStartupTimeoutSchema = z
|
|
8
|
+
.string()
|
|
9
|
+
.regex(/^[1-9]\d*$/u, "must be a positive decimal integer")
|
|
10
|
+
.transform(Number)
|
|
11
|
+
.pipe(z.number().int().min(1).max(MAX_TIMER_DELAY_MS))
|
|
12
|
+
.default(DEFAULT_GHIDRA_STARTUP_TIMEOUT_MS);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { userInfo } from "node:os";
|
|
2
|
+
/** Resolve the caller's selected home before consulting the host account. */
|
|
3
|
+
export const homeDirectoryFromEnvironment = (environment, platform) => {
|
|
4
|
+
const selected = platform === "win32"
|
|
5
|
+
? (environment.USERPROFILE ??
|
|
6
|
+
(environment.HOMEDRIVE !== undefined &&
|
|
7
|
+
environment.HOMEPATH !== undefined
|
|
8
|
+
? `${environment.HOMEDRIVE}${environment.HOMEPATH}`
|
|
9
|
+
: environment.HOME))
|
|
10
|
+
: (environment.HOME ?? environment.USERPROFILE);
|
|
11
|
+
return selected ?? userInfo().homedir;
|
|
12
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ConfigurationError } from "../domain/configurationErrors.js";
|
|
3
|
+
import { err, ok } from "../domain/result.js";
|
|
4
|
+
// This override supports clients with larger frames. Keep the configuration
|
|
5
|
+
// parser independent of the SDK's eager server imports; conformance verifies
|
|
6
|
+
// this floor against the pinned SDK's actual default receive-buffer size.
|
|
7
|
+
const MINIMUM_RESPONSE_BYTES = 10 * 1024 * 1024;
|
|
8
|
+
/** Optional stdio response budget, including room for the protocol envelope. */
|
|
9
|
+
export const mcpResponseBudgetSchema = z
|
|
10
|
+
.string()
|
|
11
|
+
.regex(/^[1-9]\d*$/u)
|
|
12
|
+
.transform(Number)
|
|
13
|
+
.pipe(z.number().int().safe().min(MINIMUM_RESPONSE_BYTES));
|
|
14
|
+
const budgetConstraint = `REA_MCP_MAX_RESPONSE_BYTES must be a decimal safe integer at least ${String(MINIMUM_RESPONSE_BYTES)} bytes, the default stdio receive-buffer size.`;
|
|
15
|
+
/** Parse only the MCP-specific budget without loading unrelated provider settings. */
|
|
16
|
+
export const parseMcpResponseBudget = (value) => {
|
|
17
|
+
if (value === undefined)
|
|
18
|
+
return ok(undefined);
|
|
19
|
+
const parsed = mcpResponseBudgetSchema.safeParse(value);
|
|
20
|
+
return parsed.success
|
|
21
|
+
? ok(parsed.data)
|
|
22
|
+
: err(new ConfigurationError(budgetConstraint, {
|
|
23
|
+
settings: [
|
|
24
|
+
{
|
|
25
|
+
setting: "REA_MCP_MAX_RESPONSE_BYTES",
|
|
26
|
+
constraint: budgetConstraint,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
}));
|
|
30
|
+
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { accessSync, constants } from "node:fs";
|
|
2
|
-
import { homedir } from "node:os";
|
|
3
2
|
import { join } from "node:path";
|
|
4
3
|
import { ConfigurationError } from "../domain/configurationErrors.js";
|
|
5
4
|
import { ok } from "../domain/result.js";
|
|
6
5
|
import { parseEnvironment } from "./environment.js";
|
|
6
|
+
import { homeDirectoryFromEnvironment } from "./homeDirectory.js";
|
|
7
7
|
import { parseStringArray, parseLoaderArgs } from "./parsers.js";
|
|
8
8
|
const DEFAULT_HOPPER_LAUNCHER_PATH = "/Applications/Hopper Disassembler.app/Contents/MacOS/hopper";
|
|
9
9
|
const SYSTEM_LINUX_HOPPER = "/opt/hopper/bin/Hopper";
|
|
@@ -16,7 +16,7 @@ const executableAvailable = (path) => {
|
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
18
|
};
|
|
19
|
-
|
|
19
|
+
const defaultHopperLauncherPath = (platform, homeDirectory, executable = executableAvailable) => {
|
|
20
20
|
if (platform !== "linux")
|
|
21
21
|
return DEFAULT_HOPPER_LAUNCHER_PATH;
|
|
22
22
|
if (executable(SYSTEM_LINUX_HOPPER))
|
|
@@ -37,17 +37,22 @@ export const parseConfig = (environment) => {
|
|
|
37
37
|
if (!secretPatterns.ok)
|
|
38
38
|
return secretPatterns;
|
|
39
39
|
return ok({
|
|
40
|
+
...(env.REA_MCP_MAX_RESPONSE_BYTES === undefined
|
|
41
|
+
? {}
|
|
42
|
+
: { mcpMaxResponseBytes: env.REA_MCP_MAX_RESPONSE_BYTES }),
|
|
40
43
|
analysisProvider: env.REA_ANALYSIS_PROVIDER,
|
|
41
44
|
...(env.REA_IDA_MCP_CONFIG === undefined
|
|
42
45
|
? {}
|
|
43
46
|
: { idaMcpConfigPath: env.REA_IDA_MCP_CONFIG }),
|
|
44
47
|
ghidraInstallDir: env.GHIDRA_INSTALL_DIR,
|
|
45
48
|
ghidraJavaHome: env.JAVA_HOME,
|
|
49
|
+
ghidraStartupTimeoutMs: env.REA_GHIDRA_STARTUP_TIMEOUT_MS,
|
|
46
50
|
...(env.REA_GHIDRA_NATIVEAOT_JAR === undefined
|
|
47
51
|
? {}
|
|
48
52
|
: { ghidraNativeAotJar: env.REA_GHIDRA_NATIVEAOT_JAR }),
|
|
49
53
|
ilspyCmdPath: env.REA_ILSPY_CMD_PATH,
|
|
50
|
-
hopperLauncherPath: env.HOPPER_LAUNCHER_PATH ??
|
|
54
|
+
hopperLauncherPath: env.HOPPER_LAUNCHER_PATH ??
|
|
55
|
+
defaultHopperLauncherPath(process.platform, homeDirectoryFromEnvironment(environment, process.platform)),
|
|
51
56
|
hopperTargetPath: env.HOPPER_TARGET_PATH,
|
|
52
57
|
hopperTargetKind: env.HOPPER_TARGET_KIND,
|
|
53
58
|
hopperLoaderArgs: loaderArgs.value,
|
package/dist/config/parsers.js
CHANGED
|
@@ -1,33 +1,30 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { ConfigurationError } from "../domain/configurationErrors.js";
|
|
3
3
|
import { err, ok } from "../domain/result.js";
|
|
4
|
+
import { safeParseJson } from "../domain/safeJson.js";
|
|
5
|
+
/** Decode explicitly selected reference-source exclusion patterns. */
|
|
4
6
|
export const parseStringArray = (encoded, name) => {
|
|
5
|
-
|
|
6
|
-
const parsed = z.array(z.string().min(1)).safeParse(JSON.parse(encoded));
|
|
7
|
-
return parsed.success
|
|
8
|
-
? ok(parsed.data)
|
|
9
|
-
: err(new ConfigurationError(`${name} must encode an array of strings`, {
|
|
10
|
-
cause: parsed.error,
|
|
11
|
-
}));
|
|
12
|
-
}
|
|
13
|
-
catch (cause) {
|
|
14
|
-
return err(new ConfigurationError(`${name} must be valid JSON`, { cause }));
|
|
15
|
-
}
|
|
7
|
+
return parseConfiguredStringArray(encoded, name, z.string().min(1));
|
|
16
8
|
};
|
|
9
|
+
/** Decode Hopper arguments while preserving meaningful empty argv entries. */
|
|
17
10
|
export const parseLoaderArgs = (encoded) => {
|
|
18
11
|
if (encoded === undefined)
|
|
19
12
|
return ok([]);
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return err(
|
|
26
|
-
|
|
27
|
-
}));
|
|
28
|
-
}
|
|
29
|
-
const parsed = z.array(z.string()).safeParse(decoded);
|
|
13
|
+
return parseConfiguredStringArray(encoded, "HOPPER_LOADER_ARGS_JSON", z.string());
|
|
14
|
+
};
|
|
15
|
+
const parseConfiguredStringArray = (encoded, setting, itemSchema) => {
|
|
16
|
+
const decoded = safeParseJson(encoded);
|
|
17
|
+
if (!decoded.ok)
|
|
18
|
+
return err(configuredArrayError(setting, "must be valid JSON", decoded.cause));
|
|
19
|
+
const parsed = z.array(itemSchema).safeParse(decoded.value);
|
|
30
20
|
return parsed.success
|
|
31
21
|
? ok(parsed.data)
|
|
32
|
-
: err(
|
|
22
|
+
: err(configuredArrayError(setting, "must encode an array of strings", parsed.error));
|
|
23
|
+
};
|
|
24
|
+
const configuredArrayError = (setting, requirement, cause) => {
|
|
25
|
+
const constraint = `${setting} ${requirement}`;
|
|
26
|
+
return new ConfigurationError(constraint, {
|
|
27
|
+
cause,
|
|
28
|
+
settings: [{ setting, constraint }],
|
|
29
|
+
});
|
|
33
30
|
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { analysisViewResultSchema, inspectAnalysisViewInputSchema, } from "../domain/analysisView/analysisView.js";
|
|
2
|
+
import { toolContractMetadata } from "./toolEffects.js";
|
|
3
|
+
import { evidenceResultOf } from "./toolOutputSchemaPrimitives.js";
|
|
4
|
+
const RETAINED_EXAMPLE_ID = `ev_${"a".repeat(64)}`;
|
|
5
|
+
/** Selected views of already completed layout and JavaScript analysis Evidence. */
|
|
6
|
+
export const ANALYSIS_VIEW_TOOL_CONTRACTS = [
|
|
7
|
+
{
|
|
8
|
+
name: "inspect_analysis_view",
|
|
9
|
+
...toolContractMetadata("inspect_analysis_view"),
|
|
10
|
+
kind: "application",
|
|
11
|
+
description: "Inspect a selected view of completed binary-layout or JavaScript application Evidence without repeating analysis. Use an exact same-session retained evidence_id or portable inline Evidence. Select a summary, layout mitigations/linkage facet, one section/symbol/module, or a stable page with a positive limit. Module pages contain JavaScript assets, bundled modules and source modules; use node_id when paths are ambiguous or unavailable. Returns selected facts inline with artifact identity, parent Evidence ID, a distinct view digest, coverage, limitations and unknowns. Actual serialized size determines MCP transport admission; choose a smaller page or export the retained Evidence when needed.",
|
|
12
|
+
inputSchema: inspectAnalysisViewInputSchema,
|
|
13
|
+
outputSchema: evidenceResultOf(analysisViewResultSchema),
|
|
14
|
+
examples: [
|
|
15
|
+
{
|
|
16
|
+
title: "Summarize retained JavaScript application Evidence",
|
|
17
|
+
input: {
|
|
18
|
+
source: {
|
|
19
|
+
kind: "retained-evidence",
|
|
20
|
+
evidence_id: RETAINED_EXAMPLE_ID,
|
|
21
|
+
},
|
|
22
|
+
view: { kind: "summary" },
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
title: "Read one ELF section from retained layout Evidence",
|
|
27
|
+
input: {
|
|
28
|
+
source: {
|
|
29
|
+
kind: "retained-evidence",
|
|
30
|
+
evidence_id: RETAINED_EXAMPLE_ID,
|
|
31
|
+
},
|
|
32
|
+
view: {
|
|
33
|
+
kind: "item",
|
|
34
|
+
collection: "sections",
|
|
35
|
+
selector: { name: ".text" },
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
title: "Page module identities from retained application Evidence",
|
|
41
|
+
input: {
|
|
42
|
+
source: {
|
|
43
|
+
kind: "retained-evidence",
|
|
44
|
+
evidence_id: RETAINED_EXAMPLE_ID,
|
|
45
|
+
},
|
|
46
|
+
view: {
|
|
47
|
+
kind: "page",
|
|
48
|
+
collection: "modules",
|
|
49
|
+
offset: 0,
|
|
50
|
+
limit: 32,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
];
|
|
@@ -10,8 +10,9 @@ import { reconstructionObligationLedgerInputSchema, reconstructionObligationLedg
|
|
|
10
10
|
import { androidApplicationProjectionInputSchema, androidApplicationProjectionResultSchema, } from "../domain/android/androidApplication.js";
|
|
11
11
|
import { appleApplicationProjectionInputSchema, appleApplicationProjectionResultSchema, } from "../domain/apple/appleApplication.js";
|
|
12
12
|
import { toolContractMetadata } from "./toolEffects.js";
|
|
13
|
-
import { evidenceResultOf } from "./
|
|
14
|
-
import { JAVASCRIPT_APPLICATION_VERSION_COMPARISON_EXAMPLE,
|
|
13
|
+
import { evidenceResultOf } from "./toolOutputSchemaPrimitives.js";
|
|
14
|
+
import { JAVASCRIPT_APPLICATION_VERSION_COMPARISON_EXAMPLE, JAVASCRIPT_FEATURE_TRACE_EXAMPLE, SOURCE_TO_BUNDLE_COMPARISON_EXAMPLE, } from "./javascript/javascriptApplicationWorkflowExamples.js";
|
|
15
|
+
import { JAVASCRIPT_EXPORT_SHAPE_COMPARISON_EXAMPLE } from "./javascript/javascriptExportShapeComparisonExample.js";
|
|
15
16
|
import { ANDROID_APPLICATION_GRAPH_EXAMPLE, APPLE_APPLICATION_GRAPH_EXAMPLE, MACOS_APPLICATION_GRAPH_EXAMPLE, } from "./mobileApplicationGraphExamples.js";
|
|
16
17
|
const traceOutputSchema = evidenceResultOf(applicationFeatureTraceResultSchema);
|
|
17
18
|
const semanticTraceOutputSchema = evidenceResultOf(javaScriptSemanticTraceResultSchema);
|
|
@@ -106,13 +107,13 @@ export const APPLICATION_TOOL_CONTRACTS = [
|
|
|
106
107
|
{
|
|
107
108
|
name: "compare_javascript_export_shapes",
|
|
108
109
|
...toolContractMetadata("compare_javascript_export_shapes"),
|
|
109
|
-
description: "Compare static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph supplied as inline Evidence or exact same-session retained references. Variants pair only by reciprocal unique literal discriminants
|
|
110
|
+
description: "Compare static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph supplied as inline Evidence or exact same-session retained references. Variants pair only by reciprocal unique literal discriminants. Each retained variant lists observed return-property names even when values stay unknown. Presence (present, absent, or unknown-coverage) is separate from value resolution: a name present on only one paired shape is added or removed when parent-property coverage is complete on both sides, including when the static value is unresolved. Dynamic values, incomplete parent coverage, and unpaired variants remain unknown. Reports JSON Pointer changes without executing JavaScript; runtime behavior requires a separate agent-run probe.",
|
|
110
111
|
kind: "application",
|
|
111
112
|
inputSchema: compareJavaScriptExportShapesRequestSchema,
|
|
112
113
|
outputSchema: exportShapeComparisonOutputSchema,
|
|
113
114
|
examples: [
|
|
114
115
|
{
|
|
115
|
-
title: "
|
|
116
|
+
title: "Report observed return-property presence when static values stay unknown",
|
|
116
117
|
input: JAVASCRIPT_EXPORT_SHAPE_COMPARISON_EXAMPLE,
|
|
117
118
|
},
|
|
118
119
|
{
|
|
@@ -8,13 +8,11 @@ const inventory = (digit) => {
|
|
|
8
8
|
const nodes = [
|
|
9
9
|
{
|
|
10
10
|
artifact_id: artifactId,
|
|
11
|
-
kind: "resource",
|
|
12
11
|
format: "file",
|
|
13
12
|
sha256: sha,
|
|
14
13
|
size: 1,
|
|
15
14
|
media_type: null,
|
|
16
15
|
architecture: null,
|
|
17
|
-
executable: false,
|
|
18
16
|
content_state: "materialized",
|
|
19
17
|
limitations: [],
|
|
20
18
|
},
|
|
@@ -26,6 +24,8 @@ const inventory = (digit) => {
|
|
|
26
24
|
parent_occurrence_id: null,
|
|
27
25
|
logical_path: ".",
|
|
28
26
|
entry_kind: "file",
|
|
27
|
+
artifact_kind: "resource",
|
|
28
|
+
artifact_format: "file",
|
|
29
29
|
declared_size: 1,
|
|
30
30
|
compressed_size: null,
|
|
31
31
|
executable: false,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { artifactOutputSchemas } from "./
|
|
2
|
+
import { artifactOutputSchemas } from "./toolOutputSchemaGroups.js";
|
|
3
3
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
4
4
|
import { toolContractMetadata } from "./toolEffects.js";
|
|
5
5
|
import { requireOutputSchema } from "./toolOutputSchemaPrimitives.js";
|