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
|
@@ -0,0 +1,583 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { localPathStringSchema } from "../localPath.js";
|
|
3
|
+
import { IDENTIFIER_PATTERN } from "../stringPatterns.js";
|
|
4
|
+
/**
|
|
5
|
+
* Device serials as adb prints them: emulator-5554, USB identifiers, and
|
|
6
|
+
* host:port transports. The pattern keeps arguments free of whitespace and
|
|
7
|
+
* quotes; argv is positional in the provider, so this is admission hygiene
|
|
8
|
+
* rather than injection defense.
|
|
9
|
+
*/
|
|
10
|
+
const deviceSerialSchema = z
|
|
11
|
+
.string()
|
|
12
|
+
.min(1)
|
|
13
|
+
.max(256)
|
|
14
|
+
.regex(/^[^\x00\s"']+$/u, "Device serial cannot contain whitespace or quotes");
|
|
15
|
+
/**
|
|
16
|
+
* Android package names as Package Manager reports them. System entries can
|
|
17
|
+
* be a single segment (`android`), so at least one identifier is required.
|
|
18
|
+
*/
|
|
19
|
+
const packageNameSchema = z
|
|
20
|
+
.string()
|
|
21
|
+
.min(1)
|
|
22
|
+
.max(256)
|
|
23
|
+
.regex(/^[A-Za-z][A-Za-z0-9_]*(\.[A-Za-z][A-Za-z0-9_]*)*$/u, "Package name must be dot-separated Java identifiers");
|
|
24
|
+
const keyStringSchema = z.string().min(1).max(256);
|
|
25
|
+
const keyPattern = /^[A-Za-z0-9._\x2d]+$/u;
|
|
26
|
+
/**
|
|
27
|
+
* Caller intent for ADB-backed device inspection and acquisition.
|
|
28
|
+
*
|
|
29
|
+
* REA never installs platform tools, starts an emulator, or manages devices;
|
|
30
|
+
* every operation addresses devices the caller already connected, through the
|
|
31
|
+
* adb binary the caller selected.
|
|
32
|
+
*/
|
|
33
|
+
export const adbInputSchemas = {
|
|
34
|
+
inspect_adb_client: z.strictObject({}),
|
|
35
|
+
list_adb_devices: z.strictObject({}),
|
|
36
|
+
inspect_adb_device: z.strictObject({
|
|
37
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
38
|
+
}),
|
|
39
|
+
list_adb_packages: z.strictObject({
|
|
40
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
41
|
+
scope: z
|
|
42
|
+
.enum(["all", "third_party", "system"])
|
|
43
|
+
.default("all")
|
|
44
|
+
.describe("Package scope: all packages, third-party only (-3), or system only (-s)"),
|
|
45
|
+
}),
|
|
46
|
+
pull_adb_package: z.strictObject({
|
|
47
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
48
|
+
package: packageNameSchema.describe("Installed package name whose APK set is pulled"),
|
|
49
|
+
output_directory: localPathStringSchema.describe("Local directory for the pulled APK set; REA creates a package-named subdirectory inside it"),
|
|
50
|
+
}),
|
|
51
|
+
read_adb_logcat: z.strictObject({
|
|
52
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
53
|
+
count: z
|
|
54
|
+
.number()
|
|
55
|
+
.int()
|
|
56
|
+
.min(1)
|
|
57
|
+
.max(10_000)
|
|
58
|
+
.default(500)
|
|
59
|
+
.describe("Number of most recent lines to read (logcat -d -t)"),
|
|
60
|
+
buffer: z
|
|
61
|
+
.enum(["main", "system", "radio", "events", "crash"])
|
|
62
|
+
.default("main")
|
|
63
|
+
.describe("Log buffer to read (logcat -b)"),
|
|
64
|
+
pid: z
|
|
65
|
+
.number()
|
|
66
|
+
.int()
|
|
67
|
+
.positive()
|
|
68
|
+
.optional()
|
|
69
|
+
.describe("Restrict to one process id (logcat --pid)"),
|
|
70
|
+
}),
|
|
71
|
+
inspect_adb_package: z.strictObject({
|
|
72
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
73
|
+
package: packageNameSchema.describe("Installed package to inspect"),
|
|
74
|
+
}),
|
|
75
|
+
pull_adb_file: z.strictObject({
|
|
76
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
77
|
+
device_path: z
|
|
78
|
+
.string()
|
|
79
|
+
.min(1)
|
|
80
|
+
.regex(/^\/[^\x00]*$/u, "Device path must be absolute")
|
|
81
|
+
.describe("Absolute device filesystem path to pull"),
|
|
82
|
+
output_directory: localPathStringSchema.describe("Local directory for the pulled file; must not already contain the file"),
|
|
83
|
+
}),
|
|
84
|
+
push_adb_file: z.strictObject({
|
|
85
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
86
|
+
local_path: localPathStringSchema.describe("Existing local regular file to push"),
|
|
87
|
+
device_path: z
|
|
88
|
+
.string()
|
|
89
|
+
.min(1)
|
|
90
|
+
.regex(/^\/[^\x00]*$/u, "Device path must be absolute")
|
|
91
|
+
.describe("Absolute destination path on the device"),
|
|
92
|
+
overwrite: z
|
|
93
|
+
.boolean()
|
|
94
|
+
.default(false)
|
|
95
|
+
.describe("Allow replacing an existing device file; refused by default"),
|
|
96
|
+
}),
|
|
97
|
+
capture_adb_screen: z.strictObject({
|
|
98
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
99
|
+
output_directory: localPathStringSchema.describe("Local directory for the captured PNG; must not already contain it"),
|
|
100
|
+
}),
|
|
101
|
+
list_adb_processes: z.strictObject({
|
|
102
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
103
|
+
}),
|
|
104
|
+
list_adb_directory: z.strictObject({
|
|
105
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
106
|
+
device_path: z
|
|
107
|
+
.string()
|
|
108
|
+
.min(1)
|
|
109
|
+
.regex(/^\/[^\x00]*$/u, "Device path must be absolute")
|
|
110
|
+
.describe("Absolute device directory path to list (ls -la)"),
|
|
111
|
+
}),
|
|
112
|
+
list_adb_features: z.strictObject({
|
|
113
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
114
|
+
}),
|
|
115
|
+
list_adb_services: z.strictObject({
|
|
116
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
117
|
+
}),
|
|
118
|
+
inspect_adb_display: z.strictObject({
|
|
119
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
120
|
+
}),
|
|
121
|
+
inspect_adb_window: z.strictObject({
|
|
122
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
123
|
+
}),
|
|
124
|
+
read_adb_setting: z.strictObject({
|
|
125
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
126
|
+
namespace: z
|
|
127
|
+
.enum(["system", "secure", "global"])
|
|
128
|
+
.describe("Settings namespace to read"),
|
|
129
|
+
key: keyStringSchema
|
|
130
|
+
.regex(keyPattern, "Setting keys are restricted to identifiers")
|
|
131
|
+
.describe("Setting key to read"),
|
|
132
|
+
}),
|
|
133
|
+
collect_adb_bugreport: z.strictObject({
|
|
134
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
135
|
+
output_directory: localPathStringSchema.describe("Local directory for the bugreport archive; REA writes exactly one new zip into it"),
|
|
136
|
+
}),
|
|
137
|
+
resolve_adb_packages: z.strictObject({
|
|
138
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
139
|
+
query: z
|
|
140
|
+
.string()
|
|
141
|
+
.min(2)
|
|
142
|
+
.max(256)
|
|
143
|
+
.describe("Case-insensitive substring matched against installed package names (e.g. whatsapp)"),
|
|
144
|
+
}),
|
|
145
|
+
install_adb_package: z.strictObject({
|
|
146
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
147
|
+
apk_path: localPathStringSchema.describe("Existing local APK file to install"),
|
|
148
|
+
replace: z
|
|
149
|
+
.boolean()
|
|
150
|
+
.default(false)
|
|
151
|
+
.describe("Replace an existing installation and keep its data (adb install -r)"),
|
|
152
|
+
}),
|
|
153
|
+
uninstall_adb_package: z.strictObject({
|
|
154
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
155
|
+
package: packageNameSchema.describe("Installed package to uninstall"),
|
|
156
|
+
}),
|
|
157
|
+
start_adb_app: z.strictObject({
|
|
158
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
159
|
+
package: packageNameSchema.describe("Installed package whose launcher activity is started"),
|
|
160
|
+
}),
|
|
161
|
+
start_adb_activity: z.strictObject({
|
|
162
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
163
|
+
action: z
|
|
164
|
+
.string()
|
|
165
|
+
.min(1)
|
|
166
|
+
.max(256)
|
|
167
|
+
.regex(IDENTIFIER_PATTERN, "Intent action must be a dotted identifier such as android.intent.action.VIEW")
|
|
168
|
+
.describe("Intent action to start"),
|
|
169
|
+
data_uri: z
|
|
170
|
+
.string()
|
|
171
|
+
.min(1)
|
|
172
|
+
.max(2048)
|
|
173
|
+
.regex(/^[^\x00\s]+$/u, "Data URI cannot contain whitespace or NUL")
|
|
174
|
+
.optional()
|
|
175
|
+
.describe("Intent data URI (-d)"),
|
|
176
|
+
component: z
|
|
177
|
+
.string()
|
|
178
|
+
.min(1)
|
|
179
|
+
.max(512)
|
|
180
|
+
.regex(/^[A-Za-z0-9._\x2d]+(\/[A-Za-z0-9._\x2d]*)?$/u, "Component must be package/activity form")
|
|
181
|
+
.optional()
|
|
182
|
+
.describe("Explicit component to start (-n)"),
|
|
183
|
+
extras: z
|
|
184
|
+
.array(z.strictObject({
|
|
185
|
+
key: keyStringSchema
|
|
186
|
+
.regex(keyPattern, "Extra keys are identifiers")
|
|
187
|
+
.describe("Extra key"),
|
|
188
|
+
type: z
|
|
189
|
+
.enum(["string", "boolean", "int", "long", "float"])
|
|
190
|
+
.describe("Extra value type"),
|
|
191
|
+
value: z
|
|
192
|
+
.string()
|
|
193
|
+
.min(1)
|
|
194
|
+
.max(2048)
|
|
195
|
+
.regex(/^[^\x00]*$/u, "Extra values cannot contain NUL")
|
|
196
|
+
.describe("Extra value as text, parsed per type"),
|
|
197
|
+
}))
|
|
198
|
+
.max(16)
|
|
199
|
+
.default([])
|
|
200
|
+
.describe("Typed intent extras (--es/--ez/--ei/--el/--ef)"),
|
|
201
|
+
}),
|
|
202
|
+
stop_adb_app: z.strictObject({
|
|
203
|
+
serial: deviceSerialSchema.describe("Device serial exactly as `adb devices` reports it"),
|
|
204
|
+
package: packageNameSchema.describe("Package whose processes are force-stopped"),
|
|
205
|
+
}),
|
|
206
|
+
};
|
|
207
|
+
/** Validate operation and input together so their types remain correlated. */
|
|
208
|
+
export const adbRequestSchema = z.discriminatedUnion("operation", [
|
|
209
|
+
z.strictObject({
|
|
210
|
+
operation: z.literal("inspect_adb_client"),
|
|
211
|
+
input: adbInputSchemas.inspect_adb_client,
|
|
212
|
+
}),
|
|
213
|
+
z.strictObject({
|
|
214
|
+
operation: z.literal("list_adb_devices"),
|
|
215
|
+
input: adbInputSchemas.list_adb_devices,
|
|
216
|
+
}),
|
|
217
|
+
z.strictObject({
|
|
218
|
+
operation: z.literal("inspect_adb_device"),
|
|
219
|
+
input: adbInputSchemas.inspect_adb_device,
|
|
220
|
+
}),
|
|
221
|
+
z.strictObject({
|
|
222
|
+
operation: z.literal("list_adb_packages"),
|
|
223
|
+
input: adbInputSchemas.list_adb_packages,
|
|
224
|
+
}),
|
|
225
|
+
z.strictObject({
|
|
226
|
+
operation: z.literal("pull_adb_package"),
|
|
227
|
+
input: adbInputSchemas.pull_adb_package,
|
|
228
|
+
}),
|
|
229
|
+
z.strictObject({
|
|
230
|
+
operation: z.literal("read_adb_logcat"),
|
|
231
|
+
input: adbInputSchemas.read_adb_logcat,
|
|
232
|
+
}),
|
|
233
|
+
z.strictObject({
|
|
234
|
+
operation: z.literal("inspect_adb_package"),
|
|
235
|
+
input: adbInputSchemas.inspect_adb_package,
|
|
236
|
+
}),
|
|
237
|
+
z.strictObject({
|
|
238
|
+
operation: z.literal("pull_adb_file"),
|
|
239
|
+
input: adbInputSchemas.pull_adb_file,
|
|
240
|
+
}),
|
|
241
|
+
z.strictObject({
|
|
242
|
+
operation: z.literal("push_adb_file"),
|
|
243
|
+
input: adbInputSchemas.push_adb_file,
|
|
244
|
+
}),
|
|
245
|
+
z.strictObject({
|
|
246
|
+
operation: z.literal("capture_adb_screen"),
|
|
247
|
+
input: adbInputSchemas.capture_adb_screen,
|
|
248
|
+
}),
|
|
249
|
+
z.strictObject({
|
|
250
|
+
operation: z.literal("list_adb_processes"),
|
|
251
|
+
input: adbInputSchemas.list_adb_processes,
|
|
252
|
+
}),
|
|
253
|
+
z.strictObject({
|
|
254
|
+
operation: z.literal("list_adb_directory"),
|
|
255
|
+
input: adbInputSchemas.list_adb_directory,
|
|
256
|
+
}),
|
|
257
|
+
z.strictObject({
|
|
258
|
+
operation: z.literal("list_adb_features"),
|
|
259
|
+
input: adbInputSchemas.list_adb_features,
|
|
260
|
+
}),
|
|
261
|
+
z.strictObject({
|
|
262
|
+
operation: z.literal("list_adb_services"),
|
|
263
|
+
input: adbInputSchemas.list_adb_services,
|
|
264
|
+
}),
|
|
265
|
+
z.strictObject({
|
|
266
|
+
operation: z.literal("inspect_adb_display"),
|
|
267
|
+
input: adbInputSchemas.inspect_adb_display,
|
|
268
|
+
}),
|
|
269
|
+
z.strictObject({
|
|
270
|
+
operation: z.literal("inspect_adb_window"),
|
|
271
|
+
input: adbInputSchemas.inspect_adb_window,
|
|
272
|
+
}),
|
|
273
|
+
z.strictObject({
|
|
274
|
+
operation: z.literal("read_adb_setting"),
|
|
275
|
+
input: adbInputSchemas.read_adb_setting,
|
|
276
|
+
}),
|
|
277
|
+
z.strictObject({
|
|
278
|
+
operation: z.literal("collect_adb_bugreport"),
|
|
279
|
+
input: adbInputSchemas.collect_adb_bugreport,
|
|
280
|
+
}),
|
|
281
|
+
z.strictObject({
|
|
282
|
+
operation: z.literal("resolve_adb_packages"),
|
|
283
|
+
input: adbInputSchemas.resolve_adb_packages,
|
|
284
|
+
}),
|
|
285
|
+
z.strictObject({
|
|
286
|
+
operation: z.literal("install_adb_package"),
|
|
287
|
+
input: adbInputSchemas.install_adb_package,
|
|
288
|
+
}),
|
|
289
|
+
z.strictObject({
|
|
290
|
+
operation: z.literal("uninstall_adb_package"),
|
|
291
|
+
input: adbInputSchemas.uninstall_adb_package,
|
|
292
|
+
}),
|
|
293
|
+
z.strictObject({
|
|
294
|
+
operation: z.literal("start_adb_app"),
|
|
295
|
+
input: adbInputSchemas.start_adb_app,
|
|
296
|
+
}),
|
|
297
|
+
z.strictObject({
|
|
298
|
+
operation: z.literal("start_adb_activity"),
|
|
299
|
+
input: adbInputSchemas.start_adb_activity,
|
|
300
|
+
}),
|
|
301
|
+
z.strictObject({
|
|
302
|
+
operation: z.literal("stop_adb_app"),
|
|
303
|
+
input: adbInputSchemas.stop_adb_app,
|
|
304
|
+
}),
|
|
305
|
+
]);
|
|
306
|
+
const client = z.strictObject({
|
|
307
|
+
binary_path: z.string().min(1),
|
|
308
|
+
path_source: z.enum(["environment", "path"]),
|
|
309
|
+
version: z.string().min(1).nullable(),
|
|
310
|
+
installed_path: z.string().min(1).nullable(),
|
|
311
|
+
});
|
|
312
|
+
const device = z.strictObject({
|
|
313
|
+
serial: z.string().min(1),
|
|
314
|
+
state: z.string().min(1),
|
|
315
|
+
transport: z.enum(["usb", "tcp", "unknown"]),
|
|
316
|
+
product: z.string().nullable(),
|
|
317
|
+
model: z.string().nullable(),
|
|
318
|
+
device: z.string().nullable(),
|
|
319
|
+
transport_id: z.number().int().positive().nullable(),
|
|
320
|
+
/**
|
|
321
|
+
* Inferred device kind with its evidence basis. The serial prefix and the
|
|
322
|
+
* `device:` metadata line are observations; the kind itself is derived.
|
|
323
|
+
*/
|
|
324
|
+
kind: z.enum(["emulator", "physical", "unknown"]),
|
|
325
|
+
kind_basis: z.enum(["emulator_serial_prefix", "usb_transport", "none"]),
|
|
326
|
+
});
|
|
327
|
+
const pulledArtifact = z.strictObject({
|
|
328
|
+
device_path: z.string().min(1),
|
|
329
|
+
file_name: z.string().min(1),
|
|
330
|
+
local_path: z.string().min(1),
|
|
331
|
+
bytes: z.number().int().nonnegative(),
|
|
332
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/u),
|
|
333
|
+
role: z.enum(["base", "split", "unknown"]),
|
|
334
|
+
role_basis: z.literal("file_name"),
|
|
335
|
+
});
|
|
336
|
+
const pullFailure = z.strictObject({
|
|
337
|
+
device_path: z.string().min(1).nullable(),
|
|
338
|
+
stage: z.enum(["resolve_paths", "pull", "digest"]),
|
|
339
|
+
message: z.string().min(1),
|
|
340
|
+
});
|
|
341
|
+
/** Portable ADB observations with explicit identity and coverage limitations. */
|
|
342
|
+
export const adbResultSchemas = {
|
|
343
|
+
inspect_adb_client: z.strictObject({
|
|
344
|
+
client,
|
|
345
|
+
/**
|
|
346
|
+
* `adb version` never contacts the adb server; this tool starts nothing.
|
|
347
|
+
* Recorded explicitly so the session keeps the distinction observable.
|
|
348
|
+
*/
|
|
349
|
+
contacted_adb_server: z.literal(false),
|
|
350
|
+
}),
|
|
351
|
+
list_adb_devices: z.strictObject({
|
|
352
|
+
client,
|
|
353
|
+
devices: z.array(device),
|
|
354
|
+
/**
|
|
355
|
+
* Starting the local adb server is an adb client behavior on first use;
|
|
356
|
+
* REA observes whichever server state the caller's environment has.
|
|
357
|
+
*/
|
|
358
|
+
may_have_started_adb_server: z.boolean(),
|
|
359
|
+
}),
|
|
360
|
+
inspect_adb_device: z.strictObject({
|
|
361
|
+
client,
|
|
362
|
+
serial: z.string().min(1),
|
|
363
|
+
properties: z.array(z.strictObject({ name: z.string().min(1), value: z.string().min(1) })),
|
|
364
|
+
property_count: z.number().int().nonnegative(),
|
|
365
|
+
emulator_observed: z.boolean().nullable(),
|
|
366
|
+
}),
|
|
367
|
+
list_adb_packages: z.strictObject({
|
|
368
|
+
client,
|
|
369
|
+
serial: z.string().min(1),
|
|
370
|
+
scope: z.enum(["all", "third_party", "system"]),
|
|
371
|
+
packages: z.array(z.strictObject({
|
|
372
|
+
package_name: packageNameSchema,
|
|
373
|
+
/** Device filesystem path; not a host-local path. */
|
|
374
|
+
base_apk_device_path: z.string().min(1),
|
|
375
|
+
})),
|
|
376
|
+
unparsed_lines: z.array(z.string().min(1)),
|
|
377
|
+
coverage: z.enum(["complete", "partial"]),
|
|
378
|
+
}),
|
|
379
|
+
pull_adb_package: z.strictObject({
|
|
380
|
+
client,
|
|
381
|
+
serial: z.string().min(1),
|
|
382
|
+
package_name: packageNameSchema,
|
|
383
|
+
output_directory: z.string().min(1),
|
|
384
|
+
artifacts: z.array(pulledArtifact),
|
|
385
|
+
failures: z.array(pullFailure),
|
|
386
|
+
coverage: z.enum(["complete", "partial"]),
|
|
387
|
+
}),
|
|
388
|
+
read_adb_logcat: z.strictObject({
|
|
389
|
+
client,
|
|
390
|
+
serial: z.string().min(1),
|
|
391
|
+
count: z.number().int().positive(),
|
|
392
|
+
buffer: z.enum(["main", "system", "radio", "events", "crash"]),
|
|
393
|
+
pid: z.number().int().positive().nullable(),
|
|
394
|
+
lines: z.array(z.string()),
|
|
395
|
+
total_bytes: z.number().int().nonnegative(),
|
|
396
|
+
coverage: z.enum(["complete", "partial"]),
|
|
397
|
+
}),
|
|
398
|
+
inspect_adb_package: z.strictObject({
|
|
399
|
+
client,
|
|
400
|
+
serial: z.string().min(1),
|
|
401
|
+
package_name: packageNameSchema,
|
|
402
|
+
version_name: z.string().nullable(),
|
|
403
|
+
version_code: z.number().int().nullable(),
|
|
404
|
+
first_install_time: z.string().nullable(),
|
|
405
|
+
last_update_time: z.string().nullable(),
|
|
406
|
+
installer_package_name: z.string().nullable(),
|
|
407
|
+
user_id: z.number().int().nullable(),
|
|
408
|
+
pkg_flags: z.string().nullable(),
|
|
409
|
+
requested_permissions_count: z.number().int().nonnegative().nullable(),
|
|
410
|
+
coverage: z.enum(["complete", "partial"]),
|
|
411
|
+
}),
|
|
412
|
+
pull_adb_file: z.strictObject({
|
|
413
|
+
client,
|
|
414
|
+
serial: z.string().min(1),
|
|
415
|
+
device_path: z.string().min(1),
|
|
416
|
+
local_path: z.string().min(1),
|
|
417
|
+
bytes: z.number().int().nonnegative(),
|
|
418
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/u),
|
|
419
|
+
}),
|
|
420
|
+
push_adb_file: z.strictObject({
|
|
421
|
+
client,
|
|
422
|
+
serial: z.string().min(1),
|
|
423
|
+
local_path: z.string().min(1),
|
|
424
|
+
device_path: z.string().min(1),
|
|
425
|
+
bytes: z.number().int().nonnegative(),
|
|
426
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/u),
|
|
427
|
+
device_sha256: z
|
|
428
|
+
.string()
|
|
429
|
+
.regex(/^[a-f0-9]{64}$/u)
|
|
430
|
+
.nullable(),
|
|
431
|
+
overwritten: z.boolean(),
|
|
432
|
+
device_digest_source: z.enum(["device_sha256sum", "unavailable"]),
|
|
433
|
+
}),
|
|
434
|
+
capture_adb_screen: z.strictObject({
|
|
435
|
+
client,
|
|
436
|
+
serial: z.string().min(1),
|
|
437
|
+
local_path: z.string().min(1),
|
|
438
|
+
bytes: z.number().int().nonnegative(),
|
|
439
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/u),
|
|
440
|
+
width: z.number().int().positive().nullable(),
|
|
441
|
+
height: z.number().int().positive().nullable(),
|
|
442
|
+
}),
|
|
443
|
+
list_adb_processes: z.strictObject({
|
|
444
|
+
client,
|
|
445
|
+
serial: z.string().min(1),
|
|
446
|
+
columns: z.string().nullable(),
|
|
447
|
+
processes: z.array(z.strictObject({
|
|
448
|
+
user: z.string(),
|
|
449
|
+
pid: z.number().int().nonnegative(),
|
|
450
|
+
ppid: z.number().int().nullable(),
|
|
451
|
+
rss: z.number().int().nullable(),
|
|
452
|
+
state: z.string().nullable(),
|
|
453
|
+
name: z.string(),
|
|
454
|
+
})),
|
|
455
|
+
unparsed_lines: z.array(z.string().min(1)),
|
|
456
|
+
coverage: z.enum(["complete", "partial"]),
|
|
457
|
+
}),
|
|
458
|
+
list_adb_directory: z.strictObject({
|
|
459
|
+
client,
|
|
460
|
+
serial: z.string().min(1),
|
|
461
|
+
device_path: z.string().min(1),
|
|
462
|
+
entries: z.array(z.strictObject({
|
|
463
|
+
name: z.string().min(1),
|
|
464
|
+
kind: z.enum(["directory", "file", "symlink", "other"]),
|
|
465
|
+
permissions: z.string().nullable(),
|
|
466
|
+
owner: z.string().nullable(),
|
|
467
|
+
group: z.string().nullable(),
|
|
468
|
+
bytes: z.number().int().nullable(),
|
|
469
|
+
date: z.string().nullable(),
|
|
470
|
+
link_target: z.string().nullable(),
|
|
471
|
+
})),
|
|
472
|
+
unparsed_lines: z.array(z.string().min(1)),
|
|
473
|
+
coverage: z.enum(["complete", "partial"]),
|
|
474
|
+
}),
|
|
475
|
+
list_adb_features: z.strictObject({
|
|
476
|
+
client,
|
|
477
|
+
serial: z.string().min(1),
|
|
478
|
+
features: z.array(z.strictObject({
|
|
479
|
+
name: z.string().min(1),
|
|
480
|
+
version: z.number().int().nullable(),
|
|
481
|
+
})),
|
|
482
|
+
unparsed_lines: z.array(z.string().min(1)),
|
|
483
|
+
coverage: z.enum(["complete", "partial"]),
|
|
484
|
+
}),
|
|
485
|
+
list_adb_services: z.strictObject({
|
|
486
|
+
client,
|
|
487
|
+
serial: z.string().min(1),
|
|
488
|
+
services: z.array(z.strictObject({
|
|
489
|
+
name: z.string().min(1),
|
|
490
|
+
interface: z.string().nullable(),
|
|
491
|
+
})),
|
|
492
|
+
unparsed_lines: z.array(z.string().min(1)),
|
|
493
|
+
coverage: z.enum(["complete", "partial"]),
|
|
494
|
+
}),
|
|
495
|
+
inspect_adb_display: z.strictObject({
|
|
496
|
+
client,
|
|
497
|
+
serial: z.string().min(1),
|
|
498
|
+
physical_size: z.strictObject({
|
|
499
|
+
width: z.number().int().positive(),
|
|
500
|
+
height: z.number().int().positive(),
|
|
501
|
+
}),
|
|
502
|
+
override_size: z
|
|
503
|
+
.strictObject({
|
|
504
|
+
width: z.number().int().positive(),
|
|
505
|
+
height: z.number().int().positive(),
|
|
506
|
+
})
|
|
507
|
+
.nullable(),
|
|
508
|
+
physical_density: z.number().int().positive().nullable(),
|
|
509
|
+
override_density: z.number().int().positive().nullable(),
|
|
510
|
+
}),
|
|
511
|
+
inspect_adb_window: z.strictObject({
|
|
512
|
+
client,
|
|
513
|
+
serial: z.string().min(1),
|
|
514
|
+
focused_window: z.string().nullable(),
|
|
515
|
+
focused_app: z.string().nullable(),
|
|
516
|
+
observed_lines: z.array(z.string().min(1)),
|
|
517
|
+
}),
|
|
518
|
+
read_adb_setting: z.strictObject({
|
|
519
|
+
client,
|
|
520
|
+
serial: z.string().min(1),
|
|
521
|
+
namespace: z.enum(["system", "secure", "global"]),
|
|
522
|
+
key: z.string().min(1),
|
|
523
|
+
value: z.string().nullable(),
|
|
524
|
+
device_reported_null: z.boolean(),
|
|
525
|
+
}),
|
|
526
|
+
collect_adb_bugreport: z.strictObject({
|
|
527
|
+
client,
|
|
528
|
+
serial: z.string().min(1),
|
|
529
|
+
local_path: z.string().min(1),
|
|
530
|
+
bytes: z.number().int().nonnegative(),
|
|
531
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/u),
|
|
532
|
+
adb_reported_path: z.string().nullable(),
|
|
533
|
+
}),
|
|
534
|
+
resolve_adb_packages: z.strictObject({
|
|
535
|
+
client,
|
|
536
|
+
serial: z.string().min(1),
|
|
537
|
+
query: z.string().min(1),
|
|
538
|
+
matches: z.array(z.strictObject({
|
|
539
|
+
package_name: packageNameSchema,
|
|
540
|
+
base_apk_device_path: z.string().min(1),
|
|
541
|
+
})),
|
|
542
|
+
exact_match: z.boolean(),
|
|
543
|
+
coverage: z.enum(["complete", "partial"]),
|
|
544
|
+
}),
|
|
545
|
+
install_adb_package: z.strictObject({
|
|
546
|
+
client,
|
|
547
|
+
serial: z.string().min(1),
|
|
548
|
+
apk_path: z.string().min(1),
|
|
549
|
+
bytes: z.number().int().nonnegative(),
|
|
550
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/u),
|
|
551
|
+
replaced: z.boolean(),
|
|
552
|
+
}),
|
|
553
|
+
uninstall_adb_package: z.strictObject({
|
|
554
|
+
client,
|
|
555
|
+
serial: z.string().min(1),
|
|
556
|
+
package_name: packageNameSchema,
|
|
557
|
+
}),
|
|
558
|
+
start_adb_app: z.strictObject({
|
|
559
|
+
client,
|
|
560
|
+
serial: z.string().min(1),
|
|
561
|
+
package_name: packageNameSchema,
|
|
562
|
+
component: z.string().min(1),
|
|
563
|
+
started_activity: z.string().nullable(),
|
|
564
|
+
}),
|
|
565
|
+
start_adb_activity: z.strictObject({
|
|
566
|
+
client,
|
|
567
|
+
serial: z.string().min(1),
|
|
568
|
+
action: z.string().min(1),
|
|
569
|
+
data_uri: z.string().nullable(),
|
|
570
|
+
component: z.string().nullable(),
|
|
571
|
+
extras: z.array(z.strictObject({
|
|
572
|
+
key: z.string().min(1),
|
|
573
|
+
type: z.enum(["string", "boolean", "int", "long", "float"]),
|
|
574
|
+
value: z.string(),
|
|
575
|
+
})),
|
|
576
|
+
started_activity: z.string().nullable(),
|
|
577
|
+
}),
|
|
578
|
+
stop_adb_app: z.strictObject({
|
|
579
|
+
client,
|
|
580
|
+
serial: z.string().min(1),
|
|
581
|
+
package_name: packageNameSchema,
|
|
582
|
+
}),
|
|
583
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ProviderAdapterError } from "./providerAdapterError.js";
|
|
2
|
+
import { projectAnalysisError } from "./analysisErrorProjection.js";
|
|
3
|
+
/** Preserve the original lifecycle failure alongside incomplete cleanup. */
|
|
4
|
+
export const analysisErrorWithCleanupFailure = (primary, cleanup, operation = "close_binary") => {
|
|
5
|
+
const projected = projectAnalysisError(cleanup);
|
|
6
|
+
return new ProviderAdapterError(cleanup instanceof ProviderAdapterError ? cleanup.providerId : "rea", operation, {
|
|
7
|
+
cause: primary,
|
|
8
|
+
userMessage: projectAnalysisError(primary).message,
|
|
9
|
+
...(primary.capturedOutput === undefined
|
|
10
|
+
? {}
|
|
11
|
+
: { capturedOutput: primary.capturedOutput }),
|
|
12
|
+
...(primary.partialObservation === undefined
|
|
13
|
+
? {}
|
|
14
|
+
: { partialObservation: primary.partialObservation }),
|
|
15
|
+
cleanup: {
|
|
16
|
+
reason: projected.message,
|
|
17
|
+
resources: [
|
|
18
|
+
...new Set([
|
|
19
|
+
...primary.cleanupResources,
|
|
20
|
+
...cleanup.cleanupResources,
|
|
21
|
+
]),
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
diagnostics: {
|
|
25
|
+
primary_error: projectAnalysisError(primary),
|
|
26
|
+
cleanup_error: projected,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
};
|
|
@@ -18,7 +18,7 @@ export const analysisErrorRemediationAction = (error) => {
|
|
|
18
18
|
if (error instanceof AnalysisResourceConstraintError)
|
|
19
19
|
return (error.remediationAction ??
|
|
20
20
|
(error.resource === "transport"
|
|
21
|
-
? "Export retained session evidence through export_evidence_bundle to a caller-selected path, or use complete CLI JSON output.
|
|
21
|
+
? "Discover retained records with get_evidence_bundle and detail: summary, then inspect compatible records through inspect_analysis_view using an exact Evidence reference. Export complete retained session evidence through export_evidence_bundle to a caller-selected path, or use complete CLI JSON output. The connection remains usable."
|
|
22
22
|
: error.resource === "cpu"
|
|
23
23
|
? "Review the reported worker CPU limits and observed signal. Retry with sufficient CPU time or a smaller artifact; REA retains tighter inherited limits."
|
|
24
24
|
: error.resource === "file-size"
|
|
@@ -147,7 +147,7 @@ export const analysisErrorUserMessage = (error) => {
|
|
|
147
147
|
if (standardMessage !== undefined)
|
|
148
148
|
return standardMessage;
|
|
149
149
|
if (error instanceof ArtifactOperationError)
|
|
150
|
-
return artifactMessage(error
|
|
150
|
+
return artifactMessage(error);
|
|
151
151
|
if (error instanceof EvidenceReferenceError)
|
|
152
152
|
return error.reason === "missing"
|
|
153
153
|
? `Evidence ${error.evidenceId} is not retained in this session. Supply complete inline Evidence, re-run its producer, or import its bundle before using this reference.`
|
|
@@ -267,17 +267,29 @@ const START_FAILURE_TAGS = new Set([
|
|
|
267
267
|
"HopperProcessError",
|
|
268
268
|
"HopperStartError",
|
|
269
269
|
]);
|
|
270
|
-
|
|
270
|
+
/** Operations that accept integrity_policy for declared-integrity mismatches. */
|
|
271
|
+
const INTEGRITY_POLICY_OPERATIONS = new Set([
|
|
272
|
+
"inventory_artifact",
|
|
273
|
+
"inspect_artifact",
|
|
274
|
+
"extract_artifact",
|
|
275
|
+
"analyze_javascript_application",
|
|
276
|
+
]);
|
|
277
|
+
const artifactMessage = ({ operation, reason, artifactDetails: details, detail, }) => {
|
|
271
278
|
if (reason === "cancelled")
|
|
272
279
|
return "Artifact operation was cancelled. Start it again when ready.";
|
|
273
280
|
if (reason === "limit")
|
|
274
281
|
return "Artifact is too large to process safely. Narrow the requested path or use a smaller artifact.";
|
|
275
282
|
if (reason === "path")
|
|
276
|
-
return
|
|
283
|
+
return (detail ??
|
|
284
|
+
"Artifact contains a conflicting internal path. Inspect the reported path before retrying.");
|
|
285
|
+
if (reason === "unavailable" && details?.unpacked === true)
|
|
286
|
+
return `ASAR unpacked companion bytes are unavailable for ${details.logicalPath}. Select the archive in place with its .unpacked directory beside it, then retry.`;
|
|
277
287
|
if (reason === "unavailable")
|
|
278
288
|
return "Artifact processing is unavailable for the current target or host. Check artifact support and required tools.";
|
|
279
|
-
if (reason === "integrity" && operation
|
|
280
|
-
return
|
|
289
|
+
if (reason === "integrity" && INTEGRITY_POLICY_OPERATIONS.has(operation))
|
|
290
|
+
return `${details?.unpacked === true && details.calculatedSha256 !== null
|
|
291
|
+
? `Declared ASAR integrity for unpacked entry ${details.logicalPath} contradicts its companion file; packaging tools commonly sign or strip unpacked native binaries after writing the archive.`
|
|
292
|
+
: "Artifact bytes contradict declared integrity."} If expected, rerun ${operation === "inventory_artifact" ? "inspect_artifact" : operation} with integrity_policy=record-and-continue (CLI: --integrity-policy record-and-continue) to retain observed bytes as untrusted; otherwise get a fresh copy.`;
|
|
281
293
|
if (reason === "format" || reason === "integrity")
|
|
282
294
|
return "Artifact is invalid or has changed. Get a fresh copy and try again.";
|
|
283
295
|
return "Artifact could not be read or written. Check file access and try again.";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsonValueSchema } from "./jsonValue.js";
|
|
2
|
+
import { isImmutableJsonSnapshot } from "./immutableJson.js";
|
|
2
3
|
import { analysisErrorCategory, analysisErrorRemediationAction, analysisErrorUserMessage, assertKnownAnalysisErrorTag, } from "./analysisErrorPresentation.js";
|
|
3
4
|
import { AnalysisAccessDeniedError, AnalysisArtifactChangedError, AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisUnsupportedTargetError, AnalysisInputError, AnalysisOutputError, AnalysisTimeoutError, AnalysisResourceConstraintError, } from "./analysisErrorCore.js";
|
|
4
5
|
import { ArtifactOperationError } from "./artifactOperationError.js";
|
|
@@ -35,7 +36,9 @@ export const projectAnalysisError = (error) => {
|
|
|
35
36
|
...(error.partialObservation === undefined
|
|
36
37
|
? {}
|
|
37
38
|
: {
|
|
38
|
-
partial_observation:
|
|
39
|
+
partial_observation: isImmutableJsonSnapshot(error.partialObservation)
|
|
40
|
+
? error.partialObservation
|
|
41
|
+
: jsonValueSchema.parse(error.partialObservation),
|
|
39
42
|
}),
|
|
40
43
|
};
|
|
41
44
|
return {
|