rea-agents 6.3.0 → 6.4.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 +7 -4
- package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
- package/bridge/ghidra/ReaGhidraBridge.java +597 -209
- package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
- package/dist/adb/AdbConfiguration.js +88 -0
- package/dist/adb/AdbDeviceOutput.js +186 -0
- package/dist/adb/AdbProvider.js +1190 -0
- package/dist/adb/AdbShellOutput.js +309 -0
- package/dist/android/AndroidTargetSnapshot.js +104 -22
- package/dist/android/JadxConfiguration.js +44 -24
- package/dist/android/JadxProvider.js +51 -19
- package/dist/apktool/ApktoolConfiguration.js +84 -0
- package/dist/apktool/ApktoolDecodeOutput.js +59 -0
- package/dist/apktool/ApktoolProvider.js +506 -0
- package/dist/application/AnalysisProvider.js +8 -2
- package/dist/application/AppBundleExecutable.js +27 -22
- package/dist/application/BinaryTargetResolver.js +22 -2
- package/dist/application/CapabilityInventory.js +11 -1
- package/dist/application/ClientConfigurationDocument.js +70 -0
- package/dist/application/ClientConfigurationFiles.js +91 -0
- package/dist/application/ClientRegistrationEnvironment.js +35 -0
- package/dist/application/ClientRegistrationStatus.js +66 -31
- package/dist/application/DirectAnalysis.js +2 -2
- package/dist/application/DirectAnalysisCleanup.js +1 -1
- package/dist/application/DirectAnalysisStatus.js +1 -1
- package/dist/application/Doctor.js +5 -3
- package/dist/application/DoctorDiagnostics.js +1 -1
- package/dist/application/EvidenceBundleCommands.js +6 -12
- package/dist/application/GeminiClientSettings.js +139 -0
- package/dist/application/HermesClientHome.js +115 -0
- package/dist/application/HopperDownload.js +39 -0
- package/dist/application/InvestigationProviders.js +6 -0
- package/dist/application/JsonFiles.js +6 -5
- package/dist/{cliJsonFile.js → application/JsonInputFile.js} +108 -35
- package/dist/application/LinuxHopper.js +4 -12
- package/dist/application/MacHopper.js +172 -149
- package/dist/application/MipsElfAbiFlags.js +140 -0
- package/dist/application/ProviderOperationExecution.js +31 -0
- package/dist/application/ReconstructionObligationCandidates.js +9 -3
- package/dist/application/ReferenceSourceImport.js +76 -29
- package/dist/application/ReferenceSourceImportEntries.js +18 -9
- package/dist/application/ReferenceSourceImportPolicy.js +99 -23
- package/dist/application/ReferenceSourceImportTypes.js +30 -22
- package/dist/application/ReferenceSourceVcsAdapter.js +145 -30
- package/dist/application/RegularFileRead.js +93 -7
- package/dist/application/Setup.js +54 -6
- package/dist/application/SetupClientConfiguration.js +116 -16
- package/dist/application/SetupHost.js +102 -24
- package/dist/application/SetupPlan.js +5 -8
- package/dist/application/SetupSkill.js +58 -39
- package/dist/application/SupportedClients.js +290 -65
- package/dist/application/Uninstall.js +158 -10
- package/dist/application/UpdateMaintenance.js +17 -21
- package/dist/application/Utf8JsonInput.js +7 -0
- package/dist/application/WebScriptExportService.js +131 -65
- package/dist/application/WebSourceLocationService.js +3 -0
- package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
- package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
- package/dist/application/analysisView/AnalysisViewService.js +40 -2
- package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
- package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
- package/dist/application/binary/AnalysisClientCleanup.js +0 -24
- package/dist/application/binary/BinarySession.js +2 -1
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +2 -1
- package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
- package/dist/application/binaryDiagnostics/PeResourcesService.js +111 -0
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +2 -1
- package/dist/application/evm/EvmInterfaceService.js +3 -0
- package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
- package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
- package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
- package/dist/application/javascript/ElectronBoundaryGraphIpc.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +19 -6
- package/dist/application/javascript/ElectronBoundaryGraphWindows.js +3 -3
- package/dist/application/javascript/JavaScriptApplicationService.js +22 -11
- package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +171 -30
- package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +14 -16
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +67 -19
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +11 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +19 -16
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +92 -10
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +258 -235
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +115 -26
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +4 -1
- package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -4
- package/dist/application/javascript/JavaScriptRecoveryService.js +3 -0
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +9 -3
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +199 -61
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +12 -19
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +4 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +5 -3
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +5 -3
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +19 -8
- package/dist/application/jeb/JebAnalysisPort.js +1 -0
- package/dist/application/jeb/JebAnalysisService.js +13 -0
- package/dist/application/managed/ManagedApplicationGraphService.js +1 -1
- package/dist/application/native/NativeUiActionTrace.js +16 -8
- package/dist/application/native/NativeValueTrace.js +23 -6
- package/dist/application/process/ProcessCli.js +25 -20
- package/dist/artifacts/ArtifactPaths.js +129 -8
- package/dist/artifacts/ArtifactProvider.js +20 -15
- package/dist/artifacts/ArtifactReader.js +23 -0
- package/dist/artifacts/ArtifactResourceScope.js +100 -0
- package/dist/artifacts/AsarArtifactReader.js +176 -102
- package/dist/artifacts/AsarHeader.js +24 -0
- package/dist/artifacts/DirectoryArtifactReader.js +168 -65
- package/dist/artifacts/MachOSliceArtifactReader.js +116 -39
- package/dist/artifacts/NativeDmgArtifactReader.js +29 -22
- package/dist/artifacts/SafeOutputTree.js +245 -70
- package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
- package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
- package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
- package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
- package/dist/artifacts/ZipArtifactReader.js +77 -27
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +58 -18
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +62 -24
- package/dist/artifacts/apple/KeyedArchiveReader.js +32 -13
- package/dist/artifacts/extraction/ArtifactExtraction.js +110 -86
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +110 -43
- package/dist/artifacts/inventory/ArtifactInventory.js +5 -4
- package/dist/artifacts/inventory/classify.js +75 -32
- package/dist/artifacts/inventory/hashStableRootArtifact.js +48 -15
- package/dist/artifacts/inventory/reader.js +13 -5
- package/dist/artifacts/inventory/scanCanonical.js +62 -25
- package/dist/artifacts/inventory/scanReader.js +38 -11
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +15 -9
- package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
- package/dist/browser/BrowserScenarioPartialObservation.js +8 -2
- package/dist/browser/BrowserScenarioSecrets.js +52 -37
- package/dist/browser/CdpBrowserProvider.js +5 -0
- package/dist/browser/CdpCaptureDocuments.js +40 -6
- package/dist/browser/CdpCaptureDomSvg.js +210 -0
- package/dist/browser/CdpCaptureEventBodyShapes.js +4 -8
- package/dist/browser/CdpCaptureEventHandlers.js +26 -9
- package/dist/browser/CdpCaptureEvents.js +4 -9
- package/dist/browser/CdpConnection.js +22 -5
- package/dist/browser/CdpPageCapture.js +1 -1
- package/dist/browser/CdpTargetSession.js +30 -34
- package/dist/browser/CdpWebMcpDiscovery.js +32 -10
- package/dist/browser/ElectronFileScope.js +99 -9
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +60 -4
- package/dist/browser/PlaywrightElectronActiveProvider.js +11 -6
- package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
- package/dist/browser/PlaywrightScenarioBrowser.js +69 -7
- package/dist/browser/PlaywrightScenarioSession.js +127 -54
- package/dist/browser/PlaywrightScenarioStorage.js +507 -0
- package/dist/browser/PngVisualDiff.js +198 -29
- package/dist/browser/WebSourceMapFetcher.js +3 -3
- package/dist/browser/assets/LocalWebScriptArtifacts.js +3 -1
- package/dist/browser/assets/PublishWebScripts.js +75 -20
- package/dist/browser/assets/WebArtifactReads.js +23 -1
- package/dist/browser/assets/WebSourceLocationArtifacts.js +1 -0
- package/dist/browser/execution/CdpExecutionCapture.js +3 -3
- package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
- package/dist/browser/history/HarCapture.js +14 -0
- package/dist/browser/history/HarCaptureProcess.js +2 -10
- package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
- package/dist/browser/modules/WebModuleArtifacts.js +1 -0
- package/dist/cli/adbCommands.js +337 -0
- package/dist/cli/analysisViewCommands.js +39 -1
- package/dist/cli/apktoolCommands.js +53 -0
- package/dist/cli/artifactCommands.js +8 -11
- package/dist/cli/binaryDiagnosticsCommands.js +19 -1
- package/dist/cli/browserAdvancedCommands.js +65 -36
- package/dist/cli/coreBinaryCommands.js +0 -5
- package/dist/cli/coreNativeCommands.js +1 -14
- package/dist/cli/electronCommands.js +6 -1
- package/dist/cli/evmCommands.js +13 -4
- package/dist/cli/firmwareCommands.js +7 -2
- package/dist/cli/javascriptApplicationAnalysis.js +17 -1
- package/dist/cli/javascriptRecoveryCommands.js +22 -15
- package/dist/cli/jebCommands.js +99 -0
- package/dist/cli/jsonOutput.js +11 -4
- package/dist/cli/referenceSourceImportStatus.js +7 -0
- package/dist/cli/setupCommands.js +15 -3
- package/dist/cli/utilityCommands.js +66 -18
- package/dist/cli/webScriptCommands.js +20 -1
- package/dist/cli/webSourceLocationCommands.js +21 -9
- package/dist/cli.js +6 -0
- package/dist/cliBrowserScenarioCommands.js +2 -1
- package/dist/cliCommandNames.js +32 -0
- package/dist/cliJsonInput.js +2 -2
- package/dist/cliObservationOptions.js +3 -0
- package/dist/composition/adb.js +3 -0
- package/dist/composition/apktool.js +3 -0
- package/dist/composition/binaryDiagnostics.js +4 -0
- package/dist/composition/directAnalysis.js +12 -4
- package/dist/composition/javascriptAnalysisWorkerProcess.js +48 -0
- package/dist/composition/jeb.js +6 -0
- package/dist/config/environment.js +10 -0
- package/dist/config/ghidraLanguageOverride.js +9 -0
- package/dist/config/mcpInputSchemaProfile.js +27 -0
- package/dist/config/parseConfig.js +28 -1
- package/dist/contracts/adb/adbToolContracts.js +353 -0
- package/dist/contracts/advertisedInputExamples.js +48 -0
- package/dist/contracts/analysisDetail.js +10 -0
- package/dist/contracts/analysisViewToolContracts.js +17 -2
- package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
- package/dist/contracts/artifactToolContracts.js +8 -5
- package/dist/contracts/browserToolContracts.js +1 -1
- package/dist/contracts/compactInputSchema.js +256 -0
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +10 -10
- package/dist/contracts/javascript/electronToolContracts.js +15 -3
- package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +1 -1
- package/dist/contracts/jeb/jebToolContracts.js +64 -0
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +25 -3
- package/dist/contracts/officialToolContracts.js +5 -5
- package/dist/contracts/sessionToolContracts.js +2 -2
- package/dist/contracts/sessionToolSchemas.js +6 -2
- package/dist/contracts/toolContractExamples.js +6 -0
- package/dist/contracts/toolContractTypes.js +3 -0
- package/dist/contracts/toolContracts.js +6 -0
- package/dist/contracts/toolEffects.js +167 -0
- package/dist/contracts/toolOutputSchemaGroups.js +5 -3
- package/dist/contracts/toolSchemaMetadata.js +82 -7
- package/dist/domain/adb/adbDeviceAnalysis.js +583 -0
- package/dist/domain/analysisErrorCleanup.js +29 -0
- package/dist/domain/analysisErrorPresentation.js +18 -6
- package/dist/domain/analysisErrorProjection.js +4 -1
- package/dist/domain/analysisSnapshot.js +2 -1
- package/dist/domain/analysisView/analysisView.js +52 -2
- package/dist/domain/analysisView/binaryLayoutView.js +2 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +2 -0
- package/dist/domain/analysisView/nativeFunctionView.js +155 -0
- package/dist/domain/android/androidApplication.js +25 -20
- package/dist/domain/apktool/apktoolResourceAnalysis.js +77 -0
- package/dist/domain/apple/appleApplication.js +40 -23
- package/dist/domain/apple/appleBundleAnatomy.js +95 -28
- package/dist/domain/apple/dyldPaths.js +9 -1
- package/dist/domain/apple/dylibResolution.js +2 -2
- package/dist/domain/apple/interfaceBuilderGraph.js +22 -19
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +10 -1
- package/dist/domain/artifactComparison.js +35 -7
- package/dist/domain/artifactGraph.js +5 -3
- package/dist/domain/artifactIdentity.js +30 -2
- package/dist/domain/artifactInspection.js +3 -43
- package/dist/domain/artifactIntegrityPolicy.js +10 -0
- package/dist/domain/artifactInventoryEvidence.js +11 -12
- package/dist/domain/artifactPathSyntax.js +1 -1
- package/dist/domain/binaryTarget.js +16 -0
- package/dist/domain/binaryTargetTypes.js +8 -1
- package/dist/domain/browserObservationSchemas.js +8 -4
- package/dist/domain/canonicalJsonDigestSteps.js +34 -12
- package/dist/domain/compactStringIdentity.js +9 -0
- package/dist/domain/evidence.js +2 -1
- package/dist/domain/evidenceRecordSummary.js +144 -0
- package/dist/domain/inputIssueProjection.js +16 -1
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -13
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -20
- package/dist/domain/javascript/electronStaticAnalysisNative.js +70 -40
- package/dist/domain/javascript/electronStaticAnalysisValues.js +16 -0
- package/dist/domain/javascript/javascriptAnalysisResourceControls.js +45 -0
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +4 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +6 -6
- package/dist/domain/javascript/javascriptApplicationGraph.js +79 -18
- package/dist/domain/javascript/javascriptApplicationProjectionResources.js +35 -0
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +28 -12
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -1
- package/dist/domain/javascript/javascriptAstFingerprint.js +58 -31
- package/dist/domain/javascript/javascriptAstValues.js +32 -0
- package/dist/domain/javascript/javascriptElectronMemberWrites.js +50 -0
- package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
- package/dist/domain/javascript/javascriptNativeHandoff.js +6 -1
- package/dist/domain/javascript/javascriptRpcEndpoints.js +253 -0
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +1 -3
- package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +7 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +8 -11
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +190 -33
- package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
- package/dist/domain/javascript/javascriptSemanticCalls.js +8 -1
- package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
- package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +42 -41
- package/dist/domain/javascript/javascriptSemanticGraph.js +69 -23
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +2 -10
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +40 -7
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +341 -87
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +78 -35
- package/dist/domain/javascript/javascriptSemanticObjectReferences.js +381 -0
- package/dist/domain/javascript/javascriptSemanticObjects.js +7 -1
- package/dist/domain/javascript/javascriptSemanticProjection.js +52 -14
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +77 -0
- package/dist/domain/javascript/javascriptSemanticQuery.js +27 -29
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +1 -3
- package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +219 -0
- package/dist/domain/javascript/javascriptSemanticReturns.js +13 -23
- package/dist/domain/javascript/javascriptSemanticState.js +22 -2
- package/dist/domain/javascript/javascriptSemanticTraversal.js +19 -1
- package/dist/domain/javascript/javascriptSemanticValues.js +47 -19
- package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
- package/dist/domain/javascript/javascriptStaticAnalysis.js +29 -17
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +8 -6
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +49 -5
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
- package/dist/domain/jeb/jebAnalysis.js +114 -0
- package/dist/domain/jsonShape.js +63 -52
- package/dist/domain/jsonValue.js +3 -0
- package/dist/domain/managed/managedApplicationGraph.js +37 -0
- package/dist/domain/managed/managedApplicationGraphCoverage.js +8 -2
- package/dist/domain/managed/managedApplicationGraphNodes.js +32 -22
- package/dist/domain/managed/managedArtifact.js +1 -0
- package/dist/domain/managed/managedInspectionEvidence.js +13 -0
- package/dist/domain/native/nativeAotPe.js +1408 -0
- package/dist/domain/native/nativeInstruction.js +21 -0
- package/dist/domain/native/nativeMetadataRecovery.js +79 -6
- package/dist/domain/native/peResources.js +94 -0
- package/dist/domain/nativeConvention.js +33 -0
- package/dist/domain/process/processCapture.js +91 -1
- package/dist/domain/process/processCaptureExample.js +24 -0
- package/dist/domain/process/processCaptureValidation.js +79 -0
- package/dist/domain/process/processScenario.js +59 -7
- package/dist/domain/propertyListKeys.js +3 -1
- package/dist/domain/referenceSourceGraph.js +25 -16
- package/dist/domain/referenceSourceImportParsing.js +6 -3
- package/dist/domain/referenceSourcePathIdentity.js +22 -0
- package/dist/domain/referenceSourceRequireBindings.js +137 -0
- package/dist/domain/webBundleAnalyzerInspection.js +14 -2
- package/dist/domain/webCaptureDiff.js +102 -4
- package/dist/domain/webScriptExportError.js +10 -4
- package/dist/domain/webScriptExportPlan.js +7 -13
- package/dist/domain/zipPackageFormat.js +4 -1
- package/dist/domain/zodCollectionSteps.js +24 -0
- package/dist/dotnet/ManagedArtifactInspector.js +55 -43
- package/dist/dotnet/ManagedDecodeBudget.js +80 -0
- package/dist/dotnet/ManagedMemberInspector.js +13 -6
- package/dist/dotnet/ManagedMemberInspectorCore.js +2 -2
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +4 -2
- package/dist/dotnet/ManagedMemberRows.js +9 -4
- package/dist/dotnet/ManagedMetadataHeaps.js +15 -5
- package/dist/dotnet/ManagedMetadataInventoryRows.js +20 -11
- package/dist/dotnet/ManagedMetadataLayout.js +10 -4
- package/dist/dotnet/ManagedMethodBodyReader.js +8 -3
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +3 -2
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +49 -34
- package/dist/dotnet/ManagedPeReader.js +41 -25
- package/dist/dotnet/ManagedReaderFailure.js +2 -1
- package/dist/dotnet/ManagedStaticProvider.js +55 -24
- package/dist/evaluation/AgentEvaluationReport.js +9 -5
- package/dist/evaluation/CodexAgentEval.js +43 -13
- package/dist/evm/EvmoleFailures.js +0 -2
- package/dist/evm/EvmoleInterfaceProvider.js +67 -2
- package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
- package/dist/filesystem/OwnedFileHandle.js +36 -0
- package/dist/filesystem/RegularFile.js +33 -1
- package/dist/filesystem/StableFileHash.js +46 -0
- package/dist/filesystem/readFileHandleChunks.js +26 -0
- package/dist/firmware/FirmwareCommand.js +25 -3
- package/dist/firmware/FirmwareFiles.js +23 -8
- package/dist/firmware/FirmwareProvider.js +156 -32
- package/dist/firmware/FirmwarePublication.js +24 -3
- package/dist/firmware/FirmwareRelease.js +1 -0
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +55 -4
- package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
- package/dist/ghidra/GhidraClient.js +76 -4
- package/dist/ghidra/GhidraDiagnostics.js +11 -8
- package/dist/ghidra/GhidraFunctionValues.js +26 -2
- package/dist/ghidra/GhidraInstallation.js +1 -1
- package/dist/ghidra/GhidraInventoryValues.js +23 -1
- package/dist/ghidra/GhidraLanguageCatalog.js +99 -0
- package/dist/ghidra/GhidraLauncher.js +80 -39
- package/dist/ghidra/GhidraLoadImageAttest.js +49 -2
- package/dist/ghidra/GhidraMipsProfile.js +79 -0
- package/dist/ghidra/GhidraProvider.js +57 -9
- package/dist/ghidra/GhidraProviderCapabilities.js +18 -8
- package/dist/ghidra/GhidraProviderClient.js +282 -21
- package/dist/ghidra/GhidraSessionValues.js +9 -2
- package/dist/hopper/HopperAnalysisProfile.js +2 -0
- package/dist/hopper/HopperClient.js +15 -6
- package/dist/hopper/HopperMachOImage.js +2 -0
- package/dist/hopper/HopperProvider.js +13 -2
- package/dist/ida/IdaOperationRunner.js +8 -2
- package/dist/ida/IdaProvider.js +7 -0
- package/dist/ida/IdaSessionClient.js +3 -1
- package/dist/ida/IdaWorkspace.js +4 -2
- package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +326 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +520 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +63 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +521 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +116 -0
- package/dist/javascript/recovery/RecoveryFiles.js +18 -7
- package/dist/javascript/recovery/WakaruCommand.js +22 -9
- package/dist/javascript/recovery/WakaruExecution.js +11 -7
- package/dist/javascript/recovery/WakaruProvider.js +139 -16
- package/dist/javascript/recovery/WakaruPublication.js +14 -4
- package/dist/javascript/recovery/WakaruRelease.js +10 -3
- package/dist/javascript/recovery/WakaruReport.js +12 -7
- package/dist/javascript/recovery/WakaruVersion.js +24 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -3
- package/dist/javascript/sourceMaps/SourceMapDecoder.js +63 -7
- package/dist/javascript/sourceMaps/SourceMapFormat.js +15 -4
- package/dist/jeb/JebMcpConnection.js +179 -0
- package/dist/jeb/JebMcpEndpoint.js +40 -0
- package/dist/jeb/JebProvider.js +299 -0
- package/dist/mcpDoctor.js +15 -6
- package/dist/native/AppleDispatchCoverage.js +25 -12
- package/dist/native/AppleDispatchMetadata.js +14 -7
- package/dist/native/AppleMachoFixups.js +71 -15
- package/dist/native/AppleMachoSelection.js +23 -3
- package/dist/native/NativeMacOSProvider.js +91 -16
- package/dist/native/NativeMachoInspection.js +11 -7
- package/dist/native/NativeUiHelperRuntime.js +6 -1
- package/dist/native/NativeUiObservation.js +4 -3
- package/dist/native/pe/PeResourceLayout.js +120 -0
- package/dist/native/pe/PeResourceParser.js +286 -0
- package/dist/native/pe/PeResourcesProvider.js +63 -0
- package/dist/process/BoundedFileBytes.js +30 -7
- package/dist/process/DarwinProcessRunTokenReader.js +8 -3
- package/dist/process/OwnedCommand.js +4 -3
- package/dist/process/ProcessOwnership.js +104 -112
- package/dist/process/ProcessOwnershipObservation.js +96 -39
- package/dist/process/ProcessOwnershipProcessTree.js +4 -4
- package/dist/process/ProcessRunTokenObservations.js +48 -0
- package/dist/process/ProviderDiagnosticRedaction.js +17 -0
- package/dist/process/ProviderProcess.js +4 -3
- package/dist/process/capture/FilesystemSnapshot.js +28 -4
- package/dist/process/capture/ProcessCaptureLifecycle.js +350 -59
- package/dist/process/capture/ProcessCaptureProgress.js +62 -0
- package/dist/process/capture/ProcessHarness.js +194 -26
- package/dist/process/capture/ProcessNormalization.js +3 -1
- package/dist/process/capture/ProcessScenarioRuntimeValidation.js +5 -2
- package/dist/process/capture/TerminalRenderer.js +24 -7
- package/dist/reference/ReferenceSourceReader.js +22 -5
- package/dist/reference/ReferenceSourceReaderEntries.js +114 -51
- package/dist/reference/ReferenceSourceReaderErrors.js +12 -0
- package/dist/reference/ReferenceSourceReaderFile.js +50 -10
- package/dist/reference/ReferenceSourceReaderValidate.js +4 -4
- package/dist/server/EvidenceMcpServer.js +36 -1
- package/dist/server/admittedToolOperation.js +9 -0
- package/dist/server/contractToolHandler.js +21 -0
- package/dist/server/createServer.js +97 -25
- package/dist/server/registerAdbTools.js +36 -0
- package/dist/server/registerAnalysisViewTool.js +4 -9
- package/dist/server/registerAndroidTools.js +3 -12
- package/dist/server/registerApktoolTools.js +14 -0
- package/dist/server/registerApplicationTools/compareExportShapes.js +4 -6
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +3 -2
- package/dist/server/registerApplicationTools/coverage.js +3 -2
- package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -2
- package/dist/server/registerApplicationTools/traceFeature.js +3 -2
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +5 -2
- package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
- package/dist/server/registerBrowserScenarioTool.js +10 -7
- package/dist/server/registerBrowserTools.js +12 -9
- package/dist/server/registerBundleComparisonTool.js +16 -2
- package/dist/server/registerCloseLifecycleTool.js +32 -3
- package/dist/server/registerElectronTools.js +28 -10
- package/dist/server/registerEvmTools.js +4 -9
- package/dist/server/registerFirmwareTools.js +3 -11
- package/dist/server/registerFunctionComparisonTool.js +5 -2
- package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -6
- package/dist/server/registerJebTools.js +16 -0
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
- package/dist/server/registerPeResourcesTool.js +9 -0
- package/dist/server/registerProcessComparisonTool.js +5 -2
- package/dist/server/registerRecordedCrashTools.js +4 -9
- package/dist/server/registerSessionRecordTools.js +2 -1
- package/dist/server/registerSessionTools.js +49 -18
- package/dist/server/registerWebModuleTool.js +4 -9
- package/dist/server/registerWebNetworkCaptureTool.js +4 -9
- package/dist/server/registerWebRuntimeTools.js +6 -5
- package/dist/server/registerWebScriptTool.js +6 -3
- package/dist/server/registerWebSourceLocationTool.js +4 -9
- package/dist/server/toolResult.js +21 -2
- package/dist/windows/WindowsPrivateRuntime.js +12 -5
- package/install.sh +7 -4
- package/licenses/nativeaot-parser-MIT.txt +28 -0
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +33 -5
- package/scripts/rea.mjs +16 -1
- package/skills/reverse-engineer-anything/SKILL.md +52 -51
- package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -0
- package/skills/reverse-engineer-anything/references/javascript-applications.md +92 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +22 -1
|
@@ -6,9 +6,10 @@ import { CdpBrowserProvider } from "../browser/CdpBrowserProvider.js";
|
|
|
6
6
|
import { logCliCommand } from "../cliLogging.js";
|
|
7
7
|
import { AnalysisInputError, } from "../domain/analysisErrorCore.js";
|
|
8
8
|
import { browserCaptureComparisonInputSchema } from "../domain/browserCaptureComparison.js";
|
|
9
|
+
import { projectInputIssues } from "../domain/inputIssueProjection.js";
|
|
9
10
|
import { discoverWebMcpToolsInputSchema } from "../domain/webMcpDiscovery.js";
|
|
10
11
|
import { captureWebScreenshotInputSchema, compareWebScreenshotsInputSchema, } from "../domain/webScreenshot.js";
|
|
11
|
-
import {
|
|
12
|
+
import { parseCliJsonInput } from "../cliJsonInput.js";
|
|
12
13
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
13
14
|
/** Register WebMCP, capture-diff, and screenshot CLI equivalents. */
|
|
14
15
|
export const registerAdvancedBrowserCommands = (cli, logger) => {
|
|
@@ -52,42 +53,36 @@ const registerCaptureDiff = (cli, logger) => {
|
|
|
52
53
|
cli.command(CLI_COMMANDS.compareWebCaptures, {
|
|
53
54
|
description: "Compare two normalized passive captures or recorded browser scenarios",
|
|
54
55
|
args: z.object({
|
|
55
|
-
beforeJson: z
|
|
56
|
-
|
|
56
|
+
beforeJson: z
|
|
57
|
+
.string()
|
|
58
|
+
.describe("Earlier normalized web capture JSON or JSON file path"),
|
|
59
|
+
afterJson: z
|
|
60
|
+
.string()
|
|
61
|
+
.describe("Later normalized web capture JSON or JSON file path"),
|
|
57
62
|
}),
|
|
58
63
|
options: z.object({
|
|
59
64
|
normalizationJson: z
|
|
60
65
|
.string()
|
|
61
66
|
.default('{"rules":[]}')
|
|
62
|
-
.describe("Recorded literal normalization policy for browser scenarios"),
|
|
67
|
+
.describe("Recorded literal normalization policy JSON or JSON file path for browser scenarios"),
|
|
63
68
|
}),
|
|
64
69
|
run: ({ args, options }) => logCliCommand(logger, "compare-web-captures", async () => {
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
return inputError("compare_web_captures", [
|
|
74
|
-
invalidJsonIssue("after"),
|
|
75
|
-
]);
|
|
76
|
-
if (!normalization.ok)
|
|
77
|
-
return inputError("compare_web_captures", [
|
|
78
|
-
invalidJsonIssue("normalization"),
|
|
79
|
-
]);
|
|
70
|
+
const inputs = await parseJsonArguments("compare_web_captures", {
|
|
71
|
+
before: args.beforeJson,
|
|
72
|
+
after: args.afterJson,
|
|
73
|
+
normalization: options.normalizationJson,
|
|
74
|
+
});
|
|
75
|
+
if (!inputs.ok)
|
|
76
|
+
return inputs.error;
|
|
77
|
+
const { before, after, normalization } = inputs.value;
|
|
80
78
|
const scenarioComparison = browserCaptureComparisonInputSchema.safeParse({
|
|
81
|
-
before_scenario: before
|
|
82
|
-
after_scenario: after
|
|
83
|
-
normalization
|
|
79
|
+
before_scenario: before,
|
|
80
|
+
after_scenario: after,
|
|
81
|
+
normalization,
|
|
84
82
|
});
|
|
85
83
|
const parsed = scenarioComparison.success
|
|
86
84
|
? scenarioComparison
|
|
87
|
-
: browserCaptureComparisonInputSchema.safeParse({
|
|
88
|
-
before: before.value,
|
|
89
|
-
after: after.value,
|
|
90
|
-
});
|
|
85
|
+
: browserCaptureComparisonInputSchema.safeParse({ before, after });
|
|
91
86
|
if (!parsed.success)
|
|
92
87
|
return inputError("compare_web_captures");
|
|
93
88
|
const result = await compareWebCaptureEvidence(new CdpBrowserProvider(), parsed.data);
|
|
@@ -123,8 +118,12 @@ const registerScreenshotDiff = (cli, logger) => {
|
|
|
123
118
|
cli.command(CLI_COMMANDS.compareWebScreenshots, {
|
|
124
119
|
description: "Compare two self-verifying PNG artifact JSON values",
|
|
125
120
|
args: z.object({
|
|
126
|
-
beforeJson: z
|
|
127
|
-
|
|
121
|
+
beforeJson: z
|
|
122
|
+
.string()
|
|
123
|
+
.describe("Earlier screenshot artifact JSON or JSON file path"),
|
|
124
|
+
afterJson: z
|
|
125
|
+
.string()
|
|
126
|
+
.describe("Later screenshot artifact JSON or JSON file path"),
|
|
128
127
|
}),
|
|
129
128
|
options: z.object({
|
|
130
129
|
channelThreshold: z
|
|
@@ -136,22 +135,52 @@ const registerScreenshotDiff = (cli, logger) => {
|
|
|
136
135
|
.describe("Per-channel difference threshold for changed pixels"),
|
|
137
136
|
}),
|
|
138
137
|
run: ({ args, options }) => logCliCommand(logger, "compare-web-screenshots", async () => {
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
138
|
+
const operation = "compare_web_screenshots";
|
|
139
|
+
const inputs = await parseJsonArguments(operation, {
|
|
140
|
+
before: args.beforeJson,
|
|
141
|
+
after: args.afterJson,
|
|
143
142
|
});
|
|
143
|
+
if (!inputs.ok)
|
|
144
|
+
return inputs.error;
|
|
145
|
+
const { before, after } = inputs.value;
|
|
146
|
+
const input = {
|
|
147
|
+
before,
|
|
148
|
+
after,
|
|
149
|
+
channel_threshold: options.channelThreshold,
|
|
150
|
+
};
|
|
151
|
+
const parsed = compareWebScreenshotsInputSchema.safeParse(input);
|
|
144
152
|
if (!parsed.success)
|
|
145
|
-
return
|
|
153
|
+
return browserCliError(new AnalysisInputError(operation, { cause: parsed.error }, projectInputIssues(parsed.error.issues, input)));
|
|
146
154
|
const result = await compareWebScreenshotEvidence(new CdpBrowserProvider(), parsed.data);
|
|
147
155
|
return result.ok ? result.value : browserCliError(result.error);
|
|
148
156
|
}),
|
|
149
157
|
});
|
|
150
158
|
};
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
159
|
+
/**
|
|
160
|
+
* Parse each named inline JSON argument or local JSON file, like other
|
|
161
|
+
* JSON-input commands. Screenshot artifacts and scenario captures embed PNG
|
|
162
|
+
* bytes that can exceed the host's command-line length limit.
|
|
163
|
+
*/
|
|
164
|
+
const parseJsonArguments = async (operation, fields) => {
|
|
165
|
+
const values = {};
|
|
166
|
+
for (const [field, value] of Object.entries(fields)) {
|
|
167
|
+
const parsed = await parseCliJsonInput(value, operation);
|
|
168
|
+
if (!parsed.ok)
|
|
169
|
+
return isFileInputFailure(parsed.error)
|
|
170
|
+
? parsed
|
|
171
|
+
: {
|
|
172
|
+
ok: false,
|
|
173
|
+
error: inputError(operation, [invalidJsonIssue(field)]),
|
|
174
|
+
};
|
|
175
|
+
values[field] = parsed.value;
|
|
176
|
+
}
|
|
177
|
+
return { ok: true, value: values };
|
|
154
178
|
};
|
|
179
|
+
/** File read and decode failures name the selected path; inline JSON does not. */
|
|
180
|
+
const isFileInputFailure = (error) => typeof error === "object" &&
|
|
181
|
+
error !== null &&
|
|
182
|
+
!Array.isArray(error) &&
|
|
183
|
+
"input_path" in error;
|
|
155
184
|
const invalidJsonIssue = (field) => ({
|
|
156
185
|
path: [field],
|
|
157
186
|
reason: "invalid_format",
|
|
@@ -36,7 +36,6 @@ const registerOverviewCommands = (cli, logger, runDirectAnalysis) => {
|
|
|
36
36
|
options: overviewOptions.extend({
|
|
37
37
|
integrityPolicy: javascriptApplicationOptions.shape.integrityPolicy,
|
|
38
38
|
}),
|
|
39
|
-
alias: { integrityPolicy: "integrity-policy" },
|
|
40
39
|
run: async ({ args, options }) => {
|
|
41
40
|
// Route JavaScript targets exactly like analyze-javascript-application,
|
|
42
41
|
// including typed cancellation; cancellation wraps logging so its exit
|
|
@@ -160,9 +159,6 @@ const registerTraceCommand = (cli, logger, runDirectAnalysis) => {
|
|
|
160
159
|
"target-format": formatSelectionOption,
|
|
161
160
|
provider: providerSelectionOption,
|
|
162
161
|
}),
|
|
163
|
-
alias: {
|
|
164
|
-
caseSensitive: "case-sensitive",
|
|
165
|
-
},
|
|
166
162
|
run: ({ args, options }) => logCliCommand(logger, "trace", () => runDirectAnalysis(args.path, "trace_feature", {
|
|
167
163
|
query: resolveCliAnalysisSelector(args.query, options.query, "query", "trace_feature"),
|
|
168
164
|
case_sensitive: options.caseSensitive,
|
|
@@ -266,7 +262,6 @@ const registerSearchCommand = (cli, logger, runDirectAnalysis) => {
|
|
|
266
262
|
"target-format": formatSelectionOption,
|
|
267
263
|
provider: providerSelectionOption,
|
|
268
264
|
}),
|
|
269
|
-
alias: { caseSensitive: "case-sensitive" },
|
|
270
265
|
run: ({ args, options }) => logCliCommand(logger, "search", () => runDirectAnalysis(args.path, options.kind === "strings" ? "search_strings" : "search_procedures", {
|
|
271
266
|
pattern: resolveCliAnalysisSelector(args.pattern, options.pattern, "pattern", options.kind === "strings"
|
|
272
267
|
? "search_strings"
|
|
@@ -104,13 +104,6 @@ export const registerCoreNativeCommands = (cli, logger, runDirectAnalysis) => {
|
|
|
104
104
|
"target-format": formatSelectionOption,
|
|
105
105
|
provider: providerSelectionOption,
|
|
106
106
|
}),
|
|
107
|
-
alias: {
|
|
108
|
-
maxDepth: "max-depth",
|
|
109
|
-
maxFunctions: "max-functions",
|
|
110
|
-
maxCallSites: "max-call-sites",
|
|
111
|
-
maxNodes: "max-nodes",
|
|
112
|
-
maxEdges: "max-edges",
|
|
113
|
-
},
|
|
114
107
|
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.traceNativeValues, () => runDirectAnalysis(args.path, "trace_native_values", {
|
|
115
108
|
procedure: args.procedure,
|
|
116
109
|
max_depth: options.maxDepth,
|
|
@@ -129,7 +122,7 @@ export const registerCoreNativeCommands = (cli, logger, runDirectAnalysis) => {
|
|
|
129
122
|
}),
|
|
130
123
|
options: z.object({
|
|
131
124
|
type: z.string().optional().describe("Exact database type category path"),
|
|
132
|
-
address: z.string().describe("Exact native address")
|
|
125
|
+
address: z.string().optional().describe("Exact native address"),
|
|
133
126
|
"target-format": formatSelectionOption,
|
|
134
127
|
provider: providerSelectionOption,
|
|
135
128
|
}),
|
|
@@ -185,7 +178,6 @@ const registerNativeDispatchMetadataCommand = (cli, logger, runDirectAnalysis) =
|
|
|
185
178
|
"target-format": formatSelectionOption,
|
|
186
179
|
provider: providerSelectionOption,
|
|
187
180
|
}),
|
|
188
|
-
alias: { maxRecords: "max-records" },
|
|
189
181
|
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"]))),
|
|
190
182
|
});
|
|
191
183
|
};
|
|
@@ -224,11 +216,6 @@ const registerNativeUiActionCommand = (cli, logger, runDirectAnalysis) => {
|
|
|
224
216
|
"target-format": formatSelectionOption,
|
|
225
217
|
provider: providerSelectionOption,
|
|
226
218
|
}),
|
|
227
|
-
alias: {
|
|
228
|
-
maxDepth: "max-depth",
|
|
229
|
-
maxNodes: "max-nodes",
|
|
230
|
-
maxEdges: "max-edges",
|
|
231
|
-
},
|
|
232
219
|
run: async ({ args, options }) => logCliCommand(logger, "trace-native-ui-action", () => runDirectAnalysis(args.path, "trace_native_ui_action", {
|
|
233
220
|
action: args.action,
|
|
234
221
|
max_depth: options.maxDepth,
|
|
@@ -114,11 +114,16 @@ const registerJavaScriptApplicationCommand = (cli, logger) => {
|
|
|
114
114
|
path: z.string().describe("ASAR or extracted application path"),
|
|
115
115
|
}),
|
|
116
116
|
options: javascriptApplicationOptions,
|
|
117
|
-
alias: { integrityPolicy: "integrity-policy" },
|
|
118
117
|
run: ({ args, options }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.analyzeJavaScriptApplication, () => runCliJavaScriptApplicationAnalysis({
|
|
119
118
|
input_path: args.path,
|
|
120
119
|
format: options.artifactFormat,
|
|
121
120
|
integrity_policy: options.integrityPolicy,
|
|
121
|
+
...(options.maxHeapMb === undefined
|
|
122
|
+
? {}
|
|
123
|
+
: { max_heap_mb: options.maxHeapMb }),
|
|
124
|
+
...(options.analysisTimeoutMs === undefined
|
|
125
|
+
? {}
|
|
126
|
+
: { analysis_timeout_ms: options.analysisTimeoutMs }),
|
|
122
127
|
}, signal))),
|
|
123
128
|
});
|
|
124
129
|
};
|
package/dist/cli/evmCommands.js
CHANGED
|
@@ -16,9 +16,18 @@ export const registerEvmCommands = (cli, logger, environment) => {
|
|
|
16
16
|
.enum(["raw", "hex"])
|
|
17
17
|
.describe("Selected carrier representation"),
|
|
18
18
|
}),
|
|
19
|
-
run: ({ args }) => withCommandCancellation(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
run: ({ args }) => withCommandCancellation(async (signal) => {
|
|
20
|
+
try {
|
|
21
|
+
return await logCliCommand(logger, CLI_COMMANDS.inspectEvmInterface, async () => {
|
|
22
|
+
const result = await service.inspect({ path: resolve(args.path), encoding: args.encoding }, { signal });
|
|
23
|
+
return result.ok
|
|
24
|
+
? result.value
|
|
25
|
+
: projectAnalysisError(result.error);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
await service.close();
|
|
30
|
+
}
|
|
31
|
+
}),
|
|
23
32
|
});
|
|
24
33
|
};
|
|
@@ -10,8 +10,13 @@ import { withCommandCancellation } from "./commandCancellation.js";
|
|
|
10
10
|
export const registerFirmwareCommands = (cli, logger, environment) => {
|
|
11
11
|
const service = new FirmwareAnalysisService(createFirmwareAnalysisProvider(environment));
|
|
12
12
|
const execute = (name, operation, input) => withCommandCancellation((signal) => logCliCommand(logger, name, async () => {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
try {
|
|
14
|
+
const result = await service.execute(operation, input, { signal });
|
|
15
|
+
return result.ok ? result.value : projectAnalysisError(result.error);
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
await service.close();
|
|
19
|
+
}
|
|
15
20
|
}));
|
|
16
21
|
const path = z.string().describe("Local firmware path; never executed");
|
|
17
22
|
cli.command(CLI_COMMANDS.inspectFirmwareRegions, {
|
|
@@ -1,15 +1,31 @@
|
|
|
1
1
|
import { analyzeJavaScriptApplication } from "../application/javascript/JavaScriptApplicationService.js";
|
|
2
|
+
import { JAVASCRIPT_APPLICATION_PROVIDER } from "../application/InvestigationProviders.js";
|
|
2
3
|
import { createProgressReporter } from "../application/ProgressReporter.js";
|
|
4
|
+
import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
|
|
5
|
+
import { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js";
|
|
6
|
+
import { analysisErrorWithCleanupFailure } from "../domain/analysisErrorCleanup.js";
|
|
3
7
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
8
|
+
import { ProviderCleanupError } from "../domain/providerCleanupError.js";
|
|
4
9
|
/** Execute the shared one-shot CLI boundary for static JavaScript analysis. */
|
|
5
10
|
export const runCliJavaScriptApplicationAnalysis = async (input, signal) => {
|
|
6
11
|
const progress = createProgressReporter(async (update) => {
|
|
7
12
|
process.stderr.write(`${JSON.stringify({ rea_progress: update })}\n`);
|
|
8
13
|
}, { minimumIntervalMs: 0 });
|
|
9
|
-
const
|
|
14
|
+
const resources = new ArtifactResourceScope();
|
|
15
|
+
const result = await analyzeJavaScriptApplication(input, resources, {
|
|
10
16
|
progress,
|
|
11
17
|
...(signal === undefined ? {} : { signal }),
|
|
12
18
|
});
|
|
19
|
+
try {
|
|
20
|
+
await resources.close();
|
|
21
|
+
}
|
|
22
|
+
catch (cause) {
|
|
23
|
+
const cleanup = ArtifactReaderFailure.cleanupObservation(cause, "JavaScript application resources");
|
|
24
|
+
const failure = new ProviderCleanupError(JAVASCRIPT_APPLICATION_PROVIDER.id, cleanup.resources, { reason: cleanup.reason }, { cause, operation: "analyze_javascript_application" });
|
|
25
|
+
return cliError(result.ok
|
|
26
|
+
? failure
|
|
27
|
+
: analysisErrorWithCleanupFailure(result.error, failure, "analyze_javascript_application"));
|
|
28
|
+
}
|
|
13
29
|
return result.ok ? result.value : cliError(result.error);
|
|
14
30
|
};
|
|
15
31
|
const cliError = (error) => ({
|
|
@@ -26,20 +26,27 @@ export const registerJavaScriptRecoveryCommands = (cli, logger, environment) =>
|
|
|
26
26
|
.optional()
|
|
27
27
|
.describe("Upstream syntax recovery level; runtime equivalence remains unknown"),
|
|
28
28
|
}),
|
|
29
|
-
run: ({ args, options }) => withCommandCancellation(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
29
|
+
run: ({ args, options }) => withCommandCancellation(async (signal) => {
|
|
30
|
+
try {
|
|
31
|
+
return await logCliCommand(logger, CLI_COMMANDS.recoverJavaScriptSources, async () => {
|
|
32
|
+
const result = await service.recover({
|
|
33
|
+
path: args.path,
|
|
34
|
+
output_directory: args.outputDirectory,
|
|
35
|
+
...(options.extractionMode === undefined
|
|
36
|
+
? {}
|
|
37
|
+
: { extraction_mode: options.extractionMode }),
|
|
38
|
+
...(options.rewriteLevel === undefined
|
|
39
|
+
? {}
|
|
40
|
+
: { rewrite_level: options.rewriteLevel }),
|
|
41
|
+
}, { signal });
|
|
42
|
+
return result.ok
|
|
43
|
+
? result.value
|
|
44
|
+
: projectAnalysisError(result.error);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
await service.close();
|
|
49
|
+
}
|
|
50
|
+
}),
|
|
44
51
|
});
|
|
45
52
|
};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { z } from "incur";
|
|
2
|
+
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
|
3
|
+
import { JebAnalysisService } from "../application/jeb/JebAnalysisService.js";
|
|
4
|
+
import { createJebAnalysisProvider } from "../composition/jeb.js";
|
|
5
|
+
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
6
|
+
import { logCliCommand } from "../cliLogging.js";
|
|
7
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
8
|
+
import { withCommandCancellation } from "./commandCancellation.js";
|
|
9
|
+
/** Expose the same explicit JEB requests through one-shot CLI commands. */
|
|
10
|
+
export const registerJebCommands = (cli, logger, environment, provider = createJebAnalysisProvider(environment)) => {
|
|
11
|
+
const service = new JebAnalysisService(provider);
|
|
12
|
+
const execute = (name, operation, input) => withCommandCancellation((signal) => logCliCommand(logger, name, async () => {
|
|
13
|
+
const result = await service.execute(operation, input, { signal });
|
|
14
|
+
try {
|
|
15
|
+
await provider.close();
|
|
16
|
+
}
|
|
17
|
+
catch (cause) {
|
|
18
|
+
if (cause instanceof AnalysisError)
|
|
19
|
+
return projectAnalysisError(cause);
|
|
20
|
+
throw cause;
|
|
21
|
+
}
|
|
22
|
+
return result.ok ? result.value : projectAnalysisError(result.error);
|
|
23
|
+
}));
|
|
24
|
+
cli.command(CLI_COMMANDS.inspectJebClient, {
|
|
25
|
+
description: "Inspect the running JEB MCP client without opening a target",
|
|
26
|
+
args: z.object({}),
|
|
27
|
+
run: () => execute(CLI_COMMANDS.inspectJebClient, "inspect_jeb_client", {}),
|
|
28
|
+
});
|
|
29
|
+
cli.command(CLI_COMMANDS.openJebProject, {
|
|
30
|
+
description: "Open or create a JEB project from an artifact or .jdb2 database",
|
|
31
|
+
args: z.object({
|
|
32
|
+
path: z
|
|
33
|
+
.string()
|
|
34
|
+
.describe("Artifact or .jdb2 path resolved by the JEB engine host"),
|
|
35
|
+
}),
|
|
36
|
+
run: ({ args }) => execute(CLI_COMMANDS.openJebProject, "open_jeb_project", args),
|
|
37
|
+
});
|
|
38
|
+
cli.command(CLI_COMMANDS.listJebUnits, {
|
|
39
|
+
description: "List JEB project units by path and type with optional filter",
|
|
40
|
+
args: z.object({}),
|
|
41
|
+
options: z.object({
|
|
42
|
+
filter: z
|
|
43
|
+
.string()
|
|
44
|
+
.optional()
|
|
45
|
+
.describe("Wildcard filter matched against unit paths"),
|
|
46
|
+
"parent-unit-path": z
|
|
47
|
+
.string()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe("Restrict results to descendants of this unit path"),
|
|
50
|
+
index: z
|
|
51
|
+
.number()
|
|
52
|
+
.int()
|
|
53
|
+
.nonnegative()
|
|
54
|
+
.default(0)
|
|
55
|
+
.describe("Zero-based index of the first result to return"),
|
|
56
|
+
count: z
|
|
57
|
+
.number()
|
|
58
|
+
.int()
|
|
59
|
+
.min(1)
|
|
60
|
+
.max(100)
|
|
61
|
+
.default(100)
|
|
62
|
+
.describe("Maximum results; the engine caps unit pages at 100"),
|
|
63
|
+
}),
|
|
64
|
+
run: ({ options }) => execute(CLI_COMMANDS.listJebUnits, "list_jeb_units", {
|
|
65
|
+
index: options.index,
|
|
66
|
+
count: options.count,
|
|
67
|
+
...(options.filter === undefined ? {} : { filter: options.filter }),
|
|
68
|
+
...(options["parent-unit-path"] === undefined
|
|
69
|
+
? {}
|
|
70
|
+
: { parent_unit_path: options["parent-unit-path"] }),
|
|
71
|
+
}),
|
|
72
|
+
});
|
|
73
|
+
cli.command(CLI_COMMANDS.decompileJebItem, {
|
|
74
|
+
description: "Decompile one JEB type or method to engine pseudo-code",
|
|
75
|
+
args: z.object({
|
|
76
|
+
"item-address": z
|
|
77
|
+
.string()
|
|
78
|
+
.min(1)
|
|
79
|
+
.describe("Type or method address within the unit"),
|
|
80
|
+
"item-kind": z
|
|
81
|
+
.enum(["type", "method"])
|
|
82
|
+
.describe("Kind of item to decompile"),
|
|
83
|
+
}),
|
|
84
|
+
options: z.object({
|
|
85
|
+
"unit-path": z
|
|
86
|
+
.string()
|
|
87
|
+
.min(1)
|
|
88
|
+
.optional()
|
|
89
|
+
.describe("Target code unit; the engine's first code unit when omitted"),
|
|
90
|
+
}),
|
|
91
|
+
run: ({ args, options }) => execute(CLI_COMMANDS.decompileJebItem, "decompile_jeb_item", {
|
|
92
|
+
item_address: args["item-address"],
|
|
93
|
+
item_kind: args["item-kind"],
|
|
94
|
+
...(options["unit-path"] === undefined
|
|
95
|
+
? {}
|
|
96
|
+
: { unit_path: options["unit-path"] }),
|
|
97
|
+
}),
|
|
98
|
+
});
|
|
99
|
+
};
|
package/dist/cli/jsonOutput.js
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import { bufferedJsonParts, jsonParts } from "../domain/jsonSerialization.js";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Write ordinary JSON without constructing a document-sized string.
|
|
4
|
+
*
|
|
5
|
+
* `json` is indented for a terminal reader. Piped or redirected output, which
|
|
6
|
+
* agents and scripts consume, is compact: indentation adds no information and
|
|
7
|
+
* measured 16-45% more model tokens on real results. The value is identical.
|
|
8
|
+
*/
|
|
3
9
|
export const writeJsonOutput = async (value, destination, format = "json") => {
|
|
4
|
-
for (const part of bufferedJsonParts(jsonOutputParts(value, format)))
|
|
10
|
+
for (const part of bufferedJsonParts(jsonOutputParts(value, format, isTerminal(destination))))
|
|
5
11
|
await writePart(destination, part);
|
|
6
12
|
};
|
|
13
|
+
const isTerminal = (destination) => "isTTY" in destination && destination.isTTY === true;
|
|
7
14
|
const writePart = (destination, part) => new Promise((resolve, reject) => {
|
|
8
15
|
const onError = (cause) => reject(cause);
|
|
9
16
|
destination.once("error", onError);
|
|
@@ -26,7 +33,7 @@ const writePart = (destination, part) => new Promise((resolve, reject) => {
|
|
|
26
33
|
}
|
|
27
34
|
});
|
|
28
35
|
/** The exact formatted document, including its final newline. */
|
|
29
|
-
export function* jsonOutputParts(value, format) {
|
|
36
|
+
export function* jsonOutputParts(value, format, pretty = true) {
|
|
30
37
|
if (format === "jsonl" && Array.isArray(value)) {
|
|
31
38
|
for (const item of value) {
|
|
32
39
|
yield* jsonParts(item);
|
|
@@ -34,6 +41,6 @@ export function* jsonOutputParts(value, format) {
|
|
|
34
41
|
}
|
|
35
42
|
return;
|
|
36
43
|
}
|
|
37
|
-
yield* jsonParts(value, format === "json");
|
|
44
|
+
yield* jsonParts(value, pretty && format === "json");
|
|
38
45
|
yield "\n";
|
|
39
46
|
}
|
|
@@ -9,6 +9,13 @@ const referenceSourceImportFailureSchema = z.strictObject({
|
|
|
9
9
|
"execution_failure",
|
|
10
10
|
]),
|
|
11
11
|
message: z.string().min(1),
|
|
12
|
+
cleanup: z
|
|
13
|
+
.strictObject({
|
|
14
|
+
reason: z.string().min(1),
|
|
15
|
+
resources: z.array(z.string().min(1)),
|
|
16
|
+
})
|
|
17
|
+
.optional(),
|
|
18
|
+
partial: z.unknown().optional(),
|
|
12
19
|
});
|
|
13
20
|
/** Identify the historical-source import command's failed operation outputs. */
|
|
14
21
|
export const isReferenceSourceImportCliFailure = (value) => referenceSourceImportFailureSchema.safeParse(value).success ||
|
|
@@ -17,6 +17,7 @@ const supportedClientIds = SUPPORTED_CLIENT_DEFINITIONS.map(({ name }) => name);
|
|
|
17
17
|
const supportedClientSchema = z
|
|
18
18
|
.string()
|
|
19
19
|
.refine((candidate) => supportedClientIds.some((name) => name === candidate), "Unsupported agent integration");
|
|
20
|
+
const skillClientSchema = z.union([z.literal("shared"), supportedClientSchema]);
|
|
20
21
|
/** Register setup, doctor, uninstall, and update CLI commands. */
|
|
21
22
|
export const registerSetupCommands = (cli, logger, environment) => {
|
|
22
23
|
registerSetupCommand(cli, logger, environment);
|
|
@@ -40,6 +41,10 @@ const registerSetupCommand = (cli, logger, environment) => {
|
|
|
40
41
|
.array(supportedClientSchema)
|
|
41
42
|
.default([])
|
|
42
43
|
.describe("Agent integration to configure; repeat for multiple agents"),
|
|
44
|
+
skillClient: z
|
|
45
|
+
.array(skillClientSchema)
|
|
46
|
+
.default([])
|
|
47
|
+
.describe("Existing client skill destination to update; repeatable"),
|
|
43
48
|
allDetected: z
|
|
44
49
|
.boolean()
|
|
45
50
|
.default(false)
|
|
@@ -91,7 +96,6 @@ const registerMaintenanceCommands = (cli, logger, environment) => {
|
|
|
91
96
|
.default(false)
|
|
92
97
|
.describe("Also remove REA caches and state"),
|
|
93
98
|
}),
|
|
94
|
-
alias: { purgeData: "purge-data" },
|
|
95
99
|
run: ({ options }) => logCliCommand(logger, "uninstall", () => runUninstall(options.purgeData, systemUninstallHost(homeDirectoryFromEnvironment(environment, process.platform), undefined, environment)), isUninstallFailure),
|
|
96
100
|
});
|
|
97
101
|
cli.command(CLI_COMMANDS.update, {
|
|
@@ -112,8 +116,12 @@ const runSetupCommand = async (input, environment) => {
|
|
|
112
116
|
};
|
|
113
117
|
const setupRunOptions = (input, interactive, hasExplicitScope) => {
|
|
114
118
|
const { options } = input;
|
|
115
|
-
const agentIntegrationSelected = options.allDetected ||
|
|
116
|
-
|
|
119
|
+
const agentIntegrationSelected = options.allDetected ||
|
|
120
|
+
options.client.length > 0 ||
|
|
121
|
+
options.skillClient.length > 0;
|
|
122
|
+
const hasSelectedClients = hasExplicitScope &&
|
|
123
|
+
!options.allDetected &&
|
|
124
|
+
(options.client.length > 0 || options.skillClient.length > 0);
|
|
117
125
|
return {
|
|
118
126
|
approved: options.yes && !options.dryRun,
|
|
119
127
|
installHopper: options.installHopper,
|
|
@@ -122,6 +130,9 @@ const setupRunOptions = (input, interactive, hasExplicitScope) => {
|
|
|
122
130
|
allDetectedClients: options.allDetected,
|
|
123
131
|
proposeHopper: interactive || options.installHopper,
|
|
124
132
|
...(hasSelectedClients ? { clientIds: options.client } : {}),
|
|
133
|
+
...(options.skillClient.length > 0
|
|
134
|
+
? { skillClientIds: options.skillClient }
|
|
135
|
+
: {}),
|
|
125
136
|
...(hasExplicitScope
|
|
126
137
|
? { installSkill: options.skill ?? agentIntegrationSelected }
|
|
127
138
|
: {}),
|
|
@@ -145,6 +156,7 @@ const setupIsInteractive = (options, formatExplicit) => !options.yes &&
|
|
|
145
156
|
process.stderr.isTTY === true;
|
|
146
157
|
const setupHasExplicitScope = (options) => options.allDetected ||
|
|
147
158
|
options.client.length > 0 ||
|
|
159
|
+
options.skillClient.length > 0 ||
|
|
148
160
|
options.skill !== undefined ||
|
|
149
161
|
options.installHopper;
|
|
150
162
|
const doctorScope = (options) => options.client.length === 0 &&
|