rea-agents 4.0.0 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -30
- package/bridge/ghidra/ReaGhidraBridge.java +358 -15
- package/bridge/ghidra/ReaGhidraExtensions.java +113 -0
- package/bridge/ghidra/ReaGhidraPrepareCom.java +32 -0
- package/dist/android/AndroidTargetSnapshot.js +34 -0
- package/dist/android/JadxAnalysis.js +191 -0
- package/dist/android/JadxConfiguration.js +41 -0
- package/dist/android/JadxMcpTransport.js +145 -0
- package/dist/android/JadxProtocol.js +101 -0
- package/dist/android/JadxProvider.js +170 -0
- package/dist/android/JadxRelease.js +19 -0
- package/dist/android/JadxSession.js +97 -0
- package/dist/application/AnalysisContextQueries.js +2 -1
- package/dist/application/AnalysisProviderEvaluation.js +5 -3
- package/dist/application/AnalysisProviderRegistry.js +2 -1
- package/dist/application/AnalysisSnapshotCache.js +4 -1
- package/dist/application/AnalysisSnapshotFiles.js +1 -1
- package/dist/application/AndroidAnalysisPort.js +1 -0
- package/dist/application/AndroidAnalysisService.js +37 -0
- package/dist/application/ArtifactExtraction.js +7 -4
- package/dist/application/ArtifactGraphConstruction.js +10 -17
- package/dist/application/ArtifactInventory/scanCanonical.js +8 -7
- package/dist/application/BinarySession.js +16 -3
- package/dist/application/BinarySessionExecution.js +4 -1
- package/dist/application/BinarySessionOpen.js +3 -2
- package/dist/application/BinarySessionRecords.js +9 -3
- package/dist/application/BinaryTargetResolver.js +25 -6
- package/dist/application/BrowserObservationService.js +2 -1
- package/dist/application/BrowserScenarioCaptureService.js +2 -1
- package/dist/application/BrowserScenarioEvidence.js +2 -2
- package/dist/application/CallPathTracing.js +2 -1
- package/dist/application/CapabilityInventory.js +18 -0
- package/dist/application/ClientConfigPath.js +3 -1
- package/dist/application/ClientConfigurationDocument.js +11 -1
- package/dist/application/ClientRegistrationStatus.js +8 -1
- package/dist/application/CompositeProvider.js +1 -1
- package/dist/application/DirectAnalysis.js +23 -7
- package/dist/application/DirectAnalysisStatus.js +3 -3
- package/dist/application/Doctor.js +48 -8
- package/dist/application/DoctorDiagnostics.js +7 -5
- package/dist/application/DoctorScope.js +1 -1
- package/dist/application/ElectronActiveEvidence.js +2 -2
- package/dist/application/ElectronActiveObservationService.js +2 -1
- package/dist/application/ElectronBoundaryAnalysis.js +1 -1
- package/dist/application/ElectronObservationService.js +2 -1
- package/dist/application/EnhancedLiteralTracing.js +2 -1
- package/dist/application/EnhancedToolTypes.js +2 -1
- package/dist/application/EnhancedTools.js +3 -1
- package/dist/application/EvidenceBundleCommands.js +2 -1
- package/dist/application/EvidenceBundleFiles.js +1 -1
- package/dist/application/EvidenceInputResolver.js +30 -0
- package/dist/application/EvidenceLedger.js +2 -1
- package/dist/application/FirmwareAnalysisPort.js +1 -0
- package/dist/application/FirmwareAnalysisService.js +35 -0
- package/dist/application/FunctionAnalysisEvidence.js +32 -0
- package/dist/application/InventoryProjectionEvidence.js +2 -1
- package/dist/application/JavaScriptApplicationService.js +50 -3
- package/dist/application/JavaScriptApplicationWorkflowService.js +2 -1
- package/dist/application/JavaScriptArtifactAnalysis.js +4 -2
- package/dist/application/JavaScriptArtifactFiles.js +4 -2
- package/dist/application/JavaScriptArtifactPathResolution.js +6 -2
- package/dist/application/JavaScriptJsonModules.js +3 -2
- package/dist/application/JavaScriptModuleRelationships.js +4 -2
- package/dist/application/JavaScriptRuntimeObservationService.js +2 -1
- package/dist/application/JavaScriptRuntimeReconciliationService.js +2 -1
- package/dist/application/JavaScriptSemanticGraphProjection.js +1 -1
- package/dist/application/JavaScriptSemanticTraceService.js +2 -1
- package/dist/application/JsonFiles.js +1 -1
- package/dist/application/LazyAnalysisProvider.js +3 -1
- package/dist/application/LinuxHopper.js +12 -4
- package/dist/application/MacHopper.js +20 -7
- package/dist/application/ManagedApplicationGraphService.js +2 -1
- package/dist/application/ManagedMemberComparisonService.js +3 -1
- package/dist/application/ManagedNativeVerificationService.js +2 -1
- package/dist/application/ManagedReconstructionService.js +2 -1
- package/dist/application/NativeCallRoutes.js +1 -1
- package/dist/application/NativeDispatchMetadataInspection.js +1 -1
- package/dist/application/NativeUiActionTrace.js +2 -1
- package/dist/application/NativeValueTrace.js +1 -1
- package/dist/application/ProcessCaptureError.js +1 -1
- package/dist/application/ProcessCaptureJournal.js +3 -1
- package/dist/application/ProcessCaptureLifecycle.js +6 -3
- package/dist/application/ProcessCli.js +9 -5
- package/dist/application/ProcessEvidence.js +2 -6
- package/dist/application/ProcessHarness.js +3 -2
- package/dist/application/ProcessNormalization.js +12 -5
- package/dist/application/ProcessSampling.js +3 -1
- package/dist/application/ReconstructionCoverageService.js +2 -1
- package/dist/application/ReconstructionObligationLedgerService.js +2 -1
- package/dist/application/ReferenceSourceImportEntries.js +2 -0
- package/dist/application/ReferenceSourceImportPolicy.js +4 -2
- package/dist/application/ReferenceSourceVcsAdapter.js +35 -4
- package/dist/application/SessionProviderRouter.js +4 -1
- package/dist/application/Setup.js +1 -128
- package/dist/application/SetupClientConfiguration.js +17 -6
- package/dist/application/SetupHost.js +111 -0
- package/dist/application/SetupRegistrationEnvironment.js +1 -2
- package/dist/application/SetupSkill.js +9 -3
- package/dist/application/SetupTypes.js +17 -0
- package/dist/application/StoreFileLock.js +7 -2
- package/dist/application/SupportedClients.js +8 -0
- package/dist/application/Uninstall.js +9 -4
- package/dist/application/UpdateRuntime.js +5 -2
- package/dist/application/WindowsCapabilities.js +7 -7
- package/dist/application/runtime.js +3 -1
- package/dist/artifacts/ArtifactProvider.js +3 -1
- package/dist/artifacts/DirectoryArtifactReader.js +2 -0
- package/dist/artifacts/NativeDmgArtifactReader.js +10 -3
- package/dist/artifacts/NibArchive.js +4 -2
- package/dist/artifacts/SafeOutputTree.js +26 -10
- package/dist/artifacts/ZipArtifactReader.js +1 -0
- package/dist/browser/BrowserProcessStartup.js +3 -1
- package/dist/browser/CdpAuthorizedMainFrame.js +1 -1
- package/dist/browser/CdpBrowserProvider.js +4 -1
- package/dist/browser/CdpCaptureDocuments.js +3 -1
- package/dist/browser/CdpCaptureEventHandlers.js +6 -2
- package/dist/browser/CdpCaptureStorageFingerprints.js +1 -1
- package/dist/browser/CdpCaptureValues.js +6 -2
- package/dist/browser/CdpConnection.js +8 -6
- package/dist/browser/CdpElectronInspection.js +3 -3
- package/dist/browser/CdpElectronProvider.js +4 -1
- package/dist/browser/CdpElectronScripts.js +2 -2
- package/dist/browser/CdpEndpoint.js +22 -10
- package/dist/browser/CdpObservationSession.js +2 -1
- package/dist/browser/CdpOptionalCommand.js +1 -1
- package/dist/browser/CdpPageCapture.js +2 -1
- package/dist/browser/CdpSafeMetadata.js +53 -8
- package/dist/browser/CdpScreenshot.js +1 -1
- package/dist/browser/CdpTargetSession.js +8 -5
- package/dist/browser/CdpWebMcpDiscovery.js +1 -1
- package/dist/browser/ElectronFileScope.js +9 -3
- package/dist/browser/JavaScriptRuntimeScope.js +3 -1
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +3 -1
- package/dist/browser/PlaywrightElectronActiveActions.js +1 -1
- package/dist/browser/PlaywrightElectronActiveProvider.js +6 -2
- package/dist/browser/PlaywrightExecutionBoundary.js +1 -1
- package/dist/browser/PlaywrightScenarioArtifacts.js +10 -5
- package/dist/browser/PlaywrightScenarioBrowser.js +3 -1
- package/dist/browser/PlaywrightScenarioEvents.js +6 -2
- package/dist/browser/PlaywrightScenarioSession.js +5 -2
- package/dist/browser/V8InspectorEndpoint.js +2 -1
- package/dist/browser/V8InspectorProvider.js +6 -1
- package/dist/browser/WebSourceMapFetcher.js +24 -11
- package/dist/cli/androidCommands.js +81 -0
- package/dist/{cliApplicationCommands.js → cli/applicationCommands.js} +18 -16
- package/dist/{cliBrowserAdvancedCommands.js → cli/browserAdvancedCommands.js} +13 -16
- package/dist/{cliBrowserCommands.js → cli/browserCommands.js} +9 -9
- package/dist/cli/commandCancellation.js +24 -0
- package/dist/cli/coreAnalysisCommands.js +110 -17
- package/dist/{cliElectronCommands.js → cli/electronCommands.js} +14 -13
- package/dist/cli/firmwareCommands.js +75 -0
- package/dist/{cliSetup.js → cli/interactiveSetup.js} +1 -1
- package/dist/cli/javascriptApplicationAnalysis.js +1 -1
- package/dist/cli/managedCommands.js +1 -1
- package/dist/cli/managedProjectGraphCommand.js +1 -1
- package/dist/cli/options.js +7 -1
- package/dist/{cliProcessCommands.js → cli/processCommands.js} +3 -3
- package/dist/cli/referenceSourceImportStatus.js +10 -0
- package/dist/cli/setupCommands.js +4 -2
- package/dist/cli/utilityCommands.js +3 -2
- package/dist/cli.js +10 -15
- package/dist/cliBrowserContext.js +1 -1
- package/dist/cliBrowserScenarioCommands.js +2 -1
- package/dist/cliCommandNames.js +11 -2
- package/dist/cliEvidenceCommands.js +2 -1
- package/dist/cliJavaScriptRuntimeCommands.js +2 -1
- package/dist/cliJsonInput.js +26 -11
- package/dist/cliLogging.js +2 -1
- package/dist/cliOutput.js +15 -16
- package/dist/config/environment.js +11 -1
- package/dist/config/parseConfig.js +7 -1
- package/dist/config/parsers.js +1 -1
- package/dist/contracts/androidToolContracts.js +77 -0
- package/dist/contracts/applicationToolContracts.js +32 -5
- package/dist/contracts/applicationWorkflowInputContracts.js +13 -13
- package/dist/contracts/artifactComparisonExample.js +7 -14
- package/dist/contracts/enhancedToolContracts.js +31 -0
- package/dist/contracts/errorSchemas.js +4 -2
- package/dist/contracts/evidenceInputContracts.js +13 -0
- package/dist/contracts/firmwareToolContracts.js +38 -0
- package/dist/contracts/officialToolContracts.js +66 -0
- package/dist/contracts/promptContracts.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +4 -0
- package/dist/contracts/sessionToolContracts.js +43 -0
- package/dist/contracts/sessionToolSchemas.js +1 -1
- package/dist/contracts/toolContractExamples.js +5 -0
- package/dist/contracts/toolContractTypes.js +2 -0
- package/dist/contracts/toolContracts.js +7 -130
- package/dist/contracts/toolEffects.js +43 -0
- package/dist/contracts/toolOutputSchemaGroups.js +4 -0
- package/dist/contracts/toolOutputSchemaPrimitives.js +1 -0
- package/dist/doctorRuntime.js +5 -1
- package/dist/domain/analysisErrorBase.js +33 -0
- package/dist/domain/analysisErrorCore.js +60 -0
- package/dist/domain/analysisErrorPresentation.js +22 -2
- package/dist/domain/analysisErrorProjection.js +24 -3
- package/dist/domain/analysisSnapshot.js +1 -0
- package/dist/domain/androidAnalysis.js +141 -0
- package/dist/domain/appleAssetCatalog.js +1 -1
- package/dist/domain/artifactGraph.js +1 -0
- package/dist/domain/artifactInspection.js +19 -17
- package/dist/domain/artifactInventoryEvidence.js +20 -25
- package/dist/domain/artifactOperationError.js +16 -0
- package/dist/domain/browserObservation.js +12 -4
- package/dist/domain/browserObservationError.js +23 -0
- package/dist/domain/browserScenario.js +1 -1
- package/dist/domain/browserScenarioCapture.js +1 -1
- package/dist/domain/browserScenarioDiff.js +1 -1
- package/dist/domain/browserScenarioNormalization.js +6 -11
- package/dist/domain/browserScenarioValues.js +3 -1
- package/dist/domain/callPath.js +47 -7
- package/dist/domain/canonicalDigest.js +65 -0
- package/dist/domain/canonicalOrdering.js +11 -0
- package/dist/domain/changedBehavior.js +8 -7
- package/dist/domain/comparisonSemantics.js +2 -4
- package/dist/domain/configurationErrors.js +25 -0
- package/dist/domain/dosCom.js +8 -0
- package/dist/domain/electronActiveObservation.js +3 -1
- package/dist/domain/electronStaticAnalysisBrowser.js +13 -23
- package/dist/domain/electronStaticAnalysisNative.js +2 -1
- package/dist/domain/electronStaticAnalysisValues.js +23 -3
- package/dist/domain/evidence.js +3 -11
- package/dist/domain/evidenceErrors.js +30 -0
- package/dist/domain/firmwareAnalysis.js +121 -0
- package/dist/domain/functionComparison.js +4 -2
- package/dist/domain/functionComparisonDimensions.js +6 -4
- package/dist/domain/functionComparisonNormalization.js +8 -1
- package/dist/domain/functionComparisonResults.js +1 -4
- package/dist/domain/hopperErrors.js +78 -0
- package/dist/domain/hopperValues.js +2 -1
- package/dist/domain/interfaceBuilderGraph.js +3 -1
- package/dist/domain/javascriptApplicationChangeGraph.js +2 -2
- package/dist/domain/javascriptApplicationGraph.js +13 -22
- package/dist/domain/javascriptApplicationVersionComparison.js +3 -11
- package/dist/domain/javascriptApplicationVersionItems.js +3 -3
- package/dist/domain/javascriptApplicationVersionKeys.js +1 -1
- package/dist/domain/javascriptAstFingerprint.js +1 -1
- package/dist/domain/javascriptExportShapeComparison.js +1 -2
- package/dist/domain/javascriptExportShapeSelection.js +1 -1
- package/dist/domain/javascriptExportShapeVariants.js +7 -3
- package/dist/domain/javascriptFeatureSeed.js +29 -9
- package/dist/domain/javascriptFeatureTrace.js +9 -13
- package/dist/domain/javascriptFeatureTraversal.js +2 -1
- package/dist/domain/javascriptNativeHandoff.js +2 -1
- package/dist/domain/javascriptRuntimeLoadState.js +2 -2
- package/dist/domain/javascriptRuntimeReconciliationActive.js +3 -10
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +2 -2
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +4 -3
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +8 -14
- package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -4
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +5 -2
- package/dist/domain/javascriptRuntimeStaticCandidates.js +8 -4
- package/dist/domain/javascriptSemanticAnalysis.js +40 -3
- package/dist/domain/javascriptSemanticCallResolution.js +2 -1
- package/dist/domain/javascriptSemanticChildProcesses.js +2 -1
- package/dist/domain/javascriptSemanticDataEffects.js +2 -1
- package/dist/domain/javascriptSemanticFingerprints.js +1 -1
- package/dist/domain/javascriptSemanticGraph.js +23 -28
- package/dist/domain/javascriptSemanticPrimitives.js +9 -2
- package/dist/domain/javascriptSemanticProjection.js +2 -1
- package/dist/domain/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascriptSemanticProvenance.js +1 -1
- package/dist/domain/javascriptSemanticQuery.js +7 -8
- package/dist/domain/javascriptSemanticQueryAssessment.js +1 -2
- package/dist/domain/javascriptSemanticQueryIdentity.js +1 -2
- package/dist/domain/javascriptSemanticReturns.js +2 -1
- package/dist/domain/javascriptSemanticValues.js +50 -16
- package/dist/domain/javascriptSourceParser.js +4 -2
- package/dist/domain/javascriptStaticAnalysis.js +1 -1
- package/dist/domain/javascriptStaticAnalysisBundler.js +2 -1
- package/dist/domain/javascriptStaticAnalysisCalls.js +14 -6
- package/dist/domain/javascriptStaticAnalysisHelpers.js +31 -4
- package/dist/domain/jsonShape.js +6 -2
- package/dist/domain/managedMemberComparison.js +1 -0
- package/dist/domain/managedMemberComparisonItems.js +2 -0
- package/dist/domain/managedNativeVerificationMatch.js +5 -3
- package/dist/domain/nativeDataType.js +2 -0
- package/dist/domain/nativeFunctionAnnotations.js +43 -0
- package/dist/domain/nativeLoadImage.js +95 -0
- package/dist/domain/nativeMetadataRecovery.js +55 -0
- package/dist/domain/processCapture.js +0 -1
- package/dist/domain/processEvidenceProvider.js +11 -0
- package/dist/domain/processTraceComparison.js +1 -1
- package/dist/domain/providerAdapterError.js +17 -0
- package/dist/domain/providerCleanupError.js +1 -1
- package/dist/domain/providerSelectionError.js +44 -0
- package/dist/domain/reconstructionUnknowns.js +1 -1
- package/dist/domain/reconstructionVerification.js +22 -8
- package/dist/domain/referenceSourceClassification.js +5 -6
- package/dist/domain/referenceSourceGraph.js +9 -17
- package/dist/domain/referenceSourceImportParsing.js +38 -23
- package/dist/domain/runtimeIdentification.js +1 -1
- package/dist/domain/runtimeVersion.js +4 -7
- package/dist/domain/safeJson.js +13 -0
- package/dist/domain/sourceToBundleComparison.js +5 -7
- package/dist/domain/sourceToBundleSignals.js +6 -6
- package/dist/domain/staticRuntimeCorrelation.js +9 -7
- package/dist/domain/unknownRegistryError.js +10 -0
- package/dist/domain/webBundleAnalyzerAst.js +22 -5
- package/dist/domain/webBundleAnalyzerInspection.js +20 -14
- package/dist/dotnet/ManagedMemberRows.js +1 -1
- package/dist/dotnet/ManagedMetadataHeaps.js +3 -2
- package/dist/dotnet/ManagedMetadataInventoryRows.js +4 -2
- package/dist/dotnet/ManagedMethodBodyReader.js +8 -1
- package/dist/dotnet/ManagedStaticProvider.js +3 -1
- package/dist/firmware/FirmwareCommand.js +163 -0
- package/dist/firmware/FirmwareFiles.js +190 -0
- package/dist/firmware/FirmwareProvider.js +258 -0
- package/dist/firmware/FirmwarePublication.js +84 -0
- package/dist/firmware/FirmwareRelease.js +32 -0
- package/dist/firmware/FirmwareReports.js +223 -0
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +5 -5
- package/dist/ghidra/GhidraAnalysisProfile.js +37 -8
- package/dist/ghidra/GhidraClient.js +52 -6
- package/dist/ghidra/GhidraDiagnostics.js +3 -0
- package/dist/ghidra/GhidraDoctor.js +38 -14
- package/dist/ghidra/GhidraFunctionValues.js +10 -4
- package/dist/ghidra/GhidraInstallation.js +10 -4
- package/dist/ghidra/GhidraInventoryValues.js +39 -2
- package/dist/ghidra/GhidraLauncher.js +91 -26
- package/dist/ghidra/GhidraLoadImageValues.js +199 -0
- package/dist/ghidra/GhidraProvider.js +129 -13
- package/dist/ghidra/GhidraProviderCapabilities.js +52 -15
- package/dist/ghidra/GhidraRequestQueue.js +2 -2
- package/dist/ghidra/GhidraSessionError.js +31 -4
- package/dist/ghidra/GhidraSessionValues.js +10 -7
- package/dist/ghidra/GhidraTargetSnapshot.js +16 -2
- package/dist/ghidra/GhidraTransport.js +12 -0
- package/dist/ghidra/extensions/GhidraExtensionFailures.js +20 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +170 -0
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +21 -0
- package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +84 -0
- package/dist/hopper/BridgeLauncher.js +4 -2
- package/dist/hopper/HopperAnalysisProfile.js +7 -2
- package/dist/hopper/HopperCleanup.js +55 -9
- package/dist/hopper/HopperClient.js +14 -4
- package/dist/hopper/HopperProcessDiagnostic.js +1 -1
- package/dist/hopper/HopperProvider.js +8 -4
- package/dist/hopper/HopperRequestQueue.js +7 -3
- package/dist/hopper/HopperSessionValues.js +1 -1
- package/dist/hopper/HopperSocketConnection.js +1 -1
- package/dist/hopper/HopperTargetLease.js +23 -15
- package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +7 -8
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -2
- package/dist/hopper/protocol.js +8 -8
- package/dist/ida/IdaConfiguration.js +56 -0
- package/dist/ida/IdaDoctor.js +53 -0
- package/dist/ida/IdaInput.js +62 -0
- package/dist/ida/IdaMcpConnection.js +111 -0
- package/dist/ida/IdaOperationRunner.js +299 -0
- package/dist/ida/IdaProtocolValues.js +178 -0
- package/dist/ida/IdaProvider.js +126 -0
- package/dist/ida/IdaProviderCapabilities.js +60 -0
- package/dist/ida/IdaSessionClient.js +306 -0
- package/dist/ida/IdaWorkspace.js +54 -0
- package/dist/main/shutdown.js +21 -1
- package/dist/main/startup.js +1 -1
- package/dist/main/transport.js +8 -4
- package/dist/main.js +5 -2
- package/dist/native/AppleDispatchMetadata.js +31 -10
- package/dist/native/NativeMacOSProvider.js +87 -15
- package/dist/native/NativeMachoInspection.js +42 -12
- package/dist/native/NativeUiHelperRuntime.js +7 -1
- package/dist/native/NativeUiObservation.js +6 -2
- package/dist/native/parsers/demangle.js +1 -1
- package/dist/native/parsers/dyldInfo.js +3 -3
- package/dist/native/parsers/otool.js +4 -1
- package/dist/native/parsers/plist.js +11 -3
- package/dist/process/PrivateRuntimeRoot.js +13 -3
- package/dist/process/ProcessOwnership.js +5 -73
- package/dist/process/ProcessOwnershipObservation.js +62 -2
- package/dist/process/ProcessOwnershipProcessTree.js +13 -0
- package/dist/process/ProviderProcess.js +24 -7
- package/dist/process/ProviderRunLineage.js +1 -1
- package/dist/process/WindowsAuthority.js +20 -1
- package/dist/reference/ReferenceSourceReaderEntries.js +5 -1
- package/dist/reference/ReferenceSourceReaderFile.js +1 -0
- package/dist/server/createServer.js +25 -2
- package/dist/server/mcpProgress.js +2 -1
- package/dist/server/promptCompletion.js +3 -3
- package/dist/server/registerAndroidTools.js +30 -0
- package/dist/server/registerApplicationTools/compareExportShapes.js +5 -1
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +7 -2
- package/dist/server/registerApplicationTools/compareVersions.js +5 -1
- package/dist/server/registerApplicationTools/traceFeature.js +7 -2
- package/dist/server/registerApplicationTools/traceSemantics.js +7 -2
- package/dist/server/registerEnhancedTools.js +28 -1
- package/dist/server/registerFirmwareTools.js +22 -0
- package/dist/server/registerFunctionComparisonTool.js +1 -1
- package/dist/server/registerInvestigationTools/helpers.js +2 -1
- package/dist/server/registerManagedTools.js +1 -1
- package/dist/server/registerManagedWorkflowTools/evidence.js +1 -1
- package/dist/server/registerOfficialTools.js +4 -1
- package/dist/server/registerProcessComparisonTool.js +5 -2
- package/dist/server/registerSessionTools.js +3 -1
- package/dist/server/runDerivedOperation.js +1 -1
- package/dist/server/sessionAvailabilityPolicy.js +3 -0
- package/dist/server/sessionEvidence.js +1 -1
- package/dist/server/toolResult.js +2 -1
- package/dist/windows/WindowsNativeLoader.js +108 -0
- package/dist/windows/WindowsOwnedProcess.js +168 -0
- package/dist/windows/WindowsPrivateRuntime.js +137 -0
- package/install.sh +4 -6
- package/native/windows/README.md +102 -0
- package/native/windows/build/manifest.json +9 -0
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +38 -24
- package/scripts/rea.mjs +1 -1
- package/scripts/verify-windows-native-artifact.mjs +39 -0
- package/skills/reverse-engineer-anything/SKILL.md +92 -24
- package/skills/reverse-engineer-anything/references/android-applications.md +31 -0
- package/skills/reverse-engineer-anything/references/javascript-applications.md +19 -2
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +52 -4
- package/dist/browser/CdpCanonicalJsonDigest.js +0 -9
- package/dist/domain/errors.js +0 -324
|
@@ -4,9 +4,13 @@ import { randomUUID } from "node:crypto";
|
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { _electron as electron } from "playwright-core";
|
|
6
6
|
import { electronActiveObservationResultSchema, } from "../domain/electronActiveObservation.js";
|
|
7
|
-
import { AnalysisError
|
|
7
|
+
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
|
8
|
+
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
|
9
|
+
import { ProviderAdapterError } from "../domain/providerAdapterError.js";
|
|
8
10
|
import { err, ok } from "../domain/result.js";
|
|
9
|
-
import { cleanupOwnedProcessGroup, cleanupWindowsProcessTree,
|
|
11
|
+
import { cleanupOwnedProcessGroup, cleanupWindowsProcessTree, verifyNoTokenOwnedProcesses, } from "../process/ProcessOwnership.js";
|
|
12
|
+
import { observeOwnedProcessLineage } from "../process/ProcessOwnershipObservation.js";
|
|
13
|
+
import { selectCapturedProcessGroupIds } from "../process/ProcessOwnershipProcessTree.js";
|
|
10
14
|
import { runElectronActions, readApplicationState, runWithExecutionLimits, } from "./PlaywrightElectronActiveActions.js";
|
|
11
15
|
const OPERATION = "capture_electron_scenario";
|
|
12
16
|
const STARTUP_TIMEOUT_MS = 60_000;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AnalysisCancelledError, AnalysisTimeoutError, } from "../domain/
|
|
1
|
+
import { AnalysisCancelledError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
|
|
2
2
|
const OPERATION = "capture_browser_scenario";
|
|
3
3
|
export const withPlaywrightExecutionBoundary = (work, timeoutMs, signal) => {
|
|
4
4
|
if (timeoutMs !== undefined && timeoutMs <= 0)
|
|
@@ -44,7 +44,8 @@ const captureScreenshot = async (page) => {
|
|
|
44
44
|
},
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
|
-
catch {
|
|
47
|
+
catch (cause) {
|
|
48
|
+
void cause;
|
|
48
49
|
return missing("screenshot capture failed");
|
|
49
50
|
}
|
|
50
51
|
};
|
|
@@ -53,7 +54,8 @@ const captureDom = async (input) => {
|
|
|
53
54
|
try {
|
|
54
55
|
return textArtifact(secrets.redact(await page.content()));
|
|
55
56
|
}
|
|
56
|
-
catch {
|
|
57
|
+
catch (cause) {
|
|
58
|
+
void cause;
|
|
57
59
|
return missing("DOM capture failed");
|
|
58
60
|
}
|
|
59
61
|
};
|
|
@@ -63,7 +65,8 @@ const captureAccessibility = async (input) => {
|
|
|
63
65
|
const text = await page.locator("html").ariaSnapshot();
|
|
64
66
|
return textArtifact(secrets.redact(text));
|
|
65
67
|
}
|
|
66
|
-
catch {
|
|
68
|
+
catch (cause) {
|
|
69
|
+
void cause;
|
|
67
70
|
return missing("accessibility capture failed");
|
|
68
71
|
}
|
|
69
72
|
};
|
|
@@ -99,7 +102,8 @@ const captureHistory = async (page, secrets) => {
|
|
|
99
102
|
};
|
|
100
103
|
return { state: "captured", value };
|
|
101
104
|
}
|
|
102
|
-
catch {
|
|
105
|
+
catch (cause) {
|
|
106
|
+
void cause;
|
|
103
107
|
return missing("history capture failed");
|
|
104
108
|
}
|
|
105
109
|
};
|
|
@@ -135,7 +139,8 @@ const captureStorage = async (input) => {
|
|
|
135
139
|
};
|
|
136
140
|
return { state: "captured", value };
|
|
137
141
|
}
|
|
138
|
-
catch {
|
|
142
|
+
catch (cause) {
|
|
143
|
+
void cause;
|
|
139
144
|
return missing("storage capture failed");
|
|
140
145
|
}
|
|
141
146
|
};
|
|
@@ -2,7 +2,7 @@ import { chmod, mkdtemp, rm } from "node:fs/promises";
|
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { join, resolve } from "node:path";
|
|
4
4
|
import { chromium, } from "playwright-core";
|
|
5
|
-
import { BrowserObservationError } from "../domain/
|
|
5
|
+
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
|
6
6
|
import { withPlaywrightExecutionBoundary } from "./PlaywrightExecutionBoundary.js";
|
|
7
7
|
const OPERATION = "capture_browser_scenario";
|
|
8
8
|
const allowedBrowserEnvironment = (environment) => {
|
|
@@ -133,6 +133,8 @@ export const closePlaywrightScenarioBrowser = async ({ context, browser, profile
|
|
|
133
133
|
await rm(profilePath, { recursive: true, force: true, maxRetries: 3 });
|
|
134
134
|
}
|
|
135
135
|
})();
|
|
136
|
+
// best-effort cleanup: the bounded execution boundary below observes the
|
|
137
|
+
// same cleanup promise; this early attachment only prevents unhandled rejection.
|
|
136
138
|
void cleanup.catch(() => undefined);
|
|
137
139
|
// The shared execution boundary rejects cancellation/timeouts instead of
|
|
138
140
|
// returning a successful capture whose browser or profile may still exist.
|
|
@@ -24,9 +24,10 @@ export class PlaywrightScenarioEvents {
|
|
|
24
24
|
try {
|
|
25
25
|
return this.pages.has(request.frame().page());
|
|
26
26
|
}
|
|
27
|
-
catch {
|
|
27
|
+
catch (cause) {
|
|
28
28
|
// Initial popup navigations can lack a frame. Never guess ownership
|
|
29
29
|
// from a URL in a shared context; connect captures are attach-limited.
|
|
30
|
+
void cause;
|
|
30
31
|
return false;
|
|
31
32
|
}
|
|
32
33
|
};
|
|
@@ -236,6 +237,9 @@ export class PlaywrightScenarioEvents {
|
|
|
236
237
|
suggested_filename: this.secrets.redact(download.suggestedFilename()),
|
|
237
238
|
url: this.safeUrl(download.url()),
|
|
238
239
|
});
|
|
239
|
-
void download.cancel().catch(() =>
|
|
240
|
+
void download.cancel().catch((cause) => {
|
|
241
|
+
// best-effort cleanup: download cancellation must not reject unhandled.
|
|
242
|
+
void cause;
|
|
243
|
+
});
|
|
240
244
|
}
|
|
241
245
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {} from "playwright-core";
|
|
2
|
-
import { BrowserObservationError } from "../domain/
|
|
2
|
+
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
|
3
3
|
import { BrowserScenarioSecrets } from "./BrowserScenarioSecrets.js";
|
|
4
4
|
import { closePlaywrightScenarioBrowser, openPlaywrightScenarioBrowser, } from "./PlaywrightScenarioBrowser.js";
|
|
5
5
|
import { performPlaywrightScenarioAction } from "./PlaywrightScenarioActions.js";
|
|
@@ -95,7 +95,10 @@ export class PlaywrightScenarioSession {
|
|
|
95
95
|
catch (cause) {
|
|
96
96
|
void opening
|
|
97
97
|
.then((lateOpened) => closePlaywrightScenarioBrowser(lateOpened, options.signal))
|
|
98
|
-
.catch(() =>
|
|
98
|
+
.catch((cause) => {
|
|
99
|
+
// best-effort cleanup: late-open cleanup must not mask the boundary failure.
|
|
100
|
+
void cause;
|
|
101
|
+
});
|
|
99
102
|
throw cause;
|
|
100
103
|
}
|
|
101
104
|
try {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { BrowserObservationError
|
|
2
|
+
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
|
3
|
+
import {} from "../domain/browserObservationErrors.js";
|
|
3
4
|
import { parseCdpEndpointValue, readCdpJson } from "./CdpEndpoint.js";
|
|
4
5
|
const versionSchema = z
|
|
5
6
|
.object({
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { javascriptRuntimeObservationSchema, javascriptRuntimeTargetListSchema, } from "../domain/javascriptRuntimeObservation.js";
|
|
2
|
-
import { AnalysisError
|
|
2
|
+
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
|
3
|
+
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
|
4
|
+
import { ProviderAdapterError } from "../domain/providerAdapterError.js";
|
|
5
|
+
import {} from "../domain/browserObservationErrors.js";
|
|
3
6
|
import { err, ok } from "../domain/result.js";
|
|
4
7
|
import { numberValue, recordValue, stringValue, delayWithCancellation, } from "./CdpCaptureValues.js";
|
|
5
8
|
import { CdpConnection } from "./CdpConnection.js";
|
|
@@ -104,6 +107,8 @@ export class V8InspectorProvider {
|
|
|
104
107
|
}
|
|
105
108
|
export const closeInspectorConnection = async (connection, signal) => {
|
|
106
109
|
const closing = connection.close();
|
|
110
|
+
// best-effort cleanup: the race below observes the close; this only prevents
|
|
111
|
+
// unhandled rejection when the caller abandons the close via cancellation.
|
|
107
112
|
void closing.catch(() => undefined);
|
|
108
113
|
// CdpConnection.close has its own one second transport bound. Do not make a
|
|
109
114
|
// cancelled caller wait for that fallback.
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { AnyMap, eachMapping } from "@jridgewell/trace-mapping";
|
|
3
3
|
import { sanitizeBrowserUrl } from "../domain/browserObservation.js";
|
|
4
|
+
import { isUrlLikeModuleSpecifier } from "../domain/webBundleAnalyzerAst.js";
|
|
4
5
|
import { analyzeParsedJavaScriptSemantics } from "../domain/javascriptSemanticAnalysis.js";
|
|
5
6
|
import { parseJavaScriptSource } from "../domain/javascriptSourceParser.js";
|
|
6
7
|
import { hasValidSourceMapContents } from "../domain/sourceMapContents.js";
|
|
7
8
|
import { webSourceMapsSchema } from "../domain/webBundleAnalysis.js";
|
|
8
9
|
import { createWebTextArtifact } from "../domain/webContentArtifact.js";
|
|
10
|
+
import { safeParseJson } from "../domain/safeJson.js";
|
|
9
11
|
/** Fetch and validate approved source maps without browser credentials. */
|
|
10
12
|
export const fetchWebSourceMaps = async (requests, input, signal, host = { fetch: globalThis.fetch }) => {
|
|
11
13
|
const items = [];
|
|
@@ -126,7 +128,8 @@ const normalizeSourceMap = (request, text, fetchedUrl) => {
|
|
|
126
128
|
limitation: `Module edges are incomplete: ${modules.incomplete.length} of ${originalSources.filter(({ artifact }) => artifact !== null).length} original sources could not be parsed in full (${modules.incomplete.join(", ")}).`,
|
|
127
129
|
};
|
|
128
130
|
}
|
|
129
|
-
catch {
|
|
131
|
+
catch (cause) {
|
|
132
|
+
void cause;
|
|
130
133
|
return emptySourceMapItem(request, "invalid", "Source-map mappings could not be decoded safely.");
|
|
131
134
|
}
|
|
132
135
|
};
|
|
@@ -178,13 +181,10 @@ const originalModuleEdges = (sources) => {
|
|
|
178
181
|
return { edges, incomplete };
|
|
179
182
|
};
|
|
180
183
|
const validSourceMapEnvelope = (text) => {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
parsed = JSON.parse(text);
|
|
184
|
-
}
|
|
185
|
-
catch {
|
|
184
|
+
const parsedResult = safeParseJson(text);
|
|
185
|
+
if (!parsedResult.ok)
|
|
186
186
|
return false;
|
|
187
|
-
|
|
187
|
+
const parsed = parsedResult.value;
|
|
188
188
|
if (!isRecord(parsed) || parsed.version !== 3)
|
|
189
189
|
return false;
|
|
190
190
|
if (typeof parsed.mappings === "string")
|
|
@@ -194,7 +194,11 @@ const validSourceMapEnvelope = (text) => {
|
|
|
194
194
|
const pending = [...parsed.sections];
|
|
195
195
|
while (pending.length > 0) {
|
|
196
196
|
const section = pending.pop();
|
|
197
|
-
if (!isRecord(section) ||
|
|
197
|
+
if (!isRecord(section) ||
|
|
198
|
+
!isRecord(section.offset) ||
|
|
199
|
+
!validSourceMapOffset(section.offset.line) ||
|
|
200
|
+
!validSourceMapOffset(section.offset.column) ||
|
|
201
|
+
!("map" in section))
|
|
198
202
|
return false;
|
|
199
203
|
const map = section.map;
|
|
200
204
|
if (!isRecord(map) || map.version !== 3)
|
|
@@ -207,6 +211,7 @@ const validSourceMapEnvelope = (text) => {
|
|
|
207
211
|
}
|
|
208
212
|
return true;
|
|
209
213
|
};
|
|
214
|
+
const validSourceMapOffset = (value) => typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
|
|
210
215
|
const validSourceMapLeaf = (map) => typeof map.mappings === "string" &&
|
|
211
216
|
Array.isArray(map.sources) &&
|
|
212
217
|
Array.isArray(map.names) &&
|
|
@@ -219,7 +224,9 @@ const approvedUrl = (value, allowedOrigins) => {
|
|
|
219
224
|
parsed.password === "" &&
|
|
220
225
|
allowedOrigins.includes(parsed.origin));
|
|
221
226
|
}
|
|
222
|
-
catch {
|
|
227
|
+
catch (cause) {
|
|
228
|
+
// Non-URL input is not an approved source-map URL.
|
|
229
|
+
void cause;
|
|
223
230
|
return false;
|
|
224
231
|
}
|
|
225
232
|
};
|
|
@@ -240,15 +247,21 @@ const sanitizeSource = (value) => {
|
|
|
240
247
|
try {
|
|
241
248
|
return sanitizeBrowserUrl(new URL(value).href).url;
|
|
242
249
|
}
|
|
243
|
-
catch {
|
|
250
|
+
catch (cause) {
|
|
251
|
+
// Non-URL sources are preserved verbatim.
|
|
252
|
+
void cause;
|
|
244
253
|
return value;
|
|
245
254
|
}
|
|
246
255
|
};
|
|
247
256
|
const resolveOriginalSource = (specifier, base) => {
|
|
257
|
+
if (!isUrlLikeModuleSpecifier(specifier))
|
|
258
|
+
return null;
|
|
248
259
|
try {
|
|
249
260
|
return sanitizeSource(new URL(specifier, base).href);
|
|
250
261
|
}
|
|
251
|
-
catch {
|
|
262
|
+
catch (cause) {
|
|
263
|
+
// Unresolvable source specifiers are represented by null.
|
|
264
|
+
void cause;
|
|
252
265
|
return null;
|
|
253
266
|
}
|
|
254
267
|
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { z } from "incur";
|
|
2
|
+
import { AndroidAnalysisService } from "../application/AndroidAnalysisService.js";
|
|
3
|
+
import { JadxProvider } from "../android/JadxProvider.js";
|
|
4
|
+
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
5
|
+
import { logCliCommand } from "../cliLogging.js";
|
|
6
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
7
|
+
import { withCommandCancellation } from "./commandCancellation.js";
|
|
8
|
+
/** Expose the same explicit APK requests through one-shot CLI commands. */
|
|
9
|
+
export const registerAndroidCommands = (cli, logger, environment) => {
|
|
10
|
+
const service = new AndroidAnalysisService(new JadxProvider(environment));
|
|
11
|
+
const execute = (name, operation, input) => withCommandCancellation((signal) => logCliCommand(logger, name, async () => {
|
|
12
|
+
const result = await service.execute(operation, input, { signal });
|
|
13
|
+
return result.ok ? result.value : projectAnalysisError(result.error);
|
|
14
|
+
}));
|
|
15
|
+
const path = z.string().describe("Local standalone APK path");
|
|
16
|
+
const className = z.string().describe("Exact fully qualified class name");
|
|
17
|
+
cli.command(CLI_COMMANDS.inspectAndroidPackage, {
|
|
18
|
+
description: "Inspect APK declarations and decoded manifest without executing it",
|
|
19
|
+
args: z.object({ path }),
|
|
20
|
+
run: ({ args }) => execute(CLI_COMMANDS.inspectAndroidPackage, "inspect_android_package", args),
|
|
21
|
+
});
|
|
22
|
+
cli.command(CLI_COMMANDS.searchAndroidClasses, {
|
|
23
|
+
description: "Search APK class names; empty query inventories all classes",
|
|
24
|
+
args: z.object({
|
|
25
|
+
path,
|
|
26
|
+
query: z
|
|
27
|
+
.string()
|
|
28
|
+
.describe("Case-sensitive class-name substring; empty lists all classes"),
|
|
29
|
+
}),
|
|
30
|
+
run: ({ args }) => execute(CLI_COMMANDS.searchAndroidClasses, "search_android_classes", args),
|
|
31
|
+
});
|
|
32
|
+
cli.command(CLI_COMMANDS.inspectAndroidClass, {
|
|
33
|
+
description: "Inspect one exact APK class's member inventory",
|
|
34
|
+
args: z.object({ path, className }),
|
|
35
|
+
run: ({ args }) => execute(CLI_COMMANDS.inspectAndroidClass, "inspect_android_class", {
|
|
36
|
+
path: args.path,
|
|
37
|
+
class_name: args.className,
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
cli.command(CLI_COMMANDS.inspectAndroidMethod, {
|
|
41
|
+
description: "Decompile one APK method with explicit overload selection",
|
|
42
|
+
args: z.object({
|
|
43
|
+
path,
|
|
44
|
+
className,
|
|
45
|
+
methodName: z.string().describe("Exact declared method name"),
|
|
46
|
+
}),
|
|
47
|
+
options: z.object({
|
|
48
|
+
overloadIndex: z
|
|
49
|
+
.number()
|
|
50
|
+
.int()
|
|
51
|
+
.nonnegative()
|
|
52
|
+
.optional()
|
|
53
|
+
.describe("Explicit zero-based index among same-name methods; required when ambiguous"),
|
|
54
|
+
}),
|
|
55
|
+
run: ({ args, options }) => execute(CLI_COMMANDS.inspectAndroidMethod, "inspect_android_method", {
|
|
56
|
+
path: args.path,
|
|
57
|
+
class_name: args.className,
|
|
58
|
+
method_name: args.methodName,
|
|
59
|
+
...(options.overloadIndex === undefined
|
|
60
|
+
? {}
|
|
61
|
+
: { overload_index: options.overloadIndex }),
|
|
62
|
+
}),
|
|
63
|
+
});
|
|
64
|
+
cli.command(CLI_COMMANDS.traceAndroidReferences, {
|
|
65
|
+
description: "Trace incoming APK class or unique-method references",
|
|
66
|
+
args: z.object({ path, className }),
|
|
67
|
+
options: z.object({
|
|
68
|
+
methodName: z
|
|
69
|
+
.string()
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("Unique declared method name; omit for class references"),
|
|
72
|
+
}),
|
|
73
|
+
run: ({ args, options }) => execute(CLI_COMMANDS.traceAndroidReferences, "trace_android_references", {
|
|
74
|
+
path: args.path,
|
|
75
|
+
class_name: args.className,
|
|
76
|
+
...(options.methodName === undefined
|
|
77
|
+
? {}
|
|
78
|
+
: { method_name: options.methodName }),
|
|
79
|
+
}),
|
|
80
|
+
});
|
|
81
|
+
};
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { Cli, z } from "incur";
|
|
2
|
-
import { compareApplicationVersionsEvidenceValidated, compareJavaScriptExportShapesEvidenceValidated, compareSourceToBundleEvidenceValidated, traceApplicationFeatureEvidenceValidated, } from "
|
|
3
|
-
import { traceJavaScriptSemanticsEvidenceValidated } from "
|
|
4
|
-
import { evaluateReconstructionCoverage, reconstructionCoverageEvaluationInputSchema, } from "
|
|
5
|
-
import { buildReconstructionObligationLedgerEvidenceValidated } from "
|
|
6
|
-
import { CLI_COMMANDS } from "
|
|
7
|
-
import { parseCliJsonInput } from "
|
|
8
|
-
import { logCliCommand } from "
|
|
9
|
-
import { AnalysisInputError
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
2
|
+
import { compareApplicationVersionsEvidenceValidated, compareJavaScriptExportShapesEvidenceValidated, compareSourceToBundleEvidenceValidated, traceApplicationFeatureEvidenceValidated, } from "../application/JavaScriptApplicationWorkflowService.js";
|
|
3
|
+
import { traceJavaScriptSemanticsEvidenceValidated } from "../application/JavaScriptSemanticTraceService.js";
|
|
4
|
+
import { evaluateReconstructionCoverage, reconstructionCoverageEvaluationInputSchema, } from "../application/ReconstructionCoverageService.js";
|
|
5
|
+
import { buildReconstructionObligationLedgerEvidenceValidated } from "../application/ReconstructionObligationLedgerService.js";
|
|
6
|
+
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
7
|
+
import { parseCliJsonInput } from "../cliJsonInput.js";
|
|
8
|
+
import { logCliCommand } from "../cliLogging.js";
|
|
9
|
+
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
10
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
11
|
+
import {} from "../domain/analysisErrorBase.js";
|
|
12
|
+
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
13
|
+
import { traceApplicationFeatureInputSchema } from "../domain/javascriptFeatureTraceSchemas.js";
|
|
14
|
+
import { traceJavaScriptSemanticsInputSchema } from "../domain/javascriptSemanticTraceSchemas.js";
|
|
15
|
+
import { compareApplicationVersionsInputSchema } from "../domain/javascriptApplicationVersionComparisonSchemas.js";
|
|
16
|
+
import { compareSourceToBundleInputSchema } from "../domain/sourceToBundleComparisonSchemas.js";
|
|
17
|
+
import { compareJavaScriptExportShapesInputSchema } from "../domain/javascriptExportShapeComparisonSchemas.js";
|
|
18
|
+
import { projectInputIssues } from "../domain/inputIssueProjection.js";
|
|
19
|
+
import { reconstructionObligationLedgerInputSchema } from "../domain/reconstructionObligationLedgerSchemas.js";
|
|
18
20
|
/** Register CLI equivalents of provider-neutral application graph workflows. */
|
|
19
21
|
export const registerApplicationCommands = (cli, logger) => {
|
|
20
22
|
registerJsonCommand({
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { Cli, z } from "incur";
|
|
2
|
-
import { browserContext, browserCliError } from "
|
|
3
|
-
import { browserScopeOptions } from "
|
|
4
|
-
import { captureWebScreenshot, compareWebCaptureEvidence, compareWebScreenshotEvidence, discoverWebMcpTools, } from "
|
|
5
|
-
import { CdpBrowserProvider } from "
|
|
6
|
-
import { logCliCommand } from "
|
|
7
|
-
import { AnalysisInputError } from "
|
|
8
|
-
import { browserCaptureComparisonInputSchema } from "
|
|
9
|
-
import { discoverWebMcpToolsInputSchema } from "
|
|
10
|
-
import { captureWebScreenshotInputSchema, compareWebScreenshotsInputSchema, } from "
|
|
11
|
-
import {
|
|
2
|
+
import { browserContext, browserCliError } from "../cliBrowserContext.js";
|
|
3
|
+
import { browserScopeOptions } from "../cliObservationOptions.js";
|
|
4
|
+
import { captureWebScreenshot, compareWebCaptureEvidence, compareWebScreenshotEvidence, discoverWebMcpTools, } from "../application/BrowserObservationService.js";
|
|
5
|
+
import { CdpBrowserProvider } from "../browser/CdpBrowserProvider.js";
|
|
6
|
+
import { logCliCommand } from "../cliLogging.js";
|
|
7
|
+
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
8
|
+
import { browserCaptureComparisonInputSchema } from "../domain/browserCaptureComparison.js";
|
|
9
|
+
import { discoverWebMcpToolsInputSchema } from "../domain/webMcpDiscovery.js";
|
|
10
|
+
import { captureWebScreenshotInputSchema, compareWebScreenshotsInputSchema, } from "../domain/webScreenshot.js";
|
|
11
|
+
import { safeParseJson } from "../domain/safeJson.js";
|
|
12
|
+
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
12
13
|
/** Register WebMCP, capture-diff, and screenshot CLI equivalents. */
|
|
13
14
|
export const registerAdvancedBrowserCommands = (cli, logger) => {
|
|
14
15
|
registerWebMcp(cli, logger);
|
|
@@ -135,11 +136,7 @@ const registerScreenshotDiff = (cli, logger) => {
|
|
|
135
136
|
});
|
|
136
137
|
};
|
|
137
138
|
const parseJson = (value) => {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
catch {
|
|
142
|
-
return undefined;
|
|
143
|
-
}
|
|
139
|
+
const parsed = safeParseJson(value);
|
|
140
|
+
return parsed.ok ? parsed.value : undefined;
|
|
144
141
|
};
|
|
145
142
|
const inputError = (operation) => browserCliError(new AnalysisInputError(operation));
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Cli, z } from "incur";
|
|
2
|
-
import { browserContext, browserCliError } from "
|
|
3
|
-
import { analyzeWebBundle, inspectWebPage, listBrowserTargets, observeWebSession, } from "
|
|
4
|
-
import { logCliCommand } from "
|
|
5
|
-
import { inspectWebPageInputSchema, listBrowserTargetsInputSchema, } from "
|
|
6
|
-
import { analyzeWebBundleInputSchema } from "
|
|
7
|
-
import { observeWebSessionInputSchema } from "
|
|
8
|
-
import { AnalysisInputError } from "
|
|
9
|
-
import { CLI_COMMANDS } from "
|
|
10
|
-
import { browserPageInspectionOptions, browserScopeOptions, observationDuration, } from "
|
|
2
|
+
import { browserContext, browserCliError } from "../cliBrowserContext.js";
|
|
3
|
+
import { analyzeWebBundle, inspectWebPage, listBrowserTargets, observeWebSession, } from "../application/BrowserObservationService.js";
|
|
4
|
+
import { logCliCommand } from "../cliLogging.js";
|
|
5
|
+
import { inspectWebPageInputSchema, listBrowserTargetsInputSchema, } from "../domain/browserObservation.js";
|
|
6
|
+
import { analyzeWebBundleInputSchema } from "../domain/webBundleAnalysis.js";
|
|
7
|
+
import { observeWebSessionInputSchema } from "../domain/browserSession.js";
|
|
8
|
+
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
9
|
+
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
10
|
+
import { browserPageInspectionOptions, browserScopeOptions, observationDuration, } from "../cliObservationOptions.js";
|
|
11
11
|
/** Register CLI equivalents of the passive browser MCP tools. */
|
|
12
12
|
export const registerBrowserCommands = (cli, logger) => {
|
|
13
13
|
registerTargetList(cli, logger);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Translate one-shot CLI interrupts into awaited cleanup and conventional exit codes. */
|
|
2
|
+
export const withCommandCancellation = async (operation, host = process) => {
|
|
3
|
+
const controller = new AbortController();
|
|
4
|
+
let exitCode;
|
|
5
|
+
const interrupt = () => {
|
|
6
|
+
exitCode ??= 130;
|
|
7
|
+
controller.abort();
|
|
8
|
+
};
|
|
9
|
+
const terminate = () => {
|
|
10
|
+
exitCode ??= 143;
|
|
11
|
+
controller.abort();
|
|
12
|
+
};
|
|
13
|
+
host.on("SIGINT", interrupt);
|
|
14
|
+
host.on("SIGTERM", terminate);
|
|
15
|
+
try {
|
|
16
|
+
return await operation(controller.signal);
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
host.off("SIGINT", interrupt);
|
|
20
|
+
host.off("SIGTERM", terminate);
|
|
21
|
+
if (exitCode !== undefined)
|
|
22
|
+
host.exitCode = exitCode;
|
|
23
|
+
}
|
|
24
|
+
};
|