rea-agents 3.0.0 → 3.2.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 +83 -108
- package/bridge/ghidra/ReaGhidraBridge.java +609 -841
- package/bridge/hopper_bridge.py +99 -344
- package/dist/application/AbortablePromise.js +6 -3
- package/dist/application/AnalysisContextQueries.js +21 -9
- package/dist/application/AnalysisSnapshotCache.js +0 -1
- package/dist/application/AnalysisSnapshotFiles.js +7 -7
- package/dist/application/AndroidApplicationService.js +1 -1
- package/dist/application/AppleApplicationService.js +1 -1
- package/dist/application/ArtifactExtraction.js +35 -54
- package/dist/application/ArtifactExtractionDestination.js +17 -0
- package/dist/application/ArtifactGraphConstruction.js +2 -17
- package/dist/application/ArtifactInventory/classify.js +2 -6
- package/dist/application/ArtifactInventory/hash.js +2 -20
- package/dist/application/ArtifactInventory/policy.js +17 -0
- package/dist/application/ArtifactInventory/reader.js +1 -4
- package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
- package/dist/application/ArtifactInventory/scanReader.js +76 -58
- package/dist/application/ArtifactInventory/types.js +1 -5
- package/dist/application/ArtifactInventory.js +6 -14
- package/dist/application/AuthorizedArtifactInventory.js +3 -13
- package/dist/application/BinarySession.js +54 -28
- package/dist/application/BinarySessionComposition.js +0 -11
- package/dist/application/BinarySessionOpen.js +2 -1
- package/dist/application/BinarySessionRecords.js +24 -86
- package/dist/application/BinarySessionStatus.js +16 -21
- package/dist/application/BinaryTargetResolver.js +216 -0
- package/dist/application/BrowserEvidence.js +39 -57
- package/dist/application/BrowserObservationService.js +3 -6
- package/dist/application/BrowserScenarioCaptureService.js +3 -6
- package/dist/application/BrowserScenarioEvidence.js +3 -3
- package/dist/application/CallPathTracing.js +2 -36
- package/dist/application/CapabilityClientRequirements.js +26 -0
- package/dist/application/CapabilityInventory.js +143 -77
- package/dist/application/ClientConfigurationDocument.js +27 -0
- package/dist/application/ClientRegistrationStatus.js +16 -13
- package/dist/application/CommandShimReplay.js +14 -1
- package/dist/application/DirectAnalysis.js +22 -46
- package/dist/application/DirectAnalysisStatus.js +5 -61
- package/dist/application/Doctor.js +11 -32
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +1 -1
- package/dist/application/ElectronActiveEvidence.js +50 -0
- package/dist/application/ElectronActiveObservationPort.js +1 -0
- package/dist/application/ElectronActiveObservationService.js +78 -0
- package/dist/application/ElectronBoundaryAnalysis.js +7 -8
- package/dist/application/ElectronBoundaryGraphContext.js +1 -1
- package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
- package/dist/application/ElectronBoundaryGraphNative.js +1 -2
- package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
- package/dist/application/ElectronEvidence.js +4 -7
- package/dist/application/ElectronObservationService.js +5 -9
- package/dist/application/EnhancedLiteralTracing.js +42 -65
- package/dist/application/EnhancedTools.js +98 -64
- package/dist/application/EvidenceBundleCommands.js +16 -12
- package/dist/application/EvidenceBundleFiles.js +9 -15
- package/dist/application/EvidenceLedger.js +14 -42
- package/dist/application/FilesystemSnapshot.js +2 -3
- package/dist/application/InterfaceBuilderAnalysis.js +266 -0
- package/dist/application/InventoryProjectionEvidence.js +4 -2
- package/dist/application/InvestigationProviders.js +1 -1
- package/dist/application/JavaScriptApplicationEvidence.js +2 -5
- package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
- package/dist/application/JavaScriptApplicationService.js +6 -29
- package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
- package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
- package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
- package/dist/application/JavaScriptArtifactFiles.js +67 -107
- package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
- package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
- package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
- package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
- package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
- package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
- package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
- package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
- package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
- package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
- package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
- package/dist/application/JavaScriptJsonModules.js +2 -2
- package/dist/application/JavaScriptModuleRelationships.js +22 -27
- package/dist/application/JavaScriptReplayPermission.js +1 -1
- package/dist/application/JavaScriptReplayPlanning.js +9 -3
- package/dist/application/JavaScriptReplayService.js +29 -47
- package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
- package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
- package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
- package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
- package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
- package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
- package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
- package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
- package/dist/application/JavaScriptSemanticTraceService.js +1 -10
- package/dist/application/JsonFiles.js +79 -0
- package/dist/application/LinuxHopper.js +11 -9
- package/dist/application/LoopbackReplay.js +26 -23
- package/dist/application/LoopbackReplayRecorder.js +29 -1
- package/dist/application/ManagedApplicationGraphService.js +1 -2
- package/dist/application/ManagedMemberComparisonService.js +11 -41
- package/dist/application/ManagedNativeVerificationService.js +1 -2
- package/dist/application/ManagedReconstructionService.js +1 -1
- package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
- package/dist/application/NativeApiInspection.js +2 -7
- package/dist/application/NativeUiActionTrace.js +394 -0
- package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
- package/dist/application/PermissionAuthority.js +15 -7
- package/dist/application/PermissionFailure.js +5 -0
- package/dist/application/ProcessCaptureAuthority.js +5 -7
- package/dist/application/ProcessCaptureJournal.js +3 -2
- package/dist/application/ProcessCaptureLifecycle.js +10 -12
- package/dist/application/ProcessCheckpoints.js +29 -11
- package/dist/application/ProcessCli.js +8 -17
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessHarness.js +60 -20
- package/dist/application/ProcessNormalization.js +2 -1
- package/dist/application/ProcessReactiveCoordinator.js +2 -4
- package/dist/application/ProcessReactiveEffects.js +9 -3
- package/dist/application/ProcessReactiveHarness.js +13 -7
- package/dist/application/ProcessSampling.js +2 -4
- package/dist/application/ProcessTimer.js +39 -0
- package/dist/application/ProjectPermissionStore.js +39 -95
- package/dist/application/RealHopperAssertions.js +20 -66
- package/dist/application/ReconstructionCoverageService.js +12 -58
- package/dist/application/ReconstructionObligationAuthority.js +2 -2
- package/dist/application/ReconstructionObligationCandidates.js +4 -4
- package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
- package/dist/application/ReconstructionObligationLedgerService.js +19 -38
- package/dist/application/ReferenceSourceImport.js +21 -47
- package/dist/application/ReferenceSourceImportEntries.js +2 -4
- package/dist/application/ReferenceSourceImportPolicy.js +5 -32
- package/dist/application/ReferenceSourceImportTypes.js +0 -16
- package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
- package/dist/application/SessionProviderRouter.js +2 -2
- package/dist/application/Setup.js +1 -3
- package/dist/application/SetupClientConfiguration.js +22 -88
- package/dist/application/SetupRegistrationEnvironment.js +0 -7
- package/dist/application/StoreFileLock.js +119 -0
- package/dist/application/TerminalRenderer.js +2 -3
- package/dist/application/Uninstall.js +9 -14
- package/dist/application/UnknownEvidence.js +1 -1
- package/dist/application/WindowsCapabilities.js +5 -4
- package/dist/artifacts/ArtifactPaths.js +2 -5
- package/dist/artifacts/ArtifactProvider.js +43 -67
- package/dist/artifacts/DirectoryArtifactReader.js +13 -8
- package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
- package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
- package/dist/artifacts/NibArchive.js +269 -0
- package/dist/artifacts/SafeOutputTree.js +21 -31
- package/dist/browser/BrowserProcessStartup.js +1 -2
- package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
- package/dist/browser/CdpBrowserProvider.js +3 -13
- package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
- package/dist/browser/CdpCaptureDocuments.js +28 -76
- package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
- package/dist/browser/CdpCaptureEventHandlers.js +22 -87
- package/dist/browser/CdpCaptureEvents.js +2 -8
- package/dist/browser/CdpCaptureStorage.js +9 -20
- package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
- package/dist/browser/CdpCaptureValues.js +21 -21
- package/dist/browser/CdpConnection.js +10 -25
- package/dist/browser/CdpElectronInspection.js +29 -51
- package/dist/browser/CdpElectronProvider.js +10 -35
- package/dist/browser/CdpElectronScriptEvents.js +8 -16
- package/dist/browser/CdpElectronScripts.js +6 -35
- package/dist/browser/CdpElectronWorkers.js +6 -10
- package/dist/browser/CdpEndpoint.js +25 -41
- package/dist/browser/CdpObservationSession.js +14 -26
- package/dist/browser/CdpPageCapture.js +34 -48
- package/dist/browser/CdpPageCaptureScripts.js +1 -19
- package/dist/browser/CdpPageCaptureWorkers.js +6 -10
- package/dist/browser/CdpSafeMetadata.js +19 -22
- package/dist/browser/CdpScreenshot.js +3 -5
- package/dist/browser/CdpTargetSession.js +1 -2
- package/dist/browser/CdpWebMcpDiscovery.js +13 -22
- package/dist/browser/ElectronFileScope.js +8 -19
- package/dist/browser/JavaScriptRuntimeScope.js +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
- package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
- package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
- package/dist/browser/PlaywrightScenarioActions.js +3 -7
- package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
- package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
- package/dist/browser/PlaywrightScenarioEvents.js +45 -94
- package/dist/browser/PlaywrightScenarioSession.js +18 -34
- package/dist/browser/PngVisualDiff.js +22 -14
- package/dist/browser/SensitiveTextCapture.js +1 -18
- package/dist/browser/V8InspectorCaptureProjection.js +7 -7
- package/dist/browser/V8InspectorEndpoint.js +12 -14
- package/dist/browser/V8InspectorProvider.js +20 -61
- package/dist/browser/WebSourceMapFetcher.js +56 -176
- package/dist/catalogIdentity.js +12 -60
- package/dist/cli/artifactCommands.js +49 -77
- package/dist/cli/coreAnalysisCommands.js +83 -133
- package/dist/cli/javascriptApplicationAnalysis.js +1 -9
- package/dist/cli/managedCommands.js +6 -271
- package/dist/cli/setupCommands.js +3 -12
- package/dist/cli/utilityCommands.js +7 -41
- package/dist/cli.js +0 -2
- package/dist/cliApplicationCommands.js +44 -114
- package/dist/cliBrowserAdvancedCommands.js +12 -102
- package/dist/cliBrowserCommands.js +19 -124
- package/dist/cliBrowserContext.js +30 -0
- package/dist/cliCommandNames.js +5 -5
- package/dist/cliElectronCommands.js +49 -71
- package/dist/cliEvidenceCommands.js +8 -77
- package/dist/cliJavaScriptRuntimeCommands.js +18 -92
- package/dist/cliJsonInput.js +4 -14
- package/dist/cliObservationOptions.js +11 -92
- package/dist/cliPolicyCommands.js +2 -16
- package/dist/cliProcessCommands.js +3 -3
- package/dist/cliSetup.js +0 -13
- package/dist/config/browserScenario.js +77 -0
- package/dist/config/electronAutomation.js +35 -0
- package/dist/config/environment.js +6 -9
- package/dist/config/javascriptReplay.js +41 -0
- package/dist/config/managedRuntime.js +25 -0
- package/dist/config/parseConfig.js +56 -232
- package/dist/config/parsers.js +16 -28
- package/dist/config/passiveObservation.js +87 -0
- package/dist/config/permissions.js +0 -7
- package/dist/config/processCapture.js +47 -0
- package/dist/contracts/analysisSearchContract.js +2 -5
- package/dist/contracts/applicationToolContracts.js +58 -114
- package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
- package/dist/contracts/artifactComparisonExample.js +58 -60
- package/dist/contracts/artifactToolContracts.js +37 -91
- package/dist/contracts/browserScenarioToolContracts.js +6 -51
- package/dist/contracts/browserToolContracts.js +10 -75
- package/dist/contracts/electronToolContracts.js +27 -98
- package/dist/contracts/enhancedInputs.js +31 -78
- package/dist/contracts/errorSchemas.js +0 -1
- package/dist/contracts/functionComparisonExample.js +10 -24
- package/dist/contracts/functionInstructionContract.js +1 -3
- package/dist/contracts/functionWorkflowToolContracts.js +4 -5
- package/dist/contracts/hopperMemoryContracts.js +3 -3
- package/dist/contracts/investigationExamples.js +14 -11
- package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
- package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
- package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
- package/dist/contracts/managedToolContracts.js +10 -104
- package/dist/contracts/managedWorkflowExamples.js +77 -125
- package/dist/contracts/managedWorkflowToolContracts.js +51 -74
- package/dist/contracts/nativeToolContracts.js +9 -14
- package/dist/contracts/processCaptureExample.js +2 -69
- package/dist/contracts/promptContracts.js +49 -67
- package/dist/contracts/providerSelection.js +0 -1
- package/dist/contracts/reconstructionReadinessExample.js +1 -6
- package/dist/contracts/sessionStatusContract.js +1 -17
- package/dist/contracts/sessionToolSchemas.js +52 -0
- package/dist/contracts/toolContractExamples.js +11 -10
- package/dist/contracts/toolContractHelpers.js +19 -0
- package/dist/contracts/toolContracts.js +60 -143
- package/dist/contracts/toolEffects.js +16 -9
- package/dist/contracts/toolOutputSchemaGroups.js +47 -86
- package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
- package/dist/contracts/toolSchemaMetadata.js +117 -0
- package/dist/contracts/unknownContractExamples.js +0 -2
- package/dist/doctorRuntime.js +1 -1
- package/dist/domain/analysisErrorPresentation.js +46 -54
- package/dist/domain/analysisErrorProjection.js +28 -37
- package/dist/domain/analysisProfile.js +3 -31
- package/dist/domain/analysisSnapshot.js +3 -12
- package/dist/domain/androidApplication.js +15 -52
- package/dist/domain/appleApplication.js +24 -65
- package/dist/domain/artifactComparison.js +11 -29
- package/dist/domain/artifactGraph.js +14 -44
- package/dist/domain/artifactInspection.js +38 -69
- package/dist/domain/artifactInventoryEvidence.js +27 -21
- package/dist/domain/binaryTarget.js +2 -219
- package/dist/domain/binaryTargetTypes.js +1 -0
- package/dist/domain/browserCaptureComparison.js +35 -60
- package/dist/domain/browserObservation.js +45 -197
- package/dist/domain/browserObservationSchemas.js +5 -23
- package/dist/domain/browserScenario.js +11 -14
- package/dist/domain/browserScenarioCapture.js +11 -12
- package/dist/domain/browserScenarioCaptureValues.js +146 -84
- package/dist/domain/browserScenarioDiff.js +2 -59
- package/dist/domain/browserScenarioDiffEvidence.js +51 -0
- package/dist/domain/browserScenarioDiffValues.js +21 -38
- package/dist/domain/browserScenarioValues.js +80 -109
- package/dist/domain/browserSession.js +4 -7
- package/dist/domain/bundleComparison.js +6 -32
- package/dist/domain/bytecodeProvider.js +53 -54
- package/dist/domain/callPath.js +50 -169
- package/dist/domain/callPathSchemas.js +79 -0
- package/dist/domain/changedBehavior.js +34 -60
- package/dist/domain/completionLedgerGeneration.js +8 -14
- package/dist/domain/conformancePackage.js +126 -97
- package/dist/domain/conformanceReplay.js +39 -11
- package/dist/domain/conformanceTrustGate.js +174 -30
- package/dist/domain/customProtocolCapture.js +4 -4
- package/dist/domain/electronActiveObservation.js +244 -0
- package/dist/domain/electronObservation.js +21 -83
- package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
- package/dist/domain/electronStaticAnalysisIpc.js +38 -14
- package/dist/domain/electronStaticAnalysisNative.js +1 -8
- package/dist/domain/electronStaticAnalysisValues.js +14 -18
- package/dist/domain/errors.js +33 -54
- package/dist/domain/eventProcessTree.js +101 -90
- package/dist/domain/evidence.js +2 -10
- package/dist/domain/evidenceBundle.js +3 -5
- package/dist/domain/evidenceCompletionLedger.js +6 -8
- package/dist/domain/functionComparison.js +4 -14
- package/dist/domain/functionComparisonNormalization.js +8 -8
- package/dist/domain/functionComparisonResults.js +25 -15
- package/dist/domain/functionComparisonSchemas.js +49 -33
- package/dist/domain/functionDossierEvidence.js +31 -151
- package/dist/domain/hopperStartupFailure.js +1 -1
- package/dist/domain/hopperValues.js +17 -141
- package/dist/domain/inputIssueProjection.js +4 -1
- package/dist/domain/interfaceBuilderGraph.js +654 -0
- package/dist/domain/javascriptApplicationAnalysis.js +8 -112
- package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
- package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
- package/dist/domain/javascriptApplicationGraph.js +3 -13
- package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
- package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
- package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
- package/dist/domain/javascriptApplicationVersionItems.js +120 -53
- package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
- package/dist/domain/javascriptAstFingerprint.js +25 -58
- package/dist/domain/javascriptAstValues.js +9 -0
- package/dist/domain/javascriptExportInstrumentation.js +2 -4
- package/dist/domain/javascriptExportShapeComparison.js +6 -7
- package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
- package/dist/domain/javascriptExportShapeSelection.js +17 -19
- package/dist/domain/javascriptFeatureSeed.js +20 -12
- package/dist/domain/javascriptFeatureTrace.js +13 -67
- package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
- package/dist/domain/javascriptFeatureTraversal.js +1 -44
- package/dist/domain/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascriptReplay.js +100 -101
- package/dist/domain/javascriptRuntimeLoadState.js +3 -8
- package/dist/domain/javascriptRuntimeObservation.js +43 -103
- package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
- package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
- package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
- package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
- package/dist/domain/javascriptSemanticAnalysis.js +12 -45
- package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
- package/dist/domain/javascriptSemanticCallResolution.js +6 -16
- package/dist/domain/javascriptSemanticCalls.js +5 -32
- package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
- package/dist/domain/javascriptSemanticCoverage.js +11 -0
- package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
- package/dist/domain/javascriptSemanticDataEffects.js +1 -11
- package/dist/domain/javascriptSemanticFingerprints.js +3 -5
- package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
- package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
- package/dist/domain/javascriptSemanticIr.js +1 -29
- package/dist/domain/javascriptSemanticObjects.js +1 -5
- package/dist/domain/javascriptSemanticPrimitives.js +2 -9
- package/dist/domain/javascriptSemanticProjection.js +0 -18
- package/dist/domain/javascriptSemanticPromises.js +9 -16
- package/dist/domain/javascriptSemanticProvenance.js +16 -19
- package/dist/domain/javascriptSemanticQuery.js +17 -139
- package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
- package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
- package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
- package/dist/domain/javascriptSemanticResources.js +1 -6
- package/dist/domain/javascriptSemanticReturns.js +10 -27
- package/dist/domain/javascriptSemanticValueTypes.js +1 -0
- package/dist/domain/javascriptSemanticValues.js +44 -62
- package/dist/domain/javascriptStaticAnalysis.js +21 -43
- package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
- package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
- package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
- package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
- package/dist/domain/javascriptStaticAnalysisState.js +1 -5
- package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
- package/dist/domain/jsonShape.js +7 -33
- package/dist/domain/localPath.js +7 -0
- package/dist/domain/managedApplicationGraph.js +9 -41
- package/dist/domain/managedApplicationGraphCoverage.js +24 -156
- package/dist/domain/managedApplicationGraphNodes.js +10 -13
- package/dist/domain/managedArtifact.js +14 -27
- package/dist/domain/managedMemberComparison.js +90 -92
- package/dist/domain/managedMemberComparisonCoverage.js +11 -33
- package/dist/domain/managedMemberComparisonItems.js +221 -0
- package/dist/domain/managedMemberComparisonMatch.js +8 -208
- package/dist/domain/managedNativeVerification.js +3 -6
- package/dist/domain/managedNativeVerificationMatch.js +55 -59
- package/dist/domain/managedNativeVerificationSchemas.js +83 -47
- package/dist/domain/managedReconstruction.js +19 -23
- package/dist/domain/managedRuntimeCorrelation.js +6 -9
- package/dist/domain/nativeApiBoundary.js +17 -14
- package/dist/domain/nativeInspection.js +0 -2
- package/dist/domain/nativeInvestigationGraph.js +351 -0
- package/dist/domain/nativeValueFlow.js +61 -0
- package/dist/domain/nodeRuntimeCharacterization.js +15 -18
- package/dist/domain/objcSwiftMetadata.js +254 -0
- package/dist/domain/peInspection.js +1 -1
- package/dist/domain/permissionPolicy.js +13 -0
- package/dist/domain/processCapture.js +76 -113
- package/dist/domain/processCaptureExample.js +68 -0
- package/dist/domain/processCaptureParsing.js +21 -0
- package/dist/domain/processCaptureReactiveSchema.js +68 -0
- package/dist/domain/processCaptureReactiveValidation.js +8 -3
- package/dist/domain/processCaptureValidation.js +8 -10
- package/dist/domain/processComparison.js +12 -16
- package/dist/domain/processObservation.js +5 -6
- package/dist/domain/processReactiveMatching.js +32 -46
- package/dist/domain/processReactiveRuntime.js +4 -8
- package/dist/domain/processReactiveScenario.js +28 -94
- package/dist/domain/processReactiveScenarioPreflight.js +5 -30
- package/dist/domain/processReactiveTransition.js +42 -21
- package/dist/domain/processScenario.js +62 -93
- package/dist/domain/processTraceComparison.js +0 -7
- package/dist/domain/processTraceEvaluation.js +14 -4
- package/dist/domain/processTraceSpecification.js +11 -17
- package/dist/domain/protocolCapture.js +11 -9
- package/dist/domain/reconstructionCoverage.js +62 -129
- package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
- package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
- package/dist/domain/reconstructionReadiness.js +1 -2
- package/dist/domain/reconstructionReadinessSchemas.js +66 -40
- package/dist/domain/reconstructionUnknowns.js +3 -3
- package/dist/domain/reconstructionVerification.js +13 -47
- package/dist/domain/reconstructionVerificationSchemas.js +50 -38
- package/dist/domain/referenceSourceGraph.js +53 -61
- package/dist/domain/referenceSourceImportParsing.js +3 -7
- package/dist/domain/replayMachine.js +19 -31
- package/dist/domain/replayMachineRun.js +15 -63
- package/dist/domain/replayMachineRuntime.js +46 -44
- package/dist/domain/replayMachineValues.js +84 -0
- package/dist/domain/residualUnknown.js +25 -30
- package/dist/domain/runtimeCharacterization.js +15 -16
- package/dist/domain/runtimeIdentification.js +48 -47
- package/dist/domain/sourceToBundleComparison.js +11 -87
- package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
- package/dist/domain/sourceToBundleSignals.js +11 -16
- package/dist/domain/staticRuntimeCorrelation.js +44 -54
- package/dist/domain/symbolAnalysis.js +10 -19
- package/dist/domain/unicodeCodePointOrder.js +12 -0
- package/dist/domain/webBundleAnalysis.js +70 -99
- package/dist/domain/webBundleAnalyzer.js +2 -4
- package/dist/domain/webBundleAnalyzerAst.js +0 -13
- package/dist/domain/webBundleAnalyzerInspection.js +26 -52
- package/dist/domain/webBundleAnalyzerResult.js +7 -24
- package/dist/domain/webCaptureDiff.js +48 -85
- package/dist/domain/webCaptureDiffSchemas.js +86 -0
- package/dist/domain/webContentArtifact.js +1 -10
- package/dist/domain/webMcpDiscovery.js +3 -14
- package/dist/domain/webScreenshot.js +58 -34
- package/dist/domain/zipPackageFormat.js +7 -0
- package/dist/dotnet/ManagedArtifactInspector.js +17 -50
- package/dist/dotnet/ManagedMemberInspector.js +27 -58
- package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
- package/dist/dotnet/ManagedMemberRows.js +16 -16
- package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
- package/dist/dotnet/ManagedMetadataInventory.js +21 -30
- package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
- package/dist/dotnet/ManagedMetadataLayout.js +3 -5
- package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
- package/dist/dotnet/ManagedPeReader.js +2 -2
- package/dist/dotnet/ManagedStaticProvider.js +13 -71
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +1 -1
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
- package/dist/ghidra/GhidraClient.js +5 -13
- package/dist/ghidra/GhidraClientStartup.js +1 -1
- package/dist/ghidra/GhidraClientWire.js +9 -5
- package/dist/ghidra/GhidraDefaults.js +0 -18
- package/dist/ghidra/GhidraDiagnostics.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +16 -12
- package/dist/ghidra/GhidraFunctionValues.js +67 -108
- package/dist/ghidra/GhidraInstallation.js +98 -42
- package/dist/ghidra/GhidraInventoryValues.js +18 -77
- package/dist/ghidra/GhidraLauncher.js +0 -8
- package/dist/ghidra/GhidraProvider.js +32 -31
- package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
- package/dist/ghidra/GhidraRequestQueue.js +6 -30
- package/dist/ghidra/GhidraResponseBuffer.js +1 -7
- package/dist/ghidra/GhidraSessionValues.js +0 -2
- package/dist/ghidra/GhidraSocketConnection.js +1 -1
- package/dist/ghidra/GhidraTransport.js +4 -7
- package/dist/ghidra/protocol.js +19 -42
- package/dist/hopper/BridgeLauncher.js +115 -37
- package/dist/hopper/HopperAnalysisProfile.js +3 -5
- package/dist/hopper/HopperCleanup.js +11 -9
- package/dist/hopper/HopperClient.js +5 -8
- package/dist/hopper/HopperProcessDiagnostic.js +2 -2
- package/dist/hopper/HopperProvider.js +0 -30
- package/dist/hopper/HopperRequestQueue.js +21 -40
- package/dist/hopper/HopperResponseStream.js +1 -9
- package/dist/hopper/HopperSessionValues.js +3 -2
- package/dist/hopper/HopperTargetLease.js +119 -0
- package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
- package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
- package/dist/hopper/protocol.js +6 -4
- package/dist/main/reload.js +1 -9
- package/dist/main/shutdown.js +1 -1
- package/dist/main/state.js +0 -23
- package/dist/main/transport.js +27 -39
- package/dist/main.js +17 -15
- package/dist/mcpDoctor.js +27 -69
- package/dist/native/CommandRunner.js +18 -25
- package/dist/native/NativeMacOSProvider.js +13 -38
- package/dist/native/NativeMachoInspection.js +1 -1
- package/dist/process/BoundedFileBytes.js +17 -0
- package/dist/process/ExecFileOutput.js +11 -0
- package/dist/process/PendingOperations.js +8 -6
- package/dist/process/PrivateRuntimeRoot.js +17 -0
- package/dist/process/ProcessOwnership.js +67 -130
- package/dist/process/ProcessOwnershipIdentity.js +13 -0
- package/dist/process/ProcessOwnershipObservation.js +87 -0
- package/dist/process/ProcessOwnershipProcessTree.js +22 -0
- package/dist/process/ProviderDeadline.js +8 -12
- package/dist/process/ProviderProcess.js +7 -28
- package/dist/process/WindowsAuthority.js +32 -0
- package/dist/reference/ReferenceSourceReader.js +8 -24
- package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
- package/dist/reference/ReferenceSourceReaderFile.js +13 -31
- package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
- package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
- package/dist/replay/JavaScriptReplayWorker.js +95 -13
- package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
- package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
- package/dist/replay/LinuxRuntimeClosure.js +1 -3
- package/dist/replay/ReplayOutcome.js +27 -18
- package/dist/replay/ReplayProcessLifecycle.js +32 -7
- package/dist/replay/ReplaySeccompFile.js +29 -0
- package/dist/replay/ReplayWorkerProtocol.js +33 -30
- package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
- package/dist/server/ProcessCaptureElicitation.js +4 -8
- package/dist/server/createServer.js +145 -119
- package/dist/server/mcpClientMetadata.js +32 -0
- package/dist/server/promptCompletion.js +37 -61
- package/dist/server/recordDerivedEvidence.js +1 -1
- package/dist/server/registerApplicationTools/characterization.js +10 -21
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
- package/dist/server/registerApplicationTools/compareVersions.js +6 -16
- package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
- package/dist/server/registerApplicationTools/coverage.js +7 -78
- package/dist/server/registerApplicationTools/helpers.js +1 -13
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
- package/dist/server/registerApplicationTools/traceFeature.js +6 -15
- package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
- package/dist/server/registerApplicationTools.js +0 -2
- package/dist/server/registerArtifactComparisonTool.js +27 -35
- package/dist/server/registerBrowserScenarioTool.js +3 -8
- package/dist/server/registerBrowserTools.js +36 -81
- package/dist/server/registerBundleComparisonTool.js +10 -16
- package/dist/server/registerCloseLifecycleTool.js +5 -27
- package/dist/server/registerElectronTools.js +29 -65
- package/dist/server/registerEnhancedTools.js +118 -127
- package/dist/server/registerEvidenceTools.js +19 -30
- package/dist/server/registerFunctionComparisonTool.js +35 -34
- package/dist/server/registerInvestigationTools/helpers.js +3 -32
- package/dist/server/registerInvestigationTools.js +36 -148
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
- package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
- package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
- package/dist/server/registerOfficialTools.js +8 -51
- package/dist/server/registerProcessComparisonTool.js +43 -38
- package/dist/server/registerPrompts.js +19 -17
- package/dist/server/registerReplayMachineTool.js +4 -10
- package/dist/server/registerSessionRecordTools.js +36 -153
- package/dist/server/registerSessionStatusTool.js +18 -96
- package/dist/server/registerSessionTools.js +34 -91
- package/dist/server/sessionAvailabilityPolicy.js +2 -3
- package/dist/server/sessionEvidence.js +9 -15
- package/dist/server/sessionToolPolicies.js +1 -13
- package/dist/server/toolRegistrationOptions.js +4 -192
- package/dist/server/toolResult.js +15 -67
- package/dist/serverIdentity.js +0 -20
- package/install.sh +1 -1
- package/package.json +27 -15
- package/scripts/electron-active-hook-boundaries.cjs +394 -0
- package/scripts/electron-active-hook.cjs +469 -0
- package/scripts/hopper-demo-x11.py +13 -32
- package/scripts/rea.mjs +1 -11
- package/skills/reverse-engineer-anything/SKILL.md +46 -11
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
- package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
- package/dist/application/BoundedJsonFiles.js +0 -86
- package/dist/application/CrossVersionInventory.js +0 -128
- package/dist/application/CrossVersionInvestigation.js +0 -301
- package/dist/application/CrossVersionInvestigationCollections.js +0 -23
- package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
- package/dist/application/CrossVersionInvestigationReplay.js +0 -170
- package/dist/application/DeferredFileAuthorization.js +0 -61
- package/dist/application/DoctorProjection.js +0 -43
- package/dist/application/EnhancedToolPagination.js +0 -22
- package/dist/application/EvidenceReferenceResolver.js +0 -26
- package/dist/application/InvestigationWorkspaceStore.js +0 -204
- package/dist/application/ProcessPairedExperiment.js +0 -72
- package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
- package/dist/application/ReconstructionReadinessService.js +0 -48
- package/dist/cliInvestigationCommands.js +0 -173
- package/dist/domain/boundedCartesianProjection.js +0 -15
- package/dist/domain/investigationWorkspace.js +0 -346
- package/dist/domain/jsonLimits.js +0 -26
- package/dist/domain/knownPageCoverage.js +0 -21
- package/dist/domain/processPairedExperiment.js +0 -128
- package/dist/server/DynamicToolAvailability.js +0 -70
- package/dist/server/LazyToolCatalog.js +0 -134
- package/dist/server/hydrateServerTools.js +0 -191
- package/dist/server/javascriptApplicationResult.js +0 -106
- package/dist/server/permissionFailure.js +0 -12
- package/dist/server/registerApplicationTools/readiness.js +0 -55
- package/dist/server/registerEvidenceResources.js +0 -315
- package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
- package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
- package/dist/server/registerReconstructionReadinessResource.js +0 -32
- package/dist/server/toolInputValidation.js +0 -77
- package/scripts/package-runner-bootstrap.mjs +0 -72
|
@@ -4,7 +4,7 @@ description: Reverse engineer native, managed, Electron/JavaScript, packaged, an
|
|
|
4
4
|
metadata:
|
|
5
5
|
version: "23"
|
|
6
6
|
tool_count: 114
|
|
7
|
-
catalog_digest: "
|
|
7
|
+
catalog_digest: "3e9ab4e05563ea2609b7cf4db67638a79cd8a74188c292718d99a63451d5b9db"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# REA
|
|
@@ -23,13 +23,14 @@ Choose the first tool from the target the user supplied. Do not call
|
|
|
23
23
|
- ASAR or extracted JavaScript/Electron tree:
|
|
24
24
|
`analyze_javascript_application`.
|
|
25
25
|
- Archive, application package, ZIP/APK/IPA/MSIX/AppX, or DMG:
|
|
26
|
-
`open_binary` with the supplied local path
|
|
27
|
-
|
|
26
|
+
`open_binary` with the supplied local path; use `inspect_artifact` when its
|
|
27
|
+
graph and findings help answer the question.
|
|
28
28
|
- Managed PE/CLI assembly: `inspect_managed_artifact`.
|
|
29
29
|
- User-owned browser page already open: `list_browser_targets`.
|
|
30
30
|
- User-owned Electron runtime already open: `list_electron_targets`.
|
|
31
31
|
- Native executable, library, or analysis database: `open_binary`, then
|
|
32
|
-
`binary_overview
|
|
32
|
+
use focused analysis tools directly; call `binary_overview` when metadata or
|
|
33
|
+
inventory context is useful.
|
|
33
34
|
|
|
34
35
|
If the app is missing, ask which app to inspect. Resolve a human-readable app
|
|
35
36
|
name to one clear installed artifact when possible; ask only when matches are
|
|
@@ -43,16 +44,48 @@ is unavailable.
|
|
|
43
44
|
|
|
44
45
|
## Work summary-first
|
|
45
46
|
|
|
46
|
-
Start with the default
|
|
47
|
-
Do not
|
|
48
|
-
|
|
49
|
-
paged resource URIs returned by the summary and fetch only the relevant page.
|
|
47
|
+
Start with the default result and use its inline Evidence and graph context.
|
|
48
|
+
Do not repeat an identical tool call. Make a focused follow-up only when the
|
|
49
|
+
returned result leaves a specific question unanswered.
|
|
50
50
|
|
|
51
51
|
Every conclusion must distinguish observations, inferences, and unknowns. Cite
|
|
52
52
|
Evidence IDs, preserve limitations and incomplete coverage, and never imply
|
|
53
53
|
that static analysis observed execution. Ask for approval only where a tool or
|
|
54
54
|
policy requires it; approval never broadens a different authority boundary.
|
|
55
55
|
|
|
56
|
+
## Plan broader investigations
|
|
57
|
+
|
|
58
|
+
For requests that span multiple features or subsystems, use a staged workflow:
|
|
59
|
+
|
|
60
|
+
1. Turn the request into a checklist of questions and the evidence each answer
|
|
61
|
+
needs. Resolve target identity and constraints from the conversation and
|
|
62
|
+
workspace before asking for information again.
|
|
63
|
+
2. Inspect the current REA session, artifact identity, saved analysis database,
|
|
64
|
+
bookmarks, and prior evidence. Reuse matching state; do not open duplicate
|
|
65
|
+
sessions or repeat identical analysis.
|
|
66
|
+
3. Start with the smallest useful overview or inventory. Follow each question
|
|
67
|
+
from its entry point through relevant data and state changes to its result.
|
|
68
|
+
Batch related operations around a specific hypothesis, then expand only when
|
|
69
|
+
the returned evidence leaves a concrete gap.
|
|
70
|
+
4. Inspect relevant packaged resources and configuration alongside code when
|
|
71
|
+
they affect the question. Use format-aware inventory and parsers; do not
|
|
72
|
+
infer behavior from filenames, strings, or layout alone.
|
|
73
|
+
5. Corroborate a conclusion with the evidence type it requires. Use runtime
|
|
74
|
+
observation or controlled replay only when static evidence cannot answer the
|
|
75
|
+
question and the required authority is available.
|
|
76
|
+
6. Decompose work into independent questions. When parallel workers are
|
|
77
|
+
available and the questions do not depend on one another, assign distinct
|
|
78
|
+
scopes, point workers to existing evidence, and ask them to return sources,
|
|
79
|
+
conclusions, and unresolved gaps. Otherwise, work sequentially.
|
|
80
|
+
7. Keep a concise finding ledger linking each conclusion to Evidence IDs,
|
|
81
|
+
confidence/evidence type, search boundary, and remaining unknowns. Update
|
|
82
|
+
the shared index or investigation report so later passes can reuse results.
|
|
83
|
+
|
|
84
|
+
Before finishing, revisit the original checklist. Mark each question as
|
|
85
|
+
answered, partially answered, or unresolved based on its evidence; keep
|
|
86
|
+
bounded negative searches bounded, and do not describe a broad investigation
|
|
87
|
+
as complete while required questions remain open.
|
|
88
|
+
|
|
56
89
|
## Read only the relevant guide
|
|
57
90
|
|
|
58
91
|
- Native binaries, managed assemblies, archives, and extraction:
|
|
@@ -68,9 +101,11 @@ policy requires it; approval never broadens a different authority boundary.
|
|
|
68
101
|
|
|
69
102
|
## Readiness and setup
|
|
70
103
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
`npx -y rea-agents@latest doctor
|
|
104
|
+
The readiness rule is conditional: when REA tools are available and their
|
|
105
|
+
registration is not known to be stale, proceed directly; do not run `doctor`
|
|
106
|
+
before every task. Run `npx -y rea-agents@latest doctor` when the MCP server or
|
|
107
|
+
required provider is unavailable, registration is reported stale, or the user
|
|
108
|
+
asks for an environment diagnosis. Propose
|
|
74
109
|
`npx -y rea-agents@latest setup` only when doctor identifies an alignment or
|
|
75
110
|
provider problem. Show the exact plan and obtain approval before setup writes
|
|
76
111
|
configuration or installs Hopper. Restart the agent after MCP registration
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# Evidence, comparison, and verification workflows
|
|
2
2
|
|
|
3
|
-
REA
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
REA returns Evidence with each result. Read that result directly, cite its
|
|
4
|
+
Evidence ID when another tool or your explanation needs a stable reference, and
|
|
5
|
+
preserve authority, limitations, coverage, and residual unknowns. If a result
|
|
6
|
+
is incomplete or paginated, continue only when the remaining data matters to
|
|
7
|
+
the task; do not fetch a bundle or resource merely to read a result already
|
|
8
|
+
returned inline.
|
|
7
9
|
|
|
8
10
|
Use `record_unknown` only with explicit approval and name the authority or
|
|
9
11
|
environment still required. Supply supporting and contradicting evidence IDs.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# JavaScript and Electron application artifacts
|
|
2
2
|
|
|
3
|
-
Use `analyze_javascript_application`
|
|
4
|
-
tree
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
Use `analyze_javascript_application` directly on the operator-supplied ASAR or
|
|
4
|
+
extracted tree. The complete result, graph, and Evidence context are returned
|
|
5
|
+
inline. Source-map contents are part of the static analysis. Start from its
|
|
6
|
+
findings, coverage, unknowns, and graph context, then make a focused follow-up
|
|
7
|
+
only when a specific question remains unanswered.
|
|
8
8
|
|
|
9
9
|
BrowserWindow preferences, preload and contextBridge surfaces, IPC
|
|
10
10
|
registrations, utility processes, and native binding requests are static syntax
|
|
@@ -15,8 +15,8 @@ registration, defaults, or policy enforcement from static analysis.
|
|
|
15
15
|
|
|
16
16
|
Use `trace_application_feature` on existing application Evidence for one
|
|
17
17
|
literal node ID, route, string, API, IPC channel, module, or native export.
|
|
18
|
-
Choose a direction and
|
|
19
|
-
|
|
18
|
+
Choose a direction and include the complete application Evidence inline. Include
|
|
19
|
+
Hopper or Ghidra Evidence only when its artifact digest matches exactly.
|
|
20
20
|
|
|
21
21
|
For version comparison, analyze each version once, then call
|
|
22
22
|
`compare_application_versions`. Accept only its digest, source-map, structural
|
|
@@ -27,9 +27,9 @@ opposite-side coverage; otherwise report unknown.
|
|
|
27
27
|
When the question asks how one exact exported callable's returned object shape
|
|
28
28
|
changed, analyze each version once and then call
|
|
29
29
|
`compare_javascript_export_shapes` with explicit module paths and export names.
|
|
30
|
-
|
|
31
|
-
only through the tool's unique exact literal discriminant. Cite the
|
|
32
|
-
Evidence and report JSON Pointer changes; dynamic values, ambiguous
|
|
33
|
-
and incomplete parent-property coverage stay unknown. This is static
|
|
34
|
-
not runtime behavior. Use `run_controlled_replay` separately only
|
|
35
|
-
needs approved runtime semantics.
|
|
30
|
+
Include the complete Evidence records from both analysis calls. Accept variant
|
|
31
|
+
pairing only through the tool's unique exact literal discriminant. Cite the
|
|
32
|
+
comparison Evidence and report JSON Pointer changes; dynamic values, ambiguous
|
|
33
|
+
variants, and incomplete parent-property coverage stay unknown. This is static
|
|
34
|
+
inference, not runtime behavior. Use `run_controlled_replay` separately only
|
|
35
|
+
when the user needs approved runtime semantics.
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## Native targets
|
|
4
4
|
|
|
5
|
-
After `open_binary`, use
|
|
6
|
-
|
|
5
|
+
After `open_binary`, use focused search, procedure, or function tools directly.
|
|
6
|
+
Use `binary_overview` when target metadata or inventory context helps answer the
|
|
7
|
+
question. Prefer literal search, names, decompilation, callers, callees, and
|
|
7
8
|
cross-references. Addresses and recovered pseudocode are analysis observations,
|
|
8
9
|
not original source. Provider unavailability and unsupported metadata remain
|
|
9
10
|
unknown rather than false.
|
|
@@ -23,13 +24,16 @@ parser and must not become an implicit setup dependency.
|
|
|
23
24
|
|
|
24
25
|
## Packages and extraction
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
Use `inspect_artifact` for application bundles, archives, ZIP/APK/IPA/MSIX/AppX,
|
|
28
|
+
ASAR, or DMG inputs when the artifact graph and findings help answer the
|
|
29
|
+
question. It returns the complete artifact graph inline. Cite graph manifest
|
|
30
|
+
IDs when using them.
|
|
29
31
|
|
|
30
|
-
`extract_artifact`
|
|
31
|
-
and
|
|
32
|
-
encrypted entries are inventory facts, not extractable files.
|
|
32
|
+
Use `extract_artifact` when materialized files are needed. It takes no arguments
|
|
33
|
+
and materializes all regular files into a fresh temporary directory chosen by
|
|
34
|
+
REA. Symlinks and encrypted entries are inventory facts, not extractable files.
|
|
35
|
+
The operation still requires the filesystem-write permission grant; callers do
|
|
36
|
+
not choose the destination.
|
|
33
37
|
|
|
34
38
|
Native DMG traversal is macOS-only, read-only, and requires both operator policy
|
|
35
39
|
and `native_mount_approved: true`; without both, retain the root-hash-only result.
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { compareApplicationVersionsRequestSchema, compareJavaScriptExportShapesRequestSchema, compareSourceToBundleRequestSchema, traceApplicationFeatureRequestSchema, traceJavaScriptSemanticsRequestSchema, } from "../contracts/applicationWorkflowInputContracts.js";
|
|
3
|
-
import { AnalysisInputError } from "../domain/errors.js";
|
|
4
|
-
import { projectInputIssues } from "../domain/inputIssueProjection.js";
|
|
5
|
-
import { compareApplicationVersionsInputSchema } from "../domain/javascriptApplicationVersionComparisonSchemas.js";
|
|
6
|
-
import { compareJavaScriptExportShapesInputSchema } from "../domain/javascriptExportShapeComparisonSchemas.js";
|
|
7
|
-
import { traceApplicationFeatureInputSchema } from "../domain/javascriptFeatureTraceSchemas.js";
|
|
8
|
-
import { traceJavaScriptSemanticsInputSchema } from "../domain/javascriptSemanticTraceSchemas.js";
|
|
9
|
-
import { compareSourceToBundleInputSchema } from "../domain/sourceToBundleComparisonSchemas.js";
|
|
10
|
-
import { err, ok } from "../domain/result.js";
|
|
11
|
-
import { resolveEvidenceReferences, } from "./EvidenceReferenceResolver.js";
|
|
12
|
-
const APPLICATION_GRAPH_IDENTITIES = [
|
|
13
|
-
{
|
|
14
|
-
operation: "analyze_javascript_application",
|
|
15
|
-
predicate: "rea.javascript-application-analysis/v1",
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
operation: "analyze_javascript_application",
|
|
19
|
-
predicate: "rea.javascript-application-analysis/v2",
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
operation: "reconcile_javascript_runtime",
|
|
23
|
-
predicate: "rea.javascript-runtime-reconciliation/v1",
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
operation: "project_managed_application_graph",
|
|
27
|
-
predicate: "rea.managed-application-graph/v1",
|
|
28
|
-
},
|
|
29
|
-
];
|
|
30
|
-
/** Parse and resolve one trace adapter request into its canonical domain input. */
|
|
31
|
-
export const resolveTraceApplicationFeatureRequest = (input, lookup) => {
|
|
32
|
-
const parsed = traceApplicationFeatureRequestSchema.safeParse(input);
|
|
33
|
-
return parsed.success
|
|
34
|
-
? resolveTraceApplicationFeatureRequestValidated(parsed.data, lookup)
|
|
35
|
-
: invalid("trace_application_feature", parsed.error, input);
|
|
36
|
-
};
|
|
37
|
-
/** Resolve a trace request already parsed by the caller-facing contract. */
|
|
38
|
-
export const resolveTraceApplicationFeatureRequestValidated = (input, lookup) => {
|
|
39
|
-
const application = graphEvidence(input.application, input.application_evidence_id, lookup);
|
|
40
|
-
if (!application.ok)
|
|
41
|
-
return application;
|
|
42
|
-
const native = resolveEvidenceReferences(lookup, input.native_observation_evidence_ids);
|
|
43
|
-
if (!native.ok)
|
|
44
|
-
return native;
|
|
45
|
-
const raw = {
|
|
46
|
-
application: application.value,
|
|
47
|
-
native_observations: [...input.native_observations, ...native.value],
|
|
48
|
-
seed: input.seed,
|
|
49
|
-
direction: input.direction,
|
|
50
|
-
limits: input.limits,
|
|
51
|
-
};
|
|
52
|
-
const parsed = traceApplicationFeatureInputSchema.safeParse(raw);
|
|
53
|
-
return parsed.success
|
|
54
|
-
? ok(parsed.data)
|
|
55
|
-
: invalid("trace_application_feature", parsed.error, raw);
|
|
56
|
-
};
|
|
57
|
-
/** Parse and resolve one semantic trace adapter request. */
|
|
58
|
-
export const resolveTraceJavaScriptSemanticsRequest = (input, lookup) => {
|
|
59
|
-
const parsed = traceJavaScriptSemanticsRequestSchema.safeParse(input);
|
|
60
|
-
return parsed.success
|
|
61
|
-
? resolveTraceJavaScriptSemanticsRequestValidated(parsed.data, lookup)
|
|
62
|
-
: invalid("trace_javascript_semantics", parsed.error, input);
|
|
63
|
-
};
|
|
64
|
-
/** Resolve a semantic trace request already parsed by its public contract. */
|
|
65
|
-
export const resolveTraceJavaScriptSemanticsRequestValidated = (input, lookup) => {
|
|
66
|
-
const application = graphEvidence(input.application, input.application_evidence_id, lookup);
|
|
67
|
-
if (!application.ok)
|
|
68
|
-
return application;
|
|
69
|
-
const raw = { application: application.value, query: input.query };
|
|
70
|
-
const parsed = traceJavaScriptSemanticsInputSchema.safeParse(raw);
|
|
71
|
-
return parsed.success
|
|
72
|
-
? ok(parsed.data)
|
|
73
|
-
: invalid("trace_javascript_semantics", parsed.error, raw);
|
|
74
|
-
};
|
|
75
|
-
/** Parse and resolve one comparison adapter request into canonical input. */
|
|
76
|
-
export const resolveCompareApplicationVersionsRequest = (input, lookup) => {
|
|
77
|
-
const parsed = compareApplicationVersionsRequestSchema.safeParse(input);
|
|
78
|
-
return parsed.success
|
|
79
|
-
? resolveCompareApplicationVersionsRequestValidated(parsed.data, lookup)
|
|
80
|
-
: invalid("compare_application_versions", parsed.error, input);
|
|
81
|
-
};
|
|
82
|
-
/** Resolve a comparison request parsed by the caller-facing contract. */
|
|
83
|
-
export const resolveCompareApplicationVersionsRequestValidated = (input, lookup) => {
|
|
84
|
-
const left = graphEvidence(input.left, input.left_evidence_id, lookup);
|
|
85
|
-
if (!left.ok)
|
|
86
|
-
return left;
|
|
87
|
-
const right = graphEvidence(input.right, input.right_evidence_id, lookup);
|
|
88
|
-
if (!right.ok)
|
|
89
|
-
return right;
|
|
90
|
-
const leftNative = resolveEvidenceReferences(lookup, input.left_native_observation_evidence_ids);
|
|
91
|
-
if (!leftNative.ok)
|
|
92
|
-
return leftNative;
|
|
93
|
-
const rightNative = resolveEvidenceReferences(lookup, input.right_native_observation_evidence_ids);
|
|
94
|
-
if (!rightNative.ok)
|
|
95
|
-
return rightNative;
|
|
96
|
-
const raw = {
|
|
97
|
-
left: left.value,
|
|
98
|
-
right: right.value,
|
|
99
|
-
left_native_observations: [
|
|
100
|
-
...input.left_native_observations,
|
|
101
|
-
...leftNative.value,
|
|
102
|
-
],
|
|
103
|
-
right_native_observations: [
|
|
104
|
-
...input.right_native_observations,
|
|
105
|
-
...rightNative.value,
|
|
106
|
-
],
|
|
107
|
-
limits: input.limits,
|
|
108
|
-
...(input.unknown_registry_approved === undefined
|
|
109
|
-
? {}
|
|
110
|
-
: { unknown_registry_approved: input.unknown_registry_approved }),
|
|
111
|
-
};
|
|
112
|
-
const parsed = compareApplicationVersionsInputSchema.safeParse(raw);
|
|
113
|
-
return parsed.success
|
|
114
|
-
? ok(parsed.data)
|
|
115
|
-
: invalid("compare_application_versions", parsed.error, raw);
|
|
116
|
-
};
|
|
117
|
-
/** Parse and resolve one historical-source comparison adapter request. */
|
|
118
|
-
export const resolveCompareSourceToBundleRequest = (input, lookup) => {
|
|
119
|
-
const parsed = compareSourceToBundleRequestSchema.safeParse(input);
|
|
120
|
-
return parsed.success
|
|
121
|
-
? resolveCompareSourceToBundleRequestValidated(parsed.data, lookup)
|
|
122
|
-
: invalid("compare_source_to_bundle", parsed.error, input);
|
|
123
|
-
};
|
|
124
|
-
/** Resolve a historical-source comparison request parsed by its public contract. */
|
|
125
|
-
export const resolveCompareSourceToBundleRequestValidated = (input, lookup) => {
|
|
126
|
-
const application = graphEvidence(input.application, input.application_evidence_id, lookup);
|
|
127
|
-
if (!application.ok)
|
|
128
|
-
return application;
|
|
129
|
-
const raw = {
|
|
130
|
-
reference: input.reference,
|
|
131
|
-
application: application.value,
|
|
132
|
-
limits: input.limits,
|
|
133
|
-
...(input.unknown_registry_approved === undefined
|
|
134
|
-
? {}
|
|
135
|
-
: { unknown_registry_approved: input.unknown_registry_approved }),
|
|
136
|
-
};
|
|
137
|
-
const parsed = compareSourceToBundleInputSchema.safeParse(raw);
|
|
138
|
-
return parsed.success
|
|
139
|
-
? ok(parsed.data)
|
|
140
|
-
: invalid("compare_source_to_bundle", parsed.error, raw);
|
|
141
|
-
};
|
|
142
|
-
/** Parse and resolve an export-shape adapter request into canonical input. */
|
|
143
|
-
export const resolveCompareJavaScriptExportShapesRequest = (input, lookup) => {
|
|
144
|
-
const parsed = compareJavaScriptExportShapesRequestSchema.safeParse(input);
|
|
145
|
-
return parsed.success
|
|
146
|
-
? resolveCompareJavaScriptExportShapesRequestValidated(parsed.data, lookup)
|
|
147
|
-
: invalid("compare_javascript_export_shapes", parsed.error, input);
|
|
148
|
-
};
|
|
149
|
-
/** Resolve an export-shape request already parsed by the adapter contract. */
|
|
150
|
-
export const resolveCompareJavaScriptExportShapesRequestValidated = (input, lookup) => {
|
|
151
|
-
const left = graphEvidence(input.left, input.left_evidence_id, lookup);
|
|
152
|
-
if (!left.ok)
|
|
153
|
-
return left;
|
|
154
|
-
const right = graphEvidence(input.right, input.right_evidence_id, lookup);
|
|
155
|
-
if (!right.ok)
|
|
156
|
-
return right;
|
|
157
|
-
const raw = {
|
|
158
|
-
left: left.value,
|
|
159
|
-
right: right.value,
|
|
160
|
-
left_module_path: input.left_module_path,
|
|
161
|
-
left_export_name: input.left_export_name,
|
|
162
|
-
right_module_path: input.right_module_path,
|
|
163
|
-
right_export_name: input.right_export_name,
|
|
164
|
-
limits: input.limits,
|
|
165
|
-
...(input.unknown_registry_approved === undefined
|
|
166
|
-
? {}
|
|
167
|
-
: { unknown_registry_approved: input.unknown_registry_approved }),
|
|
168
|
-
};
|
|
169
|
-
const parsed = compareJavaScriptExportShapesInputSchema.safeParse(raw);
|
|
170
|
-
return parsed.success
|
|
171
|
-
? ok(parsed.data)
|
|
172
|
-
: invalid("compare_javascript_export_shapes", parsed.error, raw);
|
|
173
|
-
};
|
|
174
|
-
const graphEvidence = (evidence, evidenceId, lookup) => {
|
|
175
|
-
if (evidence !== undefined)
|
|
176
|
-
return ok(evidence);
|
|
177
|
-
const resolved = resolveEvidenceReferences(lookup, evidenceId === undefined ? [] : [evidenceId], APPLICATION_GRAPH_IDENTITIES);
|
|
178
|
-
return resolved.ok ? ok(resolved.value[0]) : resolved;
|
|
179
|
-
};
|
|
180
|
-
const invalid = (operation, cause, input) => err(new AnalysisInputError(operation, undefined, projectInputIssues(cause.issues, input)));
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { lstat, readFile, realpath } from "node:fs/promises";
|
|
2
|
-
import { basename, dirname, isAbsolute, relative, resolve } from "node:path";
|
|
3
|
-
import writeFileAtomic from "write-file-atomic";
|
|
4
|
-
import { EvidenceFileError } from "../domain/errors.js";
|
|
5
|
-
import { isJsonWithinLimits } from "../domain/jsonLimits.js";
|
|
6
|
-
import { err, ok } from "../domain/result.js";
|
|
7
|
-
import { canonicalizeConfiguredRoots } from "./ConfiguredRoots.js";
|
|
8
|
-
/** Read bounded JSON data from a regular file beneath an approved root. */
|
|
9
|
-
export const readBoundedJson = async (path, policy) => {
|
|
10
|
-
if (policy.roots.length === 0)
|
|
11
|
-
return err(new EvidenceFileError("read", "disabled"));
|
|
12
|
-
try {
|
|
13
|
-
const canonicalPath = await realpath(resolve(path));
|
|
14
|
-
if (!(await isApproved(canonicalPath, policy.roots)))
|
|
15
|
-
return err(new EvidenceFileError("read", "outside-root"));
|
|
16
|
-
const stats = await lstat(canonicalPath);
|
|
17
|
-
if (!stats.isFile())
|
|
18
|
-
return err(new EvidenceFileError("read", "not-file"));
|
|
19
|
-
if (stats.size > policy.maxBytes)
|
|
20
|
-
return err(new EvidenceFileError("read", "too-large"));
|
|
21
|
-
const encoded = await readFile(canonicalPath);
|
|
22
|
-
if (encoded.byteLength > policy.maxBytes)
|
|
23
|
-
return err(new EvidenceFileError("read", "too-large"));
|
|
24
|
-
let decoded;
|
|
25
|
-
try {
|
|
26
|
-
decoded = JSON.parse(encoded.toString("utf8"));
|
|
27
|
-
}
|
|
28
|
-
catch (cause) {
|
|
29
|
-
return err(new EvidenceFileError("read", "invalid-json", { cause }));
|
|
30
|
-
}
|
|
31
|
-
return isJsonWithinLimits(decoded, policy)
|
|
32
|
-
? ok(decoded)
|
|
33
|
-
: err(new EvidenceFileError("read", "too-large"));
|
|
34
|
-
}
|
|
35
|
-
catch (cause) {
|
|
36
|
-
return err(new EvidenceFileError("read", "io", { cause }));
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
/** Atomically write bounded text to a regular file beneath an approved root. */
|
|
40
|
-
export const writeBoundedText = async (encoded, path, overwrite, policy) => {
|
|
41
|
-
if (policy.roots.length === 0)
|
|
42
|
-
return err(new EvidenceFileError("write", "disabled"));
|
|
43
|
-
const bytes = Buffer.byteLength(encoded, "utf8");
|
|
44
|
-
if (bytes > policy.maxBytes)
|
|
45
|
-
return err(new EvidenceFileError("write", "too-large"));
|
|
46
|
-
try {
|
|
47
|
-
const requestedPath = resolve(path);
|
|
48
|
-
const canonicalParent = await realpath(dirname(requestedPath));
|
|
49
|
-
const destination = resolve(canonicalParent, basename(requestedPath));
|
|
50
|
-
if (!(await isApproved(destination, policy.roots)))
|
|
51
|
-
return err(new EvidenceFileError("write", "outside-root"));
|
|
52
|
-
const existing = await lstat(destination).catch((cause) => {
|
|
53
|
-
if (isFileNotFound(cause))
|
|
54
|
-
return undefined;
|
|
55
|
-
throw cause;
|
|
56
|
-
});
|
|
57
|
-
if (existing !== undefined) {
|
|
58
|
-
if (!overwrite)
|
|
59
|
-
return err(new EvidenceFileError("write", "exists"));
|
|
60
|
-
if (!existing.isFile() || existing.isSymbolicLink())
|
|
61
|
-
return err(new EvidenceFileError("write", "not-file"));
|
|
62
|
-
}
|
|
63
|
-
await writeFileAtomic(destination, encoded, {
|
|
64
|
-
encoding: "utf8",
|
|
65
|
-
mode: 0o600,
|
|
66
|
-
fsync: true,
|
|
67
|
-
});
|
|
68
|
-
return ok({ path: requestedPath, bytes });
|
|
69
|
-
}
|
|
70
|
-
catch (cause) {
|
|
71
|
-
return err(new EvidenceFileError("write", "io", { cause }));
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
const isApproved = async (candidate, roots) => {
|
|
75
|
-
for (const root of await canonicalizeConfiguredRoots(roots.map((configuredRoot) => resolve(configuredRoot)))) {
|
|
76
|
-
const relation = relative(root, candidate);
|
|
77
|
-
if (relation === "" ||
|
|
78
|
-
(!relation.startsWith("..") && !isAbsolute(relation)))
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
return false;
|
|
82
|
-
};
|
|
83
|
-
const isFileNotFound = (cause) => typeof cause === "object" &&
|
|
84
|
-
cause !== null &&
|
|
85
|
-
"code" in cause &&
|
|
86
|
-
cause.code === "ENOENT";
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
|
|
2
|
-
import { createEvidence } from "../domain/evidence.js";
|
|
3
|
-
import { AnalysisCancelledError, ArtifactOperationError, } from "../domain/errors.js";
|
|
4
|
-
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
5
|
-
import { err, ok } from "../domain/result.js";
|
|
6
|
-
import { paginateArtifactInventory, } from "./ArtifactInventory.js";
|
|
7
|
-
import { scanAuthorizedArtifactInventory } from "./AuthorizedArtifactInventory.js";
|
|
8
|
-
import { ARTIFACT_GRAPH_PROVIDER } from "./InvestigationProviders.js";
|
|
9
|
-
export const AUTOMATIC_RUN_LIMITATION = "Automatic cross-version runs compare shipped artifact structure only; they do not execute either version.";
|
|
10
|
-
/** Start both independent version scans while preserving left/right identity. */
|
|
11
|
-
export const scanVersionInventories = async (options, scanner = scanAuthorizedArtifactInventory) => {
|
|
12
|
-
const [left, right] = await Promise.all([
|
|
13
|
-
scanner(options.leftPath, options.inputRoots, options.limits, {
|
|
14
|
-
signal: options.signal,
|
|
15
|
-
integrity: options.integrity,
|
|
16
|
-
}),
|
|
17
|
-
scanner(options.rightPath, options.inputRoots, options.limits, {
|
|
18
|
-
signal: options.signal,
|
|
19
|
-
integrity: options.integrity,
|
|
20
|
-
}),
|
|
21
|
-
]);
|
|
22
|
-
return { left, right };
|
|
23
|
-
};
|
|
24
|
-
/** Authorize and scan both inputs once under the same bounded traversal policy. */
|
|
25
|
-
export const scanVersions = async (input, inputRoots, signal, integrityContinueEnabled = false) => {
|
|
26
|
-
try {
|
|
27
|
-
if (signal?.aborted === true)
|
|
28
|
-
return err(new AnalysisCancelledError("find_changed_behavior"));
|
|
29
|
-
const limits = artifactLimits(input.options);
|
|
30
|
-
const integrity = {
|
|
31
|
-
mode: input.integrity_policy,
|
|
32
|
-
approved: input.integrity_continue_approved,
|
|
33
|
-
enabled: integrityContinueEnabled,
|
|
34
|
-
maxMismatches: input.max_integrity_mismatches,
|
|
35
|
-
};
|
|
36
|
-
return ok(await scanVersionInventories({
|
|
37
|
-
leftPath: input.left_path,
|
|
38
|
-
rightPath: input.right_path,
|
|
39
|
-
inputRoots,
|
|
40
|
-
limits,
|
|
41
|
-
...(signal === undefined ? {} : { signal }),
|
|
42
|
-
integrity,
|
|
43
|
-
}));
|
|
44
|
-
}
|
|
45
|
-
catch (cause) {
|
|
46
|
-
if (cause instanceof ArtifactReaderFailure)
|
|
47
|
-
return err(new ArtifactOperationError("inventory_artifact", cause.reason, cause.details));
|
|
48
|
-
return err(new ArtifactOperationError("inventory_artifact", "io"));
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
/** Project complete snapshots into bounded, comparable Evidence page sets. */
|
|
52
|
-
export const createInventoryEvidencePages = (input, snapshots) => {
|
|
53
|
-
const left = inventoryPages(input.left_path, snapshots.left, input);
|
|
54
|
-
const right = inventoryPages(input.right_path, snapshots.right, input);
|
|
55
|
-
if (left.length > 100 || right.length > 100)
|
|
56
|
-
return err(new ArtifactOperationError("inventory_artifact", "limit"));
|
|
57
|
-
return ok({ left, right });
|
|
58
|
-
};
|
|
59
|
-
/** Reduce a snapshot to the content commitments used by run identity. */
|
|
60
|
-
export const targetFor = (snapshot) => ({
|
|
61
|
-
root_sha256: snapshot.manifest.root_sha256,
|
|
62
|
-
graph_sha256: snapshot.manifest.graph_sha256,
|
|
63
|
-
manifest_id: snapshot.manifest.manifest_id,
|
|
64
|
-
format: snapshot.manifest.root_format,
|
|
65
|
-
});
|
|
66
|
-
/** Preserve scan and execution limitations in stable order. */
|
|
67
|
-
export const runLimitations = (snapshots) => [
|
|
68
|
-
...new Set([
|
|
69
|
-
...snapshots.left.limitations.map((item) => `Left: ${item}`),
|
|
70
|
-
...snapshots.right.limitations.map((item) => `Right: ${item}`),
|
|
71
|
-
AUTOMATIC_RUN_LIMITATION,
|
|
72
|
-
]),
|
|
73
|
-
].sort((left, right) => left.localeCompare(right));
|
|
74
|
-
const inventoryPages = (path, snapshot, input) => {
|
|
75
|
-
const options = input.options;
|
|
76
|
-
const count = Math.max(1, Math.ceil(snapshot.nodes.length / options.page_size), Math.ceil(snapshot.occurrences.length / options.page_size), Math.ceil(snapshot.edges.length / options.page_size));
|
|
77
|
-
return Array.from({ length: count }, (_, index) => inventoryPage(path, snapshot, input, index * options.page_size));
|
|
78
|
-
};
|
|
79
|
-
const inventoryPage = (path, snapshot, input, offset) => {
|
|
80
|
-
const options = input.options;
|
|
81
|
-
const result = paginateArtifactInventory(snapshot, {
|
|
82
|
-
nodeOffset: offset,
|
|
83
|
-
nodeLimit: options.page_size,
|
|
84
|
-
occurrenceOffset: offset,
|
|
85
|
-
occurrenceLimit: options.page_size,
|
|
86
|
-
edgeOffset: offset,
|
|
87
|
-
edgeLimit: options.page_size,
|
|
88
|
-
});
|
|
89
|
-
return createEvidence({
|
|
90
|
-
path,
|
|
91
|
-
sha256: snapshot.manifest.root_sha256,
|
|
92
|
-
format: snapshot.manifest.root_format,
|
|
93
|
-
}, ARTIFACT_GRAPH_PROVIDER, {
|
|
94
|
-
operation: "inventory_artifact",
|
|
95
|
-
parameters: {
|
|
96
|
-
node_offset: offset,
|
|
97
|
-
node_limit: options.page_size,
|
|
98
|
-
occurrence_offset: offset,
|
|
99
|
-
occurrence_limit: options.page_size,
|
|
100
|
-
edge_offset: offset,
|
|
101
|
-
edge_limit: options.page_size,
|
|
102
|
-
max_entries: options.max_entries,
|
|
103
|
-
max_total_bytes: options.max_total_bytes,
|
|
104
|
-
max_entry_bytes: options.max_entry_bytes,
|
|
105
|
-
max_compression_ratio: options.max_compression_ratio,
|
|
106
|
-
max_depth: options.max_depth,
|
|
107
|
-
max_path_bytes: options.max_path_bytes,
|
|
108
|
-
integrity_policy: input.integrity_policy,
|
|
109
|
-
integrity_continue_approved: input.integrity_continue_approved,
|
|
110
|
-
max_integrity_mismatches: input.max_integrity_mismatches,
|
|
111
|
-
},
|
|
112
|
-
result: jsonValueSchema.parse(result),
|
|
113
|
-
rawResult: null,
|
|
114
|
-
limitations: result.limitations,
|
|
115
|
-
locations: result.occurrences.items.map(({ logical_path: logicalPath }) => ({
|
|
116
|
-
kind: "artifact-path",
|
|
117
|
-
path: logicalPath,
|
|
118
|
-
})),
|
|
119
|
-
});
|
|
120
|
-
};
|
|
121
|
-
const artifactLimits = (options) => ({
|
|
122
|
-
maxEntries: options.max_entries,
|
|
123
|
-
maxTotalBytes: options.max_total_bytes,
|
|
124
|
-
maxEntryBytes: options.max_entry_bytes,
|
|
125
|
-
maxCompressionRatio: options.max_compression_ratio,
|
|
126
|
-
maxDepth: options.max_depth,
|
|
127
|
-
maxPathBytes: options.max_path_bytes,
|
|
128
|
-
});
|