rea-agents 4.0.1 → 5.0.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 +257 -96
- package/bridge/android/ReaJadxBridge.java +247 -0
- package/bridge/ghidra/ReaGhidraBridge.java +358 -15
- package/bridge/ghidra/ReaGhidraExtensions.java +113 -0
- package/bridge/ghidra/ReaGhidraPrepareCom.java +32 -0
- package/bridge/native/NativeUIChildren.swift +27 -0
- package/bridge/native/ReaNativeUI.swift +30 -16
- package/dist/android/AndroidTargetSnapshot.js +36 -0
- package/dist/android/JadxAnalysis.js +193 -0
- package/dist/android/JadxConfiguration.js +57 -0
- package/dist/android/JadxMcpTransport.js +172 -0
- package/dist/android/JadxProtocol.js +109 -0
- package/dist/android/JadxProvider.js +259 -0
- package/dist/android/JadxRelease.js +27 -0
- package/dist/android/JadxSession.js +111 -0
- package/dist/application/AnalysisContextQueries.js +2 -1
- package/dist/application/AppBundleExecutable.js +141 -0
- package/dist/application/ArtifactExtraction.js +7 -4
- package/dist/application/ArtifactGraphConstruction.js +10 -17
- package/dist/application/ArtifactInventory/classify.js +1 -1
- package/dist/application/ArtifactInventory/scanCanonical.js +9 -8
- package/dist/application/ArtifactInventory/scanReader.js +1 -1
- package/dist/application/ArtifactInventory.js +1 -1
- package/dist/application/BinaryTargetResolver.js +32 -68
- package/dist/application/BrowserObservationService.js +2 -1
- package/dist/application/BrowserScenarioCaptureService.js +2 -1
- package/dist/application/BrowserScenarioEvidence.js +2 -2
- package/dist/application/CallPathTracing.js +2 -1
- package/dist/application/CapabilityInventory.js +78 -2
- package/dist/application/ClientConfigPath.js +3 -1
- package/dist/application/ClientConfigurationDocument.js +83 -13
- package/dist/application/ClientRegistrationStatus.js +15 -9
- package/dist/application/DirectAnalysis.js +35 -21
- package/dist/application/DirectAnalysisStatus.js +7 -8
- package/dist/application/Doctor.js +48 -8
- package/dist/application/DoctorDiagnostics.js +9 -7
- package/dist/application/DoctorScope.js +1 -1
- package/dist/application/EnhancedLiteralTracing.js +2 -1
- package/dist/application/EnhancedToolTypes.js +2 -1
- package/dist/application/EnhancedTools.js +7 -5
- package/dist/application/EvidenceBundleCommands.js +3 -2
- package/dist/application/EvidenceBundleFiles.js +1 -1
- package/dist/application/EvidenceInputResolver.js +30 -0
- package/dist/application/FilesystemSnapshot.js +20 -5
- package/dist/application/FunctionAnalysisEvidence.js +32 -0
- package/dist/application/InventoryProjectionEvidence.js +2 -1
- package/dist/application/InvestigationProviders.js +6 -0
- package/dist/application/JsonFiles.js +1 -1
- package/dist/application/LinuxHopper.js +20 -6
- package/dist/application/MacHopper.js +20 -7
- package/dist/application/OptionalObservationProviders.js +3 -0
- package/dist/application/ProcessCaptureCapability.js +1 -1
- package/dist/application/ProcessCaptureError.js +1 -1
- package/dist/application/ProcessCaptureJournal.js +3 -1
- package/dist/application/ProcessCaptureLifecycle.js +8 -5
- package/dist/application/ProcessCli.js +14 -6
- package/dist/application/ProcessEvidence.js +2 -6
- package/dist/application/ProcessHarness.js +23 -11
- package/dist/application/ProcessNormalization.js +12 -5
- package/dist/application/ProcessSampling.js +3 -1
- package/dist/application/ReconstructionCoverageService.js +4 -7
- package/dist/application/ReconstructionObligationCandidates.js +5 -2
- package/dist/application/ReconstructionObligationLedgerService.js +2 -1
- package/dist/application/ReferenceSourceImport.js +2 -0
- package/dist/application/ReferenceSourceImportEntries.js +22 -3
- package/dist/application/ReferenceSourceImportPolicy.js +4 -2
- package/dist/application/ReferenceSourceImportTypes.js +5 -0
- package/dist/application/ReferenceSourceVcsAdapter.js +35 -4
- package/dist/application/Setup.js +11 -130
- package/dist/application/SetupClientConfiguration.js +36 -22
- package/dist/application/SetupHost.js +126 -0
- package/dist/application/SetupPlan.js +1 -1
- package/dist/application/SetupRegistrationEnvironment.js +1 -2
- package/dist/application/SetupSkill.js +9 -3
- package/dist/application/SetupTypes.js +17 -0
- package/dist/application/StoreFileLock.js +7 -2
- package/dist/application/SupportedClients.js +8 -0
- package/dist/application/Uninstall.js +32 -21
- package/dist/application/UpdateMaintenance.js +3 -3
- package/dist/application/UpdateRuntime.js +5 -2
- package/dist/application/ValidateSelectedWebScript.js +27 -0
- package/dist/application/WebModuleTraceService.js +209 -0
- package/dist/application/WebRuntimeService.js +73 -0
- package/dist/application/WebScriptExportService.js +115 -0
- package/dist/application/WebSourceLocationService.js +160 -0
- package/dist/application/WindowsCapabilities.js +7 -7
- package/dist/application/android/AndroidAnalysisService.js +37 -0
- package/dist/application/{AndroidApplicationService.js → android/AndroidApplicationService.js} +3 -3
- package/dist/application/{AppleApplicationService.js → apple/AppleApplicationService.js} +5 -5
- package/dist/application/{AnalysisClientCleanup.js → binary/AnalysisClientCleanup.js} +2 -2
- package/dist/application/{AnalysisProviderEvaluation.js → binary/AnalysisProviderEvaluation.js} +8 -6
- package/dist/application/{AnalysisProviderRegistry.js → binary/AnalysisProviderRegistry.js} +5 -4
- package/dist/application/{AnalysisSnapshotCache.js → binary/AnalysisSnapshotCache.js} +8 -7
- package/dist/application/{AnalysisSnapshotFiles.js → binary/AnalysisSnapshotFiles.js} +4 -4
- package/dist/application/{BinarySession.js → binary/BinarySession.js} +26 -11
- package/dist/application/{BinarySessionComposition.js → binary/BinarySessionComposition.js} +2 -1
- package/dist/application/{BinarySessionExecution.js → binary/BinarySessionExecution.js} +9 -4
- package/dist/application/{BinarySessionOpen.js → binary/BinarySessionOpen.js} +7 -6
- package/dist/application/{BinarySessionRecords.js → binary/BinarySessionRecords.js} +34 -40
- package/dist/application/{CompositeProvider.js → binary/CompositeProvider.js} +2 -2
- package/dist/application/{LazyAnalysisProvider.js → binary/LazyAnalysisProvider.js} +6 -4
- package/dist/application/{SessionProviderRouter.js → binary/SessionProviderRouter.js} +7 -4
- package/dist/application/firmware/FirmwareAnalysisPort.js +1 -0
- package/dist/application/firmware/FirmwareAnalysisService.js +35 -0
- package/dist/application/{EvidenceLedger.js → investigation/EvidenceLedger.js} +44 -6
- package/dist/application/investigation/InvestigationRecordPort.js +1 -0
- package/dist/application/investigation/InvestigationRecords.js +69 -0
- package/dist/application/{UnknownEvidence.js → investigation/UnknownEvidence.js} +1 -1
- package/dist/application/{ElectronActiveEvidence.js → javascript/ElectronActiveEvidence.js} +4 -4
- package/dist/application/javascript/ElectronActiveObservationPort.js +1 -0
- package/dist/application/{ElectronActiveObservationService.js → javascript/ElectronActiveObservationService.js} +3 -2
- package/dist/application/{ElectronBoundaryAnalysis.js → javascript/ElectronBoundaryAnalysis.js} +1 -1
- package/dist/application/{ElectronBoundaryGraphContext.js → javascript/ElectronBoundaryGraphContext.js} +1 -1
- package/dist/application/{ElectronEvidence.js → javascript/ElectronEvidence.js} +2 -2
- package/dist/application/javascript/ElectronObservationPort.js +1 -0
- package/dist/application/{ElectronObservationService.js → javascript/ElectronObservationService.js} +3 -2
- package/dist/application/{JavaScriptApplicationEvidence.js → javascript/JavaScriptApplicationEvidence.js} +3 -3
- package/dist/application/{JavaScriptApplicationEvidenceGraph.js → javascript/JavaScriptApplicationEvidenceGraph.js} +5 -5
- package/dist/application/javascript/JavaScriptApplicationService.js +99 -0
- package/dist/application/{JavaScriptApplicationWorkflowEvidence.js → javascript/JavaScriptApplicationWorkflowEvidence.js} +3 -3
- package/dist/application/{JavaScriptApplicationWorkflowService.js → javascript/JavaScriptApplicationWorkflowService.js} +12 -11
- package/dist/application/{JavaScriptArtifactAnalysis.js → javascript/JavaScriptArtifactAnalysis.js} +12 -26
- package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +1 -0
- package/dist/application/{JavaScriptArtifactGraphAccumulator.js → javascript/JavaScriptArtifactGraphAccumulator.js} +16 -2
- package/dist/application/{JavaScriptArtifactGraphBuilder.js → javascript/JavaScriptArtifactGraphBuilder.js} +2 -2
- package/dist/application/{JavaScriptArtifactGraphContext.js → javascript/JavaScriptArtifactGraphContext.js} +1 -1
- package/dist/application/{JavaScriptArtifactGraphDocuments.js → javascript/JavaScriptArtifactGraphDocuments.js} +1 -1
- package/dist/application/{JavaScriptArtifactGraphFindings.js → javascript/JavaScriptArtifactGraphFindings.js} +20 -7
- package/dist/application/{JavaScriptArtifactGraphStructure.js → javascript/JavaScriptArtifactGraphStructure.js} +1 -1
- package/dist/application/{JavaScriptArtifactPathResolution.js → javascript/JavaScriptArtifactPathResolution.js} +12 -14
- package/dist/application/{JavaScriptArtifactReconstruction.js → javascript/JavaScriptArtifactReconstruction.js} +4 -8
- package/dist/application/{JavaScriptJsonModules.js → javascript/JavaScriptJsonModules.js} +3 -2
- package/dist/application/{JavaScriptModuleRelationships.js → javascript/JavaScriptModuleRelationships.js} +5 -3
- package/dist/application/javascript/JavaScriptRecoveryPort.js +1 -0
- package/dist/application/javascript/JavaScriptRecoveryService.js +52 -0
- package/dist/application/{JavaScriptReturnShapeProjection.js → javascript/JavaScriptReturnShapeProjection.js} +3 -3
- package/dist/application/{JavaScriptRuntimeObservationEvidence.js → javascript/JavaScriptRuntimeObservationEvidence.js} +2 -2
- package/dist/application/javascript/JavaScriptRuntimeObservationPort.js +1 -0
- package/dist/application/{JavaScriptRuntimeObservationService.js → javascript/JavaScriptRuntimeObservationService.js} +3 -2
- package/dist/application/{JavaScriptRuntimeReconciliationEvidence.js → javascript/JavaScriptRuntimeReconciliationEvidence.js} +3 -3
- package/dist/application/{JavaScriptRuntimeReconciliationService.js → javascript/JavaScriptRuntimeReconciliationService.js} +6 -5
- package/dist/application/{JavaScriptSemanticGraphAsyncProjection.js → javascript/JavaScriptSemanticGraphAsyncProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticGraphBuilder.js → javascript/JavaScriptSemanticGraphBuilder.js} +5 -3
- package/dist/application/{JavaScriptSemanticGraphChildProcessProjection.js → javascript/JavaScriptSemanticGraphChildProcessProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticGraphConstruction.js → javascript/JavaScriptSemanticGraphConstruction.js} +3 -2
- package/dist/application/{JavaScriptSemanticGraphDataProjection.js → javascript/JavaScriptSemanticGraphDataProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticGraphFingerprintProjection.js → javascript/JavaScriptSemanticGraphFingerprintProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticGraphFlowProjection.js → javascript/JavaScriptSemanticGraphFlowProjection.js} +2 -2
- package/dist/application/{JavaScriptSemanticGraphObjectProjection.js → javascript/JavaScriptSemanticGraphObjectProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticGraphProjection.js → javascript/JavaScriptSemanticGraphProjection.js} +2 -2
- package/dist/application/{JavaScriptSemanticGraphResourceProjection.js → javascript/JavaScriptSemanticGraphResourceProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticTraceService.js → javascript/JavaScriptSemanticTraceService.js} +6 -5
- package/dist/application/{ManagedApplicationGraphService.js → managed/ManagedApplicationGraphService.js} +7 -6
- package/dist/application/{ManagedMemberComparisonService.js → managed/ManagedMemberComparisonService.js} +10 -8
- package/dist/application/{ManagedNativeVerificationService.js → managed/ManagedNativeVerificationService.js} +7 -6
- package/dist/application/{ManagedReconstructionService.js → managed/ManagedReconstructionService.js} +7 -6
- package/dist/application/{NativeApiInspection.js → native/NativeApiInspection.js} +1 -1
- package/dist/application/{NativeCallRoutes.js → native/NativeCallRoutes.js} +3 -3
- package/dist/application/{NativeDispatchMetadataInspection.js → native/NativeDispatchMetadataInspection.js} +4 -4
- package/dist/application/{NativeUiActionTrace.js → native/NativeUiActionTrace.js} +7 -6
- package/dist/application/{NativeValueTrace.js → native/NativeValueTrace.js} +6 -6
- package/dist/{application/ArtifactInventory/hash.js → artifacts/ArtifactHash.js} +4 -2
- package/dist/artifacts/ArtifactPaths.js +3 -3
- package/dist/artifacts/ArtifactProvider.js +10 -38
- package/dist/artifacts/ArtifactProviderMetadata.js +36 -0
- package/dist/artifacts/AsarArtifactReader.js +195 -23
- package/dist/artifacts/AsarEntryStream.js +76 -0
- package/dist/artifacts/DirectoryArtifactReader.js +43 -7
- package/dist/artifacts/NativeDmgArtifactReader.js +171 -12
- package/dist/artifacts/SafeOutputTree.js +26 -10
- package/dist/artifacts/ZipArtifactReader.js +1 -0
- package/dist/{application → artifacts/apple}/AppleAssetCatalogAnalysis.js +4 -4
- package/dist/{application → artifacts/apple}/InterfaceBuilderAnalysis.js +125 -51
- package/dist/artifacts/{KeyedArchiveReader.js → apple/KeyedArchiveReader.js} +21 -27
- package/dist/artifacts/{NibArchive.js → apple/NibArchive.js} +4 -2
- package/dist/artifacts/apple/NibViewHierarchy.js +150 -0
- package/dist/{application → artifacts/javascript}/JavaScriptArtifactFiles.js +30 -7
- package/dist/artifacts/javascript/JavaScriptArtifactReader.js +6 -0
- package/dist/artifacts/readStableArtifact.js +52 -0
- package/dist/browser/BrowserProcessStartup.js +3 -1
- package/dist/browser/BrowserScenarioSecrets.js +50 -8
- package/dist/browser/CdpAuthorizedMainFrame.js +5 -5
- package/dist/browser/CdpAuthorizedTarget.js +22 -0
- package/dist/browser/CdpBrowserProvider.js +8 -16
- package/dist/browser/CdpCaptureDocuments.js +36 -22
- package/dist/browser/CdpCaptureEventBodyShapes.js +3 -3
- package/dist/browser/CdpCaptureEventHandlers.js +32 -28
- package/dist/browser/CdpCaptureEventHelpers.js +6 -6
- package/dist/browser/CdpCaptureStorage.js +10 -8
- package/dist/browser/CdpCaptureStorageFingerprints.js +25 -23
- package/dist/browser/CdpCaptureValues.js +8 -4
- package/dist/browser/CdpCommandRejection.js +17 -0
- package/dist/browser/CdpConnection.js +59 -17
- package/dist/browser/CdpElectronInspection.js +13 -13
- package/dist/browser/CdpElectronProvider.js +7 -7
- package/dist/browser/CdpElectronScriptEvents.js +6 -6
- package/dist/browser/CdpElectronScripts.js +4 -4
- package/dist/browser/CdpElectronWorkers.js +4 -4
- package/dist/browser/CdpEndpoint.js +22 -10
- package/dist/browser/CdpObservationSession.js +20 -24
- package/dist/browser/CdpOptionalCommand.js +1 -1
- package/dist/browser/CdpPageCapture.js +6 -5
- package/dist/browser/CdpPageCaptureScripts.js +2 -2
- package/dist/browser/CdpPageCaptureWorkers.js +9 -9
- package/dist/browser/CdpSafeMetadata.js +101 -18
- package/dist/browser/CdpScreenshot.js +6 -6
- package/dist/browser/CdpTargetEvents.js +8 -0
- package/dist/browser/CdpTargetSession.js +10 -7
- package/dist/browser/CdpWebMcpDiscovery.js +23 -17
- package/dist/browser/ElectronFileScope.js +9 -3
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +10 -7
- package/dist/browser/PlaywrightElectronActiveActions.js +1 -1
- package/dist/browser/PlaywrightElectronActiveProvider.js +9 -8
- package/dist/browser/PlaywrightExecutionBoundary.js +1 -1
- package/dist/browser/PlaywrightScenarioArtifacts.js +10 -5
- package/dist/browser/PlaywrightScenarioBrowser.js +3 -1
- package/dist/browser/PlaywrightScenarioEvents.js +65 -53
- package/dist/browser/PlaywrightScenarioSession.js +13 -3
- package/dist/browser/WebSourceMapFetcher.js +55 -58
- package/dist/browser/assets/LocalWebScriptArtifacts.js +87 -0
- package/dist/browser/assets/PageScriptCapture.js +32 -0
- package/dist/browser/assets/PublishWebScripts.js +74 -0
- package/dist/browser/assets/ScenarioScriptCapture.js +76 -0
- package/dist/browser/assets/ScriptCaptureAdapters.js +57 -0
- package/dist/browser/assets/WebArtifactReads.js +56 -0
- package/dist/browser/assets/WebSourceLocationArtifacts.js +40 -0
- package/dist/browser/execution/CdpEventListeners.js +79 -0
- package/dist/browser/execution/CdpExecutionCapture.js +135 -0
- package/dist/browser/execution/CdpExecutionCollection.js +57 -0
- package/dist/browser/execution/CdpExecutionWindow.js +100 -0
- package/dist/browser/execution/CdpListenerSelector.js +22 -0
- package/dist/browser/execution/CdpPreciseCoverage.js +48 -0
- package/dist/browser/execution/CdpRuntimeInitiator.js +18 -0
- package/dist/browser/execution/CdpRuntimeProtocol.js +106 -0
- package/dist/browser/execution/CdpRuntimeRequests.js +81 -0
- package/dist/browser/execution/CdpRuntimeSession.js +163 -0
- package/dist/browser/execution/CdpRuntimeSources.js +223 -0
- package/dist/browser/execution/CdpWebRuntimeProvider.js +51 -0
- package/dist/browser/modules/NativeModuleResolver.js +210 -0
- package/dist/browser/modules/WebModuleArtifacts.js +40 -0
- package/dist/browser/network/PlaywrightNetworkContent.js +71 -0
- package/dist/browser/network/PlaywrightScenarioNetwork.js +180 -0
- package/dist/browser/providerIdentities.js +24 -0
- package/dist/catalogIdentity.js +23 -15
- package/dist/cli/androidCommands.js +91 -0
- package/dist/{cliApplicationCommands.js → cli/applicationCommands.js} +49 -16
- package/dist/cli/artifactCommands.js +1 -1
- package/dist/{cliBrowserAdvancedCommands.js → cli/browserAdvancedCommands.js} +39 -24
- package/dist/{cliBrowserCommands.js → cli/browserCommands.js} +9 -9
- package/dist/cli/commandCancellation.js +24 -0
- package/dist/cli/coreAnalysisCommands.js +5 -400
- package/dist/cli/coreBinaryCommands.js +211 -0
- package/dist/cli/coreNativeCommands.js +293 -0
- package/dist/{cliElectronCommands.js → cli/electronCommands.js} +20 -24
- package/dist/cli/firmwareCommands.js +75 -0
- package/dist/{cliSetup.js → cli/interactiveSetup.js} +1 -1
- package/dist/cli/javascriptApplicationAnalysis.js +2 -2
- package/dist/cli/javascriptRecoveryCommands.js +45 -0
- package/dist/cli/managedCommands.js +5 -5
- package/dist/cli/managedProjectGraphCommand.js +2 -2
- package/dist/cli/options.js +7 -1
- package/dist/{cliProcessCommands.js → cli/processCommands.js} +3 -3
- package/dist/cli/referenceSourceImportStatus.js +15 -0
- package/dist/cli/setupCommands.js +4 -2
- package/dist/cli/utilityCommands.js +50 -25
- package/dist/cli/webModuleCommands.js +56 -0
- package/dist/cli/webRuntimeCommands.js +60 -0
- package/dist/cli/webScriptCommands.js +31 -0
- package/dist/cli/webSourceLocationCommands.js +42 -0
- package/dist/cli.js +20 -15
- package/dist/cliBrowserContext.js +5 -3
- package/dist/cliBrowserScenarioCommands.js +6 -4
- package/dist/cliCommandNames.js +19 -2
- package/dist/cliEvidenceCommands.js +2 -1
- package/dist/cliJavaScriptRuntimeCommands.js +8 -5
- package/dist/cliJsonInput.js +35 -13
- package/dist/cliLogging.js +2 -1
- package/dist/cliOutput.js +52 -27
- package/dist/composition/android.js +3 -0
- package/dist/composition/auxiliaryAnalysisProviders.js +30 -0
- package/dist/composition/binary.js +25 -0
- package/dist/composition/browserObservation.js +3 -0
- package/dist/composition/browserScenario.js +3 -0
- package/dist/composition/directAnalysis.js +17 -0
- package/dist/composition/electronObservation.js +3 -0
- package/dist/composition/electronScenario.js +3 -0
- package/dist/composition/firmware.js +3 -0
- package/dist/composition/javascriptRecovery.js +3 -0
- package/dist/composition/javascriptRuntimeObservation.js +3 -0
- package/dist/composition/optionalObservationProviders.js +49 -0
- package/dist/composition/webModules.js +5 -0
- package/dist/composition/webRuntime.js +4 -0
- package/dist/composition/webSourceLocations.js +5 -0
- package/dist/config/environment.js +11 -1
- package/dist/config/parseConfig.js +29 -4
- package/dist/config/parsers.js +1 -1
- package/dist/contracts/android/androidToolContracts.js +77 -0
- package/dist/contracts/applicationToolContracts.js +75 -13
- package/dist/contracts/artifactComparisonExample.js +7 -14
- package/dist/contracts/artifactToolContracts.js +2 -2
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/enhancedInputs.js +1 -1
- package/dist/contracts/enhancedToolContracts.js +31 -0
- package/dist/contracts/errorSchemas.js +4 -2
- package/dist/contracts/evidenceInputContracts.js +13 -0
- package/dist/contracts/firmware/firmwareToolContracts.js +38 -0
- package/dist/contracts/{applicationWorkflowInputContracts.js → javascript/applicationWorkflowInputContracts.js} +18 -18
- package/dist/contracts/{electronToolContracts.js → javascript/electronToolContracts.js} +6 -6
- package/dist/contracts/{javascriptApplicationWorkflowExamples.js → javascript/javascriptApplicationWorkflowExamples.js} +3 -3
- package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +23 -0
- package/dist/contracts/{javascriptRuntimeObservationToolContracts.js → javascript/javascriptRuntimeObservationToolContracts.js} +3 -3
- package/dist/contracts/{javascriptRuntimeReconciliationExample.js → javascript/javascriptRuntimeReconciliationExample.js} +5 -5
- package/dist/contracts/{managedToolContracts.js → managed/managedToolContracts.js} +3 -3
- package/dist/contracts/{managedWorkflowExamples.js → managed/managedWorkflowExamples.js} +1 -1
- package/dist/contracts/{managedWorkflowToolContracts.js → managed/managedWorkflowToolContracts.js} +6 -6
- package/dist/contracts/mobileApplicationGraphExamples.js +105 -0
- package/dist/contracts/{nativeToolContracts.js → native/nativeToolContracts.js} +14 -7
- package/dist/contracts/officialToolContracts.js +66 -0
- package/dist/contracts/promptContracts.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +4 -0
- package/dist/contracts/sessionToolContracts.js +43 -0
- package/dist/contracts/sessionToolSchemas.js +1 -1
- package/dist/contracts/toolContractExamples.js +5 -0
- package/dist/contracts/toolContractTypes.js +2 -0
- package/dist/contracts/toolContracts.js +18 -135
- package/dist/contracts/toolEffects.js +75 -0
- package/dist/contracts/toolOutputSchemaGroups.js +20 -16
- package/dist/contracts/toolOutputSchemaPrimitives.js +1 -0
- package/dist/contracts/webRuntimeToolContracts.js +43 -0
- package/dist/contracts/webScriptToolContracts.js +68 -0
- package/dist/doctorRuntime.js +5 -1
- package/dist/domain/analysisErrorBase.js +33 -0
- package/dist/domain/analysisErrorCore.js +62 -0
- package/dist/domain/analysisErrorPresentation.js +22 -2
- package/dist/domain/analysisErrorProjection.js +25 -3
- package/dist/domain/analysisSnapshot.js +1 -0
- package/dist/domain/android/androidAnalysis.js +141 -0
- package/dist/domain/{androidApplication.js → android/androidApplication.js} +7 -6
- package/dist/domain/apple/appleApplication.js +277 -0
- package/dist/domain/{appleAssetCatalog.js → apple/appleAssetCatalog.js} +2 -2
- package/dist/domain/apple/appleBundleAnatomy.js +236 -0
- package/dist/domain/{interfaceBuilderGraph.js → apple/interfaceBuilderGraph.js} +47 -312
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +411 -0
- package/dist/domain/{keyedArchive.js → apple/keyedArchive.js} +10 -9
- package/dist/domain/apple/plistValue.js +35 -0
- package/dist/domain/artifactGraph.js +1 -0
- package/dist/domain/artifactInspection.js +19 -17
- package/dist/domain/artifactInventoryEvidence.js +32 -27
- package/dist/domain/artifactInventorySnapshot.js +1 -0
- package/dist/domain/artifactOperationError.js +20 -0
- package/dist/domain/artifactPathSyntax.js +26 -0
- package/dist/domain/browserNetworkEvidence.js +82 -0
- package/dist/domain/browserObservation.js +12 -4
- package/dist/domain/browserObservationError.js +25 -0
- package/dist/domain/browserObservationSchemas.js +2 -1
- package/dist/domain/browserScenario.js +1 -1
- package/dist/domain/browserScenarioCapture.js +23 -1
- package/dist/domain/browserScenarioCaptureValues.js +25 -0
- package/dist/domain/browserScenarioDiff.js +7 -4
- package/dist/domain/browserScenarioDiffEvidence.js +35 -1
- package/dist/domain/browserScenarioNormalization.js +6 -11
- package/dist/domain/browserScenarioValues.js +15 -2
- package/dist/domain/browserSession.js +2 -7
- package/dist/domain/bundleComparison.js +2 -1
- package/dist/domain/callPath.js +86 -38
- package/dist/domain/canonicalDigest.js +65 -0
- package/dist/domain/canonicalOrdering.js +11 -0
- package/dist/domain/changedBehavior.js +8 -7
- package/dist/domain/comparisonSemantics.js +2 -4
- package/dist/domain/comparisonStatus.js +39 -0
- package/dist/domain/configurationErrors.js +25 -0
- package/dist/domain/dosCom.js +8 -0
- package/dist/domain/evidence.js +3 -11
- package/dist/domain/evidenceBundle.js +98 -35
- package/dist/domain/evidenceErrors.js +30 -0
- package/dist/domain/firmware/firmwareAnalysis.js +121 -0
- package/dist/domain/functionComparison.js +4 -2
- package/dist/domain/functionComparisonDimensions.js +6 -4
- package/dist/domain/functionComparisonNormalization.js +13 -8
- package/dist/domain/functionComparisonResults.js +1 -4
- package/dist/domain/hopperErrors.js +78 -0
- package/dist/domain/hopperValues.js +4 -3
- package/dist/domain/inputIssueProjection.js +17 -2
- package/dist/domain/{electronActiveObservation.js → javascript/electronActiveObservation.js} +3 -1
- package/dist/domain/{electronObservation.js → javascript/electronObservation.js} +5 -11
- package/dist/domain/{electronStaticAnalysisBrowser.js → javascript/electronStaticAnalysisBrowser.js} +15 -24
- package/dist/domain/{electronStaticAnalysisIpc.js → javascript/electronStaticAnalysisIpc.js} +2 -2
- package/dist/domain/{electronStaticAnalysisNative.js → javascript/electronStaticAnalysisNative.js} +12 -12
- package/dist/domain/javascript/electronStaticAnalysisTypes.js +1 -0
- package/dist/domain/{electronStaticAnalysisValues.js → javascript/electronStaticAnalysisValues.js} +24 -4
- package/dist/domain/{javascriptApplicationAnalysis.js → javascript/javascriptApplicationAnalysis.js} +2 -2
- package/dist/domain/{javascriptApplicationChangeGraph.js → javascript/javascriptApplicationChangeGraph.js} +2 -2
- package/dist/domain/{javascriptApplicationEvidenceSchemas.js → javascript/javascriptApplicationEvidenceSchemas.js} +6 -4
- package/dist/domain/{javascriptApplicationGraph.js → javascript/javascriptApplicationGraph.js} +13 -22
- package/dist/domain/{javascriptApplicationGraphSchemas.js → javascript/javascriptApplicationGraphSchemas.js} +2 -2
- package/dist/domain/{javascriptApplicationVersionComparison.js → javascript/javascriptApplicationVersionComparison.js} +3 -11
- package/dist/domain/{javascriptApplicationVersionComparisonSchemas.js → javascript/javascriptApplicationVersionComparisonSchemas.js} +3 -3
- package/dist/domain/{javascriptApplicationVersionItems.js → javascript/javascriptApplicationVersionItems.js} +4 -4
- package/dist/domain/{javascriptApplicationVersionKeys.js → javascript/javascriptApplicationVersionKeys.js} +16 -9
- package/dist/domain/javascript/javascriptArtifactFiles.js +1 -0
- package/dist/domain/{javascriptAstFingerprint.js → javascript/javascriptAstFingerprint.js} +38 -22
- package/dist/domain/javascript/javascriptAstValues.js +23 -0
- package/dist/domain/{javascriptExportShapeComparison.js → javascript/javascriptExportShapeComparison.js} +1 -2
- package/dist/domain/{javascriptExportShapeComparisonSchemas.js → javascript/javascriptExportShapeComparisonSchemas.js} +2 -2
- package/dist/domain/{javascriptExportShapeSelection.js → javascript/javascriptExportShapeSelection.js} +1 -1
- package/dist/domain/{javascriptExportShapeVariants.js → javascript/javascriptExportShapeVariants.js} +7 -3
- package/dist/domain/{javascriptFeatureSeed.js → javascript/javascriptFeatureSeed.js} +32 -11
- package/dist/domain/{javascriptFeatureTrace.js → javascript/javascriptFeatureTrace.js} +9 -13
- package/dist/domain/{javascriptFeatureTraceSchemas.js → javascript/javascriptFeatureTraceSchemas.js} +32 -18
- package/dist/domain/{javascriptFeatureTraversal.js → javascript/javascriptFeatureTraversal.js} +7 -2
- package/dist/domain/{javascriptNativeHandoff.js → javascript/javascriptNativeHandoff.js} +2 -1
- package/dist/domain/javascript/javascriptRecovery.js +88 -0
- package/dist/domain/{javascriptRuntimeLoadState.js → javascript/javascriptRuntimeLoadState.js} +2 -2
- package/dist/domain/{javascriptRuntimeObservation.js → javascript/javascriptRuntimeObservation.js} +2 -2
- package/dist/domain/{javascriptRuntimeReconciliationActive.js → javascript/javascriptRuntimeReconciliationActive.js} +5 -12
- package/dist/domain/{javascriptRuntimeReconciliationGraph.js → javascript/javascriptRuntimeReconciliationGraph.js} +2 -2
- package/dist/domain/{javascriptRuntimeReconciliationMatching.js → javascript/javascriptRuntimeReconciliationMatching.js} +4 -3
- package/dist/domain/{javascriptRuntimeReconciliationParsing.js → javascript/javascriptRuntimeReconciliationParsing.js} +11 -17
- package/dist/domain/{javascriptRuntimeReconciliationResult.js → javascript/javascriptRuntimeReconciliationResult.js} +4 -4
- package/dist/domain/{javascriptRuntimeReconciliationSchemas.js → javascript/javascriptRuntimeReconciliationSchemas.js} +8 -5
- package/dist/domain/{javascriptRuntimeStaticCandidates.js → javascript/javascriptRuntimeStaticCandidates.js} +8 -4
- package/dist/domain/{javascriptSemanticAnalysis.js → javascript/javascriptSemanticAnalysis.js} +80 -17
- package/dist/domain/{javascriptSemanticAsyncEffects.js → javascript/javascriptSemanticAsyncEffects.js} +2 -1
- package/dist/domain/{javascriptSemanticCallResolution.js → javascript/javascriptSemanticCallResolution.js} +11 -5
- package/dist/domain/{javascriptSemanticCalls.js → javascript/javascriptSemanticCalls.js} +7 -4
- package/dist/domain/{javascriptSemanticChildProcesses.js → javascript/javascriptSemanticChildProcesses.js} +5 -2
- package/dist/domain/{javascriptSemanticDataEffectHelpers.js → javascript/javascriptSemanticDataEffectHelpers.js} +7 -6
- package/dist/domain/{javascriptSemanticDataEffects.js → javascript/javascriptSemanticDataEffects.js} +9 -6
- package/dist/domain/{javascriptSemanticFingerprints.js → javascript/javascriptSemanticFingerprints.js} +40 -16
- package/dist/domain/{javascriptSemanticGraph.js → javascript/javascriptSemanticGraph.js} +23 -28
- package/dist/domain/{javascriptSemanticGraphSchemas.js → javascript/javascriptSemanticGraphSchemas.js} +3 -3
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +116 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +53 -0
- package/dist/domain/{javascriptSemanticObjects.js → javascript/javascriptSemanticObjects.js} +5 -5
- package/dist/domain/{javascriptSemanticPrimitives.js → javascript/javascriptSemanticPrimitives.js} +9 -2
- package/dist/domain/{javascriptSemanticProjection.js → javascript/javascriptSemanticProjection.js} +32 -44
- package/dist/domain/{javascriptSemanticPromises.js → javascript/javascriptSemanticPromises.js} +77 -21
- package/dist/domain/{javascriptSemanticProvenance.js → javascript/javascriptSemanticProvenance.js} +4 -1
- package/dist/domain/{javascriptSemanticQuery.js → javascript/javascriptSemanticQuery.js} +7 -8
- package/dist/domain/{javascriptSemanticQueryAssessment.js → javascript/javascriptSemanticQueryAssessment.js} +1 -2
- package/dist/domain/{javascriptSemanticQueryIdentity.js → javascript/javascriptSemanticQueryIdentity.js} +1 -2
- package/dist/domain/{javascriptSemanticQuerySchemas.js → javascript/javascriptSemanticQuerySchemas.js} +3 -3
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +25 -0
- package/dist/domain/{javascriptSemanticResources.js → javascript/javascriptSemanticResources.js} +2 -1
- package/dist/domain/{javascriptSemanticReturns.js → javascript/javascriptSemanticReturns.js} +2 -1
- package/dist/domain/{javascriptSemanticTraceSchemas.js → javascript/javascriptSemanticTraceSchemas.js} +2 -2
- package/dist/domain/javascript/javascriptSemanticTraversal.js +55 -0
- package/dist/domain/javascript/javascriptSemanticValueTypes.js +1 -0
- package/dist/domain/{javascriptSemanticValues.js → javascript/javascriptSemanticValues.js} +118 -60
- package/dist/domain/{javascriptSourceParser.js → javascript/javascriptSourceParser.js} +4 -2
- package/dist/domain/{javascriptStaticAnalysis.js → javascript/javascriptStaticAnalysis.js} +8 -5
- package/dist/domain/{javascriptStaticAnalysisBundler.js → javascript/javascriptStaticAnalysisBundler.js} +15 -11
- package/dist/domain/{javascriptStaticAnalysisCalls.js → javascript/javascriptStaticAnalysisCalls.js} +16 -8
- package/dist/domain/{javascriptStaticAnalysisHelpers.js → javascript/javascriptStaticAnalysisHelpers.js} +261 -43
- package/dist/domain/{sourceToBundleComparison.js → javascript/sourceToBundleComparison.js} +6 -8
- package/dist/domain/{sourceToBundleComparisonSchemas.js → javascript/sourceToBundleComparisonSchemas.js} +4 -4
- package/dist/domain/{sourceToBundleSignals.js → javascript/sourceToBundleSignals.js} +7 -7
- package/dist/domain/jsonShape.js +6 -2
- package/dist/domain/{managedApplicationGraph.js → managed/managedApplicationGraph.js} +4 -4
- package/dist/domain/{managedApplicationGraphNodes.js → managed/managedApplicationGraphNodes.js} +1 -1
- package/dist/domain/{managedArtifact.js → managed/managedArtifact.js} +1 -1
- package/dist/domain/{managedMemberComparison.js → managed/managedMemberComparison.js} +5 -4
- package/dist/domain/{managedMemberComparisonCoverage.js → managed/managedMemberComparisonCoverage.js} +2 -1
- package/dist/domain/{managedMemberComparisonItems.js → managed/managedMemberComparisonItems.js} +99 -40
- package/dist/domain/{managedMemberComparisonMatch.js → managed/managedMemberComparisonMatch.js} +22 -11
- package/dist/domain/{managedNativeVerification.js → managed/managedNativeVerification.js} +1 -1
- package/dist/domain/{managedNativeVerificationMatch.js → managed/managedNativeVerificationMatch.js} +8 -6
- package/dist/domain/{managedNativeVerificationSchemas.js → managed/managedNativeVerificationSchemas.js} +6 -5
- package/dist/domain/{managedReconstruction.js → managed/managedReconstruction.js} +3 -3
- package/dist/domain/{nativeDataType.js → native/nativeDataType.js} +2 -0
- package/dist/domain/native/nativeFunctionAnnotations.js +43 -0
- package/dist/domain/{nativeInspection.js → native/nativeInspection.js} +1 -1
- package/dist/domain/{nativeInvestigationGraph.js → native/nativeInvestigationGraph.js} +13 -4
- package/dist/domain/native/nativeLoadImage.js +95 -0
- package/dist/domain/native/nativeMetadataRecovery.js +55 -0
- package/dist/domain/{nativeUiObservation.js → native/nativeUiObservation.js} +20 -6
- package/dist/domain/{objcSwiftMetadata.js → native/objcSwiftMetadata.js} +17 -0
- package/dist/domain/processCapture.js +4 -3
- package/dist/domain/processEvidenceProvider.js +11 -0
- package/dist/domain/processScenario.js +17 -17
- package/dist/domain/processTraceComparison.js +1 -1
- package/dist/domain/propertyListKeys.js +69 -0
- package/dist/domain/providerAdapterError.js +17 -0
- package/dist/domain/providerCleanupError.js +6 -3
- package/dist/domain/providerSelectionError.js +44 -0
- package/dist/domain/reconstructionCoverageEvaluation.js +46 -24
- package/dist/domain/reconstructionCoverageInput.js +7 -0
- package/dist/domain/reconstructionUnknowns.js +1 -1
- package/dist/domain/reconstructionVerification.js +22 -8
- package/dist/domain/referenceSourceClassification.js +5 -6
- package/dist/domain/referenceSourceGraph.js +9 -17
- package/dist/domain/referenceSourceImportParsing.js +38 -23
- package/dist/domain/runtimeIdentification.js +1 -1
- package/dist/domain/runtimeVersion.js +6 -7
- package/dist/domain/safeJson.js +13 -0
- package/dist/domain/sourceMapEnvelope.js +38 -0
- package/dist/domain/staticRuntimeCorrelation.js +9 -7
- package/dist/domain/unicodeCodePointOrder.js +11 -6
- package/dist/domain/unknownRegistryError.js +10 -0
- package/dist/domain/webBundleAnalyzerAst.js +23 -38
- package/dist/domain/webBundleAnalyzerInspection.js +29 -20
- package/dist/domain/webEventListeners.js +28 -0
- package/dist/domain/webExecution.js +74 -0
- package/dist/domain/webMcpDiscovery.js +1 -7
- package/dist/domain/webModuleImports.js +104 -0
- package/dist/domain/webModuleTrace.js +106 -0
- package/dist/domain/webRuntime.js +69 -0
- package/dist/domain/webScreenshot.js +1 -7
- package/dist/domain/webScriptArtifacts.js +39 -0
- package/dist/domain/webScriptExport.js +86 -0
- package/dist/domain/webScriptExportError.js +13 -0
- package/dist/domain/webScriptExportPlan.js +108 -0
- package/dist/domain/webSourceLocation.js +106 -0
- package/dist/domain/webSourcePosition.js +21 -0
- package/dist/dotnet/ManagedArtifactInspector.js +1 -1
- package/dist/dotnet/ManagedMemberInspector.js +1 -1
- package/dist/dotnet/ManagedMemberInspectorCore.js +34 -0
- package/dist/dotnet/ManagedMemberRows.js +6 -4
- package/dist/dotnet/ManagedMetadataHeaps.js +3 -2
- package/dist/dotnet/ManagedMetadataInventoryRows.js +4 -2
- package/dist/dotnet/ManagedMethodBodyReader.js +8 -1
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +22 -16
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +56 -50
- package/dist/dotnet/ManagedStaticProvider.js +6 -34
- package/dist/dotnet/ManagedStaticProviderMetadata.js +36 -0
- package/dist/evaluation/CodexAgentEval.js +2 -1
- package/dist/firmware/FirmwareCommand.js +163 -0
- package/dist/firmware/FirmwareFiles.js +190 -0
- package/dist/firmware/FirmwareProvider.js +264 -0
- package/dist/firmware/FirmwarePublication.js +84 -0
- package/dist/firmware/FirmwareRelease.js +32 -0
- package/dist/firmware/FirmwareReports.js +235 -0
- package/dist/firmware/FirmwareVersion.js +80 -0
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +5 -5
- package/dist/ghidra/GhidraAnalysisProfile.js +37 -8
- package/dist/ghidra/GhidraClient.js +52 -6
- package/dist/ghidra/GhidraDiagnostics.js +3 -0
- package/dist/ghidra/GhidraDoctor.js +38 -14
- package/dist/ghidra/GhidraFunctionValues.js +14 -8
- package/dist/ghidra/GhidraInstallation.js +48 -38
- package/dist/ghidra/GhidraInstallationPolicy.js +140 -0
- package/dist/ghidra/GhidraInventoryValues.js +39 -2
- package/dist/ghidra/GhidraLauncher.js +102 -29
- package/dist/ghidra/GhidraLoadImageAttest.js +36 -0
- package/dist/ghidra/GhidraLoadImageValues.js +199 -0
- package/dist/ghidra/GhidraProvider.js +47 -149
- package/dist/ghidra/GhidraProviderCapabilities.js +58 -28
- package/dist/ghidra/GhidraProviderClient.js +209 -0
- package/dist/ghidra/GhidraRequestQueue.js +2 -2
- package/dist/ghidra/GhidraResponseBuffer.js +7 -1
- package/dist/ghidra/GhidraSessionError.js +31 -4
- package/dist/ghidra/GhidraSessionValues.js +10 -7
- package/dist/ghidra/GhidraTargetSnapshot.js +16 -2
- package/dist/ghidra/GhidraTransport.js +12 -0
- package/dist/ghidra/extensions/GhidraExtensionFailures.js +20 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +170 -0
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +21 -0
- package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +100 -0
- package/dist/hopper/BridgeLauncher.js +4 -2
- package/dist/hopper/HopperAnalysisProfile.js +7 -2
- package/dist/hopper/HopperCleanup.js +55 -9
- package/dist/hopper/HopperClient.js +14 -4
- package/dist/hopper/HopperProcessDiagnostic.js +1 -1
- package/dist/hopper/HopperProvider.js +8 -50
- package/dist/hopper/HopperProviderCapabilities.js +73 -0
- package/dist/hopper/HopperRequestQueue.js +7 -3
- package/dist/hopper/HopperResponseStream.js +7 -1
- package/dist/hopper/HopperSessionValues.js +1 -1
- package/dist/hopper/HopperSocketConnection.js +1 -1
- package/dist/hopper/HopperTargetLease.js +23 -15
- package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +7 -8
- package/dist/hopper/LinuxPrivateDisplayProbe.js +10 -6
- package/dist/hopper/protocol.js +8 -8
- package/dist/ida/IdaConfiguration.js +56 -0
- package/dist/ida/IdaDoctor.js +53 -0
- package/dist/ida/IdaInput.js +62 -0
- package/dist/ida/IdaMcpConnection.js +111 -0
- package/dist/ida/IdaOperationRunner.js +299 -0
- package/dist/ida/IdaProtocolValues.js +178 -0
- package/dist/ida/IdaProvider.js +126 -0
- package/dist/ida/IdaProviderCapabilities.js +52 -0
- package/dist/ida/IdaSessionClient.js +318 -0
- package/dist/ida/IdaWorkspace.js +54 -0
- package/dist/{browser → inspector}/JavaScriptRuntimeScope.js +19 -6
- package/dist/{browser → inspector}/V8InspectorCaptureProjection.js +46 -8
- package/dist/{browser → inspector}/V8InspectorEndpoint.js +3 -2
- package/dist/{browser → inspector}/V8InspectorProvider.js +16 -14
- package/dist/inspector/providerIdentity.js +6 -0
- package/dist/javascript/recovery/RecoveryFiles.js +122 -0
- package/dist/javascript/recovery/WakaruCommand.js +116 -0
- package/dist/javascript/recovery/WakaruExecution.js +100 -0
- package/dist/javascript/recovery/WakaruProvider.js +96 -0
- package/dist/javascript/recovery/WakaruPublication.js +102 -0
- package/dist/javascript/recovery/WakaruRelease.js +29 -0
- package/dist/javascript/recovery/WakaruReport.js +134 -0
- package/dist/javascript/sourceMaps/SourceMapCodecProcess.js +37 -0
- package/dist/javascript/sourceMaps/SourceMapCodecProtocol.js +20 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +176 -0
- package/dist/javascript/sourceMaps/SourceMapDecoder.js +61 -0
- package/dist/javascript/sourceMaps/SourceMapFormat.js +185 -0
- package/dist/javascript/sourceMaps/TraceSourceMap.js +138 -0
- package/dist/main/shutdown.js +29 -3
- package/dist/main/startup.js +1 -1
- package/dist/main/transport.js +32 -11
- package/dist/main.js +9 -20
- package/dist/native/AppleDispatchCoverage.js +58 -0
- package/dist/native/AppleDispatchMetadata.js +73 -490
- package/dist/native/AppleMachoFixups.js +292 -0
- package/dist/native/AppleMachoSelection.js +188 -0
- package/dist/native/AppleObjcCategories.js +59 -0
- package/dist/native/AppleObjcDispatchFacets.js +257 -0
- package/dist/native/AppleObjcProperties.js +68 -0
- package/dist/native/AppleObjcProtocols.js +2 -1
- package/dist/native/AppleSwiftDispatchFacets.js +150 -0
- package/dist/native/NativeMacOSProvider.js +204 -72
- package/dist/native/NativeMacOSProviderMetadata.js +42 -0
- package/dist/native/NativeMachoInspection.js +87 -26
- package/dist/native/NativeUiHelperRuntime.js +14 -4
- package/dist/native/NativeUiObservation.js +14 -6
- package/dist/native/NativeUiOutputBudget.js +8 -0
- package/dist/native/parsers/codesign.js +40 -5
- package/dist/native/parsers/demangle.js +6 -2
- package/dist/native/parsers/dyldInfo.js +16 -7
- package/dist/native/parsers/echoedPath.js +14 -0
- package/dist/native/parsers/lipo.js +14 -0
- package/dist/native/parsers/otool.js +5 -2
- package/dist/native/parsers/plist.js +174 -11
- package/dist/process/ExecFileOutput.js +2 -0
- package/dist/process/PrivateRuntimeRoot.js +13 -3
- package/dist/process/ProcessOwnership.js +5 -73
- package/dist/process/ProcessOwnershipObservation.js +62 -2
- package/dist/process/ProcessOwnershipProcessTree.js +13 -0
- package/dist/process/ProviderProcess.js +62 -24
- package/dist/process/ProviderRunLineage.js +1 -1
- package/dist/process/WindowsAuthority.js +20 -1
- package/dist/reference/ReferenceSourceReaderEntries.js +11 -2
- package/dist/reference/ReferenceSourceReaderFile.js +1 -0
- package/dist/server/createServer.js +67 -2
- package/dist/server/mcpClientMetadata.js +6 -3
- package/dist/server/mcpProgress.js +2 -1
- package/dist/server/promptCompletion.js +3 -3
- package/dist/server/registerAndroidTools.js +30 -0
- package/dist/server/registerApplicationTools/compareExportShapes.js +7 -3
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +9 -4
- package/dist/server/registerApplicationTools/compareVersions.js +7 -3
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +43 -0
- package/dist/server/registerApplicationTools/traceFeature.js +8 -3
- package/dist/server/registerApplicationTools/traceSemantics.js +8 -3
- package/dist/server/registerApplicationTools.js +2 -0
- package/dist/server/registerBrowserScenarioTool.js +6 -2
- package/dist/server/registerBrowserTools.js +13 -2
- package/dist/server/registerCloseLifecycleTool.js +1 -1
- package/dist/server/registerElectronTools.js +21 -7
- package/dist/server/registerEnhancedTools.js +28 -1
- package/dist/server/registerFirmwareTools.js +22 -0
- package/dist/server/registerFunctionComparisonTool.js +1 -1
- package/dist/server/registerInvestigationTools/helpers.js +2 -1
- package/dist/server/registerJavaScriptRecoveryTool.js +17 -0
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -4
- package/dist/server/registerManagedTools.js +4 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -2
- package/dist/server/registerManagedWorkflowTools/contract.js +1 -1
- package/dist/server/registerManagedWorkflowTools/evidence.js +1 -1
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +1 -1
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +1 -1
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -2
- package/dist/server/registerNativeTools.js +1 -1
- package/dist/server/registerOfficialTools.js +4 -1
- package/dist/server/registerProcessComparisonTool.js +5 -2
- package/dist/server/registerPrompts.js +5 -1
- package/dist/server/registerSessionTools.js +4 -2
- package/dist/server/registerWebModuleTool.js +17 -0
- package/dist/server/registerWebRuntimeTools.js +31 -0
- package/dist/server/registerWebScriptTool.js +18 -0
- package/dist/server/registerWebSourceLocationTool.js +17 -0
- package/dist/server/runDerivedOperation.js +1 -1
- package/dist/server/sessionAvailabilityPolicy.js +24 -9
- package/dist/server/sessionEvidence.js +1 -1
- package/dist/server/toolResult.js +2 -1
- package/dist/windows/WindowsNativeLoader.js +108 -0
- package/dist/windows/WindowsOwnedProcess.js +170 -0
- package/dist/windows/WindowsPrivateRuntime.js +137 -0
- package/install.sh +16 -8
- package/native/windows/README.md +107 -0
- package/native/windows/build/manifest.json +9 -0
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +70 -35
- package/scripts/hopper-demo-x11.py +67 -8
- package/scripts/rea.mjs +10 -2
- package/scripts/verify-windows-native-artifact.mjs +39 -0
- package/skills/reverse-engineer-anything/SKILL.md +92 -24
- package/skills/reverse-engineer-anything/references/android-applications.md +31 -0
- package/skills/reverse-engineer-anything/references/javascript-applications.md +19 -2
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +61 -4
- package/dist/application/JavaScriptApplicationService.js +0 -52
- package/dist/application/runtime.js +0 -51
- package/dist/browser/CdpCanonicalJsonDigest.js +0 -9
- package/dist/domain/appleApplication.js +0 -181
- package/dist/domain/errors.js +0 -324
- package/dist/domain/javascriptAstValues.js +0 -13
- package/dist/domain/javascriptSemanticTraversal.js +0 -30
- package/dist/native/NativeHostCapabilities.js +0 -23
- /package/dist/application/{BinarySessionPort.js → DirectAnalysisDependencies.js} +0 -0
- /package/dist/application/{ElectronActiveObservationPort.js → WebModulePorts.js} +0 -0
- /package/dist/application/{ElectronObservationPort.js → WebRuntimePort.js} +0 -0
- /package/dist/application/{JavaScriptArtifactAnalysisTypes.js → WebScriptArtifactPort.js} +0 -0
- /package/dist/application/{JavaScriptRuntimeObservationPort.js → WebSourceLocationPorts.js} +0 -0
- /package/dist/{domain/electronStaticAnalysisTypes.js → application/android/AndroidAnalysisPort.js} +0 -0
- /package/dist/application/{AbortablePromise.js → binary/AbortablePromise.js} +0 -0
- /package/dist/{domain/javascriptSemanticValueTypes.js → application/binary/BinarySessionPort.js} +0 -0
- /package/dist/application/{BinarySessionStatus.js → binary/BinarySessionStatus.js} +0 -0
- /package/dist/application/{ElectronBoundaryGraph.js → javascript/ElectronBoundaryGraph.js} +0 -0
- /package/dist/application/{ElectronBoundaryGraphIpc.js → javascript/ElectronBoundaryGraphIpc.js} +0 -0
- /package/dist/application/{ElectronBoundaryGraphNative.js → javascript/ElectronBoundaryGraphNative.js} +0 -0
- /package/dist/application/{ElectronBoundaryGraphWindows.js → javascript/ElectronBoundaryGraphWindows.js} +0 -0
- /package/dist/application/{JavaScriptArtifactGraphBundlers.js → javascript/JavaScriptArtifactGraphBundlers.js} +0 -0
- /package/dist/application/{JavaScriptArtifactGraphEvidence.js → javascript/JavaScriptArtifactGraphEvidence.js} +0 -0
- /package/dist/application/{JavaScriptArtifactReconstructionInput.js → javascript/JavaScriptArtifactReconstructionInput.js} +0 -0
- /package/dist/application/{JavaScriptSemanticGraphEvidence.js → javascript/JavaScriptSemanticGraphEvidence.js} +0 -0
- /package/dist/application/{JavaScriptSemanticGraphValueProjection.js → javascript/JavaScriptSemanticGraphValueProjection.js} +0 -0
- /package/dist/domain/{electronStaticAnalysis.js → javascript/electronStaticAnalysis.js} +0 -0
- /package/dist/domain/{javascriptExportShapeComparisonIdentity.js → javascript/javascriptExportShapeComparisonIdentity.js} +0 -0
- /package/dist/domain/{javascriptRuntimeReconciliation.js → javascript/javascriptRuntimeReconciliation.js} +0 -0
- /package/dist/domain/{javascriptRuntimeReconciliationRuntime.js → javascript/javascriptRuntimeReconciliationRuntime.js} +0 -0
- /package/dist/domain/{javascriptSemanticCoverage.js → javascript/javascriptSemanticCoverage.js} +0 -0
- /package/dist/domain/{javascriptSemanticDerivedAnalysis.js → javascript/javascriptSemanticDerivedAnalysis.js} +0 -0
- /package/dist/domain/{javascriptSemanticGraphSerialization.js → javascript/javascriptSemanticGraphSerialization.js} +0 -0
- /package/dist/domain/{javascriptSemanticIr.js → javascript/javascriptSemanticIr.js} +0 -0
- /package/dist/domain/{javascriptSemanticQueryRelations.js → javascript/javascriptSemanticQueryRelations.js} +0 -0
- /package/dist/domain/{javascriptSemanticState.js → javascript/javascriptSemanticState.js} +0 -0
- /package/dist/domain/{javascriptStaticAnalysisFindings.js → javascript/javascriptStaticAnalysisFindings.js} +0 -0
- /package/dist/domain/{javascriptStaticAnalysisState.js → javascript/javascriptStaticAnalysisState.js} +0 -0
- /package/dist/domain/{javascriptStaticAnalysisTypes.js → javascript/javascriptStaticAnalysisTypes.js} +0 -0
- /package/dist/domain/{managedApplicationGraphCoverage.js → managed/managedApplicationGraphCoverage.js} +0 -0
- /package/dist/domain/{managedApplicationGraphNodeCoverage.js → managed/managedApplicationGraphNodeCoverage.js} +0 -0
- /package/dist/domain/{nativeApiBoundary.js → native/nativeApiBoundary.js} +0 -0
- /package/dist/domain/{nativeInstruction.js → native/nativeInstruction.js} +0 -0
- /package/dist/domain/{nativeValueFlow.js → native/nativeValueFlow.js} +0 -0
- /package/dist/domain/{nativeValueTrace.js → native/nativeValueTrace.js} +0 -0
|
@@ -9,7 +9,10 @@ import { execFileOutput } from "../process/ExecFileOutput.js";
|
|
|
9
9
|
const execFileAsync = promisify(execFile);
|
|
10
10
|
const DOWNLOAD_PREFIX = "https://www.hopperapp.com:443/downloader/public/";
|
|
11
11
|
const MAX_PACKAGE_BYTES = 100_000_000;
|
|
12
|
-
const SUPPORTED_HOPPER_SHA256 =
|
|
12
|
+
const SUPPORTED_HOPPER_SHA256 = new Set([
|
|
13
|
+
"0294ced141cc373468ee22d8343e7dac41980cb05a937994ca81c9f09afe7ded",
|
|
14
|
+
"1339f9e58377442b0c6fcb0dfc3cec20d593cc557408521fad9a00dbc6b8da13",
|
|
15
|
+
]);
|
|
13
16
|
const SUPPORTED_RELEASES = {
|
|
14
17
|
deb: {
|
|
15
18
|
filename: `${DOWNLOAD_PREFIX}Hopper-6.4.2-Linux-demo.deb`,
|
|
@@ -58,6 +61,7 @@ export const parseLinuxDistribution = (text) => {
|
|
|
58
61
|
const packageFamily = packageFamilyFor(id, fields.get("ID_LIKE"));
|
|
59
62
|
const supported = packageFamily !== undefined &&
|
|
60
63
|
(id === "arch" ||
|
|
64
|
+
id === "cachyos" ||
|
|
61
65
|
(id === "ubuntu" && versionAtLeast(versionId, 24)) ||
|
|
62
66
|
(id === "fedora" && versionAtLeast(versionId, 41)));
|
|
63
67
|
const identity = {
|
|
@@ -73,7 +77,9 @@ export const readLinuxDistribution = async () => {
|
|
|
73
77
|
try {
|
|
74
78
|
return parseLinuxDistribution(await readFile("/etc/os-release", "utf8"));
|
|
75
79
|
}
|
|
76
|
-
catch {
|
|
80
|
+
catch (cause) {
|
|
81
|
+
// best-effort cleanup: optional host probing; unknown distribution means unsupported.
|
|
82
|
+
void cause;
|
|
77
83
|
return undefined;
|
|
78
84
|
}
|
|
79
85
|
};
|
|
@@ -143,7 +149,9 @@ const systemLinuxHopperInstallHost = () => ({
|
|
|
143
149
|
? "ready"
|
|
144
150
|
: "unsupported_hopper_build";
|
|
145
151
|
}
|
|
146
|
-
catch {
|
|
152
|
+
catch (cause) {
|
|
153
|
+
// best-effort cleanup: optional launcher probing; unreadable means missing.
|
|
154
|
+
void cause;
|
|
147
155
|
return "missing";
|
|
148
156
|
}
|
|
149
157
|
},
|
|
@@ -155,12 +163,16 @@ export const linuxHopperBinarySupported = async (path) => {
|
|
|
155
163
|
const hash = createHash("sha256");
|
|
156
164
|
for await (const chunk of createReadStream(path))
|
|
157
165
|
hash.update(chunk);
|
|
158
|
-
return hash.digest("hex")
|
|
166
|
+
return linuxHopperLauncherDigestSupported(hash.digest("hex"));
|
|
159
167
|
}
|
|
160
|
-
catch {
|
|
168
|
+
catch (cause) {
|
|
169
|
+
// best-effort cleanup: optional build probing; unreadable means unsupported.
|
|
170
|
+
void cause;
|
|
161
171
|
return false;
|
|
162
172
|
}
|
|
163
173
|
};
|
|
174
|
+
/** Match a launcher extracted from one of the pinned official Linux packages. */
|
|
175
|
+
export const linuxHopperLauncherDigestSupported = (digest) => SUPPORTED_HOPPER_SHA256.has(digest);
|
|
164
176
|
/** Interpret ldd output conservatively so a present but broken launcher is unhealthy. */
|
|
165
177
|
export const linuxSharedLibrariesAvailable = (output) => !/(?:=>\s+not found|error while loading shared libraries)/iu.test(output);
|
|
166
178
|
const installSystemPackage = async (family, archive) => {
|
|
@@ -169,7 +181,9 @@ const installSystemPackage = async (family, archive) => {
|
|
|
169
181
|
await execFileAsync(command.executable, command.args);
|
|
170
182
|
return true;
|
|
171
183
|
}
|
|
172
|
-
catch {
|
|
184
|
+
catch (cause) {
|
|
185
|
+
// Package-manager failure is reported by the false return.
|
|
186
|
+
void cause;
|
|
173
187
|
return false;
|
|
174
188
|
}
|
|
175
189
|
};
|
|
@@ -63,7 +63,9 @@ export const installMacHopper = async (options = {}, host = systemMacHopperInsta
|
|
|
63
63
|
await host.openApplication(destination);
|
|
64
64
|
return { status: "installed", launcherPath };
|
|
65
65
|
}
|
|
66
|
-
catch {
|
|
66
|
+
catch (cause) {
|
|
67
|
+
// Install-stage failures share the download reason; the stage is cleaned below.
|
|
68
|
+
void cause;
|
|
67
69
|
return { status: "failed", reason: "download" };
|
|
68
70
|
}
|
|
69
71
|
finally {
|
|
@@ -114,7 +116,9 @@ const systemMacHopperInstallHost = () => ({
|
|
|
114
116
|
])).stdout.trim();
|
|
115
117
|
return identifier === BUNDLE_IDENTIFIER;
|
|
116
118
|
}
|
|
117
|
-
catch {
|
|
119
|
+
catch (cause) {
|
|
120
|
+
// best-effort cleanup: optional bundle probing; unreadable means invalid.
|
|
121
|
+
void cause;
|
|
118
122
|
return false;
|
|
119
123
|
}
|
|
120
124
|
},
|
|
@@ -123,7 +127,9 @@ const systemMacHopperInstallHost = () => ({
|
|
|
123
127
|
await access(path);
|
|
124
128
|
return true;
|
|
125
129
|
}
|
|
126
|
-
catch {
|
|
130
|
+
catch (cause) {
|
|
131
|
+
// best-effort cleanup: optional existence probing; absence means missing.
|
|
132
|
+
void cause;
|
|
127
133
|
return false;
|
|
128
134
|
}
|
|
129
135
|
},
|
|
@@ -142,14 +148,17 @@ const systemMacHopperInstallHost = () => ({
|
|
|
142
148
|
await rm(previous, { recursive: true, force: true });
|
|
143
149
|
return true;
|
|
144
150
|
}
|
|
145
|
-
catch {
|
|
151
|
+
catch (cause) {
|
|
152
|
+
// Install failure rolls back below; the false return reports it.
|
|
153
|
+
void cause;
|
|
146
154
|
await rm(stage, { recursive: true, force: true });
|
|
147
155
|
if (replaceExisting) {
|
|
148
156
|
try {
|
|
149
157
|
await rename(previous, destination);
|
|
150
158
|
}
|
|
151
|
-
catch {
|
|
159
|
+
catch (rollbackCause) {
|
|
152
160
|
// The original destination was not moved, or rollback is impossible.
|
|
161
|
+
void rollbackCause;
|
|
153
162
|
}
|
|
154
163
|
}
|
|
155
164
|
return false;
|
|
@@ -160,7 +169,9 @@ const systemMacHopperInstallHost = () => ({
|
|
|
160
169
|
await access(path);
|
|
161
170
|
return true;
|
|
162
171
|
}
|
|
163
|
-
catch {
|
|
172
|
+
catch (cause) {
|
|
173
|
+
// best-effort cleanup: optional launcher probing; absence means not ready.
|
|
174
|
+
void cause;
|
|
164
175
|
return false;
|
|
165
176
|
}
|
|
166
177
|
},
|
|
@@ -190,7 +201,9 @@ const commandSucceeds = async (command, args) => {
|
|
|
190
201
|
await execFileAsync(command, args);
|
|
191
202
|
return true;
|
|
192
203
|
}
|
|
193
|
-
catch {
|
|
204
|
+
catch (cause) {
|
|
205
|
+
// best-effort cleanup: optional command probing; failure means unavailable.
|
|
206
|
+
void cause;
|
|
194
207
|
return false;
|
|
195
208
|
}
|
|
196
209
|
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js";
|
|
2
|
+
/** Preserve the module's failure reason through the existing tool error algebra. */
|
|
3
|
+
export const optionalProviderUnavailable = (failure, operation) => new AnalysisCapabilityUnavailableError(failure.providerId, operation, `Adapter could not load: ${failure.reason}`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { tmpdir } from "node:os";
|
|
2
2
|
/** Explain why process capture cannot claim owned-process cleanup on a host. */
|
|
3
3
|
export const processCaptureOwnershipUnavailableReason = (platform) => platform === "win32"
|
|
4
|
-
? "Windows process
|
|
4
|
+
? "Windows PTY process capture is unavailable because this adapter does not yet verify descendant cleanup. Use Linux (including WSL for Linux commands) or macOS. Reinstalling the PTY backend does not enable native Windows capture."
|
|
5
5
|
: undefined;
|
|
6
6
|
/** Probe the native PTY seam and explain loader failures at their source. */
|
|
7
7
|
export const processCaptureProbeFailureReason = (cause) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AnalysisError } from "../domain/
|
|
1
|
+
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
|
2
2
|
/** Typed application failure produced by controlled process capture. */
|
|
3
3
|
export class ProcessCaptureError extends AnalysisError {
|
|
4
4
|
_tag = "ProcessCaptureError";
|
|
@@ -7,7 +7,8 @@ import { digestProcessCommitment, processComparisonContract, processScenarioComm
|
|
|
7
7
|
import { PRODUCT_IDENTITY } from "../identity.js";
|
|
8
8
|
import { snapshotRoots } from "./FilesystemSnapshot.js";
|
|
9
9
|
import { classifyFilesystemEffects } from "./ProcessFilesystemEffects.js";
|
|
10
|
-
import { cleanupOwnedProcessGroup
|
|
10
|
+
import { cleanupOwnedProcessGroup } from "../process/ProcessOwnership.js";
|
|
11
|
+
import { observeOwnedProcessGroup } from "../process/ProcessOwnershipObservation.js";
|
|
11
12
|
import { ProcessCaptureError } from "./ProcessCaptureError.js";
|
|
12
13
|
import { assertNotCancelled } from "./ProcessScenarioRuntimeValidation.js";
|
|
13
14
|
import { normalizeProcessElapsedTime, normalizeProcessSamples, normalizeProcessText, } from "./ProcessNormalization.js";
|
|
@@ -216,7 +217,8 @@ export const releaseProcessResources = async (options) => {
|
|
|
216
217
|
try {
|
|
217
218
|
await options.renderer?.dispose();
|
|
218
219
|
}
|
|
219
|
-
catch {
|
|
220
|
+
catch (cause) {
|
|
221
|
+
void cause;
|
|
220
222
|
failure ??= "terminal renderer cleanup failed";
|
|
221
223
|
}
|
|
222
224
|
if (options.terminal !== undefined && host.platform !== "win32") {
|
|
@@ -233,7 +235,8 @@ export const releaseProcessResources = async (options) => {
|
|
|
233
235
|
try {
|
|
234
236
|
await host.removeTemporaryRoot(options.temporaryRoot);
|
|
235
237
|
}
|
|
236
|
-
catch {
|
|
238
|
+
catch (cause) {
|
|
239
|
+
void cause;
|
|
237
240
|
failure ??= "temporary process root cleanup failed";
|
|
238
241
|
}
|
|
239
242
|
return failure;
|
|
@@ -277,9 +280,9 @@ export const resolveProcessResult = (capture, executionFailure, cleanupFailure)
|
|
|
277
280
|
throw new ProcessCaptureError("process capture produced no result");
|
|
278
281
|
return capture;
|
|
279
282
|
};
|
|
280
|
-
export const prepareProcessCapture = async (scenario, signal, host = systemProcessPreparationHost) => {
|
|
283
|
+
export const prepareProcessCapture = async (scenario, signal, captureSnapshot = snapshotRoots, host = systemProcessPreparationHost) => {
|
|
281
284
|
assertNotCancelled(signal);
|
|
282
|
-
const before = await
|
|
285
|
+
const before = await captureSnapshot(scenario, signal);
|
|
283
286
|
const temporaryRoot = await host.createTemporaryRoot();
|
|
284
287
|
try {
|
|
285
288
|
const runId = randomUUID();
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
|
-
import { AnalysisError
|
|
2
|
+
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
|
3
|
+
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
4
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
3
5
|
import { createEvidence, parseEvidence } from "../domain/evidence.js";
|
|
4
6
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
5
7
|
import { projectInputIssues } from "../domain/inputIssueProjection.js";
|
|
@@ -75,7 +77,7 @@ const parseCaptureEvidence = (input) => {
|
|
|
75
77
|
try {
|
|
76
78
|
evidence = parseEvidence(input);
|
|
77
79
|
}
|
|
78
|
-
catch {
|
|
80
|
+
catch (cause) {
|
|
79
81
|
throw invalidCaptureEvidence();
|
|
80
82
|
}
|
|
81
83
|
if (evidence.operation !== "capture_process_scenario" ||
|
|
@@ -91,7 +93,7 @@ const parseCaptureEvidence = (input) => {
|
|
|
91
93
|
locations: evidence.locations,
|
|
92
94
|
};
|
|
93
95
|
}
|
|
94
|
-
catch {
|
|
96
|
+
catch (cause) {
|
|
95
97
|
throw invalidCaptureEvidence();
|
|
96
98
|
}
|
|
97
99
|
};
|
|
@@ -107,14 +109,20 @@ const readJson = async (path) => {
|
|
|
107
109
|
try {
|
|
108
110
|
bytes = await readFile(path);
|
|
109
111
|
}
|
|
110
|
-
catch {
|
|
112
|
+
catch (cause) {
|
|
113
|
+
void cause;
|
|
111
114
|
throw new ProcessCliFailure("invalid_input", "Process input file could not be read. Check that the path exists and is readable.");
|
|
112
115
|
}
|
|
113
116
|
try {
|
|
114
|
-
const
|
|
117
|
+
const text = new TextDecoder("utf-8", {
|
|
118
|
+
fatal: true,
|
|
119
|
+
ignoreBOM: true,
|
|
120
|
+
}).decode(bytes);
|
|
121
|
+
const parsed = JSON.parse(text);
|
|
115
122
|
return parsed;
|
|
116
123
|
}
|
|
117
|
-
catch {
|
|
124
|
+
catch (cause) {
|
|
125
|
+
void cause;
|
|
118
126
|
throw new ProcessCliFailure("invalid_input", "Process input file is not valid JSON. Repair the file, then try again.");
|
|
119
127
|
}
|
|
120
128
|
};
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { createEvidence } from "../domain/evidence.js";
|
|
2
|
+
import { PROCESS_PROVIDER } from "../domain/processEvidenceProvider.js";
|
|
2
3
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
3
|
-
|
|
4
|
-
export const PROCESS_PROVIDER = {
|
|
5
|
-
id: "rea-process",
|
|
6
|
-
name: "REA process capture",
|
|
7
|
-
version: "3",
|
|
8
|
-
};
|
|
4
|
+
export { PROCESS_PROVIDER } from "../domain/processEvidenceProvider.js";
|
|
9
5
|
/** Project one process scenario into secret-free Evidence parameters. */
|
|
10
6
|
const processEvidenceParameters = (scenario) => ({
|
|
11
7
|
executable_name: scenario.executable.split("/").at(-1) ?? scenario.executable,
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { parseProcessCapture } from "../domain/processCapture.js";
|
|
2
2
|
import { err, ok } from "../domain/result.js";
|
|
3
|
-
import { AnalysisCapabilityUnavailableError
|
|
3
|
+
import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js";
|
|
4
|
+
import {} from "../domain/analysisErrorBase.js";
|
|
4
5
|
import { ProcessCaptureError, processCaptureCancelled, } from "./ProcessCaptureError.js";
|
|
5
6
|
export { ProcessCaptureError } from "./ProcessCaptureError.js";
|
|
6
7
|
import { startProcessSampler } from "./ProcessSampling.js";
|
|
7
8
|
import { snapshotRoots } from "./FilesystemSnapshot.js";
|
|
8
9
|
import { TerminalRenderer } from "./TerminalRenderer.js";
|
|
9
10
|
import { normalizeProcessText } from "./ProcessNormalization.js";
|
|
10
|
-
import { selectCapturedProcessGroupIds } from "../process/
|
|
11
|
+
import { selectCapturedProcessGroupIds } from "../process/ProcessOwnershipProcessTree.js";
|
|
11
12
|
import { awaitTerminalExit, buildCaptureResult, captureTerminalFrames, createRunManifest, observeSettlement, prepareProcessCapture, releaseProcessResources, resolveProcessResult, settleProcessCaptureJournal, } from "./ProcessCaptureLifecycle.js";
|
|
12
13
|
import { assertNotCancelled, resolveProcessScenarioRuntimePaths, } from "./ProcessScenarioRuntimeValidation.js";
|
|
13
14
|
import { createProcessCaptureJournal, scheduleScenarioInteractions, } from "./ProcessCaptureJournal.js";
|
|
@@ -130,6 +131,15 @@ const finishProcessRun = async (options) => {
|
|
|
130
131
|
}
|
|
131
132
|
return resolveProcessResult(verifiedCapture, executionFailure, cleanupFailure);
|
|
132
133
|
};
|
|
134
|
+
const normalizeCaptureFailure = (cause, signal) => {
|
|
135
|
+
if (cause instanceof ProcessCaptureError)
|
|
136
|
+
return cause;
|
|
137
|
+
if (signal?.aborted === true &&
|
|
138
|
+
(cause === signal.reason ||
|
|
139
|
+
(cause instanceof Error && cause.name === "AbortError")))
|
|
140
|
+
return processCaptureCancelled();
|
|
141
|
+
return cause;
|
|
142
|
+
};
|
|
133
143
|
const completeCapture = async (options) => {
|
|
134
144
|
const { runtime, scenario } = options;
|
|
135
145
|
const { reason } = options.exit;
|
|
@@ -139,7 +149,7 @@ const completeCapture = async (options) => {
|
|
|
139
149
|
const samplingPartial = (await runtime.stopSampler()).partial;
|
|
140
150
|
await settleProcessCaptureJournal(options.eventJournal);
|
|
141
151
|
assertNotCancelled(options.signal);
|
|
142
|
-
const after = await
|
|
152
|
+
const after = await options.captureSnapshot(scenario, options.signal);
|
|
143
153
|
options.recordEvent("filesystem_checkpoints", 1);
|
|
144
154
|
const renderedFrames = await runtime.renderer.frames();
|
|
145
155
|
const checkpoints = [
|
|
@@ -184,8 +194,8 @@ const completeCapture = async (options) => {
|
|
|
184
194
|
});
|
|
185
195
|
};
|
|
186
196
|
/** Execute one caller-selected scenario and return bounded observations. */
|
|
187
|
-
const runProcessScenario = async (scenario, signal, hostEnvironment = process.env, hostPlatform = process.platform) => {
|
|
188
|
-
const { temporaryRoot, runId, before } = await prepareProcessCapture(scenario, signal);
|
|
197
|
+
const runProcessScenario = async (scenario, signal, hostEnvironment = process.env, hostPlatform = process.platform, captureSnapshot = snapshotRoots) => {
|
|
198
|
+
const { temporaryRoot, runId, before } = await prepareProcessCapture(scenario, signal, captureSnapshot);
|
|
189
199
|
const frames = [];
|
|
190
200
|
const samples = [];
|
|
191
201
|
const journal = createProcessCaptureJournal();
|
|
@@ -238,12 +248,13 @@ const runProcessScenario = async (scenario, signal, hostEnvironment = process.en
|
|
|
238
248
|
initiallyTruncated: before.truncated,
|
|
239
249
|
eventJournal,
|
|
240
250
|
recordEvent,
|
|
251
|
+
captureSnapshot,
|
|
241
252
|
...(signal === undefined ? {} : { signal }),
|
|
242
253
|
});
|
|
243
254
|
}
|
|
244
255
|
catch (cause) {
|
|
245
256
|
runtime?.terminal.kill("SIGKILL");
|
|
246
|
-
executionFailure = cause;
|
|
257
|
+
executionFailure = normalizeCaptureFailure(cause, signal);
|
|
247
258
|
}
|
|
248
259
|
return finishProcessRun({
|
|
249
260
|
runtime,
|
|
@@ -257,18 +268,19 @@ const runProcessScenario = async (scenario, signal, hostEnvironment = process.en
|
|
|
257
268
|
});
|
|
258
269
|
};
|
|
259
270
|
/** Execute one scenario through a typed expected-failure channel. */
|
|
260
|
-
export const captureProcessScenario = async (scenario, signal, platform = process.platform, environment = process.env) => {
|
|
271
|
+
export const captureProcessScenario = async (scenario, signal, platform = process.platform, environment = process.env, captureSnapshot = snapshotRoots) => {
|
|
261
272
|
const ownershipReason = processCaptureOwnershipUnavailableReason(platform);
|
|
262
273
|
if (ownershipReason !== undefined)
|
|
263
|
-
return err(new AnalysisCapabilityUnavailableError("rea-process", "capture_process_scenario", ownershipReason));
|
|
274
|
+
return err(new AnalysisCapabilityUnavailableError("rea-process", "capture_process_scenario", ownershipReason, { userMessage: ownershipReason }));
|
|
264
275
|
try {
|
|
265
276
|
assertNotCancelled(signal);
|
|
266
277
|
const resolvedScenario = await resolveProcessScenarioRuntimePaths(scenario, environment);
|
|
267
|
-
return ok(await runProcessScenario(resolvedScenario, signal, environment, platform));
|
|
278
|
+
return ok(await runProcessScenario(resolvedScenario, signal, environment, platform, captureSnapshot));
|
|
268
279
|
}
|
|
269
280
|
catch (cause) {
|
|
270
|
-
|
|
271
|
-
|
|
281
|
+
const failure = normalizeCaptureFailure(cause, signal);
|
|
282
|
+
return err(failure instanceof ProcessCaptureError
|
|
283
|
+
? failure
|
|
272
284
|
: new ProcessCaptureError("process capture failed", { cause }));
|
|
273
285
|
}
|
|
274
286
|
};
|
|
@@ -18,6 +18,7 @@ export const normalizeProcessText = (value, scenario, temporaryRoot, pid) => {
|
|
|
18
18
|
normalized = normalized.replaceAll(pattern.pattern, pattern.replacement);
|
|
19
19
|
return normalized;
|
|
20
20
|
};
|
|
21
|
+
/** Project sampled observations under the caller-selected normalization rules. */
|
|
21
22
|
export const normalizeProcessSamples = (samples, scenario, rootPid) => {
|
|
22
23
|
const identifiers = [
|
|
23
24
|
rootPid,
|
|
@@ -41,12 +42,18 @@ export const normalizeProcessSamples = (samples, scenario, rootPid) => {
|
|
|
41
42
|
};
|
|
42
43
|
return samples.map((sample) => ({
|
|
43
44
|
at_ms: normalizeProcessElapsedTime(sample.at_ms, scenario.normalization.time_bucket_ms),
|
|
44
|
-
pid:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
pid: scenario.normalization.pids
|
|
46
|
+
? (mapping.get(sample.pid) ?? 1)
|
|
47
|
+
: sample.pid,
|
|
48
|
+
parent_pid: scenario.normalization.pids
|
|
49
|
+
? (mapping.get(sample.parent_pid) ?? 0)
|
|
50
|
+
: sample.parent_pid,
|
|
51
|
+
process_group_id: !scenario.normalization.pids || sample.process_group_id === null
|
|
52
|
+
? sample.process_group_id
|
|
48
53
|
: (mapping.get(sample.process_group_id) ?? 0),
|
|
49
|
-
session_id:
|
|
54
|
+
session_id: !scenario.normalization.pids || sample.session_id === null
|
|
55
|
+
? sample.session_id
|
|
56
|
+
: (mapping.get(sample.session_id) ?? 0),
|
|
50
57
|
command: normalizeCommand(sample.command),
|
|
51
58
|
}));
|
|
52
59
|
};
|
|
@@ -240,7 +240,9 @@ const inspectInitializedPtyRoot = async (rootPid, runId, signal) => {
|
|
|
240
240
|
try {
|
|
241
241
|
observedRunId = await readProcessRunId(rootPid);
|
|
242
242
|
}
|
|
243
|
-
catch {
|
|
243
|
+
catch (cause) {
|
|
244
|
+
// Unreadable run identity means the root cannot be attributed.
|
|
245
|
+
void cause;
|
|
244
246
|
return undefined;
|
|
245
247
|
}
|
|
246
248
|
const after = await readRootIdentity(rootPid, signal);
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AnalysisInputError } from "../domain/
|
|
3
|
-
import {
|
|
1
|
+
import { reconstructionCoverageEvaluationInputSchema } from "../domain/reconstructionCoverageInput.js";
|
|
2
|
+
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
3
|
+
import {} from "../domain/analysisErrorBase.js";
|
|
4
|
+
import { evaluateReconstructionClosure } from "../domain/reconstructionCoverage.js";
|
|
4
5
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
5
6
|
import { err, ok } from "../domain/result.js";
|
|
6
|
-
export const reconstructionCoverageEvaluationInputSchema = z.strictObject({
|
|
7
|
-
coverage: reconstructionCoverageDataSchema,
|
|
8
|
-
boundary_id: z.string().min(1),
|
|
9
|
-
});
|
|
10
7
|
/** Evaluate inline reconstruction coverage against a named boundary. */
|
|
11
8
|
export const evaluateReconstructionCoverage = (rawInput, nowEpochMs = Date.now()) => {
|
|
12
9
|
const parsed = reconstructionCoverageEvaluationInputSchema.safeParse(rawInput);
|
|
@@ -2,7 +2,7 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import canonicalize from "canonicalize";
|
|
3
3
|
import { parseEvidenceBundle, } from "../domain/evidenceBundle.js";
|
|
4
4
|
import { parseProcessCapture } from "../domain/processCapture.js";
|
|
5
|
-
import { parseApplicationGraphEvidence } from "./JavaScriptApplicationEvidenceGraph.js";
|
|
5
|
+
import { parseApplicationGraphEvidence } from "./javascript/JavaScriptApplicationEvidenceGraph.js";
|
|
6
6
|
import { applicationObligationPolicy, semanticObligationPolicy, } from "./ReconstructionObligationPolicies.js";
|
|
7
7
|
/** Derive conservative candidates from graph, process, and reviewed inputs. */
|
|
8
8
|
export const deriveReconstructionObligationCandidates = (bundleInput, reviewed) => {
|
|
@@ -32,8 +32,11 @@ const deriveApplicationCandidates = (evidence, records, candidates, limitations)
|
|
|
32
32
|
const source = parseApplicationGraphEvidence(evidence);
|
|
33
33
|
for (const node of source.graph.nodes) {
|
|
34
34
|
const candidatePolicy = applicationObligationPolicy(node.kind);
|
|
35
|
-
if (candidatePolicy === undefined)
|
|
35
|
+
if (candidatePolicy === undefined) {
|
|
36
|
+
if (node.kind === "unknown")
|
|
37
|
+
limitations.add(`Application graph ${source.graph.graph_id} contains unresolved node ${node.node_id}; reconstruction obligations remain unknown.`);
|
|
36
38
|
continue;
|
|
39
|
+
}
|
|
37
40
|
const reference = node.observations.map((observation) => graphReference(evidence, records, observation.evidence, `${source.graph.graph_id}/node/${node.node_id}/observation/${observation.observation_id}`));
|
|
38
41
|
addCandidate(candidates, generatedCandidate({
|
|
39
42
|
key: `application:${node.node_id}:${candidatePolicy.family}`,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { AnalysisInputError, AnalysisProtocolError, } from "../domain/
|
|
2
|
+
import { AnalysisInputError, AnalysisProtocolError, } from "../domain/analysisErrorCore.js";
|
|
3
|
+
import {} from "../domain/analysisErrorBase.js";
|
|
3
4
|
import { createEvidence } from "../domain/evidence.js";
|
|
4
5
|
import { jsonObjectSchema, jsonValueSchema } from "../domain/jsonValue.js";
|
|
5
6
|
import { reconstructionObligationLedgerInputSchema, reconstructionObligationLedgerSchema, } from "../domain/reconstructionObligationLedgerSchemas.js";
|
|
@@ -106,6 +106,8 @@ export const importReferenceSource = async (options) => {
|
|
|
106
106
|
const error = readResult.error;
|
|
107
107
|
if (error.code === "cancelled")
|
|
108
108
|
return err(cancelled());
|
|
109
|
+
if (error.code === "unsupported")
|
|
110
|
+
return err(failure("unsupported", error.message));
|
|
109
111
|
return err(failure("io", error.message));
|
|
110
112
|
}
|
|
111
113
|
if (isAborted(options.signal))
|
|
@@ -3,12 +3,13 @@ import { posix } from "node:path";
|
|
|
3
3
|
import { classifyReferenceSourcePath, detectReferenceSourceLanguage, } from "../domain/referenceSourceClassification.js";
|
|
4
4
|
import { parseReferenceSourceImports } from "../domain/referenceSourceImportParsing.js";
|
|
5
5
|
import { PARSEABLE_REFERENCE_SOURCE_LANGUAGES } from "./ReferenceSourceImportTypes.js";
|
|
6
|
-
/**
|
|
7
|
-
export const projectReferenceSourceEntryFailure = (entry) => {
|
|
6
|
+
/** Preserve the observed reader failure and add entry-specific recovery guidance. */
|
|
7
|
+
export const projectReferenceSourceEntryFailure = (entry) => `${entry.message} ${entryRecoveryGuidance(entry)}`;
|
|
8
|
+
const entryRecoveryGuidance = (entry) => {
|
|
8
9
|
if (entry.code === "cancelled")
|
|
9
10
|
return "This entry was not read because the import was cancelled. Start the import again when ready.";
|
|
10
11
|
if (entry.code === "unsupported")
|
|
11
|
-
return "
|
|
12
|
+
return "Exclude this entry or replace it with a regular file.";
|
|
12
13
|
if (entry.kind === "directory")
|
|
13
14
|
return "This directory could not be read. Check its permissions, then try again.";
|
|
14
15
|
if (entry.kind === "symlink")
|
|
@@ -48,6 +49,8 @@ const failedEntry = (entry) => {
|
|
|
48
49
|
};
|
|
49
50
|
};
|
|
50
51
|
const resolveInternalSpecifier = (fromPath, specifier, filePaths) => {
|
|
52
|
+
if (posix.isAbsolute(specifier))
|
|
53
|
+
return { to: specifier, resolution: "unresolved" };
|
|
51
54
|
const normalized = posix.normalize(posix.join(posix.dirname(fromPath), specifier));
|
|
52
55
|
if (normalized.startsWith("../") || normalized === "..")
|
|
53
56
|
return { to: normalized, resolution: "unresolved" };
|
|
@@ -56,6 +59,22 @@ const resolveInternalSpecifier = (fromPath, specifier, filePaths) => {
|
|
|
56
59
|
`${normalized}${suffix}`,
|
|
57
60
|
`${normalized}/index${suffix}`,
|
|
58
61
|
]);
|
|
62
|
+
// TypeScript source commonly names the extension emitted for NodeNext.
|
|
63
|
+
// Retain present runtime files first; substitute only a missing counterpart.
|
|
64
|
+
// Counterparts cover explicit filenames, not directory/index resolution.
|
|
65
|
+
if (/\.(?:ts|tsx|mts|cts)$/u.test(fromPath)) {
|
|
66
|
+
const sourceSuffixes = normalized.endsWith(".js")
|
|
67
|
+
? [".ts", ".tsx", ".d.ts"]
|
|
68
|
+
: normalized.endsWith(".mjs")
|
|
69
|
+
? [".mts", ".d.mts"]
|
|
70
|
+
: normalized.endsWith(".cjs")
|
|
71
|
+
? [".cts", ".d.cts"]
|
|
72
|
+
: normalized.endsWith(".jsx")
|
|
73
|
+
? [".tsx", ".d.ts"]
|
|
74
|
+
: [];
|
|
75
|
+
const stem = normalized.slice(0, -posix.extname(normalized).length);
|
|
76
|
+
candidates.push(...sourceSuffixes.map((suffix) => `${stem}${suffix}`));
|
|
77
|
+
}
|
|
59
78
|
const match = candidates.find((candidate) => filePaths.has(candidate));
|
|
60
79
|
return match === undefined
|
|
61
80
|
? { to: normalized, resolution: "unresolved" }
|
|
@@ -15,7 +15,8 @@ const resolveRoot = async (requestedRoot) => {
|
|
|
15
15
|
const canonicalRoot = await realpath(resolve(requestedRoot));
|
|
16
16
|
return ok(canonicalRoot);
|
|
17
17
|
}
|
|
18
|
-
catch {
|
|
18
|
+
catch (cause) {
|
|
19
|
+
void cause;
|
|
19
20
|
return err(failure("invalid-root", "Reference source root could not be resolved"));
|
|
20
21
|
}
|
|
21
22
|
};
|
|
@@ -24,8 +25,9 @@ const buildIgnored = async (root, excludePaths) => {
|
|
|
24
25
|
try {
|
|
25
26
|
ignored.add(await readFile(join(root, ".gitignore"), "utf8"));
|
|
26
27
|
}
|
|
27
|
-
catch {
|
|
28
|
+
catch (cause) {
|
|
28
29
|
// Missing or unreadable ignore file does not authorize broader access.
|
|
30
|
+
void cause;
|
|
29
31
|
}
|
|
30
32
|
ignored.add([...DEFAULT_REFERENCE_SOURCE_IGNORE_PATTERNS]);
|
|
31
33
|
for (const path of excludePaths) {
|
|
@@ -10,6 +10,11 @@ export const projectReferenceSourceImportError = (error) => {
|
|
|
10
10
|
category: "invalid_input",
|
|
11
11
|
message: "Reference source directory could not be opened. Check that the path exists, is readable, and points to a directory.",
|
|
12
12
|
};
|
|
13
|
+
if (error.code === "unsupported")
|
|
14
|
+
return {
|
|
15
|
+
category: "unsupported_host",
|
|
16
|
+
message: "Safe no-follow file opens are unavailable on this host. Import the source tree with REA on Linux (including WSL) or macOS.",
|
|
17
|
+
};
|
|
13
18
|
if (error.code === "io")
|
|
14
19
|
return {
|
|
15
20
|
category: "execution_failure",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
|
-
import { lstat } from "node:fs/promises";
|
|
3
|
-
import { join } from "node:path";
|
|
2
|
+
import { lstat, readFile } from "node:fs/promises";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
4
|
import { resolveRef } from "isomorphic-git";
|
|
5
5
|
/**
|
|
6
6
|
* Read Git metadata for a directory using isomorphic-git.
|
|
@@ -19,15 +19,46 @@ export const readReferenceSourceVcs = async (root, signal) => {
|
|
|
19
19
|
: { kind: "unknown", head: null, dirty: null };
|
|
20
20
|
}
|
|
21
21
|
try {
|
|
22
|
-
const head = await
|
|
22
|
+
const head = await resolveSourceHead(root);
|
|
23
23
|
if (isAborted(signal))
|
|
24
24
|
return { kind: "unknown", head: null, dirty: null };
|
|
25
25
|
return { kind: "git", head, dirty: null };
|
|
26
26
|
}
|
|
27
|
-
catch {
|
|
27
|
+
catch (cause) {
|
|
28
|
+
// Unresolvable refs mean VCS state is unknown, not absent.
|
|
29
|
+
void cause;
|
|
28
30
|
return { kind: "unknown", head: null, dirty: null };
|
|
29
31
|
}
|
|
30
32
|
};
|
|
33
|
+
const resolveSourceHead = async (root) => {
|
|
34
|
+
const dotgit = join(root, ".git");
|
|
35
|
+
if (!(await lstat(dotgit)).isFile())
|
|
36
|
+
return resolveRef({ fs, dir: root, ref: "HEAD" });
|
|
37
|
+
const pointer = (await readFile(dotgit, "utf8")).replace(/\r?\n$/u, "");
|
|
38
|
+
if (!pointer.startsWith("gitdir: ") || pointer.length === 8)
|
|
39
|
+
throw new Error("Invalid Git directory pointer");
|
|
40
|
+
const gitdir = resolve(root, pointer.slice(8));
|
|
41
|
+
let commonDirectory;
|
|
42
|
+
try {
|
|
43
|
+
commonDirectory = resolve(gitdir, (await readFile(join(gitdir, "commondir"), "utf8")).replace(/\r?\n$/u, ""));
|
|
44
|
+
}
|
|
45
|
+
catch (cause) {
|
|
46
|
+
if (errorCode(cause) !== "ENOENT")
|
|
47
|
+
throw cause;
|
|
48
|
+
return resolveRef({ fs, dir: root, gitdir, ref: "HEAD" });
|
|
49
|
+
}
|
|
50
|
+
const head = (await readFile(join(gitdir, "HEAD"), "utf8")).trim();
|
|
51
|
+
if (!head.startsWith("ref: "))
|
|
52
|
+
return resolveRef({ fs, dir: root, gitdir, ref: "HEAD" });
|
|
53
|
+
const ref = head.slice(5);
|
|
54
|
+
const privateRef = ["refs/bisect/", "refs/rewritten/", "refs/worktree/"].some((prefix) => ref.startsWith(prefix));
|
|
55
|
+
return resolveRef({
|
|
56
|
+
fs,
|
|
57
|
+
dir: root,
|
|
58
|
+
gitdir: privateRef ? gitdir : commonDirectory,
|
|
59
|
+
ref,
|
|
60
|
+
});
|
|
61
|
+
};
|
|
31
62
|
const errorCode = (cause) => typeof cause === "object" && cause !== null && "code" in cause
|
|
32
63
|
? String(cause.code)
|
|
33
64
|
: undefined;
|