rea-agents 6.1.0 → 6.3.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 +24 -24
- package/bridge/ghidra/ReaGhidraBridge.java +32 -4
- package/bridge/hopper_bridge.py +8 -1
- package/dist/android/JadxConfiguration.js +87 -7
- package/dist/android/JadxMcpTransport.js +14 -2
- package/dist/android/JadxProvider.js +64 -36
- package/dist/android/JadxSession.js +51 -9
- package/dist/application/BinaryTargetResolver.js +68 -20
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +4 -20
- package/dist/application/CapabilityInventory.js +43 -9
- package/dist/application/ClientConfigurationDocument.js +97 -25
- package/dist/application/ClientRegistrationStatus.js +19 -6
- package/dist/application/DirectAnalysis.js +41 -20
- package/dist/application/DirectAnalysisCleanup.js +71 -0
- package/dist/application/DirectAnalysisStatus.js +3 -7
- package/dist/application/Doctor.js +40 -53
- package/dist/application/DoctorDiagnostics.js +2 -3
- package/dist/application/EnhancedTools.js +51 -6
- package/dist/application/EvidenceBundleFiles.js +8 -3
- package/dist/application/InvestigationProviders.js +13 -5
- package/dist/application/JsonFiles.js +56 -23
- package/dist/application/LinuxHopper.js +11 -7
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionObligationCandidates.js +10 -3
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/RegularFileRead.js +17 -0
- package/dist/application/Setup.js +26 -23
- package/dist/application/SetupClientConfiguration.js +18 -7
- package/dist/application/SetupHost.js +20 -29
- package/dist/application/SetupPlan.js +24 -20
- package/dist/application/SetupSkill.js +57 -8
- package/dist/application/SupportedClients.js +43 -0
- package/dist/application/Uninstall.js +98 -30
- package/dist/application/UpdateMaintenance.js +13 -7
- package/dist/application/UpdateRuntime.js +12 -12
- package/dist/application/Utf8JsonInput.js +64 -0
- package/dist/application/WebScriptExportService.js +38 -5
- package/dist/application/WorkflowEvidence.js +25 -2
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/android/AndroidAnalysisService.js +1 -1
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
- package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
- package/dist/application/binary/BinarySession.js +86 -29
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +10 -2
- package/dist/application/binary/BinarySessionRecords.js +1 -1
- package/dist/application/binary/BinarySessionStatus.js +1 -6
- package/dist/application/binary/CompositeProvider.js +4 -18
- package/dist/application/binary/LazyAnalysisProvider.js +5 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/homebrew.js +48 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
- package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
- package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
- package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
- package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
- package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
- package/dist/application/native/NativeCallRoutes.js +2 -4
- package/dist/application/process/ProcessCli.js +11 -11
- package/dist/application/process/ProcessEvidence.js +0 -1
- package/dist/artifacts/ArtifactProvider.js +53 -30
- package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/AsarArtifactReader.js +81 -17
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
- package/dist/artifacts/NativeDmgOwnership.js +109 -0
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
- package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
- package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/classify.js +33 -14
- package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +64 -34
- package/dist/artifacts/inventory/scanReader.js +12 -20
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +6 -6
- package/dist/browser/CdpCaptureEventHandlers.js +2 -4
- package/dist/browser/CdpCaptureEvents.js +0 -1
- package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpElectronInspection.js +2 -2
- package/dist/browser/CdpElectronProvider.js +4 -5
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +4 -5
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/CdpWebMcpDiscovery.js +16 -13
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
- package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
- package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +41 -32
- package/dist/browser/WebSourceMapFetcher.js +32 -6
- package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +6 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +37 -28
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +12 -13
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +2 -12
- package/dist/cli/jsonOutput.js +3 -2
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +1 -2
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/streamedJsonOutput.js +83 -4
- package/dist/cli/utilityCommands.js +10 -12
- package/dist/cli.js +19 -8
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliJsonFile.js +179 -0
- package/dist/cliJsonInput.js +60 -33
- package/dist/cliObservationOptions.js +4 -0
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -14
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +6 -0
- package/dist/config/ghidraStartupTimeout.js +4 -9
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +9 -1
- package/dist/config/parseConfig.js +7 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +7 -7
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +2 -2
- package/dist/contracts/enhancedToolContracts.js +4 -3
- package/dist/contracts/errorSchemas.js +3 -1
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionComparisonExample.js +8 -0
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +181 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +3 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
- package/dist/contracts/managed/managedToolContracts.js +8 -12
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +2 -2
- package/dist/contracts/officialToolContracts.js +2 -1
- package/dist/contracts/promptContracts.js +2 -2
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +4 -3
- package/dist/contracts/sessionStatusContract.js +3 -2
- package/dist/contracts/sessionToolContracts.js +17 -4
- package/dist/contracts/sessionToolSchemas.js +4 -16
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -0
- package/dist/contracts/toolOutputSchemaGroups.js +138 -94
- package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
- package/dist/contracts/toolSchemaMetadata.js +18 -69
- package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +5 -0
- package/dist/domain/analysisErrorCore.js +3 -0
- package/dist/domain/analysisErrorPresentation.js +22 -5
- package/dist/domain/analysisErrorProjection.js +24 -5
- package/dist/domain/analysisSnapshot.js +31 -31
- package/dist/domain/analysisView/analysisView.js +241 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidApplication.js +1 -1
- package/dist/domain/android/androidPartialObservation.js +36 -0
- package/dist/domain/apple/appleApplication.js +1 -1
- package/dist/domain/apple/dylibResolution.js +10 -3
- package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
- package/dist/domain/apple/keyedArchive.js +26 -2
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +17 -4
- package/dist/domain/artifactIdentity.js +8 -8
- package/dist/domain/artifactInspection.js +8 -8
- package/dist/domain/artifactInventoryEvidence.js +9 -16
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +3 -2
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioCaptureValues.js +2 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioNormalization.js +3 -3
- package/dist/domain/browserScenarioValues.js +6 -6
- package/dist/domain/callPath.js +15 -18
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalDigest.js +7 -1
- package/dist/domain/canonicalOrdering.js +1 -13
- package/dist/domain/changedBehavior.js +5 -6
- package/dist/domain/comparisonSemantics.js +0 -5
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +12 -0
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/digests.js +0 -3
- package/dist/domain/evidence.js +19 -40
- package/dist/domain/evidenceBundle.js +58 -42
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/firmware/firmwareAnalysis.js +4 -3
- package/dist/domain/functionComparison.js +6 -6
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +26 -36
- package/dist/domain/functionComparisonResults.js +3 -6
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +4 -38
- package/dist/domain/hopperValues.js +11 -15
- package/dist/domain/javascript/electronActiveObservation.js +29 -71
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
- package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
- package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
- package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
- package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
- package/dist/domain/javascript/javascriptAstValues.js +22 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
- package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
- package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
- package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
- package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
- package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
- package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
- package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
- package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
- package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
- package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
- package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
- package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
- package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
- package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
- package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
- package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
- package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
- package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
- package/dist/domain/javascript/javascriptSourceParser.js +34 -9
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
- package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
- package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
- package/dist/domain/jsonSerialization.js +109 -55
- package/dist/domain/jsonShape.js +46 -19
- package/dist/domain/localPath.js +10 -4
- package/dist/domain/managed/managedApplicationGraph.js +10 -6
- package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
- package/dist/domain/managed/managedNativeVerification.js +0 -2
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +3 -3
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/nativeValueFlow.js +5 -11
- package/dist/domain/native/objcSwiftMetadata.js +15 -17
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +22 -20
- package/dist/domain/process/processCaptureCoverage.js +70 -0
- package/dist/domain/process/processCaptureExample.js +45 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +82 -13
- package/dist/domain/process/processComparison.js +39 -43
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +24 -2
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +19 -15
- package/dist/domain/process/processTraceSpecification.js +4 -7
- package/dist/domain/providerAdapterError.js +2 -0
- package/dist/domain/providerCleanupError.js +6 -2
- package/dist/domain/reconstructionCoverage.js +7 -3
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionUnknowns.js +4 -3
- package/dist/domain/reconstructionVerification.js +6 -5
- package/dist/domain/reconstructionVerificationSchemas.js +2 -1
- package/dist/domain/referenceSourceGraph.js +27 -28
- package/dist/domain/referenceSourceImportParsing.js +34 -45
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/staticRuntimeCorrelation.js +4 -3
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +66 -0
- package/dist/domain/symbolAnalysis.js +83 -20
- package/dist/domain/unicodeCodePointOrder.js +6 -0
- package/dist/domain/webBundleAnalyzerInspection.js +9 -1
- package/dist/domain/webCaptureDiff.js +71 -30
- package/dist/domain/webCaptureDiffSchemas.js +8 -11
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webInventory.js +3 -2
- package/dist/domain/webMcpDiscovery.js +4 -3
- package/dist/domain/webRuntime.js +0 -2
- package/dist/domain/webScriptExport.js +2 -2
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +13 -12
- package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/filesystem/RegularFile.js +41 -0
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
- package/dist/ghidra/GhidraClient.js +105 -36
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +3 -5
- package/dist/ghidra/GhidraInstallation.js +151 -22
- package/dist/ghidra/GhidraJavaLaunch.js +6 -2
- package/dist/ghidra/GhidraLauncher.js +58 -26
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
- package/dist/ghidra/GhidraProviderClient.js +13 -3
- package/dist/ghidra/GhidraSessionError.js +2 -0
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +34 -45
- package/dist/hopper/HopperAnalysisProfile.js +3 -8
- package/dist/hopper/HopperCleanup.js +56 -27
- package/dist/hopper/HopperClient.js +86 -65
- package/dist/hopper/HopperMachOImage.js +3 -2
- package/dist/hopper/HopperProvider.js +16 -18
- package/dist/hopper/HopperRegexSearch.js +3 -6
- package/dist/hopper/HopperTargetLease.js +132 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +5 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +24 -20
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
- package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
- package/dist/inspector/V8InspectorProvider.js +97 -35
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/main/shutdown.js +81 -29
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +23 -3
- package/dist/main.js +11 -18
- package/dist/native/AppleMachoSelection.js +16 -6
- package/dist/native/AppleObjcDispatchFacets.js +3 -3
- package/dist/native/AppleObjcProperties.js +17 -7
- package/dist/native/CommandRunner.js +9 -7
- package/dist/native/LldbCallTracer.js +249 -77
- package/dist/native/NativeMacOSProvider.js +32 -17
- package/dist/native/NativeMacOSProviderMetadata.js +1 -2
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/process/DarwinProcessRunTokenReader.js +16 -2
- package/dist/process/ExecFileOutput.js +88 -6
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +1 -4
- package/dist/process/ProcessOwnershipObservation.js +18 -16
- package/dist/process/ProviderProcess.js +1 -3
- package/dist/process/capture/FilesystemSnapshot.js +131 -24
- package/dist/process/capture/ProcessCaptureError.js +13 -0
- package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
- package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
- package/dist/process/capture/ProcessHarness.js +16 -33
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +25 -14
- package/dist/server/analysisAdmission.js +8 -0
- package/dist/server/createServer.js +71 -59
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -3
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +4 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +4 -5
- package/dist/server/registerArtifactTools.js +2 -2
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
- package/dist/server/registerBrowserScenarioTool.js +3 -4
- package/dist/server/registerBrowserTools.js +13 -16
- package/dist/server/registerBundleComparisonTool.js +5 -6
- package/dist/server/registerCloseLifecycleTool.js +8 -7
- package/dist/server/registerElectronTools.js +10 -13
- package/dist/server/registerEnhancedTools.js +82 -77
- package/dist/server/registerEvidenceTools.js +54 -47
- package/dist/server/registerEvmTools.js +2 -3
- package/dist/server/registerFirmwareTools.js +2 -3
- package/dist/server/registerFunctionComparisonTool.js +7 -8
- package/dist/server/registerInvestigationTools.js +14 -15
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
- package/dist/server/registerManagedTools.js +7 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
- package/dist/server/registerOfficialTools.js +32 -41
- package/dist/server/registerProcessComparisonTool.js +8 -8
- package/dist/server/registerRecordedCrashTools.js +2 -3
- package/dist/server/registerSessionRecordTools.js +15 -19
- package/dist/server/registerSessionStatusTool.js +3 -4
- package/dist/server/registerSessionTools.js +19 -19
- package/dist/server/registerWebModuleTool.js +2 -3
- package/dist/server/registerWebNetworkCaptureTool.js +2 -3
- package/dist/server/registerWebRuntimeTools.js +4 -5
- package/dist/server/registerWebScriptTool.js +2 -3
- package/dist/server/registerWebSourceLocationTool.js +2 -3
- package/dist/server/toolResult.js +66 -94
- package/dist/server/toolResultEncoding.js +11 -10
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +42 -30
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +14 -13
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
- package/dist/artifacts/inventory/policy.js +0 -2
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/registerNativeTools.js +0 -6
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -302,7 +302,7 @@ const isBlankOrComment = (line) => {
|
|
|
302
302
|
};
|
|
303
303
|
const looksLikeTomlHeader = (line) => line.trimStart().startsWith("[");
|
|
304
304
|
/** `mcp_servers.<server>` and tables nested under it, compared by key segment. */
|
|
305
|
-
const
|
|
305
|
+
const isTomlServerTable = (path, serverKey) => path[0] === "mcp_servers" && path[1] === serverKey;
|
|
306
306
|
const parseKeyPath = (text, start) => {
|
|
307
307
|
const segments = [];
|
|
308
308
|
let index = start;
|
|
@@ -486,7 +486,7 @@ const hasSeparatorComma = (trivia) => trivia.split("\n").some((part) => {
|
|
|
486
486
|
* Replace or remove `serverKey` inside one `{ ... }` table. A closed inline
|
|
487
487
|
* table cannot later grow a `[mcp_servers.rea]` header.
|
|
488
488
|
*/
|
|
489
|
-
const
|
|
489
|
+
const editInlineServerTable = (table, serverKey, entry) => {
|
|
490
490
|
if (!table.startsWith("{"))
|
|
491
491
|
return undefined;
|
|
492
492
|
const end = endOfContainer(table, 0);
|
|
@@ -667,10 +667,12 @@ const disabledServerListLines = (edit, lines, lineIndex, endLine) => {
|
|
|
667
667
|
}
|
|
668
668
|
};
|
|
669
669
|
/**
|
|
670
|
-
* Replace REA's
|
|
671
|
-
* following table stay.
|
|
670
|
+
* Replace REA's TOML server tables and assignments. Comments that introduce a
|
|
671
|
+
* following table stay. Codex also retains comments around REA's own table.
|
|
672
|
+
* Text inside strings is not treated as a header. Only Grok Build reads the
|
|
673
|
+
* root `disabled_mcp_servers` list that registration also edits.
|
|
672
674
|
*/
|
|
673
|
-
const
|
|
675
|
+
const upsertTomlServerSection = (originalText, serverKey, entry, format) => {
|
|
674
676
|
// smol-toml accepts a leading BOM. Leave it in place or the first header is missed.
|
|
675
677
|
const bom = originalText.startsWith("\uFEFF");
|
|
676
678
|
const source = bom ? originalText.slice(1) : originalText;
|
|
@@ -721,7 +723,7 @@ const upsertGrokServerSection = (originalText, serverKey, entry) => {
|
|
|
721
723
|
const header = parseTomlTableHeader(line);
|
|
722
724
|
if (header !== undefined) {
|
|
723
725
|
tablePath = header.path;
|
|
724
|
-
if (
|
|
726
|
+
if (isTomlServerTable(header.path, serverKey)) {
|
|
725
727
|
discardPending();
|
|
726
728
|
skipping = true;
|
|
727
729
|
lineIndex += 1;
|
|
@@ -748,17 +750,19 @@ const upsertGrokServerSection = (originalText, serverKey, entry) => {
|
|
|
748
750
|
mode = "none";
|
|
749
751
|
continue;
|
|
750
752
|
}
|
|
751
|
-
const disabledLines =
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
753
|
+
const disabledLines = format === "grok"
|
|
754
|
+
? disabledServerListLines(disabledServerListEdit({
|
|
755
|
+
text,
|
|
756
|
+
lineStart,
|
|
757
|
+
valueOffset,
|
|
758
|
+
valueEnd,
|
|
759
|
+
statementEnd,
|
|
760
|
+
tablePath,
|
|
761
|
+
segments: assignment.segments,
|
|
762
|
+
serverKey,
|
|
763
|
+
entry,
|
|
764
|
+
}), lines, lineIndex, endLine)
|
|
765
|
+
: undefined;
|
|
762
766
|
if (disabledLines !== undefined) {
|
|
763
767
|
flushPending();
|
|
764
768
|
kept.push(...disabledLines);
|
|
@@ -771,10 +775,10 @@ const upsertGrokServerSection = (originalText, serverKey, entry) => {
|
|
|
771
775
|
const closesServerTable = absolute.length === 1 &&
|
|
772
776
|
absolute[0] === "mcp_servers" &&
|
|
773
777
|
text[open] === "{";
|
|
774
|
-
if (closesServerTable ||
|
|
778
|
+
if (closesServerTable || isTomlServerTable(absolute, serverKey)) {
|
|
775
779
|
if (closesServerTable) {
|
|
776
780
|
flushPending();
|
|
777
|
-
const edited =
|
|
781
|
+
const edited = editInlineServerTable(text.slice(open, valueEnd), serverKey, entry);
|
|
778
782
|
const prefix = text.slice(lineStart, open);
|
|
779
783
|
const suffix = text.slice(valueEnd, statementEnd);
|
|
780
784
|
const replacement = edited === undefined
|
|
@@ -796,7 +800,12 @@ const upsertGrokServerSection = (originalText, serverKey, entry) => {
|
|
|
796
800
|
continue;
|
|
797
801
|
}
|
|
798
802
|
if (isBlankOrComment(line)) {
|
|
799
|
-
|
|
803
|
+
if (format === "toml" && line.trimStart().startsWith("#")) {
|
|
804
|
+
flushPending();
|
|
805
|
+
kept.push(physical);
|
|
806
|
+
}
|
|
807
|
+
else
|
|
808
|
+
pending.push(physical);
|
|
800
809
|
lineIndex += 1;
|
|
801
810
|
continue;
|
|
802
811
|
}
|
|
@@ -840,7 +849,7 @@ const upsertGrokServerSection = (originalText, serverKey, entry) => {
|
|
|
840
849
|
}
|
|
841
850
|
return bom ? `\uFEFF${body}` : body;
|
|
842
851
|
};
|
|
843
|
-
const
|
|
852
|
+
const tomlServerEntry = (document, serverKey) => {
|
|
844
853
|
const servers = objectSchema.safeParse(document.mcp_servers);
|
|
845
854
|
if (!servers.success || !Object.hasOwn(servers.data, serverKey))
|
|
846
855
|
return undefined;
|
|
@@ -849,12 +858,74 @@ const grokServerEntry = (document, serverKey) => {
|
|
|
849
858
|
/** Whether Grok Build's root disable list names `serverKey`. */
|
|
850
859
|
export const grokServerListedDisabled = (document, serverKey) => Array.isArray(document.disabled_mcp_servers) &&
|
|
851
860
|
document.disabled_mcp_servers.includes(serverKey);
|
|
861
|
+
/**
|
|
862
|
+
* OMP's user `disabledServers` denylist hides a server by name regardless of
|
|
863
|
+
* its entry, so a listed REA registration is not loaded.
|
|
864
|
+
*/
|
|
865
|
+
export const OMP_DISABLED_SERVERS_KEY = "disabledServers";
|
|
866
|
+
/** Whether OMP's root `disabledServers` denylist names `serverKey`. */
|
|
867
|
+
export const ompServerListedDisabled = (document, serverKey) => {
|
|
868
|
+
const listed = document[OMP_DISABLED_SERVERS_KEY];
|
|
869
|
+
return Array.isArray(listed) && listed.includes(serverKey);
|
|
870
|
+
};
|
|
871
|
+
/** OMP's user `enabledServers` allowlist overrides an entry's `enabled: false`. */
|
|
872
|
+
const OMP_ENABLED_SERVERS_KEY = "enabledServers";
|
|
873
|
+
/**
|
|
874
|
+
* Whether OMP's allowlist forces `serverKey` on despite its entry's
|
|
875
|
+
* `enabled: false`. The `disabledServers` denylist still wins over it.
|
|
876
|
+
*/
|
|
877
|
+
export const clientServerForcedEnabled = (parsed, serverKey) => {
|
|
878
|
+
if (parsed.dialect !== "omp")
|
|
879
|
+
return false;
|
|
880
|
+
const listed = parsed.document[OMP_ENABLED_SERVERS_KEY];
|
|
881
|
+
return Array.isArray(listed) && listed.includes(serverKey);
|
|
882
|
+
};
|
|
883
|
+
/** Whether a client's own disable list suppresses `serverKey`. */
|
|
884
|
+
export const clientServerListedDisabled = (parsed, serverKey) => (parsed.dialect === "grok" &&
|
|
885
|
+
grokServerListedDisabled(parsed.document, serverKey)) ||
|
|
886
|
+
(parsed.dialect === "omp" &&
|
|
887
|
+
ompServerListedDisabled(parsed.document, serverKey));
|
|
852
888
|
/** Keep an existing Grok document intact aside from the REA server tables. */
|
|
853
889
|
const serializeGrokConfiguration = (document, originalText) => {
|
|
854
|
-
const entry =
|
|
890
|
+
const entry = tomlServerEntry(document, PRODUCT_IDENTITY.mcpServerKey);
|
|
855
891
|
if (originalText === undefined)
|
|
856
892
|
return stringifyToml(document);
|
|
857
|
-
return
|
|
893
|
+
return upsertTomlServerSection(originalText, PRODUCT_IDENTITY.mcpServerKey, entry, "grok");
|
|
894
|
+
};
|
|
895
|
+
/** Removing the last server leaves an empty table, which equals an absent one. */
|
|
896
|
+
const withoutEmptyServerTable = (document) => {
|
|
897
|
+
const servers = objectSchema.safeParse(document.mcp_servers);
|
|
898
|
+
if (!servers.success || Object.keys(servers.data).length > 0)
|
|
899
|
+
return document;
|
|
900
|
+
const { mcp_servers: empty, ...rest } = document;
|
|
901
|
+
void empty;
|
|
902
|
+
return rest;
|
|
903
|
+
};
|
|
904
|
+
/**
|
|
905
|
+
* Keep an existing Codex document intact aside from the REA server tables.
|
|
906
|
+
* An edit that would change any other parsed value falls back to a full
|
|
907
|
+
* rewrite, which keeps every value but not comments or spelling.
|
|
908
|
+
*/
|
|
909
|
+
const serializeCodexConfiguration = (document, originalText) => {
|
|
910
|
+
if (originalText === undefined ||
|
|
911
|
+
isEmptyClientConfigurationText(originalText))
|
|
912
|
+
return stringifyToml(document);
|
|
913
|
+
const upserted = upsertTomlServerSection(originalText, PRODUCT_IDENTITY.mcpServerKey, tomlServerEntry(document, PRODUCT_IDENTITY.mcpServerKey), "toml");
|
|
914
|
+
// Removing a final table also drops the file's last line break.
|
|
915
|
+
const edited = originalText.endsWith("\n") && !upserted.endsWith("\n")
|
|
916
|
+
? `${upserted}${originalText.endsWith("\r\n") ? "\r\n" : "\n"}`
|
|
917
|
+
: upserted;
|
|
918
|
+
return tomlTextHolds(edited, document) ? edited : stringifyToml(document);
|
|
919
|
+
};
|
|
920
|
+
const tomlTextHolds = (text, document) => {
|
|
921
|
+
try {
|
|
922
|
+
return clientConfigurationValuesEqual(withoutEmptyServerTable(objectSchema.parse(parseToml(text))), withoutEmptyServerTable(document));
|
|
923
|
+
}
|
|
924
|
+
catch (cause) {
|
|
925
|
+
// An unparsable edit is rejected in favor of the full rewrite.
|
|
926
|
+
void cause;
|
|
927
|
+
return false;
|
|
928
|
+
}
|
|
858
929
|
};
|
|
859
930
|
/** Comments in the trivia between two properties. `undefined` when there are none. */
|
|
860
931
|
const commentsBetweenProperties = (gap) => {
|
|
@@ -952,12 +1023,12 @@ const deleteJsonPropertyPreservingComments = (text, path) => {
|
|
|
952
1023
|
suffix += "\n";
|
|
953
1024
|
return `${text.slice(0, previous.offset + previous.length)}${suffix}${remainder}`;
|
|
954
1025
|
};
|
|
955
|
-
/** Serialize a validated client document, retaining JSONC comments. */
|
|
1026
|
+
/** Serialize a validated client document, retaining JSONC and TOML comments. */
|
|
956
1027
|
export const serializeClientConfiguration = (document, format, originalText, editedPaths) => {
|
|
957
1028
|
if (format === undefined || format === "unsupported")
|
|
958
1029
|
throw new TypeError("client does not have a supported MCP config format");
|
|
959
1030
|
if (format === "toml")
|
|
960
|
-
return
|
|
1031
|
+
return serializeCodexConfiguration(document, originalText);
|
|
961
1032
|
if (format === "grok")
|
|
962
1033
|
return serializeGrokConfiguration(document, originalText);
|
|
963
1034
|
// An empty original holds no comments or settings to preserve. Writing a
|
|
@@ -1007,6 +1078,7 @@ export const clientRegistrationEntry = (format, command, environment) => {
|
|
|
1007
1078
|
: { environment: { ...environment } }),
|
|
1008
1079
|
};
|
|
1009
1080
|
case "vscode":
|
|
1081
|
+
case "omp":
|
|
1010
1082
|
return {
|
|
1011
1083
|
type: "stdio",
|
|
1012
1084
|
command: executable,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { clientServerForcedEnabled, clientServerListedDisabled, effectiveClientServer, parseClientConfiguration, } from "./ClientConfigurationDocument.js";
|
|
2
2
|
import { access, readFile } from "node:fs/promises";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
4
|
import { z } from "zod";
|
|
@@ -29,7 +29,11 @@ export const readClientRegistrationStatuses = async (home, currentCommandPath =
|
|
|
29
29
|
CODEX_HOME: options.environment.CODEX_HOME,
|
|
30
30
|
COPILOT_HOME: options.environment.COPILOT_HOME,
|
|
31
31
|
GROK_HOME: options.environment.GROK_HOME,
|
|
32
|
+
OMP_PROFILE: options.environment.OMP_PROFILE,
|
|
32
33
|
OPENCODE_CONFIG: options.environment.OPENCODE_CONFIG,
|
|
34
|
+
PI_CODING_AGENT_DIR: options.environment.PI_CODING_AGENT_DIR,
|
|
35
|
+
PI_CONFIG_DIR: options.environment.PI_CONFIG_DIR,
|
|
36
|
+
PI_PROFILE: options.environment.PI_PROFILE,
|
|
33
37
|
SAND_DATA_ROOT: options.environment.SAND_DATA_ROOT,
|
|
34
38
|
XDG_CONFIG_HOME: options.environment.XDG_CONFIG_HOME,
|
|
35
39
|
})) {
|
|
@@ -61,9 +65,8 @@ export const readClientRegistrationStatuses = async (home, currentCommandPath =
|
|
|
61
65
|
registration.command,
|
|
62
66
|
...registration.args,
|
|
63
67
|
];
|
|
64
|
-
statuses.push(configuredStatus(client.name, client.configPath, command, registrationAligned(registration, client, currentCommandPath, options.platform ?? process.platform) &&
|
|
65
|
-
!(
|
|
66
|
-
grokServerListedDisabled(parsed.document, PRODUCT_IDENTITY.mcpServerKey))
|
|
68
|
+
statuses.push(configuredStatus(client.name, client.configPath, command, registrationAligned(registration, client, currentCommandPath, options.platform ?? process.platform, clientServerForcedEnabled(parsed, PRODUCT_IDENTITY.mcpServerKey)) &&
|
|
69
|
+
!clientServerListedDisabled(parsed, PRODUCT_IDENTITY.mcpServerKey)
|
|
67
70
|
? "aligned"
|
|
68
71
|
: "stale"));
|
|
69
72
|
}
|
|
@@ -73,9 +76,10 @@ export const readClientRegistrationStatuses = async (home, currentCommandPath =
|
|
|
73
76
|
}
|
|
74
77
|
return statuses.sort((left, right) => left.client.localeCompare(right.client));
|
|
75
78
|
};
|
|
76
|
-
const registrationAligned = (registration, client, currentCommandPath, platform) => {
|
|
79
|
+
const registrationAligned = (registration, client, currentCommandPath, platform, forcedEnabled = false) => {
|
|
77
80
|
const command = [registration.command, ...registration.args];
|
|
78
|
-
if (registration.disabled === true ||
|
|
81
|
+
if (registration.disabled === true ||
|
|
82
|
+
(registration.enabled === false && !forcedEnabled))
|
|
79
83
|
return false;
|
|
80
84
|
if (!isOwnedClientRegistrationCommand(command, currentCommandPath))
|
|
81
85
|
return false;
|
|
@@ -85,6 +89,11 @@ const registrationAligned = (registration, client, currentCommandPath, platform)
|
|
|
85
89
|
return false;
|
|
86
90
|
if (client.format === "vscode" && registration.type !== "stdio")
|
|
87
91
|
return false;
|
|
92
|
+
// OMP infers stdio for a command entry without an explicit type.
|
|
93
|
+
if (client.format === "omp" &&
|
|
94
|
+
registration.type !== undefined &&
|
|
95
|
+
registration.type !== "stdio")
|
|
96
|
+
return false;
|
|
88
97
|
if (client.format === "copilot_cli" &&
|
|
89
98
|
(registration.type !== "stdio" ||
|
|
90
99
|
JSON.stringify(registration.tools) !== JSON.stringify(["*"])))
|
|
@@ -127,6 +136,10 @@ const parseRegistration = (value, client) => {
|
|
|
127
136
|
throw new TypeError("Expected an stdio registration");
|
|
128
137
|
if (client.format === "commandcode" && registration.transport !== "stdio")
|
|
129
138
|
throw new TypeError("Expected an stdio registration");
|
|
139
|
+
if (client.format === "omp" &&
|
|
140
|
+
registration.type !== undefined &&
|
|
141
|
+
registration.type !== "stdio")
|
|
142
|
+
throw new TypeError("Expected an stdio registration");
|
|
130
143
|
return registration;
|
|
131
144
|
};
|
|
132
145
|
const remediation = "Run rea setup to refresh this registration, then restart the client.";
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { parseConfig } from "../config.js";
|
|
2
1
|
import { EnhancedTools } from "./EnhancedTools.js";
|
|
3
2
|
import { executeFunctionAnalysisEvidence } from "./FunctionAnalysisEvidence.js";
|
|
4
3
|
import { silentLogger } from "../logger.js";
|
|
@@ -15,6 +14,9 @@ import { err, ok } from "../domain/result.js";
|
|
|
15
14
|
import { REA_WORKFLOW_PROVIDER, workflowAnalysisProfile, } from "./InvestigationProviders.js";
|
|
16
15
|
import { createWorkflowEvidence, workflowSnapshotRecord, recordWorkflowUnknowns, } from "./WorkflowEvidence.js";
|
|
17
16
|
import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
|
|
17
|
+
import { resolveXrefsAddress } from "./XrefsAddressResolution.js";
|
|
18
|
+
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
19
|
+
import { directAnalysisCleanupFailure, managedAnalysisCleanupFailure, withSessionCleanup, } from "./DirectAnalysisCleanup.js";
|
|
18
20
|
/**
|
|
19
21
|
* Open one binary, execute one tool, and always release provider resources.
|
|
20
22
|
* Unlike MCP mode, every CLI invocation is intentionally isolated and does not
|
|
@@ -42,15 +44,12 @@ export const runProviderAnalysis = async (dependencies, ...[path, tool, argument
|
|
|
42
44
|
/** Execute managed metadata inspection in an isolated managed-only session. */
|
|
43
45
|
export const runManagedProviderExecution = async (dependencies, path, tool, signal) => withProcessCancellation(signal, async (operationSignal) => {
|
|
44
46
|
const session = dependencies.createManagedBinarySession();
|
|
45
|
-
|
|
47
|
+
return withSessionCleanup(session, async () => {
|
|
46
48
|
const opened = await session.open(path, { signal: operationSignal });
|
|
47
49
|
if (!opened.ok)
|
|
48
50
|
return opened;
|
|
49
51
|
return await session.execute(tool, {}, { signal: operationSignal });
|
|
50
|
-
}
|
|
51
|
-
finally {
|
|
52
|
-
await session.close();
|
|
53
|
-
}
|
|
52
|
+
}, managedAnalysisCleanupFailure);
|
|
54
53
|
});
|
|
55
54
|
const runManagedProviderAnalysis = async (dependencies, path, tool, signal) => {
|
|
56
55
|
const execution = await runManagedProviderExecution(dependencies, path, tool, signal);
|
|
@@ -68,14 +67,15 @@ const runManagedProviderAnalysis = async (dependencies, path, tool, signal) => {
|
|
|
68
67
|
};
|
|
69
68
|
const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
|
|
70
69
|
const { logger, signal, snapshotPath } = options;
|
|
71
|
-
const config =
|
|
70
|
+
const config = dependencies.readConfiguration();
|
|
72
71
|
if (!config.ok)
|
|
73
72
|
return cliError(config.error);
|
|
74
73
|
const session = dependencies.createBinarySession(config.value, logger);
|
|
75
|
-
|
|
74
|
+
return withSessionCleanup(session, async () => {
|
|
76
75
|
const prepared = await prepareSnapshot({
|
|
77
76
|
path,
|
|
78
77
|
snapshotPath,
|
|
78
|
+
signal,
|
|
79
79
|
...(options.formatHint === undefined
|
|
80
80
|
? {}
|
|
81
81
|
: { formatHint: options.formatHint }),
|
|
@@ -145,7 +145,7 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
|
|
|
145
145
|
if (evidence !== undefined) {
|
|
146
146
|
const recorded = session.recordEvidence(evidence);
|
|
147
147
|
if (!recorded.ok)
|
|
148
|
-
return cliError(recorded.error);
|
|
148
|
+
return cliError(recorded.error.retainPartialObservation(evidence));
|
|
149
149
|
if (isWorkflowEvidenceTool(tool)) {
|
|
150
150
|
const unknowns = recordWorkflowUnknowns({
|
|
151
151
|
name: tool,
|
|
@@ -154,7 +154,7 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
|
|
|
154
154
|
recordUnknown: (unknown) => session.recordUnknown(unknown),
|
|
155
155
|
});
|
|
156
156
|
if (!unknowns.ok)
|
|
157
|
-
return cliError(unknowns.error);
|
|
157
|
+
return cliError(unknowns.error.retainPartialObservation(evidence));
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
if (isWorkflowEvidenceTool(tool) &&
|
|
@@ -166,7 +166,7 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
|
|
|
166
166
|
if (workflowRecord !== undefined) {
|
|
167
167
|
const recorded = session.recordWorkflowSnapshot(workflowRecord);
|
|
168
168
|
if (!recorded.ok)
|
|
169
|
-
return cliError(recorded.error);
|
|
169
|
+
return cliError(recorded.error.retainPartialObservation(evidence));
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
if (tool !== "trace_native_ui_action" &&
|
|
@@ -174,16 +174,13 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
|
|
|
174
174
|
evidence !== undefined) {
|
|
175
175
|
const snapshot = session.exportAnalysisSnapshot();
|
|
176
176
|
if (!snapshot.ok)
|
|
177
|
-
return cliError(snapshot.error);
|
|
177
|
+
return cliError(snapshot.error.retainPartialObservation(evidence));
|
|
178
178
|
const written = await writeAnalysisSnapshot(snapshot.value, snapshotPath, true);
|
|
179
179
|
if (!written.ok)
|
|
180
|
-
return cliError(written.error);
|
|
180
|
+
return cliError(written.error.retainPartialObservation(evidence));
|
|
181
181
|
}
|
|
182
182
|
return output;
|
|
183
|
-
}
|
|
184
|
-
finally {
|
|
185
|
-
await session.close();
|
|
186
|
-
}
|
|
183
|
+
}, directAnalysisCleanupFailure);
|
|
187
184
|
};
|
|
188
185
|
const executeAnalysisTool = async (input) => {
|
|
189
186
|
const { session, tool, signal, evidenceProfile } = input;
|
|
@@ -211,7 +208,22 @@ const executeAnalysisTool = async (input) => {
|
|
|
211
208
|
});
|
|
212
209
|
return { output: evidence, evidence };
|
|
213
210
|
}
|
|
214
|
-
|
|
211
|
+
let result = await session.execute(tool, input.arguments, { signal });
|
|
212
|
+
if (tool === "xrefs" &&
|
|
213
|
+
typeof input.arguments.address === "string" &&
|
|
214
|
+
!result.ok &&
|
|
215
|
+
result.error instanceof AnalysisInputError &&
|
|
216
|
+
!result.error.cleanupIncomplete &&
|
|
217
|
+
result.error.issues.length > 0 &&
|
|
218
|
+
result.error.issues.every(({ path, reason }) => path.length === 1 &&
|
|
219
|
+
path[0] === "address" &&
|
|
220
|
+
reason === "invalid_format")) {
|
|
221
|
+
const address = await resolveXrefsAddress(session, input.arguments.address, signal);
|
|
222
|
+
if (!address.ok)
|
|
223
|
+
return { output: cliError(address.error) };
|
|
224
|
+
if (address.value !== input.arguments.address)
|
|
225
|
+
result = await session.execute(tool, { ...input.arguments, address: address.value }, { signal });
|
|
226
|
+
}
|
|
215
227
|
if (!result.ok)
|
|
216
228
|
return { output: cliError(result.error) };
|
|
217
229
|
const evidence = createEvidence(result.value.subject ?? input.openedTarget, result.value.provider, {
|
|
@@ -236,12 +248,16 @@ const withProcessCancellation = async (suppliedSignal, operation) => {
|
|
|
236
248
|
return operation(suppliedSignal);
|
|
237
249
|
const controller = new AbortController();
|
|
238
250
|
const cancel = () => controller.abort();
|
|
239
|
-
|
|
251
|
+
// Package runners can forward a terminal interrupt after REA already received
|
|
252
|
+
// it directly. Keep both guards installed until provider cleanup has settled.
|
|
253
|
+
process.on("SIGINT", cancel);
|
|
254
|
+
process.on("SIGTERM", cancel);
|
|
240
255
|
try {
|
|
241
256
|
return await operation(controller.signal);
|
|
242
257
|
}
|
|
243
258
|
finally {
|
|
244
259
|
process.off("SIGINT", cancel);
|
|
260
|
+
process.off("SIGTERM", cancel);
|
|
245
261
|
}
|
|
246
262
|
};
|
|
247
263
|
const prepareSnapshot = async (options) => {
|
|
@@ -251,7 +267,12 @@ const prepareSnapshot = async (options) => {
|
|
|
251
267
|
const loaded = await readAnalysisSnapshot(snapshotPath);
|
|
252
268
|
if (!loaded.ok)
|
|
253
269
|
return loaded;
|
|
254
|
-
const target = await parseBinaryTarget(path,
|
|
270
|
+
const target = await parseBinaryTarget(path, {
|
|
271
|
+
signal: options.signal,
|
|
272
|
+
...(options.formatHint === undefined
|
|
273
|
+
? {}
|
|
274
|
+
: { formatHint: options.formatHint }),
|
|
275
|
+
});
|
|
255
276
|
if (!target.ok)
|
|
256
277
|
return target;
|
|
257
278
|
if (!snapshotMatchesTarget(loaded.value.target, target.value))
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { analysisErrorProjectionSchema } from "../contracts/errorSchemas.js";
|
|
2
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
3
|
+
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
4
|
+
import { ProviderAdapterError } from "../domain/providerAdapterError.js";
|
|
5
|
+
import { err } from "../domain/result.js";
|
|
6
|
+
import { analysisErrorWithCleanupFailure } from "./binary/AnalysisClientCleanup.js";
|
|
7
|
+
/** Await one-shot cleanup and retain either the outcome or both failures. */
|
|
8
|
+
export const withSessionCleanup = async (session, operation, onCleanupFailure) => {
|
|
9
|
+
let value;
|
|
10
|
+
try {
|
|
11
|
+
value = await operation();
|
|
12
|
+
}
|
|
13
|
+
catch (cause) {
|
|
14
|
+
const closed = await session.close();
|
|
15
|
+
if (!closed.ok)
|
|
16
|
+
throw new AggregateError([cause, closed.error], "Analysis and provider cleanup both failed", { cause });
|
|
17
|
+
throw cause;
|
|
18
|
+
}
|
|
19
|
+
const closed = await session.close();
|
|
20
|
+
return closed.ok ? value : onCleanupFailure(value, closed.error);
|
|
21
|
+
};
|
|
22
|
+
/** Keep the primary CLI failure or completed Evidence alongside cleanup failure. */
|
|
23
|
+
export const directAnalysisCleanupFailure = (output, error) => {
|
|
24
|
+
const cleanup = projectAnalysisError(error);
|
|
25
|
+
if (typeof output === "object" && output !== null && !Array.isArray(output)) {
|
|
26
|
+
const { error: label, ...projection } = output;
|
|
27
|
+
const primary = analysisErrorProjectionSchema.safeParse(projection);
|
|
28
|
+
if (typeof label === "string" && primary.success)
|
|
29
|
+
return {
|
|
30
|
+
error: label,
|
|
31
|
+
...primary.data,
|
|
32
|
+
code: "cleanup_incomplete",
|
|
33
|
+
retryable: false,
|
|
34
|
+
details: {
|
|
35
|
+
...primary.data.details,
|
|
36
|
+
cleanup: "incomplete",
|
|
37
|
+
resources: error.cleanupResources.slice(),
|
|
38
|
+
execution_failure: primary.data.details !== undefined &&
|
|
39
|
+
"execution_failure" in primary.data.details
|
|
40
|
+
? (primary.data.details.execution_failure ?? primary.data.code)
|
|
41
|
+
: primary.data.code,
|
|
42
|
+
cleanup_error: cleanup,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
error: "Analysis failed",
|
|
48
|
+
...cleanup,
|
|
49
|
+
code: "cleanup_incomplete",
|
|
50
|
+
retryable: false,
|
|
51
|
+
details: {
|
|
52
|
+
...cleanup.details,
|
|
53
|
+
cleanup: "incomplete",
|
|
54
|
+
partial_observation: output,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
/** Preserve managed observations or the original typed failure in diagnostics. */
|
|
59
|
+
export const managedAnalysisCleanupFailure = (result, error) => {
|
|
60
|
+
if (!result.ok)
|
|
61
|
+
return err(analysisErrorWithCleanupFailure(result.error, error));
|
|
62
|
+
const cleanup = projectAnalysisError(error);
|
|
63
|
+
return err(new ProviderAdapterError(error instanceof ProviderAdapterError ? error.providerId : "rea", "close_binary", {
|
|
64
|
+
cause: error,
|
|
65
|
+
cleanup: { reason: cleanup.message, resources: error.cleanupResources },
|
|
66
|
+
diagnostics: {
|
|
67
|
+
cleanup_error: cleanup,
|
|
68
|
+
partial_observation: jsonValueSchema.parse(result.value),
|
|
69
|
+
},
|
|
70
|
+
}));
|
|
71
|
+
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { parseConfig } from "../config.js";
|
|
2
1
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
3
2
|
import { jsonObjectSchema } from "../domain/jsonValue.js";
|
|
4
3
|
import { createServerIdentity } from "../serverIdentity.js";
|
|
5
4
|
import { silentLogger } from "../logger.js";
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
/** Read target-free provider status and operation availability. */
|
|
6
|
+
export const runSessionStatus = async (dependencies, logger = silentLogger) => {
|
|
7
|
+
const config = dependencies.readConfiguration();
|
|
8
8
|
if (!config.ok)
|
|
9
9
|
return { error: projectAnalysisError(config.error) };
|
|
10
10
|
const session = dependencies.createBinarySession(config.value, logger);
|
|
@@ -20,7 +20,3 @@ const runSessionStatus = async (dependencies, logger = silentLogger, environment
|
|
|
20
20
|
await session.close();
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
-
/** List binary-session provider candidates and auxiliary operation availability. */
|
|
24
|
-
export const runProviderStatus = (dependencies, logger = silentLogger, environment = process.env) => runSessionStatus(dependencies, logger, environment);
|
|
25
|
-
/** List binary-session operation descriptors; this is not the full MCP catalog. */
|
|
26
|
-
export const runCapabilityStatus = (dependencies, logger = silentLogger, environment = process.env) => runSessionStatus(dependencies, logger, environment);
|