rea-agents 4.0.0 → 4.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 +93 -30
- package/bridge/ghidra/ReaGhidraBridge.java +358 -15
- package/bridge/ghidra/ReaGhidraExtensions.java +113 -0
- package/bridge/ghidra/ReaGhidraPrepareCom.java +32 -0
- package/dist/android/AndroidTargetSnapshot.js +34 -0
- package/dist/android/JadxAnalysis.js +191 -0
- package/dist/android/JadxConfiguration.js +41 -0
- package/dist/android/JadxMcpTransport.js +145 -0
- package/dist/android/JadxProtocol.js +101 -0
- package/dist/android/JadxProvider.js +170 -0
- package/dist/android/JadxRelease.js +19 -0
- package/dist/android/JadxSession.js +97 -0
- package/dist/application/AnalysisContextQueries.js +2 -1
- package/dist/application/AnalysisProviderEvaluation.js +5 -3
- package/dist/application/AnalysisProviderRegistry.js +2 -1
- package/dist/application/AnalysisSnapshotCache.js +4 -1
- package/dist/application/AnalysisSnapshotFiles.js +1 -1
- package/dist/application/AndroidAnalysisPort.js +1 -0
- package/dist/application/AndroidAnalysisService.js +37 -0
- package/dist/application/ArtifactExtraction.js +7 -4
- package/dist/application/ArtifactGraphConstruction.js +10 -17
- package/dist/application/ArtifactInventory/scanCanonical.js +8 -7
- package/dist/application/BinarySession.js +16 -3
- package/dist/application/BinarySessionExecution.js +4 -1
- package/dist/application/BinarySessionOpen.js +3 -2
- package/dist/application/BinarySessionRecords.js +9 -3
- package/dist/application/BinaryTargetResolver.js +25 -6
- package/dist/application/BrowserObservationService.js +2 -1
- package/dist/application/BrowserScenarioCaptureService.js +2 -1
- package/dist/application/BrowserScenarioEvidence.js +2 -2
- package/dist/application/CallPathTracing.js +2 -1
- package/dist/application/CapabilityInventory.js +18 -0
- package/dist/application/ClientConfigPath.js +3 -1
- package/dist/application/ClientConfigurationDocument.js +11 -1
- package/dist/application/ClientRegistrationStatus.js +8 -1
- package/dist/application/CompositeProvider.js +1 -1
- package/dist/application/DirectAnalysis.js +23 -7
- package/dist/application/DirectAnalysisStatus.js +3 -3
- package/dist/application/Doctor.js +48 -8
- package/dist/application/DoctorDiagnostics.js +7 -5
- package/dist/application/DoctorScope.js +1 -1
- package/dist/application/ElectronActiveEvidence.js +2 -2
- package/dist/application/ElectronActiveObservationService.js +2 -1
- package/dist/application/ElectronBoundaryAnalysis.js +1 -1
- package/dist/application/ElectronObservationService.js +2 -1
- package/dist/application/EnhancedLiteralTracing.js +2 -1
- package/dist/application/EnhancedToolTypes.js +2 -1
- package/dist/application/EnhancedTools.js +3 -1
- package/dist/application/EvidenceBundleCommands.js +2 -1
- package/dist/application/EvidenceBundleFiles.js +1 -1
- package/dist/application/EvidenceInputResolver.js +30 -0
- package/dist/application/EvidenceLedger.js +2 -1
- package/dist/application/FirmwareAnalysisPort.js +1 -0
- package/dist/application/FirmwareAnalysisService.js +35 -0
- package/dist/application/FunctionAnalysisEvidence.js +32 -0
- package/dist/application/InventoryProjectionEvidence.js +2 -1
- package/dist/application/JavaScriptApplicationService.js +50 -3
- package/dist/application/JavaScriptApplicationWorkflowService.js +2 -1
- package/dist/application/JavaScriptArtifactAnalysis.js +4 -2
- package/dist/application/JavaScriptArtifactFiles.js +4 -2
- package/dist/application/JavaScriptArtifactPathResolution.js +6 -2
- package/dist/application/JavaScriptJsonModules.js +3 -2
- package/dist/application/JavaScriptModuleRelationships.js +4 -2
- package/dist/application/JavaScriptRuntimeObservationService.js +2 -1
- package/dist/application/JavaScriptRuntimeReconciliationService.js +2 -1
- package/dist/application/JavaScriptSemanticGraphProjection.js +1 -1
- package/dist/application/JavaScriptSemanticTraceService.js +2 -1
- package/dist/application/JsonFiles.js +1 -1
- package/dist/application/LazyAnalysisProvider.js +3 -1
- package/dist/application/LinuxHopper.js +12 -4
- package/dist/application/MacHopper.js +20 -7
- package/dist/application/ManagedApplicationGraphService.js +2 -1
- package/dist/application/ManagedMemberComparisonService.js +3 -1
- package/dist/application/ManagedNativeVerificationService.js +2 -1
- package/dist/application/ManagedReconstructionService.js +2 -1
- package/dist/application/NativeCallRoutes.js +1 -1
- package/dist/application/NativeDispatchMetadataInspection.js +1 -1
- package/dist/application/NativeUiActionTrace.js +2 -1
- package/dist/application/NativeValueTrace.js +1 -1
- package/dist/application/ProcessCaptureError.js +1 -1
- package/dist/application/ProcessCaptureJournal.js +3 -1
- package/dist/application/ProcessCaptureLifecycle.js +6 -3
- package/dist/application/ProcessCli.js +9 -5
- package/dist/application/ProcessEvidence.js +2 -6
- package/dist/application/ProcessHarness.js +3 -2
- package/dist/application/ProcessNormalization.js +12 -5
- package/dist/application/ProcessSampling.js +3 -1
- package/dist/application/ReconstructionCoverageService.js +2 -1
- package/dist/application/ReconstructionObligationLedgerService.js +2 -1
- package/dist/application/ReferenceSourceImportEntries.js +2 -0
- package/dist/application/ReferenceSourceImportPolicy.js +4 -2
- package/dist/application/ReferenceSourceVcsAdapter.js +35 -4
- package/dist/application/SessionProviderRouter.js +4 -1
- package/dist/application/Setup.js +1 -128
- package/dist/application/SetupClientConfiguration.js +17 -6
- package/dist/application/SetupHost.js +111 -0
- package/dist/application/SetupRegistrationEnvironment.js +1 -2
- package/dist/application/SetupSkill.js +9 -3
- package/dist/application/SetupTypes.js +17 -0
- package/dist/application/StoreFileLock.js +7 -2
- package/dist/application/SupportedClients.js +8 -0
- package/dist/application/Uninstall.js +9 -4
- package/dist/application/UpdateRuntime.js +5 -2
- package/dist/application/WindowsCapabilities.js +7 -7
- package/dist/application/runtime.js +3 -1
- package/dist/artifacts/ArtifactProvider.js +3 -1
- package/dist/artifacts/DirectoryArtifactReader.js +2 -0
- package/dist/artifacts/NativeDmgArtifactReader.js +10 -3
- package/dist/artifacts/NibArchive.js +4 -2
- package/dist/artifacts/SafeOutputTree.js +26 -10
- package/dist/artifacts/ZipArtifactReader.js +1 -0
- package/dist/browser/BrowserProcessStartup.js +3 -1
- package/dist/browser/CdpAuthorizedMainFrame.js +1 -1
- package/dist/browser/CdpBrowserProvider.js +4 -1
- package/dist/browser/CdpCaptureDocuments.js +3 -1
- package/dist/browser/CdpCaptureEventHandlers.js +6 -2
- package/dist/browser/CdpCaptureStorageFingerprints.js +1 -1
- package/dist/browser/CdpCaptureValues.js +6 -2
- package/dist/browser/CdpConnection.js +8 -6
- package/dist/browser/CdpElectronInspection.js +3 -3
- package/dist/browser/CdpElectronProvider.js +4 -1
- package/dist/browser/CdpElectronScripts.js +2 -2
- package/dist/browser/CdpEndpoint.js +22 -10
- package/dist/browser/CdpObservationSession.js +2 -1
- package/dist/browser/CdpOptionalCommand.js +1 -1
- package/dist/browser/CdpPageCapture.js +2 -1
- package/dist/browser/CdpSafeMetadata.js +53 -8
- package/dist/browser/CdpScreenshot.js +1 -1
- package/dist/browser/CdpTargetSession.js +8 -5
- package/dist/browser/CdpWebMcpDiscovery.js +1 -1
- package/dist/browser/ElectronFileScope.js +9 -3
- package/dist/browser/JavaScriptRuntimeScope.js +3 -1
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +3 -1
- package/dist/browser/PlaywrightElectronActiveActions.js +1 -1
- package/dist/browser/PlaywrightElectronActiveProvider.js +6 -2
- package/dist/browser/PlaywrightExecutionBoundary.js +1 -1
- package/dist/browser/PlaywrightScenarioArtifacts.js +10 -5
- package/dist/browser/PlaywrightScenarioBrowser.js +3 -1
- package/dist/browser/PlaywrightScenarioEvents.js +6 -2
- package/dist/browser/PlaywrightScenarioSession.js +5 -2
- package/dist/browser/V8InspectorEndpoint.js +2 -1
- package/dist/browser/V8InspectorProvider.js +6 -1
- package/dist/browser/WebSourceMapFetcher.js +24 -11
- package/dist/cli/androidCommands.js +81 -0
- package/dist/{cliApplicationCommands.js → cli/applicationCommands.js} +18 -16
- package/dist/{cliBrowserAdvancedCommands.js → cli/browserAdvancedCommands.js} +13 -16
- package/dist/{cliBrowserCommands.js → cli/browserCommands.js} +9 -9
- package/dist/cli/commandCancellation.js +24 -0
- package/dist/cli/coreAnalysisCommands.js +110 -17
- package/dist/{cliElectronCommands.js → cli/electronCommands.js} +14 -13
- package/dist/cli/firmwareCommands.js +75 -0
- package/dist/{cliSetup.js → cli/interactiveSetup.js} +1 -1
- package/dist/cli/javascriptApplicationAnalysis.js +1 -1
- package/dist/cli/managedCommands.js +1 -1
- package/dist/cli/managedProjectGraphCommand.js +1 -1
- package/dist/cli/options.js +7 -1
- package/dist/{cliProcessCommands.js → cli/processCommands.js} +3 -3
- package/dist/cli/referenceSourceImportStatus.js +10 -0
- package/dist/cli/setupCommands.js +4 -2
- package/dist/cli/utilityCommands.js +3 -2
- package/dist/cli.js +10 -15
- package/dist/cliBrowserContext.js +1 -1
- package/dist/cliBrowserScenarioCommands.js +2 -1
- package/dist/cliCommandNames.js +11 -2
- package/dist/cliEvidenceCommands.js +2 -1
- package/dist/cliJavaScriptRuntimeCommands.js +2 -1
- package/dist/cliJsonInput.js +26 -11
- package/dist/cliLogging.js +2 -1
- package/dist/cliOutput.js +15 -16
- package/dist/config/environment.js +11 -1
- package/dist/config/parseConfig.js +7 -1
- package/dist/config/parsers.js +1 -1
- package/dist/contracts/androidToolContracts.js +77 -0
- package/dist/contracts/applicationToolContracts.js +32 -5
- package/dist/contracts/applicationWorkflowInputContracts.js +13 -13
- package/dist/contracts/artifactComparisonExample.js +7 -14
- package/dist/contracts/enhancedToolContracts.js +31 -0
- package/dist/contracts/errorSchemas.js +4 -2
- package/dist/contracts/evidenceInputContracts.js +13 -0
- package/dist/contracts/firmwareToolContracts.js +38 -0
- package/dist/contracts/officialToolContracts.js +66 -0
- package/dist/contracts/promptContracts.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +4 -0
- package/dist/contracts/sessionToolContracts.js +43 -0
- package/dist/contracts/sessionToolSchemas.js +1 -1
- package/dist/contracts/toolContractExamples.js +5 -0
- package/dist/contracts/toolContractTypes.js +2 -0
- package/dist/contracts/toolContracts.js +7 -130
- package/dist/contracts/toolEffects.js +43 -0
- package/dist/contracts/toolOutputSchemaGroups.js +4 -0
- package/dist/contracts/toolOutputSchemaPrimitives.js +1 -0
- package/dist/doctorRuntime.js +5 -1
- package/dist/domain/analysisErrorBase.js +33 -0
- package/dist/domain/analysisErrorCore.js +60 -0
- package/dist/domain/analysisErrorPresentation.js +22 -2
- package/dist/domain/analysisErrorProjection.js +24 -3
- package/dist/domain/analysisSnapshot.js +1 -0
- package/dist/domain/androidAnalysis.js +141 -0
- package/dist/domain/appleAssetCatalog.js +1 -1
- package/dist/domain/artifactGraph.js +1 -0
- package/dist/domain/artifactInspection.js +19 -17
- package/dist/domain/artifactInventoryEvidence.js +20 -25
- package/dist/domain/artifactOperationError.js +16 -0
- package/dist/domain/browserObservation.js +12 -4
- package/dist/domain/browserObservationError.js +23 -0
- package/dist/domain/browserScenario.js +1 -1
- package/dist/domain/browserScenarioCapture.js +1 -1
- package/dist/domain/browserScenarioDiff.js +1 -1
- package/dist/domain/browserScenarioNormalization.js +6 -11
- package/dist/domain/browserScenarioValues.js +3 -1
- package/dist/domain/callPath.js +47 -7
- package/dist/domain/canonicalDigest.js +65 -0
- package/dist/domain/canonicalOrdering.js +11 -0
- package/dist/domain/changedBehavior.js +8 -7
- package/dist/domain/comparisonSemantics.js +2 -4
- package/dist/domain/configurationErrors.js +25 -0
- package/dist/domain/dosCom.js +8 -0
- package/dist/domain/electronActiveObservation.js +3 -1
- package/dist/domain/electronStaticAnalysisBrowser.js +13 -23
- package/dist/domain/electronStaticAnalysisNative.js +2 -1
- package/dist/domain/electronStaticAnalysisValues.js +23 -3
- package/dist/domain/evidence.js +3 -11
- package/dist/domain/evidenceErrors.js +30 -0
- package/dist/domain/firmwareAnalysis.js +121 -0
- package/dist/domain/functionComparison.js +4 -2
- package/dist/domain/functionComparisonDimensions.js +6 -4
- package/dist/domain/functionComparisonNormalization.js +8 -1
- package/dist/domain/functionComparisonResults.js +1 -4
- package/dist/domain/hopperErrors.js +78 -0
- package/dist/domain/hopperValues.js +2 -1
- package/dist/domain/interfaceBuilderGraph.js +3 -1
- package/dist/domain/javascriptApplicationChangeGraph.js +2 -2
- package/dist/domain/javascriptApplicationGraph.js +13 -22
- package/dist/domain/javascriptApplicationVersionComparison.js +3 -11
- package/dist/domain/javascriptApplicationVersionItems.js +3 -3
- package/dist/domain/javascriptApplicationVersionKeys.js +1 -1
- package/dist/domain/javascriptAstFingerprint.js +1 -1
- package/dist/domain/javascriptExportShapeComparison.js +1 -2
- package/dist/domain/javascriptExportShapeSelection.js +1 -1
- package/dist/domain/javascriptExportShapeVariants.js +7 -3
- package/dist/domain/javascriptFeatureSeed.js +29 -9
- package/dist/domain/javascriptFeatureTrace.js +9 -13
- package/dist/domain/javascriptFeatureTraversal.js +2 -1
- package/dist/domain/javascriptNativeHandoff.js +2 -1
- package/dist/domain/javascriptRuntimeLoadState.js +2 -2
- package/dist/domain/javascriptRuntimeReconciliationActive.js +3 -10
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +2 -2
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +4 -3
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +8 -14
- package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -4
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +5 -2
- package/dist/domain/javascriptRuntimeStaticCandidates.js +8 -4
- package/dist/domain/javascriptSemanticAnalysis.js +40 -3
- package/dist/domain/javascriptSemanticCallResolution.js +2 -1
- package/dist/domain/javascriptSemanticChildProcesses.js +2 -1
- package/dist/domain/javascriptSemanticDataEffects.js +2 -1
- package/dist/domain/javascriptSemanticFingerprints.js +1 -1
- package/dist/domain/javascriptSemanticGraph.js +23 -28
- package/dist/domain/javascriptSemanticPrimitives.js +9 -2
- package/dist/domain/javascriptSemanticProjection.js +2 -1
- package/dist/domain/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascriptSemanticProvenance.js +1 -1
- package/dist/domain/javascriptSemanticQuery.js +7 -8
- package/dist/domain/javascriptSemanticQueryAssessment.js +1 -2
- package/dist/domain/javascriptSemanticQueryIdentity.js +1 -2
- package/dist/domain/javascriptSemanticReturns.js +2 -1
- package/dist/domain/javascriptSemanticValues.js +50 -16
- package/dist/domain/javascriptSourceParser.js +4 -2
- package/dist/domain/javascriptStaticAnalysis.js +1 -1
- package/dist/domain/javascriptStaticAnalysisBundler.js +2 -1
- package/dist/domain/javascriptStaticAnalysisCalls.js +14 -6
- package/dist/domain/javascriptStaticAnalysisHelpers.js +31 -4
- package/dist/domain/jsonShape.js +6 -2
- package/dist/domain/managedMemberComparison.js +1 -0
- package/dist/domain/managedMemberComparisonItems.js +2 -0
- package/dist/domain/managedNativeVerificationMatch.js +5 -3
- package/dist/domain/nativeDataType.js +2 -0
- package/dist/domain/nativeFunctionAnnotations.js +43 -0
- package/dist/domain/nativeLoadImage.js +95 -0
- package/dist/domain/nativeMetadataRecovery.js +55 -0
- package/dist/domain/processCapture.js +0 -1
- package/dist/domain/processEvidenceProvider.js +11 -0
- package/dist/domain/processTraceComparison.js +1 -1
- package/dist/domain/providerAdapterError.js +17 -0
- package/dist/domain/providerCleanupError.js +1 -1
- package/dist/domain/providerSelectionError.js +44 -0
- package/dist/domain/reconstructionUnknowns.js +1 -1
- package/dist/domain/reconstructionVerification.js +22 -8
- package/dist/domain/referenceSourceClassification.js +5 -6
- package/dist/domain/referenceSourceGraph.js +9 -17
- package/dist/domain/referenceSourceImportParsing.js +38 -23
- package/dist/domain/runtimeIdentification.js +1 -1
- package/dist/domain/runtimeVersion.js +4 -7
- package/dist/domain/safeJson.js +13 -0
- package/dist/domain/sourceToBundleComparison.js +5 -7
- package/dist/domain/sourceToBundleSignals.js +6 -6
- package/dist/domain/staticRuntimeCorrelation.js +9 -7
- package/dist/domain/unknownRegistryError.js +10 -0
- package/dist/domain/webBundleAnalyzerAst.js +22 -5
- package/dist/domain/webBundleAnalyzerInspection.js +20 -14
- package/dist/dotnet/ManagedMemberRows.js +1 -1
- package/dist/dotnet/ManagedMetadataHeaps.js +3 -2
- package/dist/dotnet/ManagedMetadataInventoryRows.js +4 -2
- package/dist/dotnet/ManagedMethodBodyReader.js +8 -1
- package/dist/dotnet/ManagedStaticProvider.js +3 -1
- package/dist/firmware/FirmwareCommand.js +163 -0
- package/dist/firmware/FirmwareFiles.js +190 -0
- package/dist/firmware/FirmwareProvider.js +258 -0
- package/dist/firmware/FirmwarePublication.js +84 -0
- package/dist/firmware/FirmwareRelease.js +32 -0
- package/dist/firmware/FirmwareReports.js +223 -0
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +5 -5
- package/dist/ghidra/GhidraAnalysisProfile.js +37 -8
- package/dist/ghidra/GhidraClient.js +52 -6
- package/dist/ghidra/GhidraDiagnostics.js +3 -0
- package/dist/ghidra/GhidraDoctor.js +38 -14
- package/dist/ghidra/GhidraFunctionValues.js +10 -4
- package/dist/ghidra/GhidraInstallation.js +10 -4
- package/dist/ghidra/GhidraInventoryValues.js +39 -2
- package/dist/ghidra/GhidraLauncher.js +91 -26
- package/dist/ghidra/GhidraLoadImageValues.js +199 -0
- package/dist/ghidra/GhidraProvider.js +129 -13
- package/dist/ghidra/GhidraProviderCapabilities.js +52 -15
- package/dist/ghidra/GhidraRequestQueue.js +2 -2
- package/dist/ghidra/GhidraSessionError.js +31 -4
- package/dist/ghidra/GhidraSessionValues.js +10 -7
- package/dist/ghidra/GhidraTargetSnapshot.js +16 -2
- package/dist/ghidra/GhidraTransport.js +12 -0
- package/dist/ghidra/extensions/GhidraExtensionFailures.js +20 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +170 -0
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +21 -0
- package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +84 -0
- package/dist/hopper/BridgeLauncher.js +4 -2
- package/dist/hopper/HopperAnalysisProfile.js +7 -2
- package/dist/hopper/HopperCleanup.js +55 -9
- package/dist/hopper/HopperClient.js +14 -4
- package/dist/hopper/HopperProcessDiagnostic.js +1 -1
- package/dist/hopper/HopperProvider.js +8 -4
- package/dist/hopper/HopperRequestQueue.js +7 -3
- package/dist/hopper/HopperSessionValues.js +1 -1
- package/dist/hopper/HopperSocketConnection.js +1 -1
- package/dist/hopper/HopperTargetLease.js +23 -15
- package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +7 -8
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -2
- package/dist/hopper/protocol.js +8 -8
- package/dist/ida/IdaConfiguration.js +56 -0
- package/dist/ida/IdaDoctor.js +53 -0
- package/dist/ida/IdaInput.js +62 -0
- package/dist/ida/IdaMcpConnection.js +111 -0
- package/dist/ida/IdaOperationRunner.js +299 -0
- package/dist/ida/IdaProtocolValues.js +178 -0
- package/dist/ida/IdaProvider.js +126 -0
- package/dist/ida/IdaProviderCapabilities.js +60 -0
- package/dist/ida/IdaSessionClient.js +306 -0
- package/dist/ida/IdaWorkspace.js +54 -0
- package/dist/main/shutdown.js +21 -1
- package/dist/main/startup.js +1 -1
- package/dist/main/transport.js +8 -4
- package/dist/main.js +5 -2
- package/dist/native/AppleDispatchMetadata.js +31 -10
- package/dist/native/NativeMacOSProvider.js +87 -15
- package/dist/native/NativeMachoInspection.js +42 -12
- package/dist/native/NativeUiHelperRuntime.js +7 -1
- package/dist/native/NativeUiObservation.js +6 -2
- package/dist/native/parsers/demangle.js +1 -1
- package/dist/native/parsers/dyldInfo.js +3 -3
- package/dist/native/parsers/otool.js +4 -1
- package/dist/native/parsers/plist.js +11 -3
- package/dist/process/PrivateRuntimeRoot.js +13 -3
- package/dist/process/ProcessOwnership.js +5 -73
- package/dist/process/ProcessOwnershipObservation.js +62 -2
- package/dist/process/ProcessOwnershipProcessTree.js +13 -0
- package/dist/process/ProviderProcess.js +24 -7
- package/dist/process/ProviderRunLineage.js +1 -1
- package/dist/process/WindowsAuthority.js +20 -1
- package/dist/reference/ReferenceSourceReaderEntries.js +5 -1
- package/dist/reference/ReferenceSourceReaderFile.js +1 -0
- package/dist/server/createServer.js +25 -2
- package/dist/server/mcpProgress.js +2 -1
- package/dist/server/promptCompletion.js +3 -3
- package/dist/server/registerAndroidTools.js +30 -0
- package/dist/server/registerApplicationTools/compareExportShapes.js +5 -1
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +7 -2
- package/dist/server/registerApplicationTools/compareVersions.js +5 -1
- package/dist/server/registerApplicationTools/traceFeature.js +7 -2
- package/dist/server/registerApplicationTools/traceSemantics.js +7 -2
- package/dist/server/registerEnhancedTools.js +28 -1
- package/dist/server/registerFirmwareTools.js +22 -0
- package/dist/server/registerFunctionComparisonTool.js +1 -1
- package/dist/server/registerInvestigationTools/helpers.js +2 -1
- package/dist/server/registerManagedTools.js +1 -1
- package/dist/server/registerManagedWorkflowTools/evidence.js +1 -1
- package/dist/server/registerOfficialTools.js +4 -1
- package/dist/server/registerProcessComparisonTool.js +5 -2
- package/dist/server/registerSessionTools.js +3 -1
- package/dist/server/runDerivedOperation.js +1 -1
- package/dist/server/sessionAvailabilityPolicy.js +3 -0
- package/dist/server/sessionEvidence.js +1 -1
- package/dist/server/toolResult.js +2 -1
- package/dist/windows/WindowsNativeLoader.js +108 -0
- package/dist/windows/WindowsOwnedProcess.js +168 -0
- package/dist/windows/WindowsPrivateRuntime.js +137 -0
- package/install.sh +4 -6
- package/native/windows/README.md +102 -0
- package/native/windows/build/manifest.json +9 -0
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +38 -24
- package/scripts/rea.mjs +1 -1
- package/scripts/verify-windows-native-artifact.mjs +39 -0
- package/skills/reverse-engineer-anything/SKILL.md +92 -24
- package/skills/reverse-engineer-anything/references/android-applications.md +31 -0
- package/skills/reverse-engineer-anything/references/javascript-applications.md +19 -2
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +52 -4
- package/dist/browser/CdpCanonicalJsonDigest.js +0 -9
- package/dist/domain/errors.js +0 -324
|
@@ -4,10 +4,50 @@ import { resolve } from "node:path";
|
|
|
4
4
|
import { runDirectAnalysis } from "../application/DirectAnalysis.js";
|
|
5
5
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
6
6
|
import { logCliCommand } from "../cliLogging.js";
|
|
7
|
-
import { directAnalysisOptions, providerSelectionOption } from "./options.js";
|
|
7
|
+
import { directAnalysisOptions, formatSelectionOption, providerSelectionOption, } from "./options.js";
|
|
8
8
|
import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
|
|
9
9
|
export const registerCoreAnalysisCommands = (cli, logger) => {
|
|
10
10
|
registerCoreCommands(cli, logger);
|
|
11
|
+
registerAnnotationCommand(cli, logger);
|
|
12
|
+
cli.command(CLI_COMMANDS.inspectNativeLoadImage, {
|
|
13
|
+
description: "Verify loaded native bytes, source mappings, relocations and entry",
|
|
14
|
+
args: z.object({ path: z.string().describe("Local executable path") }),
|
|
15
|
+
options: z.object({
|
|
16
|
+
"target-format": formatSelectionOption,
|
|
17
|
+
provider: providerSelectionOption,
|
|
18
|
+
}),
|
|
19
|
+
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.inspectNativeLoadImage, () => runDirectAnalysis(args.path, "inspect_native_load_image", {}, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
20
|
+
});
|
|
21
|
+
cli.command(CLI_COMMANDS.readBytes, {
|
|
22
|
+
description: "Read exact provider memory bytes at one analysis address",
|
|
23
|
+
args: z.object({
|
|
24
|
+
path: z.string().describe("Local executable path"),
|
|
25
|
+
address: z.string().describe("Exact provider memory address"),
|
|
26
|
+
}),
|
|
27
|
+
options: z.object({
|
|
28
|
+
length: z
|
|
29
|
+
.number()
|
|
30
|
+
.int()
|
|
31
|
+
.min(1)
|
|
32
|
+
.default(256)
|
|
33
|
+
.describe("Requested byte count"),
|
|
34
|
+
"target-format": formatSelectionOption,
|
|
35
|
+
provider: providerSelectionOption,
|
|
36
|
+
}),
|
|
37
|
+
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.readBytes, () => runDirectAnalysis(args.path, "read_bytes", { address: args.address, length: options.length }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
38
|
+
});
|
|
39
|
+
cli.command(CLI_COMMANDS.addressToFileOffset, {
|
|
40
|
+
description: "Resolve an analysis address to its original file byte offset",
|
|
41
|
+
args: z.object({
|
|
42
|
+
path: z.string().describe("Local executable path"),
|
|
43
|
+
address: z.string().describe("Exact provider memory address"),
|
|
44
|
+
}),
|
|
45
|
+
options: z.object({
|
|
46
|
+
"target-format": formatSelectionOption,
|
|
47
|
+
provider: providerSelectionOption,
|
|
48
|
+
}),
|
|
49
|
+
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.addressToFileOffset, () => runDirectAnalysis(args.path, "address_to_file_offset", { address: args.address }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
50
|
+
});
|
|
11
51
|
cli.command(CLI_COMMANDS.traceNativeValues, {
|
|
12
52
|
description: "Trace bounded native def-use and call dependencies",
|
|
13
53
|
args: z.object({
|
|
@@ -65,6 +105,7 @@ export const registerCoreAnalysisCommands = (cli, logger) => {
|
|
|
65
105
|
.max(5000)
|
|
66
106
|
.default(1000)
|
|
67
107
|
.describe("Maximum nodes on this page"),
|
|
108
|
+
"target-format": formatSelectionOption,
|
|
68
109
|
provider: providerSelectionOption,
|
|
69
110
|
}),
|
|
70
111
|
alias: {
|
|
@@ -83,7 +124,7 @@ export const registerCoreAnalysisCommands = (cli, logger) => {
|
|
|
83
124
|
max_edges: options.maxEdges,
|
|
84
125
|
offset: options.offset,
|
|
85
126
|
limit: options.limit,
|
|
86
|
-
}, directAnalysisOptions(logger, undefined, options.provider))),
|
|
127
|
+
}, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
87
128
|
});
|
|
88
129
|
cli.command(CLI_COMMANDS.inspectNativeDataType, {
|
|
89
130
|
description: "Inspect one recovered database type or typed data object",
|
|
@@ -93,6 +134,7 @@ export const registerCoreAnalysisCommands = (cli, logger) => {
|
|
|
93
134
|
options: z.object({
|
|
94
135
|
type: z.string().optional().describe("Exact database type category path"),
|
|
95
136
|
address: z.string().describe("Exact native address").optional(),
|
|
137
|
+
"target-format": formatSelectionOption,
|
|
96
138
|
provider: providerSelectionOption,
|
|
97
139
|
}),
|
|
98
140
|
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.inspectNativeDataType, () => runDirectAnalysis(args.path, "inspect_native_data_type", {
|
|
@@ -100,7 +142,7 @@ export const registerCoreAnalysisCommands = (cli, logger) => {
|
|
|
100
142
|
...(options.address === undefined
|
|
101
143
|
? {}
|
|
102
144
|
: { address: options.address }),
|
|
103
|
-
}, directAnalysisOptions(logger, undefined, options.provider))),
|
|
145
|
+
}, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
104
146
|
});
|
|
105
147
|
for (const [command, operation] of [
|
|
106
148
|
[CLI_COMMANDS.inspectNativeInstruction, "inspect_native_instruction"],
|
|
@@ -114,8 +156,11 @@ export const registerCoreAnalysisCommands = (cli, logger) => {
|
|
|
114
156
|
path: z.string().describe("Local native executable or app path"),
|
|
115
157
|
address: z.string().describe("Exact native address"),
|
|
116
158
|
}),
|
|
117
|
-
options: z.object({
|
|
118
|
-
|
|
159
|
+
options: z.object({
|
|
160
|
+
"target-format": formatSelectionOption,
|
|
161
|
+
provider: providerSelectionOption,
|
|
162
|
+
}),
|
|
163
|
+
run: ({ args, options }) => logCliCommand(logger, command, () => runDirectAnalysis(args.path, operation, { address: args.address }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
119
164
|
});
|
|
120
165
|
}
|
|
121
166
|
registerFunctionCommand(cli, logger);
|
|
@@ -146,10 +191,11 @@ const registerNativeDispatchMetadataCommand = (cli, logger) => {
|
|
|
146
191
|
.min(1)
|
|
147
192
|
.optional()
|
|
148
193
|
.describe("Load or update the local analysis snapshot"),
|
|
194
|
+
"target-format": formatSelectionOption,
|
|
149
195
|
provider: providerSelectionOption,
|
|
150
196
|
}),
|
|
151
197
|
alias: { maxRecords: "max-records" },
|
|
152
|
-
run: async ({ args, options }) => logCliCommand(logger, "inspect-native-dispatch-metadata", () => runDirectAnalysis(args.path, "inspect_native_dispatch_metadata", { max_records: options.maxRecords }, directAnalysisOptions(logger, options.snapshot, options.provider))),
|
|
198
|
+
run: async ({ args, options }) => logCliCommand(logger, "inspect-native-dispatch-metadata", () => runDirectAnalysis(args.path, "inspect_native_dispatch_metadata", { max_records: options.maxRecords }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
153
199
|
});
|
|
154
200
|
};
|
|
155
201
|
const registerNativeUiActionCommand = (cli, logger) => {
|
|
@@ -184,6 +230,7 @@ const registerNativeUiActionCommand = (cli, logger) => {
|
|
|
184
230
|
.max(5_000)
|
|
185
231
|
.default(500)
|
|
186
232
|
.describe("Maximum returned graph edges"),
|
|
233
|
+
"target-format": formatSelectionOption,
|
|
187
234
|
provider: providerSelectionOption,
|
|
188
235
|
}),
|
|
189
236
|
alias: {
|
|
@@ -196,7 +243,7 @@ const registerNativeUiActionCommand = (cli, logger) => {
|
|
|
196
243
|
max_depth: options.maxDepth,
|
|
197
244
|
max_nodes: options.maxNodes,
|
|
198
245
|
max_edges: options.maxEdges,
|
|
199
|
-
}, directAnalysisOptions(logger, undefined, options.provider))),
|
|
246
|
+
}, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
200
247
|
});
|
|
201
248
|
};
|
|
202
249
|
const registerCoreCommands = (cli, logger) => {
|
|
@@ -206,6 +253,7 @@ const registerCoreCommands = (cli, logger) => {
|
|
|
206
253
|
.min(1)
|
|
207
254
|
.optional()
|
|
208
255
|
.describe("Load and update a local analysis snapshot"),
|
|
256
|
+
"target-format": formatSelectionOption,
|
|
209
257
|
provider: providerSelectionOption,
|
|
210
258
|
});
|
|
211
259
|
cli.command(CLI_COMMANDS.analyze, {
|
|
@@ -222,7 +270,7 @@ const registerCoreCommands = (cli, logger) => {
|
|
|
222
270
|
path: z.string().describe("App, program, or analysis database path"),
|
|
223
271
|
}),
|
|
224
272
|
options: overviewOptions,
|
|
225
|
-
run: ({ args, options }) => logCliCommand(logger, "inspect", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider))),
|
|
273
|
+
run: ({ args, options }) => logCliCommand(logger, "inspect", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
226
274
|
});
|
|
227
275
|
cli.command(CLI_COMMANDS.decompile, {
|
|
228
276
|
description: "Read one part of an app as code",
|
|
@@ -236,19 +284,21 @@ const registerCoreCommands = (cli, logger) => {
|
|
|
236
284
|
.min(1)
|
|
237
285
|
.optional()
|
|
238
286
|
.describe("Load and update a local analysis snapshot"),
|
|
287
|
+
"target-format": formatSelectionOption,
|
|
239
288
|
provider: providerSelectionOption,
|
|
240
289
|
}),
|
|
241
|
-
run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider))),
|
|
290
|
+
run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
242
291
|
});
|
|
243
292
|
};
|
|
244
293
|
const runRoutedOverview = async (path, options, logger) => {
|
|
245
294
|
if (options.provider === undefined &&
|
|
246
295
|
options.snapshot === undefined &&
|
|
296
|
+
options["target-format"] === undefined &&
|
|
247
297
|
(await isJavaScriptApplicationPath(path)))
|
|
248
298
|
return runCliJavaScriptApplicationAnalysis({
|
|
249
299
|
input_path: resolve(path),
|
|
250
300
|
});
|
|
251
|
-
return runDirectAnalysis(path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider));
|
|
301
|
+
return runDirectAnalysis(path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]));
|
|
252
302
|
};
|
|
253
303
|
const isJavaScriptApplicationPath = async (path) => {
|
|
254
304
|
const lower = path.toLowerCase();
|
|
@@ -259,7 +309,10 @@ const isJavaScriptApplicationPath = async (path) => {
|
|
|
259
309
|
try {
|
|
260
310
|
return (await stat(path)).isDirectory();
|
|
261
311
|
}
|
|
262
|
-
catch {
|
|
312
|
+
catch (cause) {
|
|
313
|
+
// A missing or unreadable path is not a JavaScript application directory;
|
|
314
|
+
// the caller falls through to direct binary analysis instead.
|
|
315
|
+
void cause;
|
|
263
316
|
return false;
|
|
264
317
|
}
|
|
265
318
|
};
|
|
@@ -276,9 +329,10 @@ const registerXrefsCommand = (cli, logger) => {
|
|
|
276
329
|
.min(1)
|
|
277
330
|
.optional()
|
|
278
331
|
.describe("Load and update a local analysis snapshot"),
|
|
332
|
+
"target-format": formatSelectionOption,
|
|
279
333
|
provider: providerSelectionOption,
|
|
280
334
|
}),
|
|
281
|
-
run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", { address: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider))),
|
|
335
|
+
run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", { address: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
282
336
|
});
|
|
283
337
|
};
|
|
284
338
|
const registerTraceCommand = (cli, logger) => {
|
|
@@ -298,6 +352,7 @@ const registerTraceCommand = (cli, logger) => {
|
|
|
298
352
|
.min(1)
|
|
299
353
|
.optional()
|
|
300
354
|
.describe("Load and update a local analysis snapshot"),
|
|
355
|
+
"target-format": formatSelectionOption,
|
|
301
356
|
provider: providerSelectionOption,
|
|
302
357
|
}),
|
|
303
358
|
alias: {
|
|
@@ -306,7 +361,7 @@ const registerTraceCommand = (cli, logger) => {
|
|
|
306
361
|
run: ({ args, options }) => logCliCommand(logger, "trace", () => runDirectAnalysis(args.path, "trace_feature", {
|
|
307
362
|
query: args.query,
|
|
308
363
|
case_sensitive: options.caseSensitive,
|
|
309
|
-
}, directAnalysisOptions(logger, options.snapshot, options.provider))),
|
|
364
|
+
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
310
365
|
});
|
|
311
366
|
};
|
|
312
367
|
const registerFunctionCommand = (cli, logger) => {
|
|
@@ -322,9 +377,10 @@ const registerFunctionCommand = (cli, logger) => {
|
|
|
322
377
|
.min(1)
|
|
323
378
|
.optional()
|
|
324
379
|
.describe("Load and update a local analysis snapshot"),
|
|
380
|
+
"target-format": formatSelectionOption,
|
|
325
381
|
provider: providerSelectionOption,
|
|
326
382
|
}),
|
|
327
|
-
run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider))),
|
|
383
|
+
run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
328
384
|
});
|
|
329
385
|
};
|
|
330
386
|
const registerNativeApiCommand = (cli, logger) => {
|
|
@@ -340,9 +396,10 @@ const registerNativeApiCommand = (cli, logger) => {
|
|
|
340
396
|
.min(1)
|
|
341
397
|
.optional()
|
|
342
398
|
.describe("Load and update a local analysis snapshot"),
|
|
399
|
+
"target-format": formatSelectionOption,
|
|
343
400
|
provider: providerSelectionOption,
|
|
344
401
|
}),
|
|
345
|
-
run: ({ args, options }) => logCliCommand(logger, "inspect-native-api", () => runDirectAnalysis(args.path, "inspect_native_api", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider))),
|
|
402
|
+
run: ({ args, options }) => logCliCommand(logger, "inspect-native-api", () => runDirectAnalysis(args.path, "inspect_native_api", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
346
403
|
});
|
|
347
404
|
};
|
|
348
405
|
const registerInstructionsCommand = (cli, logger) => {
|
|
@@ -358,11 +415,12 @@ const registerInstructionsCommand = (cli, logger) => {
|
|
|
358
415
|
.min(1)
|
|
359
416
|
.optional()
|
|
360
417
|
.describe("Load and update a local analysis snapshot"),
|
|
418
|
+
"target-format": formatSelectionOption,
|
|
361
419
|
provider: providerSelectionOption,
|
|
362
420
|
}),
|
|
363
421
|
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.instructions, () => runDirectAnalysis(args.path, "read_function_instructions", {
|
|
364
422
|
procedure: args.address,
|
|
365
|
-
}, directAnalysisOptions(logger, options.snapshot, options.provider))),
|
|
423
|
+
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
366
424
|
});
|
|
367
425
|
};
|
|
368
426
|
const registerSearchCommand = (cli, logger) => {
|
|
@@ -390,6 +448,7 @@ const registerSearchCommand = (cli, logger) => {
|
|
|
390
448
|
.min(1)
|
|
391
449
|
.optional()
|
|
392
450
|
.describe("Load and update a local analysis snapshot"),
|
|
451
|
+
"target-format": formatSelectionOption,
|
|
393
452
|
provider: providerSelectionOption,
|
|
394
453
|
}),
|
|
395
454
|
alias: { caseSensitive: "case-sensitive" },
|
|
@@ -397,6 +456,40 @@ const registerSearchCommand = (cli, logger) => {
|
|
|
397
456
|
pattern: args.pattern,
|
|
398
457
|
mode: options.mode,
|
|
399
458
|
case_sensitive: options.caseSensitive,
|
|
400
|
-
}, directAnalysisOptions(logger, options.snapshot, options.provider))),
|
|
459
|
+
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
460
|
+
});
|
|
461
|
+
};
|
|
462
|
+
const registerAnnotationCommand = (cli, logger) => {
|
|
463
|
+
cli.command(CLI_COMMANDS.annotateNativeFunction, {
|
|
464
|
+
description: "Edit function annotations and return refreshed analysis",
|
|
465
|
+
args: z.object({
|
|
466
|
+
path: z.string().describe("Local executable path"),
|
|
467
|
+
procedure: z
|
|
468
|
+
.string()
|
|
469
|
+
.describe("Exact function entry address or unique name"),
|
|
470
|
+
}),
|
|
471
|
+
options: z.object({
|
|
472
|
+
name: z.string().min(1).optional().describe("Analyst function name"),
|
|
473
|
+
comment: z
|
|
474
|
+
.string()
|
|
475
|
+
.optional()
|
|
476
|
+
.describe("Regular entry comment; empty text clears it"),
|
|
477
|
+
"inline-comment": z
|
|
478
|
+
.string()
|
|
479
|
+
.optional()
|
|
480
|
+
.describe("Inline entry comment; empty text clears it"),
|
|
481
|
+
"target-format": formatSelectionOption,
|
|
482
|
+
provider: providerSelectionOption,
|
|
483
|
+
}),
|
|
484
|
+
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.annotateNativeFunction, () => runDirectAnalysis(args.path, "annotate_native_function", {
|
|
485
|
+
procedure: args.procedure,
|
|
486
|
+
...(options.name === undefined ? {} : { name: options.name }),
|
|
487
|
+
...(options.comment === undefined
|
|
488
|
+
? {}
|
|
489
|
+
: { comment: options.comment }),
|
|
490
|
+
...(options["inline-comment"] === undefined
|
|
491
|
+
? {}
|
|
492
|
+
: { inline_comment: options["inline-comment"] }),
|
|
493
|
+
}, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
401
494
|
});
|
|
402
495
|
};
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { Cli, z } from "incur";
|
|
2
|
-
import { inspectElectronPage, listElectronTargets, } from "
|
|
3
|
-
import { captureElectronScenario } from "
|
|
4
|
-
import { reconcileJavaScriptRuntimeEvidence } from "
|
|
5
|
-
import { CdpElectronProvider } from "
|
|
6
|
-
import { PlaywrightElectronActiveProvider } from "
|
|
7
|
-
import { logCliCommand } from "
|
|
8
|
-
import { inspectElectronPageInputSchema, listElectronTargetsInputSchema, } from "
|
|
9
|
-
import { electronActiveObservationInputSchema } from "
|
|
10
|
-
import { AnalysisInputError
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
2
|
+
import { inspectElectronPage, listElectronTargets, } from "../application/ElectronObservationService.js";
|
|
3
|
+
import { captureElectronScenario } from "../application/ElectronActiveObservationService.js";
|
|
4
|
+
import { reconcileJavaScriptRuntimeEvidence } from "../application/JavaScriptRuntimeReconciliationService.js";
|
|
5
|
+
import { CdpElectronProvider } from "../browser/CdpElectronProvider.js";
|
|
6
|
+
import { PlaywrightElectronActiveProvider } from "../browser/PlaywrightElectronActiveProvider.js";
|
|
7
|
+
import { logCliCommand } from "../cliLogging.js";
|
|
8
|
+
import { inspectElectronPageInputSchema, listElectronTargetsInputSchema, } from "../domain/electronObservation.js";
|
|
9
|
+
import { electronActiveObservationInputSchema } from "../domain/electronActiveObservation.js";
|
|
10
|
+
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
11
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
12
|
+
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
13
|
+
import { parseCliJsonInput } from "../cliJsonInput.js";
|
|
14
|
+
import { electronPageInspectionOptions, javascriptApplicationOptions, } from "../cliObservationOptions.js";
|
|
15
|
+
import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
|
|
15
16
|
/** Register CLI equivalents of the Electron MCP tools. */
|
|
16
17
|
export const registerElectronCommands = (cli, logger) => {
|
|
17
18
|
registerElectronObservationCommands(cli, logger);
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { z } from "incur";
|
|
2
|
+
import { FirmwareAnalysisService } from "../application/FirmwareAnalysisService.js";
|
|
3
|
+
import { FirmwareProvider } from "../firmware/FirmwareProvider.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
|
+
/** One-shot firmware CLI commands backed by the same workflows as MCP. */
|
|
9
|
+
export const registerFirmwareCommands = (cli, logger, environment) => {
|
|
10
|
+
const service = new FirmwareAnalysisService(new FirmwareProvider(environment));
|
|
11
|
+
const execute = (name, operation, input) => withCommandCancellation((signal) => logCliCommand(logger, name, async () => {
|
|
12
|
+
const result = await service.execute(operation, input, { signal });
|
|
13
|
+
return result.ok ? result.value : projectAnalysisError(result.error);
|
|
14
|
+
}));
|
|
15
|
+
const path = z.string().describe("Local firmware path; never executed");
|
|
16
|
+
cli.command(CLI_COMMANDS.inspectFirmwareRegions, {
|
|
17
|
+
description: "Inspect firmware signature candidates without extracting them",
|
|
18
|
+
args: z.object({ path }),
|
|
19
|
+
run: ({ args }) => execute(CLI_COMMANDS.inspectFirmwareRegions, "inspect_firmware_regions", args),
|
|
20
|
+
});
|
|
21
|
+
cli.command(CLI_COMMANDS.extractFirmware, {
|
|
22
|
+
description: "Extract selected firmware bytes and return verified files and provenance",
|
|
23
|
+
args: z.object({
|
|
24
|
+
path,
|
|
25
|
+
outputDirectory: z
|
|
26
|
+
.string()
|
|
27
|
+
.describe("Absolute absent output directory; parent must exist"),
|
|
28
|
+
}),
|
|
29
|
+
options: z.object({
|
|
30
|
+
offset: z
|
|
31
|
+
.number()
|
|
32
|
+
.int()
|
|
33
|
+
.nonnegative()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("Selected byte offset; requires length"),
|
|
36
|
+
length: z
|
|
37
|
+
.number()
|
|
38
|
+
.int()
|
|
39
|
+
.positive()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("Selected byte length; requires offset"),
|
|
42
|
+
maxDepth: z
|
|
43
|
+
.number()
|
|
44
|
+
.int()
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Extraction depth, 1–10; default 3"),
|
|
47
|
+
maxOutputBytes: z
|
|
48
|
+
.number()
|
|
49
|
+
.int()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Staging byte budget; default 256 MiB, maximum 512 MiB"),
|
|
52
|
+
maxOutputFiles: z
|
|
53
|
+
.number()
|
|
54
|
+
.int()
|
|
55
|
+
.optional()
|
|
56
|
+
.describe("Staging entry budget; default 10000"),
|
|
57
|
+
}),
|
|
58
|
+
run: ({ args, options }) => execute(CLI_COMMANDS.extractFirmware, "extract_firmware", {
|
|
59
|
+
path: args.path,
|
|
60
|
+
output_directory: args.outputDirectory,
|
|
61
|
+
...(options.offset === undefined && options.length === undefined
|
|
62
|
+
? {}
|
|
63
|
+
: { range: { offset: options.offset, length: options.length } }),
|
|
64
|
+
...(options.maxDepth === undefined
|
|
65
|
+
? {}
|
|
66
|
+
: { max_depth: options.maxDepth }),
|
|
67
|
+
...(options.maxOutputBytes === undefined
|
|
68
|
+
? {}
|
|
69
|
+
: { max_output_bytes: options.maxOutputBytes }),
|
|
70
|
+
...(options.maxOutputFiles === undefined
|
|
71
|
+
? {}
|
|
72
|
+
: { max_output_files: options.maxOutputFiles }),
|
|
73
|
+
}),
|
|
74
|
+
});
|
|
75
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cancel, confirm, intro, isCancel, multiselect, outro, } from "@clack/prompts";
|
|
2
|
-
import { SUPPORTED_CLIENT_DEFINITIONS } from "
|
|
2
|
+
import { SUPPORTED_CLIENT_DEFINITIONS } from "../application/SupportedClients.js";
|
|
3
3
|
const clientDisplayNames = new Map(SUPPORTED_CLIENT_DEFINITIONS.map(({ name, displayName }) => [
|
|
4
4
|
name,
|
|
5
5
|
displayName,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { analyzeJavaScriptApplication } from "../application/JavaScriptApplicationService.js";
|
|
2
|
-
import { projectAnalysisError } from "../domain/
|
|
2
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
3
3
|
/** Execute the shared one-shot CLI boundary for static JavaScript analysis. */
|
|
4
4
|
export const runCliJavaScriptApplicationAnalysis = async (input) => {
|
|
5
5
|
const result = await analyzeJavaScriptApplication(input);
|
|
@@ -4,7 +4,7 @@ import { verifyManagedNativeBoundariesEvidence } from "../application/ManagedNat
|
|
|
4
4
|
import { importManagedReconstructionEvidence } from "../application/ManagedReconstructionService.js";
|
|
5
5
|
import { runProviderAnalysis } from "../application/DirectAnalysis.js";
|
|
6
6
|
import { parseCliJsonInput } from "../cliJsonInput.js";
|
|
7
|
-
import { projectAnalysisError } from "../domain/
|
|
7
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
8
8
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
9
9
|
import { logCliCommand } from "../cliLogging.js";
|
|
10
10
|
import { registerProjectManagedApplicationGraph } from "./managedProjectGraphCommand.js";
|
|
@@ -3,7 +3,7 @@ import { projectManagedApplicationGraphEvidence } from "../application/ManagedAp
|
|
|
3
3
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
4
4
|
import { parseCliJsonInput } from "../cliJsonInput.js";
|
|
5
5
|
import { logCliCommand } from "../cliLogging.js";
|
|
6
|
-
import { projectAnalysisError } from "../domain/
|
|
6
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
7
7
|
/** Register managed static-Evidence application graph projection. */
|
|
8
8
|
export const registerProjectManagedApplicationGraph = (cli, logger) => {
|
|
9
9
|
cli.command(CLI_COMMANDS.projectManagedApplicationGraph, {
|
package/dist/cli/options.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
|
+
import { executableFormatHintSchema, } from "../domain/dosCom.js";
|
|
1
2
|
import { analysisProviderSelectorSchema } from "../contracts/providerSelection.js";
|
|
2
3
|
export const providerSelectionOption = analysisProviderSelectorSchema
|
|
3
4
|
.optional()
|
|
4
5
|
.describe("Bind deep analysis to a provider ID or use deterministic auto selection");
|
|
5
|
-
|
|
6
|
+
/** Explicit interpretation for headerless native executable formats. */
|
|
7
|
+
export const formatSelectionOption = executableFormatHintSchema
|
|
8
|
+
.optional()
|
|
9
|
+
.describe("Explicit headerless DOS COM interpretation");
|
|
10
|
+
export const directAnalysisOptions = (logger, snapshotPath, providerId, formatHint) => ({
|
|
6
11
|
logger,
|
|
7
12
|
snapshotPath,
|
|
13
|
+
...(formatHint === undefined ? {} : { formatHint }),
|
|
8
14
|
...(providerId === undefined ? {} : { providerId }),
|
|
9
15
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Cli, z } from "incur";
|
|
2
|
-
import { captureProcessScenarioFile, compareProcessEvidenceFiles, isProcessCliFailure, } from "
|
|
3
|
-
import { logCliCommand } from "
|
|
4
|
-
import { CLI_COMMANDS } from "
|
|
2
|
+
import { captureProcessScenarioFile, compareProcessEvidenceFiles, isProcessCliFailure, } from "../application/ProcessCli.js";
|
|
3
|
+
import { logCliCommand } from "../cliLogging.js";
|
|
4
|
+
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
5
5
|
/** Register direct process capture and comparison commands. */
|
|
6
6
|
export const registerProcessCommands = (cli, logger, environment = process.env) => {
|
|
7
7
|
cli.command(CLI_COMMANDS.captureProcess, {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { isCliOperationFailure } from "../cliLogging.js";
|
|
3
|
+
const referenceSourceImportFailureSchema = z.strictObject({
|
|
4
|
+
error: z.literal("Import failed"),
|
|
5
|
+
category: z.enum(["cancelled", "invalid_input", "execution_failure"]),
|
|
6
|
+
message: z.string().min(1),
|
|
7
|
+
});
|
|
8
|
+
/** Identify the historical-source import command's failed operation outputs. */
|
|
9
|
+
export const isReferenceSourceImportCliFailure = (value) => referenceSourceImportFailureSchema.safeParse(value).success ||
|
|
10
|
+
isCliOperationFailure(value);
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
2
|
import { DOCTOR_PROVIDER_IDS, runDoctor, } from "../application/Doctor.js";
|
|
3
|
-
import {
|
|
3
|
+
import { isSetupFailure, } from "../application/SetupTypes.js";
|
|
4
|
+
import { runSetup } from "../application/Setup.js";
|
|
5
|
+
import { systemSetupHost } from "../application/SetupHost.js";
|
|
4
6
|
import { isUninstallFailure, runUninstall } from "../application/Uninstall.js";
|
|
5
7
|
import { isUpdateFailure, runUpdate } from "../application/Update.js";
|
|
6
8
|
import { systemUpdateHost } from "../application/UpdateRuntime.js";
|
|
7
|
-
import { confirmInteractiveSetup, renderInteractiveSetupResult, renderSetupProgress, } from "
|
|
9
|
+
import { confirmInteractiveSetup, renderInteractiveSetupResult, renderSetupProgress, } from "./interactiveSetup.js";
|
|
8
10
|
import { PRODUCT_IDENTITY } from "../identity.js";
|
|
9
11
|
import { logCliCommand } from "../cliLogging.js";
|
|
10
12
|
import { createSystemDoctorHost } from "../doctorRuntime.js";
|
|
@@ -4,10 +4,11 @@ import { runCapabilityStatus, runProviderAnalysis, runProviderStatus, } from "..
|
|
|
4
4
|
import { importReferenceSource } from "../application/ReferenceSourceImport.js";
|
|
5
5
|
import { projectReferenceSourceImportError } from "../application/ReferenceSourceImportTypes.js";
|
|
6
6
|
import { parseConfig } from "../config.js";
|
|
7
|
-
import { projectAnalysisError } from "../domain/
|
|
7
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
8
8
|
import { PRODUCT_IDENTITY } from "../identity.js";
|
|
9
9
|
import { logCliCommand } from "../cliLogging.js";
|
|
10
10
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
11
|
+
import { isReferenceSourceImportCliFailure } from "./referenceSourceImportStatus.js";
|
|
11
12
|
export const registerUtilityCommands = (cli, logger, environment = process.env) => {
|
|
12
13
|
registerCapabilityCommands(cli, logger);
|
|
13
14
|
registerNativeCommands(cli, logger);
|
|
@@ -148,6 +149,6 @@ const registerReferenceSourceCommand = (cli, logger, environment = process.env)
|
|
|
148
149
|
error: "Import failed",
|
|
149
150
|
...projectReferenceSourceImportError(imported.error),
|
|
150
151
|
};
|
|
151
|
-
}),
|
|
152
|
+
}, isReferenceSourceImportCliFailure),
|
|
152
153
|
});
|
|
153
154
|
};
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Cli } from "incur";
|
|
2
|
-
import { fileURLToPath } from "node:url";
|
|
3
2
|
import { createLogger, parseLogLevel } from "./logger.js";
|
|
4
3
|
import { PRODUCT_IDENTITY } from "./identity.js";
|
|
5
4
|
import { registerSetupCommands } from "./cli/setupCommands.js";
|
|
@@ -7,14 +6,16 @@ import { registerCoreAnalysisCommands } from "./cli/coreAnalysisCommands.js";
|
|
|
7
6
|
import { registerUtilityCommands } from "./cli/utilityCommands.js";
|
|
8
7
|
import { registerArtifactCommands } from "./cli/artifactCommands.js";
|
|
9
8
|
import { registerManagedCommands } from "./cli/managedCommands.js";
|
|
9
|
+
import { registerFirmwareCommands } from "./cli/firmwareCommands.js";
|
|
10
|
+
import { registerAndroidCommands } from "./cli/androidCommands.js";
|
|
10
11
|
import { registerEvidenceCommands } from "./cliEvidenceCommands.js";
|
|
11
|
-
import { registerProcessCommands } from "./
|
|
12
|
-
import { registerBrowserCommands } from "./
|
|
13
|
-
import { registerAdvancedBrowserCommands } from "./
|
|
12
|
+
import { registerProcessCommands } from "./cli/processCommands.js";
|
|
13
|
+
import { registerBrowserCommands } from "./cli/browserCommands.js";
|
|
14
|
+
import { registerAdvancedBrowserCommands } from "./cli/browserAdvancedCommands.js";
|
|
14
15
|
import { registerBrowserScenarioCommands } from "./cliBrowserScenarioCommands.js";
|
|
15
|
-
import { registerElectronCommands } from "./
|
|
16
|
+
import { registerElectronCommands } from "./cli/electronCommands.js";
|
|
16
17
|
import { registerJavaScriptRuntimeObservationCommands } from "./cliJavaScriptRuntimeCommands.js";
|
|
17
|
-
import { registerApplicationCommands } from "./
|
|
18
|
+
import { registerApplicationCommands } from "./cli/applicationCommands.js";
|
|
18
19
|
/**
|
|
19
20
|
* Build the one-shot Incur CLI without starting Hopper at import time.
|
|
20
21
|
* Analysis commands acquire and close their own sessions; bare `mcp` and
|
|
@@ -31,21 +32,15 @@ export const createCli = (environment = process.env) => {
|
|
|
31
32
|
command: PRODUCT_IDENTITY.mcpCommand,
|
|
32
33
|
instructions: "Ask what software, artifact, protocol, or behavior the user wants to understand, then choose the available investigation capabilities that can produce evidence.",
|
|
33
34
|
},
|
|
34
|
-
sync:
|
|
35
|
-
cwd: fileURLToPath(new URL("..", import.meta.url)),
|
|
36
|
-
include: ["skills/*"],
|
|
37
|
-
suggestions: [
|
|
38
|
-
"understand how a software feature works",
|
|
39
|
-
"investigate an artifact or observed behavior",
|
|
40
|
-
"check my REA setup",
|
|
41
|
-
],
|
|
42
|
-
},
|
|
35
|
+
sync: false,
|
|
43
36
|
});
|
|
44
37
|
registerSetupCommands(cli, logger);
|
|
45
38
|
registerCoreAnalysisCommands(cli, logger);
|
|
46
39
|
registerUtilityCommands(cli, logger, environment);
|
|
47
40
|
registerArtifactCommands(cli, logger);
|
|
48
41
|
registerManagedCommands(cli, logger);
|
|
42
|
+
registerAndroidCommands(cli, logger, environment);
|
|
43
|
+
registerFirmwareCommands(cli, logger, environment);
|
|
49
44
|
registerEvidenceCommands(cli, logger);
|
|
50
45
|
registerProcessCommands(cli, logger, environment);
|
|
51
46
|
registerBrowserCommands(cli, logger);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CdpBrowserProvider } from "./browser/CdpBrowserProvider.js";
|
|
2
|
-
import { projectAnalysisError } from "./domain/
|
|
2
|
+
import { projectAnalysisError } from "./domain/analysisErrorProjection.js";
|
|
3
3
|
/** Build the passive browser provider; scope is supplied on each request. */
|
|
4
4
|
export const browserContext = () => ({ provider: new CdpBrowserProvider() });
|
|
5
5
|
/** Project a browser operation failure consistently across CLI command groups. */
|
|
@@ -5,7 +5,8 @@ import { PlaywrightBrowserScenarioProvider } from "./browser/PlaywrightBrowserSc
|
|
|
5
5
|
import { CLI_COMMANDS } from "./cliCommandNames.js";
|
|
6
6
|
import { parseCliJsonInput } from "./cliJsonInput.js";
|
|
7
7
|
import { logCliCommand } from "./cliLogging.js";
|
|
8
|
-
import { AnalysisInputError
|
|
8
|
+
import { AnalysisInputError } from "./domain/analysisErrorCore.js";
|
|
9
|
+
import { projectAnalysisError } from "./domain/analysisErrorProjection.js";
|
|
9
10
|
import { browserScenarioSchema } from "./domain/browserScenario.js";
|
|
10
11
|
const OPERATION = "capture_browser_scenario";
|
|
11
12
|
/** Register the one-shot controlled browser scenario command. */
|
package/dist/cliCommandNames.js
CHANGED
|
@@ -14,6 +14,7 @@ export const CLI_COMMANDS = Object.freeze({
|
|
|
14
14
|
capabilities: "capabilities",
|
|
15
15
|
providers: "providers",
|
|
16
16
|
function: "function",
|
|
17
|
+
annotateNativeFunction: "annotate-native-function",
|
|
17
18
|
inspectNativeApi: "inspect-native-api",
|
|
18
19
|
instructions: "instructions",
|
|
19
20
|
search: "search",
|
|
@@ -23,11 +24,21 @@ export const CLI_COMMANDS = Object.freeze({
|
|
|
23
24
|
decodeInterfaceBuilder: "decode-interface-builder",
|
|
24
25
|
inspectKeyedArchive: "inspect-keyed-archive",
|
|
25
26
|
inspectNativeDataType: "inspect-native-data-type",
|
|
27
|
+
inspectNativeLoadImage: "inspect-native-load-image",
|
|
28
|
+
readBytes: "read-bytes",
|
|
29
|
+
addressToFileOffset: "address-to-file-offset",
|
|
26
30
|
traceNativeValues: "trace-native-values",
|
|
27
31
|
inspectNativeInstruction: "inspect-native-instruction",
|
|
28
32
|
resolveNativeCallTargets: "resolve-native-call-targets",
|
|
29
33
|
inspectAssetCatalog: "inspect-asset-catalog",
|
|
30
34
|
inspectManagedArtifact: "inspect-managed-artifact",
|
|
35
|
+
inspectFirmwareRegions: "inspect-firmware-regions",
|
|
36
|
+
extractFirmware: "extract-firmware",
|
|
37
|
+
inspectAndroidPackage: "inspect-android-package",
|
|
38
|
+
searchAndroidClasses: "search-android-classes",
|
|
39
|
+
inspectAndroidClass: "inspect-android-class",
|
|
40
|
+
inspectAndroidMethod: "inspect-android-method",
|
|
41
|
+
traceAndroidReferences: "trace-android-references",
|
|
31
42
|
inspectManagedMembers: "inspect-managed-members",
|
|
32
43
|
inspectManagedNativeBoundaries: "inspect-managed-native-boundaries",
|
|
33
44
|
compareManagedMembers: "compare-managed-members",
|
|
@@ -108,8 +119,6 @@ export const MCP_TOOLS_WITHOUT_DEDICATED_CLI = Object.freeze([
|
|
|
108
119
|
"procedure_callees",
|
|
109
120
|
"procedure_callers",
|
|
110
121
|
"procedure_info",
|
|
111
|
-
"read_bytes",
|
|
112
|
-
"address_to_file_offset",
|
|
113
122
|
"procedure_references",
|
|
114
123
|
"resolve_containing_procedure",
|
|
115
124
|
"set_address_name",
|