rea-agents 3.1.0 → 3.2.1
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 +72 -95
- package/bridge/ghidra/ReaGhidraBridge.java +609 -841
- package/bridge/hopper_bridge.py +99 -344
- package/dist/application/AbortablePromise.js +6 -3
- 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/scanCanonical.js +8 -12
- package/dist/application/ArtifactInventory/scanReader.js +69 -51
- package/dist/application/ArtifactInventory.js +6 -14
- package/dist/application/AuthorizedArtifactInventory.js +3 -13
- package/dist/application/BinarySession.js +41 -13
- package/dist/application/BinarySessionComposition.js +0 -11
- package/dist/application/BinarySessionOpen.js +2 -1
- package/dist/application/BinarySessionRecords.js +5 -93
- package/dist/application/BinarySessionStatus.js +5 -16
- package/dist/application/BinaryTargetResolver.js +216 -0
- package/dist/application/BrowserEvidence.js +42 -58
- 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/CapabilityInventory.js +10 -15
- 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 +3 -8
- package/dist/application/ElectronActiveObservationService.js +3 -6
- 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 +76 -44
- package/dist/application/EvidenceBundleCommands.js +11 -11
- package/dist/application/EvidenceBundleFiles.js +9 -15
- package/dist/application/EvidenceLedger.js +6 -41
- 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/JavaScriptReplayPlanning.js +9 -3
- package/dist/application/JavaScriptReplayService.js +6 -32
- 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 +5 -8
- package/dist/application/NativeApiInspection.js +2 -7
- package/dist/application/NativeUiActionTrace.js +394 -0
- package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
- 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 +5 -12
- package/dist/application/ProcessCheckpoints.js +29 -11
- package/dist/application/ProcessCli.js +6 -16
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessHarness.js +52 -17
- 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 -96
- 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 +19 -45
- 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 -93
- 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/artifacts/ArtifactPaths.js +2 -5
- package/dist/artifacts/ArtifactProvider.js +36 -58
- 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 +15 -24
- 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 -98
- package/dist/browser/CdpCaptureValues.js +21 -21
- package/dist/browser/CdpConnection.js +10 -25
- package/dist/browser/CdpElectronInspection.js +26 -50
- 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 +9 -14
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
- package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
- package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
- 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 +3 -5
- package/dist/browser/PlaywrightScenarioEvents.js +45 -94
- package/dist/browser/PlaywrightScenarioSession.js +14 -30
- package/dist/browser/PngVisualDiff.js +22 -14
- package/dist/browser/SensitiveTextCapture.js +0 -17
- package/dist/browser/V8InspectorCaptureProjection.js +7 -8
- 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 +0 -54
- 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 +5 -270
- package/dist/cli/setupCommands.js +3 -12
- package/dist/cli/utilityCommands.js +7 -41
- package/dist/cli.js +0 -2
- package/dist/cliApplicationCommands.js +42 -112
- package/dist/cliBrowserAdvancedCommands.js +10 -106
- package/dist/cliBrowserCommands.js +15 -127
- package/dist/cliBrowserContext.js +30 -0
- package/dist/cliCommandNames.js +4 -5
- package/dist/cliElectronCommands.js +8 -72
- package/dist/cliEvidenceCommands.js +8 -77
- package/dist/cliJavaScriptRuntimeCommands.js +9 -91
- package/dist/cliJsonInput.js +4 -14
- package/dist/cliObservationOptions.js +11 -96
- package/dist/cliPolicyCommands.js +2 -17
- package/dist/cliProcessCommands.js +3 -3
- package/dist/cliSetup.js +0 -13
- package/dist/config/browserScenario.js +2 -2
- package/dist/config/environment.js +0 -9
- package/dist/config/parseConfig.js +1 -33
- package/dist/config/parsers.js +6 -27
- package/dist/config/passiveObservation.js +7 -77
- package/dist/config/permissions.js +0 -7
- package/dist/contracts/analysisSearchContract.js +2 -5
- package/dist/contracts/applicationToolContracts.js +56 -109
- package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
- package/dist/contracts/artifactComparisonExample.js +58 -60
- package/dist/contracts/artifactToolContracts.js +20 -67
- package/dist/contracts/browserScenarioToolContracts.js +6 -51
- package/dist/contracts/browserToolContracts.js +8 -73
- package/dist/contracts/electronToolContracts.js +8 -108
- package/dist/contracts/enhancedInputs.js +23 -54
- 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 +2 -2
- 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 +6 -95
- package/dist/contracts/managedWorkflowExamples.js +77 -128
- package/dist/contracts/managedWorkflowToolContracts.js +51 -77
- package/dist/contracts/nativeToolContracts.js +7 -11
- 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 +6 -15
- package/dist/contracts/toolContractExamples.js +11 -11
- package/dist/contracts/toolContractHelpers.js +0 -4
- package/dist/contracts/toolContracts.js +60 -71
- package/dist/contracts/toolEffects.js +5 -13
- package/dist/contracts/toolOutputSchemaGroups.js +37 -91
- package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
- package/dist/contracts/toolSchemaMetadata.js +8 -19
- package/dist/contracts/unknownContractExamples.js +0 -2
- 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 -54
- package/dist/domain/appleApplication.js +24 -67
- 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 -221
- package/dist/domain/browserCaptureComparison.js +47 -24
- package/dist/domain/browserObservation.js +28 -193
- 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 +20 -19
- package/dist/domain/callPath.js +47 -167
- 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 +36 -8
- package/dist/domain/conformanceTrustGate.js +23 -14
- package/dist/domain/customProtocolCapture.js +1 -1
- package/dist/domain/electronActiveObservation.js +70 -103
- package/dist/domain/electronObservation.js +14 -80
- 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 +10 -17
- package/dist/domain/errors.js +33 -54
- package/dist/domain/eventProcessTree.js +20 -12
- 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 +4 -11
- package/dist/domain/functionComparisonResults.js +25 -15
- package/dist/domain/functionComparisonSchemas.js +49 -33
- package/dist/domain/functionDossierEvidence.js +31 -156
- package/dist/domain/hopperStartupFailure.js +1 -1
- package/dist/domain/hopperValues.js +15 -136
- 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 +68 -75
- 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 +24 -41
- package/dist/domain/javascriptRuntimeLoadState.js +3 -8
- package/dist/domain/javascriptRuntimeObservation.js +42 -103
- package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
- package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
- package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
- 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 +2 -7
- 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 +1 -5
- 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/processCaptureValidation.js +1 -7
- package/dist/domain/processComparison.js +3 -12
- package/dist/domain/processReactiveMatching.js +29 -50
- 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 +33 -18
- package/dist/domain/processScenario.js +56 -90
- package/dist/domain/processTraceComparison.js +0 -8
- package/dist/domain/processTraceEvaluation.js +14 -4
- package/dist/domain/processTraceSpecification.js +11 -17
- package/dist/domain/protocolCapture.js +3 -3
- 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 +36 -38
- 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 +1 -5
- package/dist/domain/replayMachine.js +19 -31
- package/dist/domain/replayMachineRun.js +15 -63
- package/dist/domain/replayMachineRuntime.js +41 -41
- 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 +9 -85
- package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
- package/dist/domain/sourceToBundleSignals.js +4 -15
- package/dist/domain/staticRuntimeCorrelation.js +37 -49
- 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 +33 -73
- 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 -41
- 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 +4 -12
- 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 +65 -108
- package/dist/ghidra/GhidraInstallation.js +98 -42
- package/dist/ghidra/GhidraInventoryValues.js +16 -85
- package/dist/ghidra/GhidraLauncher.js +0 -8
- package/dist/ghidra/GhidraProvider.js +15 -22
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
- package/dist/ghidra/GhidraRequestQueue.js +6 -30
- package/dist/ghidra/GhidraResponseBuffer.js +1 -7
- package/dist/ghidra/GhidraSessionValues.js +0 -2
- package/dist/ghidra/GhidraTransport.js +4 -7
- package/dist/ghidra/protocol.js +2 -2
- package/dist/hopper/BridgeLauncher.js +112 -36
- package/dist/hopper/HopperAnalysisProfile.js +1 -1
- package/dist/hopper/HopperCleanup.js +6 -3
- package/dist/hopper/HopperClient.js +4 -7
- package/dist/hopper/HopperProcessDiagnostic.js +2 -2
- package/dist/hopper/HopperProvider.js +0 -16
- 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 +5 -16
- package/dist/hopper/protocol.js +6 -4
- package/dist/main/reload.js +0 -3
- package/dist/main/shutdown.js +1 -1
- package/dist/main/state.js +0 -9
- package/dist/main/transport.js +0 -5
- package/dist/mcpDoctor.js +25 -45
- 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/ProcessOwnership.js +3 -2
- package/dist/process/ProcessOwnershipObservation.js +0 -1
- package/dist/process/ProviderProcess.js +7 -28
- 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 +3 -5
- package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
- package/dist/replay/LinuxRuntimeClosure.js +1 -3
- package/dist/replay/ReplayOutcome.js +1 -3
- package/dist/replay/ReplayProcessLifecycle.js +32 -7
- package/dist/replay/ReplaySeccompFile.js +29 -0
- package/dist/replay/ReplayWorkerProtocol.js +0 -2
- package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
- package/dist/server/ProcessCaptureElicitation.js +4 -8
- package/dist/server/createServer.js +6 -44
- package/dist/server/promptCompletion.js +37 -61
- package/dist/server/recordDerivedEvidence.js +1 -1
- package/dist/server/registerApplicationTools/characterization.js +4 -8
- package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
- package/dist/server/registerApplicationTools/compareVersions.js +5 -10
- package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
- package/dist/server/registerApplicationTools/coverage.js +6 -71
- package/dist/server/registerApplicationTools/helpers.js +1 -13
- package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
- package/dist/server/registerApplicationTools/traceFeature.js +5 -9
- package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
- package/dist/server/registerApplicationTools.js +0 -2
- package/dist/server/registerArtifactComparisonTool.js +23 -27
- package/dist/server/registerBrowserScenarioTool.js +4 -4
- package/dist/server/registerBrowserTools.js +5 -8
- package/dist/server/registerBundleComparisonTool.js +5 -7
- package/dist/server/registerCloseLifecycleTool.js +2 -16
- package/dist/server/registerElectronTools.js +10 -29
- package/dist/server/registerEnhancedTools.js +10 -11
- package/dist/server/registerEvidenceTools.js +15 -22
- package/dist/server/registerFunctionComparisonTool.js +30 -25
- package/dist/server/registerInvestigationTools/helpers.js +3 -32
- package/dist/server/registerInvestigationTools.js +20 -116
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
- package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
- package/dist/server/registerOfficialTools.js +1 -43
- package/dist/server/registerProcessComparisonTool.js +33 -23
- package/dist/server/registerPrompts.js +19 -17
- package/dist/server/registerSessionRecordTools.js +10 -156
- package/dist/server/registerSessionStatusTool.js +6 -69
- package/dist/server/registerSessionTools.js +10 -51
- package/dist/server/sessionAvailabilityPolicy.js +0 -2
- package/dist/server/sessionEvidence.js +9 -15
- package/dist/server/sessionToolPolicies.js +0 -8
- package/dist/server/toolResult.js +14 -50
- package/dist/serverIdentity.js +0 -20
- package/install.sh +1 -1
- package/package.json +11 -7
- package/scripts/electron-active-hook.cjs +23 -55
- package/scripts/hopper-demo-x11.py +13 -32
- package/skills/reverse-engineer-anything/SKILL.md +47 -12
- 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 -188
- package/dist/application/BoundedJsonFiles.js +0 -86
- package/dist/application/CrossVersionInventory.js +0 -129
- 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 -347
- package/dist/domain/jsonLimits.js +0 -26
- package/dist/domain/knownPageCoverage.js +0 -29
- package/dist/domain/processPairedExperiment.js +0 -128
- package/dist/server/javascriptApplicationResult.js +0 -106
- package/dist/server/permissionFailure.js +0 -12
- package/dist/server/registerApplicationTools/readiness.js +0 -50
- 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
|
@@ -1,13 +1,38 @@
|
|
|
1
|
+
import { temporaryFilterHandle } from "./ReplaySeccompFile.js";
|
|
1
2
|
import { constants } from "node:fs";
|
|
2
|
-
import {
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import { join } from "node:path";
|
|
3
|
+
import { open, readFile, realpath, stat } from "node:fs/promises";
|
|
5
4
|
import { fileURLToPath } from "node:url";
|
|
6
5
|
import { spawn } from "node:child_process";
|
|
7
6
|
import { digestBytes } from "../application/JavaScriptReplayPlanning.js";
|
|
8
|
-
import {
|
|
7
|
+
import { linuxX64ReplaySeccompDigest } from "./LinuxSeccompPolicy.js";
|
|
9
8
|
import { resolveLinuxRuntimeClosure } from "./LinuxRuntimeClosure.js";
|
|
10
|
-
|
|
9
|
+
import { readBoundedFileBytes } from "../process/BoundedFileBytes.js";
|
|
10
|
+
const bubblewrapProbeArguments = (command) => [
|
|
11
|
+
"--unshare-all",
|
|
12
|
+
"--unshare-user",
|
|
13
|
+
"--disable-userns",
|
|
14
|
+
"--new-session",
|
|
15
|
+
"--die-with-parent",
|
|
16
|
+
"--cap-drop",
|
|
17
|
+
"ALL",
|
|
18
|
+
"--ro-bind",
|
|
19
|
+
"/usr",
|
|
20
|
+
"/usr",
|
|
21
|
+
"--ro-bind",
|
|
22
|
+
"/lib",
|
|
23
|
+
"/lib",
|
|
24
|
+
"--ro-bind-try",
|
|
25
|
+
"/lib64",
|
|
26
|
+
"/lib64",
|
|
27
|
+
"--proc",
|
|
28
|
+
"/proc",
|
|
29
|
+
"--dev",
|
|
30
|
+
"/dev",
|
|
31
|
+
"--seccomp",
|
|
32
|
+
"3",
|
|
33
|
+
"--",
|
|
34
|
+
...command,
|
|
35
|
+
];
|
|
11
36
|
/** Production planning host for descriptor-backed reads and fail-closed probes. */
|
|
12
37
|
export class SystemJavaScriptReplayHost {
|
|
13
38
|
async readSource(path, maximumBytes) {
|
|
@@ -17,7 +42,9 @@ export class SystemJavaScriptReplayHost {
|
|
|
17
42
|
const metadata = await handle.stat();
|
|
18
43
|
if (!metadata.isFile() || metadata.size > maximumBytes)
|
|
19
44
|
throw new RangeError(`Replay source exceeds its declared limit: ${canonicalPath}`);
|
|
20
|
-
const bytes = await handle
|
|
45
|
+
const bytes = await readBoundedFileBytes(handle, maximumBytes);
|
|
46
|
+
if (bytes === undefined)
|
|
47
|
+
throw new RangeError(`Replay source exceeds its declared limit: ${canonicalPath}`);
|
|
21
48
|
return { canonicalPath, bytes };
|
|
22
49
|
}
|
|
23
50
|
finally {
|
|
@@ -31,7 +58,7 @@ export class SystemJavaScriptReplayHost {
|
|
|
31
58
|
throw new TypeError(`Replay executable is not a file: ${canonicalPath}`);
|
|
32
59
|
const [bytes, version] = await Promise.all([
|
|
33
60
|
readFile(canonicalPath),
|
|
34
|
-
capture(canonicalPath, versionArguments
|
|
61
|
+
capture(canonicalPath, versionArguments),
|
|
35
62
|
]);
|
|
36
63
|
return {
|
|
37
64
|
path: canonicalPath,
|
|
@@ -57,65 +84,14 @@ export class SystemJavaScriptReplayHost {
|
|
|
57
84
|
if ((await readFile("/sys/fs/cgroup/cgroup.controllers", "utf8")).trim()
|
|
58
85
|
.length === 0)
|
|
59
86
|
throw new TypeError("Controlled replay requires delegated cgroup v2");
|
|
60
|
-
const
|
|
61
|
-
const filterPath = join(directory, "seccomp.bpf");
|
|
62
|
-
await writeFile(filterPath, buildLinuxX64ReplaySeccomp(), { mode: 0o600 });
|
|
63
|
-
const filter = await open(filterPath, "r");
|
|
87
|
+
const filter = await temporaryFilterHandle();
|
|
64
88
|
try {
|
|
65
|
-
await run(policy.bubblewrapPath, [
|
|
66
|
-
|
|
67
|
-
"--unshare-user",
|
|
68
|
-
"--disable-userns",
|
|
69
|
-
"--new-session",
|
|
70
|
-
"--die-with-parent",
|
|
71
|
-
"--cap-drop",
|
|
72
|
-
"ALL",
|
|
73
|
-
"--ro-bind",
|
|
74
|
-
"/usr",
|
|
75
|
-
"/usr",
|
|
76
|
-
"--ro-bind",
|
|
77
|
-
"/lib",
|
|
78
|
-
"/lib",
|
|
79
|
-
"--ro-bind-try",
|
|
80
|
-
"/lib64",
|
|
81
|
-
"/lib64",
|
|
82
|
-
"--proc",
|
|
83
|
-
"/proc",
|
|
84
|
-
"--dev",
|
|
85
|
-
"/dev",
|
|
86
|
-
"--seccomp",
|
|
87
|
-
"3",
|
|
88
|
-
"--",
|
|
89
|
-
"/usr/bin/true",
|
|
90
|
-
], ["ignore", "pipe", "pipe", filter.fd]);
|
|
91
|
-
await runExpectFailure(policy.bubblewrapPath, [
|
|
92
|
-
"--unshare-all",
|
|
93
|
-
"--unshare-user",
|
|
94
|
-
"--disable-userns",
|
|
95
|
-
"--new-session",
|
|
96
|
-
"--die-with-parent",
|
|
97
|
-
"--cap-drop",
|
|
98
|
-
"ALL",
|
|
99
|
-
"--ro-bind",
|
|
100
|
-
"/usr",
|
|
101
|
-
"/usr",
|
|
102
|
-
"--ro-bind",
|
|
103
|
-
"/lib",
|
|
104
|
-
"/lib",
|
|
105
|
-
"--ro-bind-try",
|
|
106
|
-
"/lib64",
|
|
107
|
-
"/lib64",
|
|
108
|
-
"--proc",
|
|
109
|
-
"/proc",
|
|
110
|
-
"--dev",
|
|
111
|
-
"/dev",
|
|
112
|
-
"--seccomp",
|
|
113
|
-
"3",
|
|
114
|
-
"--",
|
|
89
|
+
await run(policy.bubblewrapPath, bubblewrapProbeArguments(["/usr/bin/true"]), ["ignore", "pipe", "pipe", filter.handle.fd]);
|
|
90
|
+
await runExpectFailure(policy.bubblewrapPath, bubblewrapProbeArguments([
|
|
115
91
|
"/usr/bin/unshare",
|
|
116
92
|
"--mount",
|
|
117
93
|
"/usr/bin/true",
|
|
118
|
-
], ["ignore", "pipe", "pipe", filter.fd]);
|
|
94
|
+
]), ["ignore", "pipe", "pipe", filter.handle.fd]);
|
|
119
95
|
await run(policy.systemdRunPath, [
|
|
120
96
|
"--user",
|
|
121
97
|
"--pipe",
|
|
@@ -131,45 +107,40 @@ export class SystemJavaScriptReplayHost {
|
|
|
131
107
|
}
|
|
132
108
|
finally {
|
|
133
109
|
await filter.close();
|
|
134
|
-
await rm(directory, { recursive: true, force: true });
|
|
135
110
|
}
|
|
136
111
|
}
|
|
137
112
|
}
|
|
138
|
-
const capture = async (executable, arguments_
|
|
113
|
+
const capture = async (executable, arguments_) => {
|
|
139
114
|
if (arguments_.length === 0)
|
|
140
115
|
return "content-addressed-worker-v1";
|
|
141
|
-
const result = await collect(executable, arguments_
|
|
116
|
+
const result = await collect(executable, arguments_);
|
|
142
117
|
if (result.code !== 0)
|
|
143
118
|
throw new TypeError(`Replay executable probe failed: ${executable}`);
|
|
144
119
|
return result.stdout.length > 0 ? result.stdout : result.stderr;
|
|
145
120
|
};
|
|
146
121
|
const run = async (executable, arguments_, stdio) => {
|
|
147
|
-
const result = await collect(executable, arguments_,
|
|
122
|
+
const result = await collect(executable, arguments_, stdio);
|
|
148
123
|
if (result.code !== 0)
|
|
149
124
|
throw new TypeError(`Replay feature probe failed (${String(result.code)}): ${executable}: ${result.stderr.trim()}`);
|
|
150
125
|
};
|
|
151
126
|
const runExpectFailure = async (executable, arguments_, stdio) => {
|
|
152
|
-
const result = await collect(executable, arguments_,
|
|
127
|
+
const result = await collect(executable, arguments_, stdio);
|
|
153
128
|
if (result.code === 0)
|
|
154
129
|
throw new TypeError(`Replay denial probe unexpectedly succeeded: ${executable}`);
|
|
155
130
|
};
|
|
156
|
-
const collect = async (executable, arguments_,
|
|
131
|
+
const collect = async (executable, arguments_, stdio = ["ignore", "pipe", "pipe"]) => new Promise((resolve, reject) => {
|
|
157
132
|
const child = spawn(executable, [...arguments_], { stdio });
|
|
158
133
|
const timeout = setTimeout(() => child.kill("SIGKILL"), 5_000);
|
|
159
134
|
timeout.unref();
|
|
160
135
|
let stdout = "";
|
|
161
136
|
let stderr = "";
|
|
162
|
-
const retain = (current, chunk) => {
|
|
163
|
-
const remaining = Math.max(0, maximumBytes - Buffer.byteLength(current));
|
|
164
|
-
return current + chunk.subarray(0, remaining).toString("utf8");
|
|
165
|
-
};
|
|
166
137
|
if (child.stdout !== null)
|
|
167
138
|
child.stdout.on("data", (chunk) => {
|
|
168
|
-
stdout
|
|
139
|
+
stdout += chunk.toString("utf8");
|
|
169
140
|
});
|
|
170
141
|
if (child.stderr !== null)
|
|
171
142
|
child.stderr.on("data", (chunk) => {
|
|
172
|
-
stderr
|
|
143
|
+
stderr += chunk.toString("utf8");
|
|
173
144
|
});
|
|
174
145
|
child.once("error", (error) => {
|
|
175
146
|
clearTimeout(timeout);
|
|
@@ -4,7 +4,6 @@ import { z } from "zod";
|
|
|
4
4
|
import { PermissionRequiredError } from "../domain/errors.js";
|
|
5
5
|
import { isPermissionRequestWithinCeiling, } from "../domain/permissionPolicy.js";
|
|
6
6
|
const RESPONSE_KEY = "process_capture_grant";
|
|
7
|
-
const STATE_VERSION = 1;
|
|
8
7
|
/** Shared continuation, replay, and round limits for process capture consent. */
|
|
9
8
|
export const PROCESS_CAPTURE_ELICITATION_POLICY = {
|
|
10
9
|
protocolVersions: ["2026-07-28"],
|
|
@@ -22,7 +21,6 @@ const grantResponseJsonSchema = { ...z.toJSONSchema(grantResponseSchema) };
|
|
|
22
21
|
Reflect.deleteProperty(grantResponseJsonSchema, "$schema");
|
|
23
22
|
Reflect.deleteProperty(grantResponseJsonSchema, "additionalProperties");
|
|
24
23
|
const stateSchema = z.strictObject({
|
|
25
|
-
version: z.literal(STATE_VERSION),
|
|
26
24
|
nonce: z.string().uuid(),
|
|
27
25
|
request: z.strictObject({
|
|
28
26
|
capability: z.literal("process_capture"),
|
|
@@ -37,14 +35,13 @@ const stateSchema = z.strictObject({
|
|
|
37
35
|
});
|
|
38
36
|
/** Authorize capture or return a signed MCP input-required continuation. */
|
|
39
37
|
export const authorizeProcessCaptureWithElicitation = async (authority, request, context, elicitation) => {
|
|
40
|
-
const supported = elicitation.supported(context);
|
|
41
38
|
const initial = await authority.authorize(request, "read", {
|
|
42
|
-
|
|
39
|
+
remediation: elicitation.supported(context) ? "elicit" : "configure",
|
|
43
40
|
});
|
|
44
41
|
if (initial.ok || !(initial.error instanceof PermissionRequiredError))
|
|
45
42
|
return initial;
|
|
46
43
|
const denied = initial.error;
|
|
47
|
-
if (
|
|
44
|
+
if (denied.remediation !== "elicit" ||
|
|
48
45
|
denied.requested.capability !== "process_capture" ||
|
|
49
46
|
denied.ceiling === null ||
|
|
50
47
|
!isPermissionRequestWithinCeiling(denied.requested, denied.ceiling))
|
|
@@ -70,7 +67,6 @@ export const authorizeProcessCaptureWithElicitation = async (authority, request,
|
|
|
70
67
|
return initial;
|
|
71
68
|
}
|
|
72
69
|
const state = await elicitation.stateCodec.mint({
|
|
73
|
-
version: STATE_VERSION,
|
|
74
70
|
nonce: randomUUID(),
|
|
75
71
|
request: {
|
|
76
72
|
capability: "process_capture",
|
|
@@ -106,12 +102,12 @@ const grantAndAuthorize = async (authority, request, lifetime) => {
|
|
|
106
102
|
const granted = authority.grant(grant);
|
|
107
103
|
if (!granted.ok)
|
|
108
104
|
return authority.authorize(request, "read", {
|
|
109
|
-
|
|
105
|
+
remediation: "elicit",
|
|
110
106
|
});
|
|
111
107
|
let authorized;
|
|
112
108
|
try {
|
|
113
109
|
authorized = await authority.authorize(request, "read", {
|
|
114
|
-
|
|
110
|
+
remediation: "elicit",
|
|
115
111
|
});
|
|
116
112
|
}
|
|
117
113
|
catch (cause) {
|
|
@@ -5,7 +5,7 @@ import { PRODUCT_IDENTITY } from "../identity.js";
|
|
|
5
5
|
import { silentLogger } from "../logger.js";
|
|
6
6
|
import { LinuxJavaScriptReplayRunner } from "../replay/LinuxJavaScriptReplayRunner.js";
|
|
7
7
|
import { SystemJavaScriptReplayHost } from "../replay/SystemJavaScriptReplayHost.js";
|
|
8
|
-
import {
|
|
8
|
+
import { mcpEnvelopeValue } from "./mcpClientMetadata.js";
|
|
9
9
|
import { PROCESS_CAPTURE_ELICITATION_POLICY, } from "./ProcessCaptureElicitation.js";
|
|
10
10
|
import { registerApplicationTools } from "./registerApplicationTools.js";
|
|
11
11
|
import { registerArtifactTools } from "./registerArtifactTools.js";
|
|
@@ -13,7 +13,6 @@ import { registerBrowserScenarioTool } from "./registerBrowserScenarioTool.js";
|
|
|
13
13
|
import { registerBrowserTools } from "./registerBrowserTools.js";
|
|
14
14
|
import { registerElectronTools } from "./registerElectronTools.js";
|
|
15
15
|
import { registerEnhancedTools } from "./registerEnhancedTools.js";
|
|
16
|
-
import { registerEvidenceResources } from "./registerEvidenceResources.js";
|
|
17
16
|
import { registerJavaScriptRuntimeObservationTools } from "./registerJavaScriptRuntimeObservationTools.js";
|
|
18
17
|
import { registerManagedTools } from "./registerManagedTools.js";
|
|
19
18
|
import { registerManagedWorkflowTools } from "./registerManagedWorkflowTools.js";
|
|
@@ -22,16 +21,14 @@ import { registerOfficialTools } from "./registerOfficialTools.js";
|
|
|
22
21
|
import { registerGuidedPrompts } from "./registerPrompts.js";
|
|
23
22
|
import { registerSessionTools } from "./registerSessionTools.js";
|
|
24
23
|
import { sessionAvailabilityPolicy } from "./sessionAvailabilityPolicy.js";
|
|
25
|
-
import {
|
|
26
|
-
const TARGET_FREE_INSTRUCTIONS = "
|
|
27
|
-
const ACTIVE_TARGET_INSTRUCTIONS = "REA analyzes the active reverse-engineering target.
|
|
24
|
+
import { DENY_PROCESS_POLICY } from "./sessionToolPolicies.js";
|
|
25
|
+
const TARGET_FREE_INSTRUCTIONS = "REA provides reverse-engineering tools for local artifacts, native binaries, managed code, browser pages, and runtimes. Use the tool that directly answers the question; discover targets or inspect inventory only when needed. Tool results include inline Evidence and report their coverage and limitations.";
|
|
26
|
+
const ACTIVE_TARGET_INSTRUCTIONS = "REA analyzes the active reverse-engineering target. Use the analysis tool that answers the question directly. Search or list symbols when discovery is needed; analyze_function provides a function dossier, and focused procedure tools return individual facets.";
|
|
28
27
|
const installSessionToolAvailability = (server, session, options) => {
|
|
29
28
|
if (session === undefined)
|
|
30
29
|
return undefined;
|
|
31
30
|
const policy = sessionAvailabilityPolicy(options.availabilityPolicy, {
|
|
32
31
|
processPolicy: options.processPolicy?.() ?? DENY_PROCESS_POLICY,
|
|
33
|
-
evidenceFilePolicy: options.evidenceFilePolicy ?? DENY_EVIDENCE_FILE_POLICY,
|
|
34
|
-
investigationInputRoots: options.investigationInputRoots ?? [],
|
|
35
32
|
optionalFeatures: {
|
|
36
33
|
browserObservationEnabled: options.browserObservation !== undefined,
|
|
37
34
|
browserScenarioEnabled: options.browserScenarioCapture !== undefined,
|
|
@@ -66,11 +63,8 @@ const createMcpServer = (processCaptureStateCodec, session) => new McpServer({
|
|
|
66
63
|
name: PRODUCT_IDENTITY.mcpServerKey,
|
|
67
64
|
version: PRODUCT_IDENTITY.packageVersion,
|
|
68
65
|
}, {
|
|
69
|
-
capabilities: {
|
|
70
|
-
resources: { subscribe: true },
|
|
71
|
-
},
|
|
66
|
+
capabilities: {},
|
|
72
67
|
inputRequired: {
|
|
73
|
-
maxRounds: 3,
|
|
74
68
|
roundTimeoutMs: PROCESS_CAPTURE_ELICITATION_POLICY.roundTimeoutMs,
|
|
75
69
|
},
|
|
76
70
|
requestState: { verify: processCaptureStateCodec.verify },
|
|
@@ -96,7 +90,6 @@ export const createServer = (analysis, session, options = {}) => {
|
|
|
96
90
|
server.server.onclose = () => {
|
|
97
91
|
permissionAuthority?.clearSessionGrants();
|
|
98
92
|
};
|
|
99
|
-
registerServerIdentityResource(server, startedAt);
|
|
100
93
|
const toolLogger = logger.child({ layer: "server" });
|
|
101
94
|
const { activeTarget, recordEvidence, recordEvidenceWithUnknown } = createSessionRecorders(server, session);
|
|
102
95
|
const processCaptureElicitation = createProcessCaptureElicitation(processCaptureStateCodec);
|
|
@@ -115,7 +108,6 @@ export const createServer = (analysis, session, options = {}) => {
|
|
|
115
108
|
registerObservationTools(toolContext);
|
|
116
109
|
registerGuidedPrompts(server, analysis, session);
|
|
117
110
|
if (session !== undefined) {
|
|
118
|
-
registerEvidenceResources(server, session);
|
|
119
111
|
registerSessionTools(server, session, toolLogger, {
|
|
120
112
|
...options,
|
|
121
113
|
...(availability === undefined
|
|
@@ -181,7 +173,7 @@ const registerBinaryAnalysisTools = ({ server, analysis, session, options, logge
|
|
|
181
173
|
},
|
|
182
174
|
});
|
|
183
175
|
};
|
|
184
|
-
const registerObservationTools = ({ server,
|
|
176
|
+
const registerObservationTools = ({ server, options, logger, permissionAuthority, recordEvidence, recordEvidenceWithUnknown, }) => {
|
|
185
177
|
const common = { logger, permissionAuthority, recordEvidence };
|
|
186
178
|
registerBrowserTools(server, {
|
|
187
179
|
...common,
|
|
@@ -204,14 +196,7 @@ const registerObservationTools = ({ server, session, options, logger, permission
|
|
|
204
196
|
logger,
|
|
205
197
|
recordEvidence,
|
|
206
198
|
recordEvidenceWithUnknown,
|
|
207
|
-
evidenceLookup: session === undefined
|
|
208
|
-
? undefined
|
|
209
|
-
: (evidenceId) => session.evidenceById(evidenceId),
|
|
210
|
-
evidenceFilePolicy: options.evidenceFilePolicy ?? DENY_EVIDENCE_FILE_POLICY,
|
|
211
199
|
permissionAuthority,
|
|
212
|
-
retainCoverageWorkspace: session === undefined
|
|
213
|
-
? undefined
|
|
214
|
-
: (workspace) => session.retainReconstructionCoverageWorkspace(workspace),
|
|
215
200
|
replay: {
|
|
216
201
|
policy: options.javascriptReplayPolicy ?? (() => ({ status: "disabled" })),
|
|
217
202
|
host: options.javascriptReplayHost ?? new SystemJavaScriptReplayHost(),
|
|
@@ -220,26 +205,3 @@ const registerObservationTools = ({ server, session, options, logger, permission
|
|
|
220
205
|
},
|
|
221
206
|
});
|
|
222
207
|
};
|
|
223
|
-
const registerServerIdentityResource = (server, startedAt) => {
|
|
224
|
-
server.registerResource("server-identity", "rea://server/identity", {
|
|
225
|
-
title: "REA server identity",
|
|
226
|
-
description: "Live package, SDK, protocol, and catalog identity.",
|
|
227
|
-
mimeType: "application/json",
|
|
228
|
-
}, async (uri, context) => {
|
|
229
|
-
const { createServerIdentity } = await import("../serverIdentity.js");
|
|
230
|
-
const { client, protocolVersion } = mcpClientMetadata(context);
|
|
231
|
-
return {
|
|
232
|
-
contents: [
|
|
233
|
-
{
|
|
234
|
-
uri: uri.href,
|
|
235
|
-
mimeType: "application/json",
|
|
236
|
-
text: JSON.stringify(createServerIdentity({
|
|
237
|
-
startedAt,
|
|
238
|
-
...(client === undefined ? {} : { client }),
|
|
239
|
-
...(protocolVersion === undefined ? {} : { protocolVersion }),
|
|
240
|
-
}), null, 2),
|
|
241
|
-
},
|
|
242
|
-
],
|
|
243
|
-
};
|
|
244
|
-
});
|
|
245
|
-
};
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { artifactInventoryResultSchema } from "../domain/artifactGraph.js";
|
|
3
|
-
import {
|
|
4
|
-
import { processCaptureSchema
|
|
5
|
-
const COMPLETION_SCAN_LIMIT = 10_000;
|
|
6
|
-
const PROCEDURE_PAGE_SIZE = 500;
|
|
7
|
-
const MAX_COMPLETION_VALUE_LENGTH = 4_096;
|
|
3
|
+
import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
|
|
4
|
+
import { processCaptureSchema } from "../domain/processCapture.js";
|
|
8
5
|
const documentListSchema = z.array(z.string().min(1));
|
|
9
6
|
const providerStatusSchema = z.object({
|
|
10
7
|
providers: z.array(z.object({ id: z.string().min(1) })),
|
|
@@ -12,16 +9,12 @@ const providerStatusSchema = z.object({
|
|
|
12
9
|
.array(z.object({ provider: z.object({ id: z.string().min(1) }) }))
|
|
13
10
|
.optional(),
|
|
14
11
|
});
|
|
15
|
-
/** Build
|
|
12
|
+
/** Build live completion over the active provider and session ledger. */
|
|
16
13
|
export const createPromptCompletionSource = (analysis, session) => ({
|
|
17
14
|
async complete(kind, value, context) {
|
|
18
|
-
if (value.length > MAX_COMPLETION_VALUE_LENGTH)
|
|
19
|
-
return [];
|
|
20
15
|
const candidates = await completionCandidates(kind, analysis, session, context);
|
|
21
16
|
const prefix = normalize(value);
|
|
22
|
-
return uniqueSorted(candidates)
|
|
23
|
-
.filter((candidate) => normalize(candidate).startsWith(prefix))
|
|
24
|
-
.slice(0, COMPLETION_SCAN_LIMIT);
|
|
17
|
+
return uniqueSorted(candidates).filter((candidate) => normalize(candidate).startsWith(prefix));
|
|
25
18
|
},
|
|
26
19
|
});
|
|
27
20
|
const completionCandidates = async (kind, analysis, session, context) => {
|
|
@@ -46,39 +39,20 @@ const documentCandidates = async (analysis) => {
|
|
|
46
39
|
if (!result.ok)
|
|
47
40
|
return [];
|
|
48
41
|
const parsed = documentListSchema.safeParse(result.value.result);
|
|
49
|
-
return parsed.success ? parsed.data
|
|
42
|
+
return parsed.success ? parsed.data : [];
|
|
50
43
|
};
|
|
51
44
|
const procedureCandidates = async (analysis, document) => {
|
|
52
|
-
if (document !== undefined && document.length > MAX_COMPLETION_VALUE_LENGTH)
|
|
53
|
-
return [];
|
|
54
45
|
const byAddress = new Map();
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const parsed = parseAddressedPage(result.value.result);
|
|
66
|
-
if (!parsed.ok)
|
|
67
|
-
break;
|
|
68
|
-
for (const item of parsed.value.items) {
|
|
69
|
-
if (byAddress.size >= COMPLETION_SCAN_LIMIT / 2)
|
|
70
|
-
break;
|
|
71
|
-
if (!byAddress.has(item.address))
|
|
72
|
-
byAddress.set(item.address, item.name);
|
|
73
|
-
}
|
|
74
|
-
const nextOffset = parsed.value.nextOffset;
|
|
75
|
-
if (!parsed.value.hasMore) {
|
|
76
|
-
exhaustive = true;
|
|
77
|
-
break;
|
|
78
|
-
}
|
|
79
|
-
if (nextOffset === null || nextOffset <= offset)
|
|
80
|
-
break;
|
|
81
|
-
offset = nextOffset;
|
|
46
|
+
const input = document === undefined || document.length === 0 ? {} : { document };
|
|
47
|
+
const result = await analysis.execute("list_procedures", input);
|
|
48
|
+
if (result.ok) {
|
|
49
|
+
const parsed = z
|
|
50
|
+
.array(z.object({ address: z.string(), value: z.string() }))
|
|
51
|
+
.safeParse(result.value.result);
|
|
52
|
+
if (parsed.success)
|
|
53
|
+
for (const item of parsed.data)
|
|
54
|
+
if (!byAddress.has(item.address))
|
|
55
|
+
byAddress.set(item.address, item.value);
|
|
82
56
|
}
|
|
83
57
|
const addressesByName = new Map();
|
|
84
58
|
for (const [address, name] of byAddress) {
|
|
@@ -87,10 +61,9 @@ const procedureCandidates = async (analysis, document) => {
|
|
|
87
61
|
addressesByName.set(name, addresses);
|
|
88
62
|
}
|
|
89
63
|
const candidates = [...byAddress.keys()];
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
candidates.push(name);
|
|
64
|
+
for (const [name, addresses] of addressesByName)
|
|
65
|
+
if (addresses.size === 1 && name.length > 0)
|
|
66
|
+
candidates.push(name);
|
|
94
67
|
return candidates;
|
|
95
68
|
};
|
|
96
69
|
const providerCandidates = (session) => {
|
|
@@ -102,18 +75,14 @@ const providerCandidates = (session) => {
|
|
|
102
75
|
const candidates = (parsed.data.analysis_provider_candidates?.length ?? 0) > 0
|
|
103
76
|
? (parsed.data.analysis_provider_candidates?.map(({ provider }) => provider.id) ?? [])
|
|
104
77
|
: parsed.data.providers.map(({ id }) => id);
|
|
105
|
-
return ["auto", ...candidates]
|
|
78
|
+
return ["auto", ...candidates];
|
|
106
79
|
};
|
|
107
80
|
const evidenceCandidates = (kind, session) => {
|
|
108
81
|
if (session === undefined)
|
|
109
82
|
return [];
|
|
110
83
|
const candidates = [];
|
|
111
|
-
for (const evidence of session.exportEvidenceBundle().records)
|
|
112
|
-
|
|
113
|
-
candidates.push(...evidenceValues(kind, evidence).slice(0, remaining));
|
|
114
|
-
if (candidates.length >= COMPLETION_SCAN_LIMIT)
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
84
|
+
for (const evidence of session.exportEvidenceBundle().records)
|
|
85
|
+
candidates.push(...evidenceValues(kind, evidence));
|
|
117
86
|
return candidates;
|
|
118
87
|
};
|
|
119
88
|
const evidenceValues = (kind, evidence) => {
|
|
@@ -121,30 +90,37 @@ const evidenceValues = (kind, evidence) => {
|
|
|
121
90
|
return [evidence.evidence_id];
|
|
122
91
|
if (kind === "capture")
|
|
123
92
|
return isProcessCaptureEvidence(evidence) ? [evidence.evidence_id] : [];
|
|
124
|
-
|
|
93
|
+
const inventoryResult = evidence.operation === "inventory_artifact"
|
|
94
|
+
? evidence.normalized_result
|
|
95
|
+
: evidence.operation === "inspect_artifact"
|
|
96
|
+
? (() => {
|
|
97
|
+
const inspection = artifactInspectionResultSchema.safeParse(evidence.normalized_result);
|
|
98
|
+
return inspection.success
|
|
99
|
+
? inspection.data.substeps[0]?.evidence.normalized_result
|
|
100
|
+
: undefined;
|
|
101
|
+
})()
|
|
102
|
+
: undefined;
|
|
103
|
+
if (inventoryResult === undefined)
|
|
125
104
|
return [];
|
|
126
|
-
const inventory = artifactInventoryResultSchema.safeParse(
|
|
105
|
+
const inventory = artifactInventoryResultSchema.safeParse(inventoryResult);
|
|
127
106
|
if (!inventory.success)
|
|
128
107
|
return [];
|
|
129
108
|
if (kind === "manifest")
|
|
130
109
|
return [inventory.data.manifest.manifest_id];
|
|
131
|
-
return inventory.data.occurrences.
|
|
110
|
+
return inventory.data.occurrences.map(({ occurrence_id: id }) => id);
|
|
132
111
|
};
|
|
133
112
|
const isProcessCaptureEvidence = (evidence) => {
|
|
134
113
|
if (evidence.operation !== "capture_process_scenario")
|
|
135
114
|
return false;
|
|
136
115
|
const capture = processCaptureSchema.safeParse(evidence.normalized_result);
|
|
137
|
-
return capture.success
|
|
116
|
+
return capture.success;
|
|
138
117
|
};
|
|
139
118
|
const unknownCandidates = (session) => session === undefined
|
|
140
119
|
? []
|
|
141
120
|
: session
|
|
142
121
|
.listUnknowns()
|
|
143
122
|
.filter(({ status }) => status !== "resolved")
|
|
144
|
-
.map(({ unknown_id: id }) => id)
|
|
145
|
-
|
|
146
|
-
const uniqueSorted = (values) => [
|
|
147
|
-
...new Set(values.filter((value) => value.length > 0 && value.length <= MAX_COMPLETION_VALUE_LENGTH)),
|
|
148
|
-
].sort(compareText);
|
|
123
|
+
.map(({ unknown_id: id }) => id);
|
|
124
|
+
const uniqueSorted = (values) => [...new Set(values.filter((value) => value.length > 0))].sort(compareText);
|
|
149
125
|
const compareText = (left, right) => left < right ? -1 : left > right ? 1 : 0;
|
|
150
126
|
const normalize = (value) => value.normalize("NFKC").toLowerCase();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ok } from "../domain/result.js";
|
|
2
|
-
/** Atomically record derived Evidence with an optional
|
|
2
|
+
/** Atomically record derived Evidence with an optional supported unknown. */
|
|
3
3
|
export const recordDerivedEvidence = (session, evidence, unknown) => {
|
|
4
4
|
if (unknown !== undefined) {
|
|
5
5
|
const recorded = session.recordEvidenceWithUnknown(evidence, unknown);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { recordSessionEvidenceSources } from "../sessionEvidence.js";
|
|
1
2
|
import { executeNodeCharacterization, prepareNodeCharacterization, } from "../../application/NodeRuntimeCharacterizationService.js";
|
|
2
3
|
import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
|
|
3
4
|
import { parseEvidence } from "../../domain/evidence.js";
|
|
@@ -6,7 +7,6 @@ import { mcpProgressReporter } from "../mcpProgress.js";
|
|
|
6
7
|
import { logToolExecution } from "../toolLogging.js";
|
|
7
8
|
import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
|
|
8
9
|
import { toCallToolResult } from "../toolResult.js";
|
|
9
|
-
import { recordSources } from "./helpers.js";
|
|
10
10
|
const prepareContract = applicationToolContract("prepare_node_characterization");
|
|
11
11
|
const executeContract = applicationToolContract("execute_node_characterization");
|
|
12
12
|
/** Register node runtime characterization prepare and execute tools. */
|
|
@@ -22,9 +22,7 @@ export const registerCharacterizationTools = (server, options) => {
|
|
|
22
22
|
const recorded = options.recordEvidence?.(parseEvidence(output.transformation_evidence));
|
|
23
23
|
if (recorded !== undefined && !recorded.ok)
|
|
24
24
|
return toCallToolResult(recorded, prepareContract);
|
|
25
|
-
return toCallToolResult(result, prepareContract
|
|
26
|
-
evidenceResourcesAvailable: options.recordEvidence !== undefined,
|
|
27
|
-
});
|
|
25
|
+
return toCallToolResult(result, prepareContract);
|
|
28
26
|
});
|
|
29
27
|
server.registerTool(executeContract.name, toolRegistrationOptions(executeContract), async (input, context) => {
|
|
30
28
|
const result = await logToolExecution(options.logger, executeContract.name, () => executeNodeCharacterization(options.replay, input, {
|
|
@@ -40,11 +38,9 @@ export const registerCharacterizationTools = (server, options) => {
|
|
|
40
38
|
output.replay.evidence,
|
|
41
39
|
output.evidence,
|
|
42
40
|
].map((item) => parseEvidence(item));
|
|
43
|
-
const recorded =
|
|
41
|
+
const recorded = recordSessionEvidenceSources(options.recordEvidence, sources);
|
|
44
42
|
if (!recorded.ok)
|
|
45
43
|
return toCallToolResult(recorded, executeContract);
|
|
46
|
-
return toCallToolResult(result, executeContract
|
|
47
|
-
evidenceResourcesAvailable: options.recordEvidence !== undefined,
|
|
48
|
-
});
|
|
44
|
+
return toCallToolResult(result, executeContract);
|
|
49
45
|
});
|
|
50
46
|
};
|
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { recordSessionEvidenceSources } from "../sessionEvidence.js";
|
|
2
2
|
import { compareJavaScriptExportShapesEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js";
|
|
3
3
|
import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
|
|
4
4
|
import { javaScriptExportShapeComparisonResultSchema } from "../../domain/javascriptExportShapeComparisonSchemas.js";
|
|
5
5
|
import { logToolExecution } from "../toolLogging.js";
|
|
6
6
|
import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
|
|
7
7
|
import { toCallToolResult } from "../toolResult.js";
|
|
8
|
-
import { recordResult
|
|
8
|
+
import { recordResult } from "./helpers.js";
|
|
9
9
|
const contract = applicationToolContract("compare_javascript_export_shapes");
|
|
10
10
|
/** Register the execution-free exact JavaScript export-shape comparison. */
|
|
11
11
|
export const registerCompareJavaScriptExportShapesTool = (server, options) => {
|
|
12
12
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
|
|
13
|
-
const
|
|
14
|
-
if (!resolved.ok)
|
|
15
|
-
return toCallToolResult(resolved, contract);
|
|
16
|
-
const parsed = resolved.value;
|
|
13
|
+
const parsed = input;
|
|
17
14
|
const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareJavaScriptExportShapesEvidenceValidated(parsed)));
|
|
18
15
|
if (!result.ok)
|
|
19
16
|
return toCallToolResult(result, contract);
|
|
20
|
-
const recorded =
|
|
17
|
+
const recorded = recordSessionEvidenceSources(options.recordEvidence, [
|
|
21
18
|
parsed.left,
|
|
22
19
|
parsed.right,
|
|
23
20
|
]);
|
|
@@ -25,8 +22,6 @@ export const registerCompareJavaScriptExportShapesTool = (server, options) => {
|
|
|
25
22
|
return toCallToolResult(recorded, contract);
|
|
26
23
|
const comparison = javaScriptExportShapeComparisonResultSchema.parse(result.value.normalized_result);
|
|
27
24
|
const unknown = comparison.summary.unknown > 0;
|
|
28
|
-
return recordResult(options, contract, result.value,
|
|
29
|
-
? "javascript-export-shape"
|
|
30
|
-
: undefined);
|
|
25
|
+
return recordResult(options, contract, result.value, unknown ? "javascript-export-shape" : undefined);
|
|
31
26
|
});
|
|
32
27
|
};
|
|
@@ -1,29 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { recordSessionEvidenceSources } from "../sessionEvidence.js";
|
|
2
2
|
import { compareSourceToBundleEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js";
|
|
3
3
|
import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
|
|
4
4
|
import { sourceToBundleComparisonResultSchema } from "../../domain/sourceToBundleComparisonSchemas.js";
|
|
5
5
|
import { logToolExecution } from "../toolLogging.js";
|
|
6
6
|
import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
|
|
7
7
|
import { toCallToolResult } from "../toolResult.js";
|
|
8
|
-
import { recordResult
|
|
8
|
+
import { recordResult } from "./helpers.js";
|
|
9
9
|
const contract = applicationToolContract("compare_source_to_bundle");
|
|
10
10
|
/** Register conservative historical-source to bundle comparison. */
|
|
11
11
|
export const registerCompareSourceToBundleTool = (server, options) => {
|
|
12
12
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
|
|
13
|
-
const
|
|
14
|
-
if (!resolved.ok)
|
|
15
|
-
return toCallToolResult(resolved, contract);
|
|
16
|
-
const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareSourceToBundleEvidenceValidated(resolved.value)));
|
|
13
|
+
const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareSourceToBundleEvidenceValidated(input)));
|
|
17
14
|
if (!result.ok)
|
|
18
15
|
return toCallToolResult(result, contract);
|
|
19
|
-
const recorded =
|
|
20
|
-
|
|
16
|
+
const recorded = recordSessionEvidenceSources(options.recordEvidence, [
|
|
17
|
+
input.application,
|
|
21
18
|
]);
|
|
22
19
|
if (!recorded.ok)
|
|
23
20
|
return toCallToolResult(recorded, contract);
|
|
24
21
|
const comparison = sourceToBundleComparisonResultSchema.parse(result.value.normalized_result);
|
|
25
|
-
return recordResult(options, contract, result.value,
|
|
26
|
-
comparison.summary.unknown > 0
|
|
22
|
+
return recordResult(options, contract, result.value, comparison.summary.unknown > 0
|
|
27
23
|
? "source-to-bundle-comparison"
|
|
28
24
|
: undefined);
|
|
29
25
|
});
|