rea-agents 5.0.0 → 6.1.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 +168 -655
- package/bridge/android/ReaJadxBridge.java +14 -5
- package/bridge/ghidra/ReaGhidraBridge.java +173 -47
- package/bridge/hopper_bridge.py +310 -128
- package/bridge/mitmproxy/capture.py +208 -0
- package/bridge/native/rea_lldb_tracer.py +839 -0
- package/bridge/process/ProcessRunTokenReader.swift +297 -0
- package/bridge/process/ProcessRunTokenReaderMain.swift +35 -0
- package/bridge/pwndbg/core_context.py +101 -0
- package/bridge/pwndbg/launch.py +39 -0
- package/bridge/pwndbg/launch_impl.py +34 -0
- package/bridge/pwntools/decoder_runtime.py +59 -0
- package/bridge/pwntools/layout.py +39 -0
- package/bridge/pwntools/layout_impl.py +309 -0
- package/bridge/pwntools/recorded_crash.py +39 -0
- package/bridge/pwntools/recorded_crash_impl.py +147 -0
- package/dist/android/JadxConfiguration.js +196 -33
- package/dist/android/JadxMcpTransport.js +4 -0
- package/dist/android/JadxProtocol.js +6 -0
- package/dist/android/JadxProvider.js +20 -2
- 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/CallPathTracing.js +19 -3
- package/dist/application/CapabilityInventory.js +27 -3
- package/dist/application/ClientConfigurationDocument.js +871 -6
- package/dist/application/ClientRegistrationIdentity.js +26 -5
- package/dist/application/ClientRegistrationStatus.js +29 -14
- package/dist/application/DirectAnalysis.js +97 -33
- package/dist/application/Doctor.js +4 -2
- package/dist/application/DoctorScope.js +25 -13
- package/dist/application/EnhancedLiteralTracing.js +22 -25
- package/dist/application/EnhancedTools.js +13 -11
- package/dist/application/EvidenceBundleFiles.js +24 -12
- package/dist/application/FunctionAnalysisEvidence.js +2 -3
- package/dist/application/InventoryProjectionEvidence.js +4 -3
- package/dist/application/InvestigationProviders.js +3 -2
- package/dist/application/JsonFiles.js +50 -28
- package/dist/application/ProcedureAddressResolution.js +11 -0
- package/dist/application/ReconstructionCoverageService.js +7 -4
- package/dist/application/ReconstructionObligationCandidates.js +5 -1
- package/dist/application/ReconstructionObligationLedgerService.js +4 -3
- package/dist/application/Setup.js +13 -1
- package/dist/application/SetupClientConfiguration.js +10 -15
- package/dist/application/SetupHost.js +5 -2
- package/dist/application/SetupPlan.js +5 -3
- package/dist/application/SupportedClients.js +34 -1
- package/dist/application/Uninstall.js +4 -3
- package/dist/application/Update.js +18 -3
- package/dist/application/UpdateRuntime.js +46 -25
- package/dist/application/WebModuleTraceService.js +4 -2
- package/dist/application/WebNetworkCapturePort.js +1 -0
- package/dist/application/WebNetworkCaptureService.js +134 -0
- package/dist/application/WebRuntimeService.js +5 -3
- package/dist/application/WebScriptExportService.js +2 -2
- package/dist/application/WebSourceLocationService.js +4 -2
- package/dist/application/WindowsCapabilities.js +1 -1
- package/dist/application/WorkflowEvidence.js +82 -0
- package/dist/application/binary/AnalysisProviderEvaluation.js +21 -5
- package/dist/application/binary/AnalysisProviderRegistry.js +2 -0
- package/dist/application/binary/AnalysisSnapshotCache.js +52 -12
- package/dist/application/binary/BinarySession.js +131 -76
- package/dist/application/binary/BinarySessionOpen.js +19 -6
- package/dist/application/binary/BinarySessionRecords.js +45 -3
- package/dist/application/binary/BinarySessionStatus.js +17 -1
- package/dist/application/binary/CompositeProvider.js +13 -0
- package/dist/application/binary/LazyAnalysisProvider.js +3 -0
- package/dist/application/binaryDiagnostics/BinaryLayoutPort.js +1 -0
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +59 -0
- package/dist/application/binaryDiagnostics/RecordedCrashPort.js +1 -0
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +62 -0
- package/dist/application/evm/EvmInterfacePort.js +1 -0
- package/dist/application/evm/EvmInterfaceService.js +64 -0
- package/dist/application/investigation/EvidenceLedger.js +21 -7
- package/dist/application/investigation/InvestigationRecords.js +8 -0
- package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +25 -5
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
- package/dist/application/javascript/JavaScriptApplicationService.js +34 -14
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +47 -27
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +39 -7
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +26 -2
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +80 -27
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +33 -12
- package/dist/application/javascript/JavaScriptModuleRelationships.js +37 -8
- package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -1
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +7 -7
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +149 -72
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +14 -15
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +41 -1
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +7 -7
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +5 -9
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +118 -12
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +27 -5
- package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
- package/dist/application/managed/ManagedMemberComparisonService.js +7 -4
- package/dist/application/managed/ManagedNativeVerificationService.js +4 -3
- package/dist/application/managed/ManagedReconstructionService.js +4 -3
- package/dist/application/{ProcessCli.js → process/ProcessCli.js} +23 -15
- package/dist/application/{ProcessEvidence.js → process/ProcessEvidence.js} +8 -7
- package/dist/application/workflowInputError.js +18 -0
- package/dist/artifacts/ArtifactProvider.js +42 -5
- package/dist/artifacts/ArtifactProviderMetadata.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +98 -14
- package/dist/artifacts/NativeDmgArtifactReader.js +13 -6
- package/dist/artifacts/ZipArtifactReader.js +3 -0
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +22 -3
- package/dist/artifacts/apple/DylibResolutionReader.js +259 -0
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
- package/dist/artifacts/apple/KeyedArchiveReader.js +36 -22
- package/dist/artifacts/apple/MachoLoadCommandReader.js +355 -0
- 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/{application → artifacts/extraction}/ArtifactExtraction.js +10 -10
- package/dist/{application → artifacts/inventory}/ArtifactGraphConstruction.js +16 -11
- package/dist/{application → artifacts/inventory}/ArtifactInventory.js +4 -4
- package/dist/{application/ArtifactInventory → artifacts/inventory}/classify.js +2 -2
- package/dist/{application/ArtifactInventory → artifacts/inventory}/reader.js +5 -5
- package/dist/{application/ArtifactInventory → artifacts/inventory}/scanCanonical.js +14 -17
- package/dist/{application/ArtifactInventory → artifacts/inventory}/scanReader.js +5 -5
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
- package/dist/artifacts/readStableArtifact.js +20 -4
- package/dist/browser/CdpCaptureCompleteness.js +2 -0
- package/dist/browser/CdpCaptureEventHandlers.js +165 -12
- package/dist/browser/CdpCaptureEventTypes.js +5 -1
- package/dist/browser/CdpCaptureEvents.js +34 -0
- package/dist/browser/CdpConnection.js +30 -11
- package/dist/browser/CdpOptionalCommand.js +2 -3
- package/dist/browser/CdpPageCapture.js +23 -1
- package/dist/browser/PlaywrightElectronActiveActions.js +32 -23
- package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +130 -122
- package/dist/browser/WebSourceMapFetcher.js +426 -72
- package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
- package/dist/browser/history/CaptureFailures.js +137 -0
- package/dist/browser/history/CaptureFormatError.js +10 -0
- package/dist/browser/history/CaptureRedaction.js +65 -0
- package/dist/browser/history/CaptureRelease.js +17 -0
- package/dist/browser/history/HarCapture.js +165 -0
- package/dist/browser/history/HarCaptureAdapter.js +20 -0
- package/dist/browser/history/HarCaptureProcess.js +57 -0
- package/dist/browser/history/HarJson.js +92 -0
- package/dist/browser/history/HarSchema.js +72 -0
- package/dist/browser/history/HistoricalCaptureDecoder.js +188 -0
- package/dist/browser/history/HistoricalCaptureFormatAdapter.js +1 -0
- package/dist/browser/history/MitmproxyCaptureAdapter.js +42 -0
- package/dist/cli/analysisSelector.js +23 -0
- package/dist/cli/applicationCommands.js +2 -3
- package/dist/cli/artifactCommands.js +26 -1
- package/dist/cli/binaryDiagnosticsCommands.js +39 -0
- package/dist/cli/coreAnalysisCommands.js +2 -2
- package/dist/cli/coreBinaryCommands.js +78 -20
- package/dist/cli/electronCommands.js +21 -13
- package/dist/cli/evmCommands.js +24 -0
- package/dist/cli/firmwareCommands.js +6 -3
- package/dist/cli/javascriptApplicationAnalysis.js +20 -3
- package/dist/cli/jsonOutput.js +38 -0
- package/dist/cli/nativeCallCommands.js +34 -0
- package/dist/cli/processCommands.js +1 -1
- package/dist/cli/streamedJsonOutput.js +56 -0
- package/dist/cli/utilityCommands.js +2 -0
- package/dist/cli/webNetworkCaptureCommands.js +40 -0
- package/dist/cli/webRuntimeCommands.js +8 -8
- package/dist/cli.js +11 -4
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +6 -1
- package/dist/cliJsonInput.js +35 -1
- package/dist/cliOutput.js +21 -6
- package/dist/composition/binaryDiagnostics.js +8 -0
- package/dist/composition/evm.js +4 -0
- package/dist/composition/webNetworkCaptures.js +6 -0
- package/dist/config/environment.js +4 -0
- package/dist/config/ghidraStartupTimeout.js +17 -0
- package/dist/config/mcpResponseBudget.js +22 -0
- package/dist/config/parseConfig.js +2 -1
- package/dist/contracts/artifactToolContracts.js +6 -0
- package/dist/contracts/browserCaptureToolInputSchema.js +43 -0
- package/dist/contracts/browserToolContracts.js +4 -3
- package/dist/contracts/enhancedInputs.js +5 -3
- package/dist/contracts/enhancedToolContracts.js +3 -3
- package/dist/contracts/errorSchemas.js +8 -1
- package/dist/contracts/evm/evmToolContracts.js +20 -0
- package/dist/contracts/hopperMemoryContracts.js +2 -5
- package/dist/contracts/investigationExamples.js +2 -2
- package/dist/contracts/javascript/electronToolContracts.js +1 -1
- package/dist/contracts/managed/managedToolContracts.js +8 -6
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +42 -0
- package/dist/contracts/native/nativeToolContracts.js +21 -3
- package/dist/contracts/officialToolContracts.js +26 -24
- package/dist/contracts/process/processCaptureExample.js +2 -0
- package/dist/contracts/promptContracts.js +3 -3
- package/dist/contracts/sessionLifecycleInputs.js +18 -5
- package/dist/contracts/sessionStatusContract.js +8 -2
- package/dist/contracts/sessionToolContracts.js +8 -3
- package/dist/contracts/sessionToolSchemas.js +8 -4
- package/dist/contracts/toolContractExamples.js +1 -2
- package/dist/contracts/toolContractHelpers.js +4 -1
- package/dist/contracts/toolContracts.js +6 -0
- package/dist/contracts/toolEffects.js +30 -1
- package/dist/contracts/toolOutputSchemaGroups.js +33 -28
- package/dist/contracts/toolOutputSchemaPrimitives.js +19 -1
- package/dist/contracts/toolSchemaMetadata.js +69 -10
- package/dist/contracts/webNetworkCaptureToolContracts.js +24 -0
- package/dist/domain/analysisErrorBase.js +22 -2
- package/dist/domain/analysisErrorCore.js +61 -5
- package/dist/domain/analysisErrorPresentation.js +95 -12
- package/dist/domain/analysisErrorProjection.js +148 -19
- package/dist/domain/analysisSnapshot.js +166 -2
- package/dist/domain/android/androidAnalysis.js +2 -4
- package/dist/domain/android/androidApplication.js +17 -9
- package/dist/domain/apple/appleApplication.js +41 -14
- package/dist/domain/apple/dyldEnvironment.js +73 -0
- package/dist/domain/apple/dyldPaths.js +81 -0
- package/dist/domain/apple/dylibResolution.js +478 -0
- package/dist/domain/apple/dylibResolutionFindings.js +77 -0
- package/dist/domain/apple/interfaceBuilderGraph.js +25 -13
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
- package/dist/domain/apple/keyedArchive.js +9 -1
- package/dist/domain/apple/machoContainer.js +54 -0
- package/dist/domain/apple/plistNumbers.js +76 -0
- package/dist/domain/artifactIdentity.js +29 -0
- package/dist/domain/artifactInventoryEvidence.js +19 -24
- package/dist/domain/artifactPathSyntax.js +1 -1
- package/dist/domain/bridgeCandidateProjection.js +71 -0
- package/dist/domain/browserCompleteness.js +1 -0
- package/dist/domain/browserObservation.js +1 -1
- package/dist/domain/browserObservationError.js +24 -5
- package/dist/domain/browserObservationSchemas.js +13 -0
- package/dist/domain/browserScenarioValues.js +5 -2
- package/dist/domain/bundleComparison.js +3 -2
- package/dist/domain/callPathSchemas.js +1 -1
- package/dist/domain/canonicalDigest.js +13 -1
- 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/comparisonStatus.js +2 -30
- package/dist/domain/configurationErrors.js +1 -1
- package/dist/domain/conformanceTrustGate.js +0 -16
- package/dist/domain/evidence.js +78 -11
- package/dist/domain/evidenceBundle.js +42 -1
- package/dist/domain/evidenceErrors.js +12 -1
- package/dist/domain/evm/evmInterface.js +63 -0
- package/dist/domain/explicitSensitiveFailure.js +108 -0
- package/dist/domain/explicitSensitiveValues.js +10 -0
- package/dist/domain/firmware/firmwareAnalysis.js +10 -4
- 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 +37 -6
- package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
- package/dist/domain/javascript/htmlArtifactReferences.js +40 -0
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
- package/dist/domain/javascript/javascriptApplicationGraph.js +13 -0
- package/dist/domain/javascript/javascriptAstValues.js +20 -0
- package/dist/domain/javascript/javascriptExportShapeComparison.js +21 -5
- package/dist/domain/javascript/javascriptExportShapeVariants.js +0 -10
- package/dist/domain/javascript/javascriptRecovery.js +3 -8
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +97 -2
- package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +22 -5
- package/dist/domain/javascript/javascriptSemanticGraph.js +34 -5
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +25 -17
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
- package/dist/domain/javascript/javascriptSemanticValues.js +83 -11
- 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 +14 -4
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -16
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
- package/dist/domain/jsonSerialization.js +109 -0
- package/dist/domain/jsonValue.js +91 -3
- package/dist/domain/localPath.js +8 -0
- package/dist/domain/managed/managedApplicationGraph.js +10 -10
- package/dist/domain/managed/managedInspectionEvidence.js +16 -0
- package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
- package/dist/domain/managed/managedNativeVerification.js +3 -9
- package/dist/domain/native/binaryLayout.js +357 -0
- package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
- package/dist/domain/native/nativeCallObservation.js +186 -0
- package/dist/domain/native/nativeCallPartialObservation.js +33 -0
- package/dist/domain/native/objcSwiftMetadata.js +0 -39
- package/dist/domain/native/recordedCrash.js +266 -0
- package/dist/domain/native/recordedCrashNoteCoverage.js +73 -0
- package/dist/domain/{processCapture.js → process/processCapture.js} +143 -2
- package/dist/domain/{processCaptureExample.js → process/processCaptureExample.js} +5 -0
- package/dist/domain/process/processCaptureParsing.js +54 -0
- package/dist/domain/{processCaptureValidation.js → process/processCaptureValidation.js} +18 -2
- package/dist/domain/{processComparison.js → process/processComparison.js} +39 -5
- package/dist/domain/{processObservation.js → process/processObservation.js} +1 -1
- package/dist/domain/{processScenario.js → process/processScenario.js} +11 -10
- package/dist/domain/{processTraceSpecification.js → process/processTraceSpecification.js} +1 -1
- package/dist/domain/propertyListKeys.js +1 -1
- package/dist/domain/propertyListXmlText.js +19 -0
- package/dist/domain/providerAdapterError.js +1 -1
- package/dist/domain/providerOperationHealth.js +54 -0
- package/dist/domain/providerSelectionError.js +4 -2
- package/dist/domain/reconstructionVerification.js +9 -46
- package/dist/domain/reconstructionVerificationSchemas.js +3 -3
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/staticRuntimeCorrelation.js +9 -46
- 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 +1 -0
- package/dist/domain/webNetworkCapture.js +118 -0
- package/dist/domain/webNetworkCaptureCoordinates.js +58 -0
- package/dist/domain/webRuntime.js +19 -5
- package/dist/domain/webSourceLocation.js +1 -0
- package/dist/dotnet/ManagedExceptionRegionValidation.js +41 -0
- package/dist/dotnet/ManagedMemberInspector.js +4 -2
- package/dist/dotnet/ManagedMemberInspectorCore.js +38 -32
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +23 -7
- package/dist/dotnet/ManagedMemberRows.js +14 -3
- package/dist/dotnet/ManagedMetadataHeaps.js +20 -2
- package/dist/dotnet/ManagedMetadataInventory.js +38 -28
- package/dist/dotnet/ManagedMetadataInventoryRows.js +24 -10
- package/dist/dotnet/ManagedMethodBodyReader.js +7 -1
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +15 -3
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +3 -1
- package/dist/dotnet/ManagedPeReader.js +11 -0
- package/dist/evm/EvmBytecodeCarrier.js +21 -0
- package/dist/evm/EvmWorkerLimits.js +40 -0
- package/dist/evm/EvmoleFailures.js +126 -0
- package/dist/evm/EvmoleInterfaceAdapter.js +53 -0
- package/dist/evm/EvmoleInterfaceProvider.js +273 -0
- package/dist/evm/EvmoleInterfaceWorker.js +87 -0
- package/dist/evm/EvmoleRelease.js +16 -0
- package/dist/firmware/FirmwareCommand.js +1 -0
- package/dist/firmware/FirmwareFiles.js +1 -1
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +5 -0
- package/dist/ghidra/GhidraClient.js +47 -14
- package/dist/ghidra/GhidraDiagnostics.js +7 -7
- package/dist/ghidra/GhidraFunctionValues.js +10 -7
- package/dist/ghidra/GhidraInstallation.js +18 -21
- package/dist/ghidra/GhidraInventoryValues.js +14 -4
- package/dist/ghidra/GhidraJavaLaunch.js +62 -0
- package/dist/ghidra/GhidraLauncher.js +34 -16
- package/dist/ghidra/GhidraProvider.js +2 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +15 -3
- package/dist/ghidra/GhidraProviderClient.js +23 -12
- package/dist/ghidra/GhidraSessionError.js +11 -7
- package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
- package/dist/ghidra/GhidraTransport.js +20 -0
- package/dist/hopper/BridgeLauncher.js +33 -11
- package/dist/hopper/HopperAnalysisProfile.js +62 -4
- package/dist/hopper/HopperCleanup.js +15 -3
- package/dist/hopper/HopperClient.js +222 -14
- package/dist/hopper/HopperFileOffset.js +237 -0
- package/dist/hopper/HopperMachOImage.js +196 -0
- package/dist/hopper/HopperOperationStage.js +6 -0
- package/dist/hopper/HopperProvider.js +63 -9
- package/dist/hopper/HopperProviderCapabilities.js +19 -1
- package/dist/hopper/HopperRegexSearch.js +137 -0
- package/dist/hopper/HopperRegexWorker.js +27 -0
- package/dist/hopper/HopperRequestQueue.js +68 -19
- package/dist/hopper/HopperTargetLease.js +3 -2
- package/dist/hopper/LinuxPrivateDisplayProbe.js +4 -2
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
- package/dist/inspector/V8InspectorCaptureProjection.js +8 -3
- package/dist/inspector/V8InspectorProvider.js +47 -11
- package/dist/javascript/recovery/WakaruCommand.js +3 -0
- package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +17 -0
- package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
- package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
- 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 +32 -16
- 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 +82 -84
- package/dist/native/LldbCallTracer.js +541 -0
- package/dist/native/LldbRetainedObservations.js +178 -0
- package/dist/native/NativeCallObservation.js +194 -0
- package/dist/native/NativeMacOSProvider.js +117 -20
- package/dist/native/NativeMacOSProviderMetadata.js +8 -3
- package/dist/native/SignatureTargetBinding.js +155 -0
- package/dist/native/parsers/lipo.js +71 -1
- package/dist/native/pwndbg/PwndbgCoreContext.js +180 -0
- package/dist/native/pwntools/PwntoolsDecoder.js +203 -0
- package/dist/native/pwntools/PwntoolsFailures.js +180 -0
- package/dist/native/pwntools/PwntoolsLayoutProvider.js +36 -0
- package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +75 -0
- package/dist/native/pwntools/PwntoolsRelease.js +19 -0
- package/dist/native/pwntools/PwntoolsResourceLimits.js +76 -0
- package/dist/native/pwntools/RecordedCrashSourceBindings.js +46 -0
- package/dist/native/pwntools/RecordedCrashStructureBindings.js +103 -0
- package/dist/process/DarwinProcessRunTokenReader.js +293 -0
- package/dist/process/ExecFileOutput.js +20 -0
- package/dist/process/OwnedCommand.js +118 -0
- package/dist/process/ProcessOwnership.js +431 -51
- package/dist/process/ProcessOwnershipObservation.js +209 -27
- package/dist/process/ProviderProcess.js +68 -10
- package/dist/{application → process/capture}/ProcessCaptureCapability.js +15 -0
- package/dist/{application → process/capture}/ProcessCaptureError.js +18 -2
- package/dist/process/capture/ProcessCaptureLifecycle.js +681 -0
- package/dist/{application → process/capture}/ProcessHarness.js +195 -29
- package/dist/{application → process/capture}/ProcessSampling.js +2 -2
- package/dist/server/EvidenceMcpServer.js +146 -0
- package/dist/server/createServer.js +37 -8
- package/dist/server/promptCompletion.js +10 -3
- package/dist/server/registerAndroidTools.js +2 -4
- package/dist/server/registerApplicationTools/helpers.js +2 -4
- package/dist/server/registerArtifactComparisonTool.js +11 -7
- package/dist/server/registerBinaryDiagnosticsTools.js +15 -0
- package/dist/server/registerBrowserScenarioTool.js +2 -4
- package/dist/server/registerBrowserTools.js +2 -4
- package/dist/server/registerBundleComparisonTool.js +2 -3
- package/dist/server/registerCloseLifecycleTool.js +8 -18
- package/dist/server/registerElectronTools.js +2 -4
- package/dist/server/registerEnhancedTools.js +18 -59
- package/dist/server/registerEvidenceTools.js +3 -5
- package/dist/server/registerEvmTools.js +15 -0
- package/dist/server/registerFirmwareTools.js +2 -4
- package/dist/server/registerFunctionComparisonTool.js +10 -6
- package/dist/server/registerInvestigationTools.js +7 -7
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -4
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +2 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -4
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +2 -4
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +2 -4
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -4
- package/dist/server/registerOfficialTools.js +2 -4
- package/dist/server/registerProcessComparisonTool.js +72 -46
- package/dist/server/registerRecordedCrashTools.js +15 -0
- package/dist/server/registerSessionRecordTools.js +5 -6
- package/dist/server/registerSessionStatusTool.js +17 -3
- package/dist/server/registerSessionTools.js +13 -5
- package/dist/server/registerWebModuleTool.js +2 -4
- package/dist/server/registerWebNetworkCaptureTool.js +26 -0
- package/dist/server/registerWebRuntimeTools.js +3 -7
- package/dist/server/registerWebScriptTool.js +2 -4
- package/dist/server/registerWebSourceLocationTool.js +2 -4
- package/dist/server/runDerivedOperation.js +15 -3
- package/dist/server/sessionAvailabilityPolicy.js +3 -1
- package/dist/server/sessionToolPolicies.js +1 -1
- package/dist/server/toolRegistrationOptions.js +2 -2
- package/dist/server/toolResult.js +63 -11
- package/dist/server/toolResultEncoding.js +33 -0
- package/install.sh +1 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +42 -9
- package/scripts/electron-active-hook-boundaries.cjs +18 -20
- package/scripts/electron-active-hook.cjs +241 -37
- package/scripts/rea.mjs +11 -3
- package/skills/reverse-engineer-anything/SKILL.md +32 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +8 -1
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +29 -0
- package/third_party/README.md +60 -0
- package/third_party/evmole/LICENSE +21 -0
- package/third_party/evmole/README.md +22 -0
- package/third_party/pwndbg/LICENSE.md +21 -0
- package/third_party/pwndbg/README.md +23 -0
- package/third_party/pwntools/README.md +40 -0
- package/dist/application/AuthorizedArtifactInventory.js +0 -7
- package/dist/application/ProcessCaptureLifecycle.js +0 -299
- package/dist/application/StoreFileLock.js +0 -124
- package/dist/contracts/processCaptureExample.js +0 -2
- package/dist/domain/bytecodeProvider.js +0 -178
- package/dist/domain/customProtocolCapture.js +0 -137
- package/dist/domain/eventProcessTree.js +0 -225
- package/dist/domain/mobileApplicationInvestigation.js +0 -159
- package/dist/domain/packageAnalysis.js +0 -123
- package/dist/domain/peInspection.js +0 -197
- package/dist/domain/processCaptureParsing.js +0 -21
- package/dist/domain/protocolCapture.js +0 -217
- package/dist/domain/runtimeIdentification.js +0 -212
- package/dist/generatedMcpToolCatalog.js +0 -37
- package/dist/ghidra/GhidraDefaults.js +0 -2
- /package/dist/application/{ArtifactExtractionDestination.js → artifacts/ArtifactExtractionDestination.js} +0 -0
- /package/dist/{application/ArtifactInventory → artifacts/inventory}/policy.js +0 -0
- /package/dist/{application/ArtifactInventory → artifacts/inventory}/types.js +0 -0
- /package/dist/domain/{processEvidenceProvider.js → process/processEvidenceProvider.js} +0 -0
- /package/dist/domain/{processTraceComparison.js → process/processTraceComparison.js} +0 -0
- /package/dist/domain/{processTraceDimensionProjection.js → process/processTraceDimensionProjection.js} +0 -0
- /package/dist/domain/{processTraceEvaluation.js → process/processTraceEvaluation.js} +0 -0
- /package/dist/{application → process/capture}/FilesystemSnapshot.js +0 -0
- /package/dist/{application → process/capture}/ProcessCaptureEnvironment.js +0 -0
- /package/dist/{application → process/capture}/ProcessCaptureJournal.js +0 -0
- /package/dist/{application → process/capture}/ProcessFilesystemEffects.js +0 -0
- /package/dist/{application → process/capture}/ProcessNormalization.js +0 -0
- /package/dist/{application → process/capture}/ProcessScenarioRuntimeValidation.js +0 -0
- /package/dist/{application → process/capture}/ProcessTimer.js +0 -0
- /package/dist/{application → process/capture}/TerminalRenderer.js +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { historicalCaptureFailure, captureMemoryFailure, } from "./CaptureFailures.js";
|
|
2
|
+
import { projectAnalysisError } from "../../domain/analysisErrorProjection.js";
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
|
+
import { writeFile } from "node:fs/promises";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { readStableArtifact } from "../../artifacts/readStableArtifact.js";
|
|
8
|
+
import { ArtifactReaderFailure } from "../../artifacts/ArtifactReader.js";
|
|
9
|
+
import { AnalysisCapabilityUnavailableError, AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../../domain/analysisErrorCore.js";
|
|
10
|
+
import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
|
|
11
|
+
import { ProviderCleanupError } from "../../domain/providerCleanupError.js";
|
|
12
|
+
import { err, ok } from "../../domain/result.js";
|
|
13
|
+
import { WEB_NETWORK_CAPTURE_LIMITS, webNetworkCaptureSchema, } from "../../domain/webNetworkCapture.js";
|
|
14
|
+
import { runOwnedCommand } from "../../process/OwnedCommand.js";
|
|
15
|
+
import { PrivateRuntimeRoot } from "../../process/PrivateRuntimeRoot.js";
|
|
16
|
+
import { redactExplicitFailure } from "../../domain/explicitSensitiveFailure.js";
|
|
17
|
+
const OPERATION = "inspect_web_network_capture";
|
|
18
|
+
const decodedSchema = webNetworkCaptureSchema.omit({
|
|
19
|
+
artifact: true,
|
|
20
|
+
format: true,
|
|
21
|
+
runtime_attribution: true,
|
|
22
|
+
limitations: true,
|
|
23
|
+
});
|
|
24
|
+
const replySchema = z.discriminatedUnion("ok", [
|
|
25
|
+
z.strictObject({ ok: z.literal(true), value: decodedSchema }),
|
|
26
|
+
z.strictObject({
|
|
27
|
+
ok: z.literal(false),
|
|
28
|
+
reason: z.enum([
|
|
29
|
+
"format",
|
|
30
|
+
"unsupported",
|
|
31
|
+
"input-limit",
|
|
32
|
+
"resource-limit",
|
|
33
|
+
"decoder",
|
|
34
|
+
"limit",
|
|
35
|
+
]),
|
|
36
|
+
message: z.string(),
|
|
37
|
+
pointer: z.string(),
|
|
38
|
+
}),
|
|
39
|
+
]);
|
|
40
|
+
/** One owned snapshot/process/root lifecycle for replaceable historical format decoders. */
|
|
41
|
+
export class HistoricalCaptureDecoder {
|
|
42
|
+
adapters;
|
|
43
|
+
environment;
|
|
44
|
+
createRuntime;
|
|
45
|
+
constructor(adapters, environment, createRuntime = () => PrivateRuntimeRoot.create({ prefix: "rea-web-capture-" })) {
|
|
46
|
+
this.adapters = adapters;
|
|
47
|
+
this.environment = environment;
|
|
48
|
+
this.createRuntime = createRuntime;
|
|
49
|
+
}
|
|
50
|
+
/** Snapshot the selected artifact, decode it offline, and release private credentials and processes. */
|
|
51
|
+
async inspect(input, options) {
|
|
52
|
+
let runtime;
|
|
53
|
+
let result;
|
|
54
|
+
let phase = "capture-read";
|
|
55
|
+
try {
|
|
56
|
+
const adapter = this.adapters.find((candidate) => candidate.format === input.format);
|
|
57
|
+
if (adapter === undefined)
|
|
58
|
+
throw new AnalysisCapabilityUnavailableError(input.format, OPERATION, "No adapter is configured for the selected capture format.");
|
|
59
|
+
const snapshot = await readStableArtifact(input.capture_path, WEB_NETWORK_CAPTURE_LIMITS.inputBytes, options?.signal);
|
|
60
|
+
phase = "decoder";
|
|
61
|
+
runtime = await this.createRuntime();
|
|
62
|
+
const snapshotPath = join(runtime.path, "capture.snapshot");
|
|
63
|
+
const requestPath = join(runtime.path, "request.json");
|
|
64
|
+
const replyPath = join(runtime.path, "reply.json");
|
|
65
|
+
await writeFile(snapshotPath, snapshot.bytes, {
|
|
66
|
+
mode: 0o600,
|
|
67
|
+
flag: "wx",
|
|
68
|
+
...(options?.signal === undefined ? {} : { signal: options.signal }),
|
|
69
|
+
});
|
|
70
|
+
await writeFile(requestPath, JSON.stringify({
|
|
71
|
+
snapshot_path: snapshotPath,
|
|
72
|
+
reply_path: replyPath,
|
|
73
|
+
sensitive_values: input.sensitive_values,
|
|
74
|
+
}), { mode: 0o600, flag: "wx" });
|
|
75
|
+
const command = await adapter.command(requestPath, runtime.path);
|
|
76
|
+
const environment = {
|
|
77
|
+
...this.environment,
|
|
78
|
+
UV_THREADPOOL_SIZE: "1",
|
|
79
|
+
};
|
|
80
|
+
delete environment.NODE_OPTIONS;
|
|
81
|
+
await runOwnedCommand({
|
|
82
|
+
...command,
|
|
83
|
+
runId: `rea-web-capture-${randomUUID()}`,
|
|
84
|
+
cwd: runtime.path,
|
|
85
|
+
hostEnvironment: environment,
|
|
86
|
+
}, {
|
|
87
|
+
timeoutMs: WEB_NETWORK_CAPTURE_LIMITS.timeoutMs,
|
|
88
|
+
diagnosticBytes: 1024 * 1024,
|
|
89
|
+
}, options?.signal === undefined ? {} : { signal: options.signal });
|
|
90
|
+
let reply;
|
|
91
|
+
try {
|
|
92
|
+
const replyFile = await readStableArtifact(replyPath, WEB_NETWORK_CAPTURE_LIMITS.outputBytes, options?.signal);
|
|
93
|
+
reply = replySchema.parse(JSON.parse(replyFile.bytes.toString("utf8")));
|
|
94
|
+
}
|
|
95
|
+
catch (cause) {
|
|
96
|
+
if (options?.signal?.aborted)
|
|
97
|
+
throw new AnalysisCancelledError(OPERATION);
|
|
98
|
+
throw new AnalysisOutputError(OPERATION, `Owned capture decoder reply failed for ${input.capture_path}: ${replyFailureReason(cause)}`, { cause });
|
|
99
|
+
}
|
|
100
|
+
if (!reply.ok) {
|
|
101
|
+
if (reply.reason === "format")
|
|
102
|
+
throw new AnalysisInputError(OPERATION, undefined, [
|
|
103
|
+
{
|
|
104
|
+
path: ["capture_path", reply.pointer],
|
|
105
|
+
reason: "invalid_format",
|
|
106
|
+
message: reply.message,
|
|
107
|
+
},
|
|
108
|
+
]);
|
|
109
|
+
if (reply.reason === "input-limit")
|
|
110
|
+
throw new AnalysisInputError(OPERATION, undefined, [
|
|
111
|
+
{
|
|
112
|
+
path: ["capture_path", reply.pointer],
|
|
113
|
+
reason: "out_of_range",
|
|
114
|
+
message: reply.message,
|
|
115
|
+
expected: {
|
|
116
|
+
maximum_capture_nesting: WEB_NETWORK_CAPTURE_LIMITS.depth,
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
]);
|
|
120
|
+
if (reply.reason === "resource-limit")
|
|
121
|
+
throw captureMemoryFailure(input, reply.message);
|
|
122
|
+
if (reply.reason === "decoder")
|
|
123
|
+
throw new ProviderAdapterError(input.format, OPERATION, {
|
|
124
|
+
diagnostics: {
|
|
125
|
+
phase: "decoder",
|
|
126
|
+
failure_kind: reply.reason,
|
|
127
|
+
reason: reply.message,
|
|
128
|
+
pointer: reply.pointer,
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
if (reply.reason === "unsupported")
|
|
132
|
+
throw new AnalysisCapabilityUnavailableError(input.format, OPERATION, reply.message);
|
|
133
|
+
throw new AnalysisOutputError(OPERATION, reply.message);
|
|
134
|
+
}
|
|
135
|
+
if (reply.value.decoder.id !== adapter.identity.id ||
|
|
136
|
+
reply.value.decoder.name !== adapter.identity.name ||
|
|
137
|
+
reply.value.decoder.version !== adapter.identity.version)
|
|
138
|
+
throw new AnalysisOutputError(OPERATION, "Capture decoder changed the selected upstream profile identity.");
|
|
139
|
+
result = ok({
|
|
140
|
+
...reply.value,
|
|
141
|
+
artifact: {
|
|
142
|
+
path: input.capture_path,
|
|
143
|
+
sha256: snapshot.sha256,
|
|
144
|
+
bytes: snapshot.bytes.length,
|
|
145
|
+
},
|
|
146
|
+
format: input.format,
|
|
147
|
+
runtime_attribution: "unknown",
|
|
148
|
+
limitations: [
|
|
149
|
+
"This is retained producer evidence, without live browser transaction IDs, scenario provenance, execution attribution or deployment authenticity. Recorded URLs are never fetched.",
|
|
150
|
+
"Every record is decoded before selection; no partial success is returned on malformed input or a resource limit.",
|
|
151
|
+
"Known authentication headers/cookies and explicitly marked literal values are excluded. Unknown extension names do not establish sensitivity.",
|
|
152
|
+
"A 32 MiB input, 96 MiB reply and 64-level nesting budget bound complete evidence. HAR uses a 192 MiB Node old-generation heap; native decoding uses a 768 MiB Linux address-space limit. Each owned command has a 30-second deadline with independent cleanup.",
|
|
153
|
+
],
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
catch (cause) {
|
|
157
|
+
result = err(redactExplicitFailure(historicalCaptureFailure(input, cause, phase, options), input.sensitive_values));
|
|
158
|
+
}
|
|
159
|
+
if (runtime !== undefined) {
|
|
160
|
+
try {
|
|
161
|
+
await runtime.close();
|
|
162
|
+
}
|
|
163
|
+
catch (cause) {
|
|
164
|
+
return err(redactExplicitFailure(new ProviderCleanupError(input.format, [runtime.path], {
|
|
165
|
+
capture_path: input.capture_path,
|
|
166
|
+
previous_error: result.ok
|
|
167
|
+
? null
|
|
168
|
+
: projectAnalysisError(result.error),
|
|
169
|
+
reason: cause instanceof Error ? cause.message : String(cause),
|
|
170
|
+
}, { operation: OPERATION }), input.sensitive_values));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return result.ok && options?.signal?.aborted
|
|
174
|
+
? err(new AnalysisCancelledError(OPERATION))
|
|
175
|
+
: result;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const replyFailureReason = (cause) => {
|
|
179
|
+
if (cause instanceof ArtifactReaderFailure)
|
|
180
|
+
return cause.message;
|
|
181
|
+
if (cause instanceof z.ZodError)
|
|
182
|
+
return `Reply violates its schema at ${cause.issues[0]?.path.map(String).join(".") ?? "root"}.`;
|
|
183
|
+
if (cause instanceof SyntaxError)
|
|
184
|
+
return "Reply is malformed JSON.";
|
|
185
|
+
if (cause instanceof Error && "code" in cause)
|
|
186
|
+
return `Reply file could not be read (${String(cause.code)}).`;
|
|
187
|
+
return "Reply could not be validated.";
|
|
188
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { access } from "node:fs/promises";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { isAbsolute } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
|
6
|
+
import { MITMPROXY_CAPTURE_PROVIDER_IDENTITY } from "./CaptureRelease.js";
|
|
7
|
+
const OPERATION = "inspect_web_network_capture";
|
|
8
|
+
/** Native mitmproxy decoding is offline and uses only an explicitly configured Linux tool. */
|
|
9
|
+
export class MitmproxyCaptureAdapter {
|
|
10
|
+
environment;
|
|
11
|
+
format = "mitmproxy";
|
|
12
|
+
identity = MITMPROXY_CAPTURE_PROVIDER_IDENTITY;
|
|
13
|
+
constructor(environment) {
|
|
14
|
+
this.environment = environment;
|
|
15
|
+
}
|
|
16
|
+
async command(requestPath, runtimePath) {
|
|
17
|
+
const command = this.environment.REA_MITMDUMP_COMMAND;
|
|
18
|
+
if (process.platform !== "linux" ||
|
|
19
|
+
command === undefined ||
|
|
20
|
+
!isAbsolute(command))
|
|
21
|
+
throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION, "Native capture decoding requires Linux and an absolute REA_MITMDUMP_COMMAND path to caller-supplied mitmdump 12.2.3; HAR needs no external engine.");
|
|
22
|
+
try {
|
|
23
|
+
await access(command, constants.R_OK | constants.X_OK);
|
|
24
|
+
}
|
|
25
|
+
catch (cause) {
|
|
26
|
+
throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION, `Configured mitmdump executable is unavailable: ${command}.`, { cause });
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
command,
|
|
30
|
+
arguments: [
|
|
31
|
+
"--no-server",
|
|
32
|
+
"-q",
|
|
33
|
+
"--set",
|
|
34
|
+
`confdir=${runtimePath}`,
|
|
35
|
+
"--set",
|
|
36
|
+
`rea_request_path=${requestPath}`,
|
|
37
|
+
"-s",
|
|
38
|
+
fileURLToPath(new URL("../../../bridge/mitmproxy/capture.py", import.meta.url)),
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
2
|
+
/** Preserve a CLI selector supplied positionally or through its named option. */
|
|
3
|
+
export const resolveCliAnalysisSelector = (positional, named, option, operation) => {
|
|
4
|
+
if (positional !== undefined && named !== undefined && positional !== named)
|
|
5
|
+
throw new AnalysisInputError(operation, undefined, [
|
|
6
|
+
{
|
|
7
|
+
path: [option],
|
|
8
|
+
reason: "invalid_value",
|
|
9
|
+
message: `The positional selector and --${option} select different objects; supply one selector.`,
|
|
10
|
+
},
|
|
11
|
+
]);
|
|
12
|
+
const selected = named ?? positional;
|
|
13
|
+
if (selected === undefined)
|
|
14
|
+
throw new AnalysisInputError(operation, undefined, [
|
|
15
|
+
{
|
|
16
|
+
path: [option],
|
|
17
|
+
reason: "missing_argument",
|
|
18
|
+
message: `Supply a positional selector or --${option}=<value>. Use the named option for values beginning with a dash.`,
|
|
19
|
+
expected: "string",
|
|
20
|
+
},
|
|
21
|
+
]);
|
|
22
|
+
return selected;
|
|
23
|
+
};
|
|
@@ -9,7 +9,6 @@ import { buildReconstructionObligationLedgerEvidenceValidated } from "../applica
|
|
|
9
9
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
10
10
|
import { parseCliJsonInput } from "../cliJsonInput.js";
|
|
11
11
|
import { logCliCommand } from "../cliLogging.js";
|
|
12
|
-
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
13
12
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
14
13
|
import {} from "../domain/analysisErrorBase.js";
|
|
15
14
|
import { androidApplicationProjectionInputSchema } from "../domain/android/androidApplication.js";
|
|
@@ -20,7 +19,7 @@ import { traceJavaScriptSemanticsInputSchema } from "../domain/javascript/javasc
|
|
|
20
19
|
import { compareApplicationVersionsInputSchema } from "../domain/javascript/javascriptApplicationVersionComparisonSchemas.js";
|
|
21
20
|
import { compareSourceToBundleInputSchema } from "../domain/javascript/sourceToBundleComparisonSchemas.js";
|
|
22
21
|
import { compareJavaScriptExportShapesInputSchema } from "../domain/javascript/javascriptExportShapeComparisonSchemas.js";
|
|
23
|
-
import {
|
|
22
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
24
23
|
import { reconstructionObligationLedgerInputSchema } from "../domain/reconstructionObligationLedgerSchemas.js";
|
|
25
24
|
/** Register CLI equivalents of provider-neutral application graph workflows. */
|
|
26
25
|
export const registerApplicationCommands = (cli, logger) => {
|
|
@@ -133,7 +132,7 @@ const registerJsonCommand = ({ cli, logger, name, description, inputSchema, work
|
|
|
133
132
|
if (!parsed.success)
|
|
134
133
|
return {
|
|
135
134
|
error: "Application workflow failed",
|
|
136
|
-
...projectAnalysisError(
|
|
135
|
+
...projectAnalysisError(analysisInputErrorFromIssues(name, parsed.error.issues, input.value)),
|
|
137
136
|
};
|
|
138
137
|
const result = workflow(parsed.data);
|
|
139
138
|
return result.ok
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
2
|
import { runProviderAnalysis } from "../composition/directAnalysis.js";
|
|
3
|
-
import { createArtifactExtractionDestination } from "../application/ArtifactExtractionDestination.js";
|
|
3
|
+
import { createArtifactExtractionDestination } from "../application/artifacts/ArtifactExtractionDestination.js";
|
|
4
4
|
import { logCliCommand } from "../cliLogging.js";
|
|
5
5
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
6
6
|
export const registerArtifactCommands = (cli, logger) => {
|
|
@@ -8,6 +8,7 @@ export const registerArtifactCommands = (cli, logger) => {
|
|
|
8
8
|
registerExtractionCommand(cli, logger);
|
|
9
9
|
registerInterfaceBuilderCommand(cli, logger);
|
|
10
10
|
registerAssetCatalogCommand(cli, logger);
|
|
11
|
+
registerDylibResolutionCommand(cli, logger);
|
|
11
12
|
cli.command(CLI_COMMANDS.inspectKeyedArchive, {
|
|
12
13
|
description: "Inspect a Foundation keyed archive as an object-reference graph",
|
|
13
14
|
args: z.object({
|
|
@@ -41,6 +42,30 @@ export const registerArtifactCommands = (cli, logger) => {
|
|
|
41
42
|
}, logger)),
|
|
42
43
|
});
|
|
43
44
|
};
|
|
45
|
+
const registerDylibResolutionCommand = (cli, logger) => {
|
|
46
|
+
cli.command(CLI_COMMANDS.traceDylibResolution, {
|
|
47
|
+
description: "Trace dyld load-path resolution for a Mach-O or every executable in an app bundle",
|
|
48
|
+
args: z.object({
|
|
49
|
+
path: z.string().describe("Mach-O file or Apple .app bundle path"),
|
|
50
|
+
}),
|
|
51
|
+
options: z.object({
|
|
52
|
+
root: z
|
|
53
|
+
.array(z.string())
|
|
54
|
+
.optional()
|
|
55
|
+
.describe("Process root relative to the bundle or the Mach-O's directory (repeatable)"),
|
|
56
|
+
architecture: z
|
|
57
|
+
.enum(["arm64", "arm64e", "x86_64"])
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("Trace only this slice of each root"),
|
|
60
|
+
}),
|
|
61
|
+
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.traceDylibResolution, () => runProviderAnalysis(args.path, "trace_dylib_resolution", {
|
|
62
|
+
...(options.root === undefined ? {} : { roots: options.root }),
|
|
63
|
+
...(options.architecture === undefined
|
|
64
|
+
? {}
|
|
65
|
+
: { architecture: options.architecture }),
|
|
66
|
+
}, logger)),
|
|
67
|
+
});
|
|
68
|
+
};
|
|
44
69
|
const registerAssetCatalogCommand = (cli, logger) => {
|
|
45
70
|
cli.command(CLI_COMMANDS.inspectAssetCatalog, {
|
|
46
71
|
description: "Inspect compiled Apple asset catalog metadata",
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from "incur";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { createRecordedCrashService, createBinaryLayoutService, } from "../composition/binaryDiagnostics.js";
|
|
4
|
+
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
5
|
+
import { logCliCommand } from "../cliLogging.js";
|
|
6
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
7
|
+
import { withCommandCancellation } from "./commandCancellation.js";
|
|
8
|
+
/** Inspect operator-selected files through the same shared workflow as MCP. */
|
|
9
|
+
export const registerBinaryDiagnosticsCommands = (cli, logger, environment) => {
|
|
10
|
+
const service = createBinaryLayoutService(environment);
|
|
11
|
+
cli.command(CLI_COMMANDS.inspectBinaryLayout, {
|
|
12
|
+
description: "Inspect binary file/linked layout without executing the selected object",
|
|
13
|
+
args: z.object({
|
|
14
|
+
path: z.string().describe("Local ELF binary or relocatable object"),
|
|
15
|
+
}),
|
|
16
|
+
run: ({ args }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.inspectBinaryLayout, async () => {
|
|
17
|
+
const result = await service.inspect({ path: resolve(args.path) }, { signal });
|
|
18
|
+
return result.ok ? result.value : projectAnalysisError(result.error);
|
|
19
|
+
})),
|
|
20
|
+
});
|
|
21
|
+
const recorded = createRecordedCrashService(environment);
|
|
22
|
+
cli.command(CLI_COMMANDS.inspectRecordedCrash, {
|
|
23
|
+
description: "Inspect supplied core registers/signals and optional debugger mapping evidence",
|
|
24
|
+
args: z.object({ path: z.string().describe("Local Linux amd64 ELF core") }),
|
|
25
|
+
options: z.object({
|
|
26
|
+
debuggerContext: z
|
|
27
|
+
.boolean()
|
|
28
|
+
.default(false)
|
|
29
|
+
.describe("Add BYO core-only GDB/pwndbg mapping candidates"),
|
|
30
|
+
}),
|
|
31
|
+
run: ({ args, options }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.inspectRecordedCrash, async () => {
|
|
32
|
+
const result = await recorded.inspect({
|
|
33
|
+
path: resolve(args.path),
|
|
34
|
+
include_debugger_context: options.debuggerContext,
|
|
35
|
+
}, { signal });
|
|
36
|
+
return result.ok ? result.value : projectAnalysisError(result.error);
|
|
37
|
+
})),
|
|
38
|
+
});
|
|
39
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { registerCoreBinaryCommands } from "./coreBinaryCommands.js";
|
|
2
2
|
import { registerCoreNativeCommands } from "./coreNativeCommands.js";
|
|
3
3
|
/** Register core binary and native deep-analysis CLI commands. */
|
|
4
|
-
export const registerCoreAnalysisCommands = (cli, logger) => {
|
|
5
|
-
registerCoreBinaryCommands(cli, logger);
|
|
4
|
+
export const registerCoreAnalysisCommands = (cli, logger, resultOutput) => {
|
|
5
|
+
registerCoreBinaryCommands(cli, logger, resultOutput);
|
|
6
6
|
registerCoreNativeCommands(cli, logger);
|
|
7
7
|
};
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
2
|
import { stat } from "node:fs/promises";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
|
+
import { resolveCliAnalysisSelector } from "./analysisSelector.js";
|
|
4
5
|
import { runDirectAnalysis } from "../composition/directAnalysis.js";
|
|
5
6
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
6
7
|
import { logCliCommand } from "../cliLogging.js";
|
|
7
8
|
import { directAnalysisOptions, formatSelectionOption, providerSelectionOption, } from "./options.js";
|
|
8
9
|
import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
|
|
9
10
|
/** Register provider-neutral binary overview and procedure CLI commands. */
|
|
10
|
-
export const registerCoreBinaryCommands = (cli, logger) => {
|
|
11
|
-
registerOverviewCommands(cli, logger);
|
|
11
|
+
export const registerCoreBinaryCommands = (cli, logger, resultOutput) => {
|
|
12
|
+
registerOverviewCommands(cli, logger, resultOutput);
|
|
13
|
+
registerDecompileCommand(cli, logger);
|
|
12
14
|
registerFunctionCommand(cli, logger);
|
|
13
15
|
registerInstructionsCommand(cli, logger);
|
|
14
16
|
registerSearchCommand(cli, logger);
|
|
15
17
|
registerXrefsCommand(cli, logger);
|
|
16
18
|
registerTraceCommand(cli, logger);
|
|
17
19
|
};
|
|
18
|
-
const registerOverviewCommands = (cli, logger) => {
|
|
20
|
+
const registerOverviewCommands = (cli, logger, resultOutput) => {
|
|
19
21
|
const overviewOptions = z.object({
|
|
20
22
|
snapshot: z
|
|
21
23
|
.string()
|
|
@@ -31,7 +33,9 @@ const registerOverviewCommands = (cli, logger) => {
|
|
|
31
33
|
path: z.string().describe("App, program, or analysis database path"),
|
|
32
34
|
}),
|
|
33
35
|
options: overviewOptions,
|
|
34
|
-
run: ({ args, options }) => logCliCommand(logger, "analyze", () => runRoutedOverview(args.path, options, logger
|
|
36
|
+
run: ({ args, options, format }) => logCliCommand(logger, "analyze", () => runRoutedOverview(args.path, options, logger, resultOutput === undefined
|
|
37
|
+
? undefined
|
|
38
|
+
: { output: resultOutput, command: CLI_COMMANDS.analyze, format })),
|
|
35
39
|
});
|
|
36
40
|
cli.command(CLI_COMMANDS.inspect, {
|
|
37
41
|
description: "Inspect an app overview with evidence",
|
|
@@ -41,13 +45,24 @@ const registerOverviewCommands = (cli, logger) => {
|
|
|
41
45
|
options: overviewOptions,
|
|
42
46
|
run: ({ args, options }) => logCliCommand(logger, "inspect", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
43
47
|
});
|
|
48
|
+
};
|
|
49
|
+
const registerDecompileCommand = (cli, logger) => {
|
|
44
50
|
cli.command(CLI_COMMANDS.decompile, {
|
|
45
51
|
description: "Read one part of an app as code",
|
|
46
52
|
args: z.object({
|
|
47
53
|
path: z.string().describe("App or program path"),
|
|
48
|
-
address: z
|
|
54
|
+
address: z
|
|
55
|
+
.string()
|
|
56
|
+
.min(1)
|
|
57
|
+
.optional()
|
|
58
|
+
.describe("Procedure name or address"),
|
|
49
59
|
}),
|
|
50
60
|
options: z.object({
|
|
61
|
+
procedure: z
|
|
62
|
+
.string()
|
|
63
|
+
.min(1)
|
|
64
|
+
.optional()
|
|
65
|
+
.describe("Procedure name or address; use --procedure=<value> for leading dashes"),
|
|
51
66
|
snapshot: z
|
|
52
67
|
.string()
|
|
53
68
|
.min(1)
|
|
@@ -56,17 +71,17 @@ const registerOverviewCommands = (cli, logger) => {
|
|
|
56
71
|
"target-format": formatSelectionOption,
|
|
57
72
|
provider: providerSelectionOption,
|
|
58
73
|
}),
|
|
59
|
-
run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", {
|
|
74
|
+
run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", {
|
|
75
|
+
procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "procedure_pseudo_code"),
|
|
76
|
+
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
60
77
|
});
|
|
61
78
|
};
|
|
62
|
-
const runRoutedOverview = async (path, options, logger) => {
|
|
79
|
+
const runRoutedOverview = async (path, options, logger, output) => {
|
|
63
80
|
if (options.provider === undefined &&
|
|
64
81
|
options.snapshot === undefined &&
|
|
65
82
|
options["target-format"] === undefined &&
|
|
66
83
|
(await isJavaScriptApplicationPath(path)))
|
|
67
|
-
return runCliJavaScriptApplicationAnalysis({
|
|
68
|
-
input_path: resolve(path),
|
|
69
|
-
});
|
|
84
|
+
return runCliJavaScriptApplicationAnalysis({ input_path: resolve(path) }, output);
|
|
70
85
|
return runDirectAnalysis(path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]));
|
|
71
86
|
};
|
|
72
87
|
const isJavaScriptApplicationPath = async (path) => {
|
|
@@ -90,9 +105,14 @@ const registerXrefsCommand = (cli, logger) => {
|
|
|
90
105
|
description: "List bounded references to an analyzed address",
|
|
91
106
|
args: z.object({
|
|
92
107
|
path: z.string().describe("App or program path"),
|
|
93
|
-
address: z.string().describe("
|
|
108
|
+
address: z.string().min(1).optional().describe("Address or symbol name"),
|
|
94
109
|
}),
|
|
95
110
|
options: z.object({
|
|
111
|
+
address: z
|
|
112
|
+
.string()
|
|
113
|
+
.min(1)
|
|
114
|
+
.optional()
|
|
115
|
+
.describe("Address or symbol name; use --address=<value> for leading dashes"),
|
|
96
116
|
snapshot: z
|
|
97
117
|
.string()
|
|
98
118
|
.min(1)
|
|
@@ -101,7 +121,9 @@ const registerXrefsCommand = (cli, logger) => {
|
|
|
101
121
|
"target-format": formatSelectionOption,
|
|
102
122
|
provider: providerSelectionOption,
|
|
103
123
|
}),
|
|
104
|
-
run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", {
|
|
124
|
+
run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", {
|
|
125
|
+
address: resolveCliAnalysisSelector(args.address, options.address, "address", "xrefs"),
|
|
126
|
+
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
105
127
|
});
|
|
106
128
|
};
|
|
107
129
|
const registerTraceCommand = (cli, logger) => {
|
|
@@ -109,9 +131,14 @@ const registerTraceCommand = (cli, logger) => {
|
|
|
109
131
|
description: "Trace a literal feature through analyzed references",
|
|
110
132
|
args: z.object({
|
|
111
133
|
path: z.string().describe("App or program path"),
|
|
112
|
-
query: z.string().min(1).describe("Literal feature query"),
|
|
134
|
+
query: z.string().min(1).optional().describe("Literal feature query"),
|
|
113
135
|
}),
|
|
114
136
|
options: z.object({
|
|
137
|
+
query: z
|
|
138
|
+
.string()
|
|
139
|
+
.min(1)
|
|
140
|
+
.optional()
|
|
141
|
+
.describe("Complete literal feature query; use --query=<value> for leading dashes"),
|
|
115
142
|
caseSensitive: z
|
|
116
143
|
.boolean()
|
|
117
144
|
.default(false)
|
|
@@ -128,7 +155,7 @@ const registerTraceCommand = (cli, logger) => {
|
|
|
128
155
|
caseSensitive: "case-sensitive",
|
|
129
156
|
},
|
|
130
157
|
run: ({ args, options }) => logCliCommand(logger, "trace", () => runDirectAnalysis(args.path, "trace_feature", {
|
|
131
|
-
query: args.query,
|
|
158
|
+
query: resolveCliAnalysisSelector(args.query, options.query, "query", "trace_feature"),
|
|
132
159
|
case_sensitive: options.caseSensitive,
|
|
133
160
|
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
134
161
|
});
|
|
@@ -138,9 +165,18 @@ const registerFunctionCommand = (cli, logger) => {
|
|
|
138
165
|
description: "Analyze one complete function with evidence",
|
|
139
166
|
args: z.object({
|
|
140
167
|
path: z.string().describe("App or program path"),
|
|
141
|
-
address: z
|
|
168
|
+
address: z
|
|
169
|
+
.string()
|
|
170
|
+
.min(1)
|
|
171
|
+
.optional()
|
|
172
|
+
.describe("Procedure name or address"),
|
|
142
173
|
}),
|
|
143
174
|
options: z.object({
|
|
175
|
+
procedure: z
|
|
176
|
+
.string()
|
|
177
|
+
.min(1)
|
|
178
|
+
.optional()
|
|
179
|
+
.describe("Procedure name or address; use --procedure=<value> for leading dashes"),
|
|
144
180
|
snapshot: z
|
|
145
181
|
.string()
|
|
146
182
|
.min(1)
|
|
@@ -149,7 +185,9 @@ const registerFunctionCommand = (cli, logger) => {
|
|
|
149
185
|
"target-format": formatSelectionOption,
|
|
150
186
|
provider: providerSelectionOption,
|
|
151
187
|
}),
|
|
152
|
-
run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", {
|
|
188
|
+
run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", {
|
|
189
|
+
procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "analyze_function"),
|
|
190
|
+
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
153
191
|
});
|
|
154
192
|
};
|
|
155
193
|
const registerInstructionsCommand = (cli, logger) => {
|
|
@@ -157,9 +195,18 @@ const registerInstructionsCommand = (cli, logger) => {
|
|
|
157
195
|
description: "Read every raw instruction without decompiling",
|
|
158
196
|
args: z.object({
|
|
159
197
|
path: z.string().describe("App or program path"),
|
|
160
|
-
address: z
|
|
198
|
+
address: z
|
|
199
|
+
.string()
|
|
200
|
+
.min(1)
|
|
201
|
+
.optional()
|
|
202
|
+
.describe("Procedure name or address"),
|
|
161
203
|
}),
|
|
162
204
|
options: z.object({
|
|
205
|
+
procedure: z
|
|
206
|
+
.string()
|
|
207
|
+
.min(1)
|
|
208
|
+
.optional()
|
|
209
|
+
.describe("Procedure name or address; use --procedure=<value> for leading dashes"),
|
|
163
210
|
snapshot: z
|
|
164
211
|
.string()
|
|
165
212
|
.min(1)
|
|
@@ -169,7 +216,7 @@ const registerInstructionsCommand = (cli, logger) => {
|
|
|
169
216
|
provider: providerSelectionOption,
|
|
170
217
|
}),
|
|
171
218
|
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.instructions, () => runDirectAnalysis(args.path, "read_function_instructions", {
|
|
172
|
-
procedure: args.address,
|
|
219
|
+
procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "read_function_instructions"),
|
|
173
220
|
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
174
221
|
});
|
|
175
222
|
};
|
|
@@ -178,9 +225,18 @@ const registerSearchCommand = (cli, logger) => {
|
|
|
178
225
|
description: "Search every analyzed string or procedure name",
|
|
179
226
|
args: z.object({
|
|
180
227
|
path: z.string().describe("App or program path"),
|
|
181
|
-
pattern: z
|
|
228
|
+
pattern: z
|
|
229
|
+
.string()
|
|
230
|
+
.min(1)
|
|
231
|
+
.optional()
|
|
232
|
+
.describe("Literal text or regex pattern"),
|
|
182
233
|
}),
|
|
183
234
|
options: z.object({
|
|
235
|
+
pattern: z
|
|
236
|
+
.string()
|
|
237
|
+
.min(1)
|
|
238
|
+
.optional()
|
|
239
|
+
.describe("Complete literal text or regex pattern; use --pattern=<value> for leading dashes"),
|
|
184
240
|
kind: z
|
|
185
241
|
.enum(["strings", "procedures"])
|
|
186
242
|
.default("strings")
|
|
@@ -203,7 +259,9 @@ const registerSearchCommand = (cli, logger) => {
|
|
|
203
259
|
}),
|
|
204
260
|
alias: { caseSensitive: "case-sensitive" },
|
|
205
261
|
run: ({ args, options }) => logCliCommand(logger, "search", () => runDirectAnalysis(args.path, options.kind === "strings" ? "search_strings" : "search_procedures", {
|
|
206
|
-
pattern: args.pattern,
|
|
262
|
+
pattern: resolveCliAnalysisSelector(args.pattern, options.pattern, "pattern", options.kind === "strings"
|
|
263
|
+
? "search_strings"
|
|
264
|
+
: "search_procedures"),
|
|
207
265
|
mode: options.mode,
|
|
208
266
|
case_sensitive: options.caseSensitive,
|
|
209
267
|
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|