rea-agents 6.2.0 → 6.4.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 -23
- package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
- package/bridge/ghidra/ReaGhidraBridge.java +597 -209
- package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
- package/bridge/hopper_bridge.py +2 -0
- package/dist/adb/AdbConfiguration.js +88 -0
- package/dist/adb/AdbDeviceOutput.js +186 -0
- package/dist/adb/AdbProvider.js +1190 -0
- package/dist/adb/AdbShellOutput.js +309 -0
- package/dist/android/AndroidTargetSnapshot.js +104 -22
- package/dist/android/JadxConfiguration.js +44 -24
- package/dist/android/JadxProvider.js +59 -21
- package/dist/android/JadxSession.js +51 -9
- package/dist/apktool/ApktoolConfiguration.js +84 -0
- package/dist/apktool/ApktoolDecodeOutput.js +59 -0
- package/dist/apktool/ApktoolProvider.js +506 -0
- package/dist/application/AnalysisProvider.js +8 -2
- package/dist/application/AppBundleExecutable.js +27 -22
- package/dist/application/BinaryTargetResolver.js +85 -19
- package/dist/application/BrowserScenarioEvidence.js +2 -2
- package/dist/application/CapabilityInventory.js +11 -1
- package/dist/application/ClientConfigurationDocument.js +98 -0
- package/dist/application/ClientConfigurationFiles.js +91 -0
- package/dist/application/ClientRegistrationEnvironment.js +35 -0
- package/dist/application/ClientRegistrationStatus.js +75 -27
- package/dist/application/DirectAnalysis.js +14 -8
- package/dist/application/DirectAnalysisCleanup.js +1 -2
- package/dist/application/DirectAnalysisStatus.js +3 -6
- package/dist/application/Doctor.js +27 -34
- package/dist/application/DoctorDiagnostics.js +1 -1
- package/dist/application/EvidenceBundleCommands.js +6 -12
- package/dist/application/EvidenceBundleFiles.js +1 -1
- package/dist/application/GeminiClientSettings.js +139 -0
- package/dist/application/HermesClientHome.js +115 -0
- package/dist/application/HopperDownload.js +39 -0
- package/dist/application/InvestigationProviders.js +10 -4
- package/dist/application/JsonFiles.js +16 -15
- package/dist/application/JsonInputFile.js +252 -0
- package/dist/application/LinuxHopper.js +6 -13
- package/dist/application/MacHopper.js +172 -149
- package/dist/application/MipsElfAbiFlags.js +140 -0
- package/dist/application/ProviderOperationExecution.js +31 -0
- package/dist/application/ReconstructionObligationCandidates.js +16 -3
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
- package/dist/application/ReferenceSourceImport.js +76 -29
- package/dist/application/ReferenceSourceImportEntries.js +18 -9
- package/dist/application/ReferenceSourceImportPolicy.js +99 -23
- package/dist/application/ReferenceSourceImportTypes.js +30 -22
- package/dist/application/ReferenceSourceVcsAdapter.js +145 -30
- package/dist/application/RegularFileRead.js +103 -0
- package/dist/application/Setup.js +69 -10
- package/dist/application/SetupClientConfiguration.js +134 -23
- package/dist/application/SetupHost.js +102 -22
- package/dist/application/SetupPlan.js +18 -17
- package/dist/application/SetupSkill.js +81 -13
- package/dist/application/SupportedClients.js +305 -37
- package/dist/application/Uninstall.js +172 -8
- package/dist/application/UpdateMaintenance.js +23 -23
- package/dist/application/Utf8JsonInput.js +71 -0
- package/dist/application/WebScriptExportService.js +130 -57
- package/dist/application/WebSourceLocationService.js +3 -0
- package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
- package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
- package/dist/application/analysisView/AnalysisViewService.js +40 -2
- package/dist/application/android/AndroidAnalysisService.js +1 -1
- package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
- package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
- package/dist/application/binary/AnalysisClientCleanup.js +0 -24
- package/dist/application/binary/AnalysisSnapshotCache.js +5 -4
- package/dist/application/binary/BinarySession.js +18 -1
- package/dist/application/binary/BinarySessionOpen.js +9 -1
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +2 -1
- package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
- package/dist/application/binaryDiagnostics/PeResourcesService.js +111 -0
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +2 -1
- package/dist/application/evm/EvmInterfaceService.js +3 -0
- package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
- package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +2 -2
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
- package/dist/application/javascript/ElectronBoundaryGraphIpc.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +20 -3
- package/dist/application/javascript/ElectronBoundaryGraphWindows.js +3 -3
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +1 -0
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
- package/dist/application/javascript/JavaScriptApplicationService.js +23 -11
- package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +171 -36
- package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +14 -16
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +74 -36
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +11 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +53 -42
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +92 -10
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +293 -238
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +120 -28
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +4 -0
- package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
- package/dist/application/javascript/JavaScriptModuleRelationships.js +10 -20
- package/dist/application/javascript/JavaScriptRecoveryService.js +3 -0
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +11 -5
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +206 -66
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +18 -23
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +5 -2
- package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +7 -5
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +6 -4
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +29 -15
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
- package/dist/application/jeb/JebAnalysisPort.js +1 -0
- package/dist/application/jeb/JebAnalysisService.js +13 -0
- package/dist/application/managed/ManagedApplicationGraphService.js +1 -1
- package/dist/application/native/NativeCallRoutes.js +2 -4
- package/dist/application/native/NativeUiActionTrace.js +16 -8
- package/dist/application/native/NativeValueTrace.js +23 -6
- package/dist/application/process/ProcessCli.js +25 -20
- package/dist/artifacts/ArtifactPaths.js +129 -8
- package/dist/artifacts/ArtifactProvider.js +34 -31
- package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
- package/dist/artifacts/ArtifactReader.js +23 -0
- package/dist/artifacts/ArtifactResourceScope.js +100 -0
- package/dist/artifacts/AsarArtifactReader.js +218 -80
- package/dist/artifacts/AsarHeader.js +24 -0
- package/dist/artifacts/DirectoryArtifactReader.js +168 -65
- package/dist/artifacts/MachOSliceArtifactReader.js +116 -39
- package/dist/artifacts/NativeDmgArtifactReader.js +179 -87
- package/dist/artifacts/NativeDmgOwnership.js +109 -0
- package/dist/artifacts/SafeOutputTree.js +245 -70
- package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
- package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
- package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
- package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
- package/dist/artifacts/ZipArtifactReader.js +77 -27
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +58 -18
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +62 -24
- package/dist/artifacts/apple/KeyedArchiveReader.js +76 -49
- package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
- package/dist/artifacts/extraction/ArtifactExtraction.js +134 -92
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +116 -50
- package/dist/artifacts/inventory/ArtifactInventory.js +5 -4
- package/dist/artifacts/inventory/classify.js +87 -25
- package/dist/artifacts/inventory/hashStableRootArtifact.js +70 -0
- package/dist/artifacts/inventory/reader.js +13 -5
- package/dist/artifacts/inventory/scanCanonical.js +73 -30
- package/dist/artifacts/inventory/scanReader.js +43 -20
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +72 -28
- package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
- package/dist/browser/BrowserScenarioPartialObservation.js +8 -2
- package/dist/browser/BrowserScenarioSecrets.js +52 -37
- package/dist/browser/CdpBrowserProvider.js +9 -3
- package/dist/browser/CdpCaptureDocuments.js +40 -6
- package/dist/browser/CdpCaptureDomSvg.js +210 -0
- package/dist/browser/CdpCaptureEventBodyShapes.js +4 -8
- package/dist/browser/CdpCaptureEventHandlers.js +26 -9
- package/dist/browser/CdpCaptureEvents.js +4 -9
- package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
- package/dist/browser/CdpConnection.js +22 -5
- package/dist/browser/CdpElectronInspection.js +2 -2
- package/dist/browser/CdpElectronProvider.js +4 -3
- package/dist/browser/CdpElectronScripts.js +2 -2
- package/dist/browser/CdpPageCapture.js +1 -1
- package/dist/browser/CdpTargetSession.js +30 -34
- package/dist/browser/CdpWebMcpDiscovery.js +48 -23
- package/dist/browser/ElectronFileScope.js +99 -9
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +63 -7
- package/dist/browser/PlaywrightElectronActiveProvider.js +11 -6
- package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
- package/dist/browser/PlaywrightScenarioBrowser.js +208 -43
- package/dist/browser/PlaywrightScenarioSession.js +130 -65
- package/dist/browser/PlaywrightScenarioStorage.js +507 -0
- package/dist/browser/PngVisualDiff.js +198 -29
- package/dist/browser/WebSourceMapFetcher.js +35 -9
- package/dist/browser/assets/LocalWebScriptArtifacts.js +3 -1
- package/dist/browser/assets/PublishWebScripts.js +75 -20
- package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
- package/dist/browser/assets/WebArtifactReads.js +23 -1
- package/dist/browser/assets/WebSourceLocationArtifacts.js +1 -0
- package/dist/browser/execution/CdpExecutionCapture.js +3 -3
- package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
- package/dist/browser/history/HarCapture.js +14 -0
- package/dist/browser/history/HarCaptureProcess.js +2 -10
- package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
- package/dist/browser/modules/WebModuleArtifacts.js +1 -0
- package/dist/cli/adbCommands.js +337 -0
- package/dist/cli/analysisViewCommands.js +39 -1
- package/dist/cli/apktoolCommands.js +53 -0
- package/dist/cli/artifactCommands.js +8 -11
- package/dist/cli/binaryDiagnosticsCommands.js +19 -1
- package/dist/cli/browserAdvancedCommands.js +65 -36
- package/dist/cli/coreAnalysisCommands.js +2 -2
- package/dist/cli/coreBinaryCommands.js +12 -13
- package/dist/cli/coreNativeCommands.js +1 -14
- package/dist/cli/electronCommands.js +14 -10
- package/dist/cli/evmCommands.js +13 -4
- package/dist/cli/firmwareCommands.js +7 -2
- package/dist/cli/javascriptApplicationAnalysis.js +19 -13
- package/dist/cli/javascriptRecoveryCommands.js +22 -15
- package/dist/cli/jebCommands.js +99 -0
- package/dist/cli/jsonOutput.js +12 -4
- package/dist/cli/referenceSourceImportStatus.js +7 -0
- package/dist/cli/setupCommands.js +15 -3
- package/dist/cli/streamedJsonOutput.js +83 -4
- package/dist/cli/utilityCommands.js +68 -22
- package/dist/cli/webScriptCommands.js +20 -1
- package/dist/cli/webSourceLocationCommands.js +21 -9
- package/dist/cli.js +11 -2
- package/dist/cliBrowserScenarioCommands.js +2 -1
- package/dist/cliCommandNames.js +32 -0
- package/dist/cliJsonInput.js +47 -34
- package/dist/cliObservationOptions.js +7 -0
- package/dist/composition/adb.js +3 -0
- package/dist/composition/apktool.js +3 -0
- package/dist/composition/auxiliaryAnalysisProviders.js +5 -4
- package/dist/composition/binaryDiagnostics.js +4 -0
- package/dist/composition/browserScenario.js +2 -2
- package/dist/composition/directAnalysis.js +14 -7
- package/dist/composition/javascriptAnalysisWorkerProcess.js +48 -0
- package/dist/composition/jeb.js +6 -0
- package/dist/config/environment.js +10 -0
- package/dist/config/ghidraLanguageOverride.js +9 -0
- package/dist/config/mcpInputSchemaProfile.js +27 -0
- package/dist/config/parseConfig.js +28 -1
- package/dist/contracts/adb/adbToolContracts.js +353 -0
- package/dist/contracts/advertisedInputExamples.js +48 -0
- package/dist/contracts/analysisDetail.js +10 -0
- package/dist/contracts/analysisViewToolContracts.js +17 -2
- package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
- package/dist/contracts/artifactComparisonExample.js +5 -5
- package/dist/contracts/artifactToolContracts.js +8 -5
- package/dist/contracts/browserToolContracts.js +1 -1
- package/dist/contracts/compactInputSchema.js +256 -0
- package/dist/contracts/errorSchemas.js +3 -1
- package/dist/contracts/functionComparisonExample.js +8 -0
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +104 -13
- package/dist/contracts/javascript/electronToolContracts.js +16 -3
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -2
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +6 -3
- package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
- package/dist/contracts/jeb/jebToolContracts.js +64 -0
- package/dist/contracts/managed/managedToolContracts.js +3 -2
- package/dist/contracts/mobileApplicationGraphExamples.js +5 -5
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +25 -3
- package/dist/contracts/native/nativeToolContracts.js +1 -1
- package/dist/contracts/officialToolContracts.js +5 -5
- package/dist/contracts/sessionLifecycleInputs.js +4 -3
- package/dist/contracts/sessionStatusContract.js +3 -2
- package/dist/contracts/sessionToolContracts.js +5 -4
- package/dist/contracts/sessionToolSchemas.js +9 -4
- package/dist/contracts/toolContractExamples.js +6 -0
- package/dist/contracts/toolContractTypes.js +3 -0
- package/dist/contracts/toolContracts.js +6 -0
- package/dist/contracts/toolEffects.js +167 -0
- package/dist/contracts/toolOutputSchemaGroups.js +7 -5
- package/dist/contracts/toolOutputSchemaPrimitives.js +2 -5
- package/dist/contracts/toolSchemaMetadata.js +82 -7
- package/dist/domain/adb/adbDeviceAnalysis.js +583 -0
- package/dist/domain/analysisErrorBase.js +5 -0
- package/dist/domain/analysisErrorCleanup.js +29 -0
- package/dist/domain/analysisErrorPresentation.js +18 -4
- package/dist/domain/analysisErrorProjection.js +4 -1
- package/dist/domain/analysisSnapshot.js +5 -2
- package/dist/domain/analysisView/analysisView.js +53 -5
- package/dist/domain/analysisView/binaryLayoutView.js +2 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +2 -0
- package/dist/domain/analysisView/nativeFunctionView.js +155 -0
- package/dist/domain/android/androidApplication.js +25 -20
- package/dist/domain/android/androidPartialObservation.js +36 -0
- package/dist/domain/apktool/apktoolResourceAnalysis.js +77 -0
- package/dist/domain/apple/appleApplication.js +40 -23
- package/dist/domain/apple/appleBundleAnatomy.js +95 -28
- package/dist/domain/apple/dyldPaths.js +9 -1
- package/dist/domain/apple/dylibResolution.js +3 -3
- package/dist/domain/apple/interfaceBuilderGraph.js +22 -19
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +10 -1
- package/dist/domain/artifactComparison.js +39 -11
- package/dist/domain/artifactGraph.js +6 -4
- package/dist/domain/artifactIdentity.js +37 -9
- package/dist/domain/artifactInspection.js +10 -50
- package/dist/domain/artifactIntegrityPolicy.js +10 -0
- package/dist/domain/artifactInventoryEvidence.js +16 -17
- package/dist/domain/artifactPathSyntax.js +1 -1
- package/dist/domain/binaryTarget.js +16 -0
- package/dist/domain/binaryTargetTypes.js +8 -1
- package/dist/domain/browserCompleteness.js +3 -2
- package/dist/domain/browserObservationSchemas.js +8 -4
- package/dist/domain/browserScenarioCaptureValues.js +2 -2
- package/dist/domain/browserScenarioNormalization.js +3 -3
- package/dist/domain/browserScenarioValues.js +3 -2
- package/dist/domain/callPath.js +8 -10
- package/dist/domain/canonicalDigest.js +7 -1
- package/dist/domain/canonicalJsonDigestSteps.js +34 -12
- package/dist/domain/canonicalOrdering.js +1 -13
- package/dist/domain/changedBehavior.js +2 -3
- package/dist/domain/compactStringIdentity.js +9 -0
- package/dist/domain/comparisonSemantics.js +0 -5
- package/dist/domain/digests.js +0 -3
- package/dist/domain/evidence.js +12 -6
- package/dist/domain/evidenceBundle.js +51 -33
- package/dist/domain/evidenceRecordSummary.js +144 -0
- package/dist/domain/firmware/firmwareAnalysis.js +4 -3
- package/dist/domain/functionComparison.js +2 -1
- package/dist/domain/functionComparisonNormalization.js +4 -3
- package/dist/domain/functionComparisonResults.js +2 -2
- package/dist/domain/functionDossierEvidence.js +2 -1
- package/dist/domain/hopperValues.js +11 -15
- package/dist/domain/inputIssueProjection.js +16 -1
- package/dist/domain/javascript/electronActiveObservation.js +4 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +14 -15
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +20 -21
- package/dist/domain/javascript/electronStaticAnalysisNative.js +73 -41
- package/dist/domain/javascript/electronStaticAnalysisValues.js +24 -4
- package/dist/domain/javascript/javascriptAnalysisResourceControls.js +45 -0
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +6 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +18 -14
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +4 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +91 -28
- package/dist/domain/javascript/javascriptApplicationProjectionResources.js +35 -0
- package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
- package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +72 -45
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +16 -8
- package/dist/domain/javascript/javascriptAstFingerprint.js +60 -33
- package/dist/domain/javascript/javascriptAstValues.js +54 -0
- package/dist/domain/javascript/javascriptElectronMemberWrites.js +50 -0
- package/dist/domain/javascript/javascriptExportShapeComparison.js +3 -2
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +31 -23
- package/dist/domain/javascript/javascriptExportShapeSelection.js +2 -2
- package/dist/domain/javascript/javascriptExportShapeVariants.js +3 -2
- package/dist/domain/javascript/javascriptFeatureSeed.js +5 -3
- package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
- package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -4
- package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
- package/dist/domain/javascript/javascriptNativeHandoff.js +12 -7
- package/dist/domain/javascript/javascriptRpcEndpoints.js +253 -0
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +1 -3
- package/dist/domain/javascript/javascriptRuntimeObservation.js +8 -5
- 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 +12 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +5 -5
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -223
- 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 +15 -17
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +379 -30
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
- package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
- package/dist/domain/javascript/javascriptSemanticCalls.js +8 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -2
- 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/javascriptSemanticDerivedAnalysis.js +15 -4
- package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +43 -42
- package/dist/domain/javascript/javascriptSemanticGraph.js +205 -52
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +21 -11
- package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +139 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +774 -136
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +98 -41
- package/dist/domain/javascript/javascriptSemanticObjectReferences.js +381 -0
- package/dist/domain/javascript/javascriptSemanticObjects.js +9 -7
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +7 -2
- package/dist/domain/javascript/javascriptSemanticProjection.js +72 -28
- package/dist/domain/javascript/javascriptSemanticPromises.js +15 -21
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +100 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
- package/dist/domain/javascript/javascriptSemanticQuery.js +33 -29
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +4 -5
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
- package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +219 -0
- package/dist/domain/javascript/javascriptSemanticReturns.js +34 -48
- package/dist/domain/javascript/javascriptSemanticState.js +22 -2
- package/dist/domain/javascript/javascriptSemanticTraversal.js +25 -2
- package/dist/domain/javascript/javascriptSemanticValues.js +169 -30
- package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
- package/dist/domain/javascript/javascriptSourceMapPaths.js +11 -1
- package/dist/domain/javascript/javascriptSourceParser.js +34 -9
- package/dist/domain/javascript/javascriptStaticAnalysis.js +29 -17
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +13 -12
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +49 -5
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -15
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
- package/dist/domain/javascript/sourceToBundleComparison.js +7 -5
- package/dist/domain/javascript/sourceToBundleSignals.js +7 -7
- package/dist/domain/jeb/jebAnalysis.js +114 -0
- package/dist/domain/jsonSerialization.js +109 -55
- package/dist/domain/jsonShape.js +69 -31
- package/dist/domain/jsonValue.js +3 -0
- package/dist/domain/localPath.js +10 -4
- package/dist/domain/managed/managedApplicationGraph.js +47 -6
- package/dist/domain/managed/managedApplicationGraphCoverage.js +8 -2
- package/dist/domain/managed/managedApplicationGraphNodes.js +94 -59
- package/dist/domain/managed/managedArtifact.js +1 -0
- package/dist/domain/managed/managedInspectionEvidence.js +13 -0
- package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
- package/dist/domain/native/nativeAotPe.js +1408 -0
- package/dist/domain/native/nativeCallObservation.js +2 -4
- package/dist/domain/native/nativeInstruction.js +21 -0
- package/dist/domain/native/nativeMetadataRecovery.js +79 -6
- package/dist/domain/native/nativeValueFlow.js +5 -11
- package/dist/domain/native/objcSwiftMetadata.js +15 -17
- package/dist/domain/native/peResources.js +94 -0
- package/dist/domain/nativeConvention.js +33 -0
- package/dist/domain/process/processCapture.js +102 -11
- package/dist/domain/process/processCaptureCoverage.js +8 -5
- package/dist/domain/process/processCaptureExample.js +67 -0
- package/dist/domain/process/processCaptureValidation.js +83 -3
- package/dist/domain/process/processComparison.js +0 -23
- package/dist/domain/process/processScenario.js +62 -10
- package/dist/domain/process/processTraceEvaluation.js +4 -4
- package/dist/domain/process/processTraceSpecification.js +1 -3
- package/dist/domain/propertyListKeys.js +3 -1
- package/dist/domain/providerCleanupError.js +6 -2
- package/dist/domain/reconstructionCoverage.js +2 -1
- package/dist/domain/reconstructionUnknowns.js +4 -3
- package/dist/domain/reconstructionVerification.js +3 -2
- package/dist/domain/referenceSourceGraph.js +32 -23
- package/dist/domain/referenceSourceImportParsing.js +40 -48
- package/dist/domain/referenceSourcePathIdentity.js +22 -0
- package/dist/domain/referenceSourceRequireBindings.js +137 -0
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/staticRuntimeCorrelation.js +2 -1
- package/dist/domain/swiftSymbolClassification.js +6 -1
- package/dist/domain/symbolAnalysis.js +17 -2
- package/dist/domain/unicodeCodePointOrder.js +6 -0
- package/dist/domain/webBundleAnalyzerInspection.js +23 -3
- package/dist/domain/webCaptureDiff.js +170 -30
- package/dist/domain/webCaptureDiffSchemas.js +2 -8
- package/dist/domain/webInventory.js +3 -2
- package/dist/domain/webMcpDiscovery.js +4 -3
- package/dist/domain/webScriptExport.js +1 -1
- package/dist/domain/webScriptExportError.js +10 -4
- package/dist/domain/webScriptExportPlan.js +7 -13
- package/dist/domain/zipPackageFormat.js +4 -1
- package/dist/domain/zodCollectionSteps.js +24 -0
- package/dist/dotnet/ManagedArtifactInspector.js +55 -43
- package/dist/dotnet/ManagedDecodeBudget.js +80 -0
- package/dist/dotnet/ManagedMemberInspector.js +13 -6
- package/dist/dotnet/ManagedMemberInspectorCore.js +2 -2
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +5 -4
- package/dist/dotnet/ManagedMemberRows.js +9 -4
- package/dist/dotnet/ManagedMetadataHeaps.js +15 -5
- package/dist/dotnet/ManagedMetadataInventoryRows.js +20 -11
- package/dist/dotnet/ManagedMetadataLayout.js +10 -4
- package/dist/dotnet/ManagedMethodBodyReader.js +8 -3
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +3 -2
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +49 -34
- package/dist/dotnet/ManagedPeReader.js +41 -25
- package/dist/dotnet/ManagedReaderFailure.js +2 -1
- package/dist/dotnet/ManagedStaticProvider.js +65 -31
- package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
- package/dist/evaluation/AgentEvaluationReport.js +9 -5
- package/dist/evaluation/CodexAgentEval.js +43 -13
- package/dist/evm/EvmoleFailures.js +0 -2
- package/dist/evm/EvmoleInterfaceProvider.js +67 -2
- package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
- package/dist/filesystem/OwnedFileHandle.js +36 -0
- package/dist/filesystem/RegularFile.js +73 -0
- package/dist/filesystem/StableFileHash.js +46 -0
- package/dist/filesystem/readFileHandleChunks.js +26 -0
- package/dist/firmware/FirmwareCommand.js +25 -3
- package/dist/firmware/FirmwareFiles.js +23 -8
- package/dist/firmware/FirmwareProvider.js +156 -32
- package/dist/firmware/FirmwarePublication.js +24 -3
- package/dist/firmware/FirmwareRelease.js +1 -0
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +55 -4
- package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
- package/dist/ghidra/GhidraClient.js +90 -8
- package/dist/ghidra/GhidraDiagnostics.js +11 -8
- package/dist/ghidra/GhidraFunctionValues.js +26 -2
- package/dist/ghidra/GhidraInstallation.js +111 -10
- package/dist/ghidra/GhidraInventoryValues.js +23 -1
- package/dist/ghidra/GhidraLanguageCatalog.js +99 -0
- package/dist/ghidra/GhidraLauncher.js +123 -58
- package/dist/ghidra/GhidraLoadImageAttest.js +49 -2
- package/dist/ghidra/GhidraMipsProfile.js +79 -0
- package/dist/ghidra/GhidraProvider.js +57 -9
- package/dist/ghidra/GhidraProviderCapabilities.js +18 -8
- package/dist/ghidra/GhidraProviderClient.js +282 -21
- package/dist/ghidra/GhidraSessionValues.js +9 -2
- package/dist/hopper/HopperAnalysisProfile.js +2 -0
- package/dist/hopper/HopperCleanup.js +1 -1
- package/dist/hopper/HopperClient.js +15 -6
- package/dist/hopper/HopperMachOImage.js +2 -0
- package/dist/hopper/HopperProvider.js +13 -2
- package/dist/ida/IdaOperationRunner.js +10 -2
- package/dist/ida/IdaProvider.js +7 -0
- package/dist/ida/IdaSessionClient.js +7 -3
- package/dist/ida/IdaWorkspace.js +4 -2
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
- package/dist/inspector/V8InspectorCaptureProjection.js +46 -13
- package/dist/inspector/V8InspectorProvider.js +60 -8
- package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +326 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +520 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +63 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +521 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +116 -0
- package/dist/javascript/recovery/RecoveryFiles.js +18 -7
- package/dist/javascript/recovery/WakaruCommand.js +22 -9
- package/dist/javascript/recovery/WakaruExecution.js +11 -7
- package/dist/javascript/recovery/WakaruProvider.js +139 -16
- package/dist/javascript/recovery/WakaruPublication.js +14 -4
- package/dist/javascript/recovery/WakaruRelease.js +10 -3
- package/dist/javascript/recovery/WakaruReport.js +12 -7
- package/dist/javascript/recovery/WakaruVersion.js +24 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -3
- package/dist/javascript/sourceMaps/SourceMapDecoder.js +63 -7
- package/dist/javascript/sourceMaps/SourceMapFormat.js +15 -4
- package/dist/jeb/JebMcpConnection.js +179 -0
- package/dist/jeb/JebMcpEndpoint.js +40 -0
- package/dist/jeb/JebProvider.js +299 -0
- package/dist/main/shutdown.js +76 -32
- package/dist/main/transport.js +1 -1
- package/dist/mcpDoctor.js +15 -6
- package/dist/native/AppleDispatchCoverage.js +25 -12
- package/dist/native/AppleDispatchMetadata.js +14 -7
- package/dist/native/AppleMachoFixups.js +71 -15
- package/dist/native/AppleMachoSelection.js +23 -3
- package/dist/native/AppleObjcDispatchFacets.js +3 -3
- package/dist/native/AppleObjcProperties.js +17 -7
- package/dist/native/LldbCallTracer.js +241 -75
- package/dist/native/NativeMacOSProvider.js +100 -20
- package/dist/native/NativeMacOSProviderMetadata.js +1 -2
- package/dist/native/NativeMachoInspection.js +11 -7
- package/dist/native/NativeUiHelperRuntime.js +6 -1
- package/dist/native/NativeUiObservation.js +4 -3
- package/dist/native/pe/PeResourceLayout.js +120 -0
- package/dist/native/pe/PeResourceParser.js +286 -0
- package/dist/native/pe/PeResourcesProvider.js +63 -0
- package/dist/process/BoundedFileBytes.js +30 -7
- package/dist/process/DarwinProcessRunTokenReader.js +8 -3
- package/dist/process/OwnedCommand.js +4 -3
- package/dist/process/ProcessOwnership.js +104 -112
- package/dist/process/ProcessOwnershipObservation.js +104 -51
- package/dist/process/ProcessOwnershipProcessTree.js +4 -4
- package/dist/process/ProcessRunTokenObservations.js +48 -0
- package/dist/process/ProviderDiagnosticRedaction.js +17 -0
- package/dist/process/ProviderProcess.js +4 -3
- package/dist/process/capture/FilesystemSnapshot.js +116 -22
- package/dist/process/capture/ProcessCaptureLifecycle.js +363 -86
- package/dist/process/capture/ProcessCaptureProgress.js +62 -0
- package/dist/process/capture/ProcessFilesystemEffects.js +19 -4
- package/dist/process/capture/ProcessHarness.js +202 -47
- package/dist/process/capture/ProcessNormalization.js +3 -1
- package/dist/process/capture/ProcessScenarioRuntimeValidation.js +5 -2
- package/dist/process/capture/TerminalRenderer.js +24 -7
- package/dist/reference/ReferenceSourceReader.js +22 -5
- package/dist/reference/ReferenceSourceReaderEntries.js +114 -51
- package/dist/reference/ReferenceSourceReaderErrors.js +12 -0
- package/dist/reference/ReferenceSourceReaderFile.js +50 -10
- package/dist/reference/ReferenceSourceReaderValidate.js +4 -4
- package/dist/server/EvidenceMcpServer.js +36 -1
- package/dist/server/admittedToolOperation.js +9 -0
- package/dist/server/analysisAdmission.js +8 -0
- package/dist/server/contractToolHandler.js +21 -0
- package/dist/server/createServer.js +118 -47
- package/dist/server/registerAdbTools.js +36 -0
- package/dist/server/registerAnalysisViewTool.js +4 -9
- package/dist/server/registerAndroidTools.js +3 -12
- package/dist/server/registerApktoolTools.js +14 -0
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -7
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +3 -2
- package/dist/server/registerApplicationTools/coverage.js +3 -2
- package/dist/server/registerApplicationTools/helpers.js +3 -2
- package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -2
- package/dist/server/registerApplicationTools/traceFeature.js +3 -2
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +5 -2
- package/dist/server/registerArtifactTools.js +2 -2
- package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
- package/dist/server/registerBrowserScenarioTool.js +10 -7
- package/dist/server/registerBrowserTools.js +12 -9
- package/dist/server/registerBundleComparisonTool.js +16 -2
- package/dist/server/registerCloseLifecycleTool.js +36 -5
- package/dist/server/registerElectronTools.js +28 -10
- package/dist/server/registerEnhancedTools.js +78 -73
- package/dist/server/registerEvidenceTools.js +54 -46
- package/dist/server/registerEvmTools.js +4 -9
- package/dist/server/registerFirmwareTools.js +3 -11
- package/dist/server/registerFunctionComparisonTool.js +5 -2
- package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -6
- package/dist/server/registerJebTools.js +16 -0
- package/dist/server/registerManagedTools.js +7 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
- package/dist/server/registerOfficialTools.js +31 -25
- package/dist/server/registerPeResourcesTool.js +9 -0
- package/dist/server/registerProcessComparisonTool.js +5 -2
- package/dist/server/registerRecordedCrashTools.js +4 -9
- package/dist/server/registerSessionRecordTools.js +2 -1
- package/dist/server/registerSessionTools.js +58 -21
- package/dist/server/registerWebModuleTool.js +4 -9
- package/dist/server/registerWebNetworkCaptureTool.js +4 -9
- package/dist/server/registerWebRuntimeTools.js +6 -5
- package/dist/server/registerWebScriptTool.js +6 -3
- package/dist/server/registerWebSourceLocationTool.js +4 -9
- package/dist/server/toolResult.js +21 -2
- package/dist/windows/WindowsPrivateRuntime.js +12 -5
- package/install.sh +7 -4
- package/licenses/nativeaot-parser-MIT.txt +28 -0
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +38 -7
- package/scripts/rea.mjs +16 -1
- package/skills/reverse-engineer-anything/SKILL.md +52 -51
- package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -0
- package/skills/reverse-engineer-anything/references/javascript-applications.md +92 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +31 -1
- package/dist/artifacts/inventory/policy.js +0 -2
- package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
- package/dist/server/registerNativeTools.js +0 -6
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { readClientPolicyBlock } from "./GeminiClientSettings.js";
|
|
2
|
+
import { effectiveClientConfiguration, readClientConfigurationFiles, } from "./ClientConfigurationFiles.js";
|
|
3
|
+
import { clientServerForcedEnabled, clientServerListedDisabled, effectiveClientServer, } from "./ClientConfigurationDocument.js";
|
|
4
|
+
import { access } from "node:fs/promises";
|
|
3
5
|
import { resolve } from "node:path";
|
|
4
6
|
import { z } from "zod";
|
|
5
7
|
import { PRODUCT_IDENTITY } from "../identity.js";
|
|
6
8
|
import { MCP_STARTUP_POLICY } from "../mcpStartupPolicy.js";
|
|
7
9
|
import { isOwnedClientRegistrationCommand, npxRegistrationCommand, } from "./ClientRegistrationIdentity.js";
|
|
8
|
-
import { manualRegistrationRemediation, supportedClients, } from "./SupportedClients.js";
|
|
10
|
+
import { clientEvidencePaths, manualRegistrationRemediation, supportedClients, } from "./SupportedClients.js";
|
|
9
11
|
const registrationSchema = z
|
|
10
12
|
.object({
|
|
11
13
|
command: z.string().min(1),
|
|
@@ -21,20 +23,18 @@ const registrationSchema = z
|
|
|
21
23
|
/** Inspect supported client registrations without reading their environment. */
|
|
22
24
|
export const readClientRegistrationStatuses = async (home, currentCommandPath = resolve(process.argv[1] ?? "unknown"), options = {}) => {
|
|
23
25
|
const statuses = [];
|
|
24
|
-
for (const client of supportedClients(home, options.platform, options.environment
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (!(await exists(client.markerPath)) &&
|
|
37
|
-
!(await exists(client.configPath)))
|
|
26
|
+
for (const client of supportedClients(home, options.platform, options.environment)) {
|
|
27
|
+
if (client.configPathError !== undefined) {
|
|
28
|
+
statuses.push({
|
|
29
|
+
client: client.name,
|
|
30
|
+
config_path: client.configPath,
|
|
31
|
+
command: [],
|
|
32
|
+
state: "invalid",
|
|
33
|
+
remediation: client.configPathError,
|
|
34
|
+
});
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (!(await clientEvidencePresent(client)))
|
|
38
38
|
continue;
|
|
39
39
|
const manualRemediation = manualRegistrationRemediation(client.name);
|
|
40
40
|
if (client.format === "unsupported") {
|
|
@@ -49,8 +49,34 @@ export const readClientRegistrationStatuses = async (home, currentCommandPath =
|
|
|
49
49
|
continue;
|
|
50
50
|
}
|
|
51
51
|
try {
|
|
52
|
-
const
|
|
53
|
-
|
|
52
|
+
const files = await readClientConfigurationFiles(client);
|
|
53
|
+
if (!files.ok) {
|
|
54
|
+
statuses.push({
|
|
55
|
+
client: client.name,
|
|
56
|
+
config_path: client.configPath,
|
|
57
|
+
command: [],
|
|
58
|
+
state: "invalid",
|
|
59
|
+
remediation: files.error.detail,
|
|
60
|
+
});
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const parsed = effectiveClientConfiguration(files.value);
|
|
64
|
+
if (parsed === undefined) {
|
|
65
|
+
statuses.push(unavailableStatus(client.name, client.configPath, "missing"));
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const policy = await readClientPolicyBlock(client, parsed);
|
|
69
|
+
if (!policy.ok) {
|
|
70
|
+
statuses.push({
|
|
71
|
+
client: client.name,
|
|
72
|
+
config_path: client.configPath,
|
|
73
|
+
command: [],
|
|
74
|
+
state: "invalid",
|
|
75
|
+
remediation: policy.error.detail,
|
|
76
|
+
});
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const policyBlock = policy.value;
|
|
54
80
|
const raw = effectiveClientServer(parsed, PRODUCT_IDENTITY.mcpServerKey);
|
|
55
81
|
if (raw === undefined) {
|
|
56
82
|
statuses.push(unavailableStatus(client.name, client.configPath, "missing"));
|
|
@@ -61,11 +87,11 @@ export const readClientRegistrationStatuses = async (home, currentCommandPath =
|
|
|
61
87
|
registration.command,
|
|
62
88
|
...registration.args,
|
|
63
89
|
];
|
|
64
|
-
statuses.push(configuredStatus(client.name, client.configPath, command, registrationAligned(registration, client, currentCommandPath, options.platform ?? process.platform) &&
|
|
65
|
-
!(
|
|
66
|
-
|
|
90
|
+
statuses.push(configuredStatus(client.name, client.configPath, command, registrationAligned(registration, client, currentCommandPath, options.platform ?? process.platform, clientServerForcedEnabled(parsed, PRODUCT_IDENTITY.mcpServerKey)) &&
|
|
91
|
+
!clientServerListedDisabled(parsed, PRODUCT_IDENTITY.mcpServerKey) &&
|
|
92
|
+
policyBlock === undefined
|
|
67
93
|
? "aligned"
|
|
68
|
-
: "stale"));
|
|
94
|
+
: "stale", policyBlock));
|
|
69
95
|
}
|
|
70
96
|
catch (cause) {
|
|
71
97
|
statuses.push(unavailableStatus(client.name, client.configPath, isMissing(cause) ? "missing" : "invalid"));
|
|
@@ -73,9 +99,10 @@ export const readClientRegistrationStatuses = async (home, currentCommandPath =
|
|
|
73
99
|
}
|
|
74
100
|
return statuses.sort((left, right) => left.client.localeCompare(right.client));
|
|
75
101
|
};
|
|
76
|
-
const registrationAligned = (registration, client, currentCommandPath, platform) => {
|
|
102
|
+
const registrationAligned = (registration, client, currentCommandPath, platform, forcedEnabled = false) => {
|
|
77
103
|
const command = [registration.command, ...registration.args];
|
|
78
|
-
if (
|
|
104
|
+
if ((client.format !== "grok" && registration.disabled === true) ||
|
|
105
|
+
(registration.enabled === false && !forcedEnabled))
|
|
79
106
|
return false;
|
|
80
107
|
if (!isOwnedClientRegistrationCommand(command, currentCommandPath))
|
|
81
108
|
return false;
|
|
@@ -85,6 +112,11 @@ const registrationAligned = (registration, client, currentCommandPath, platform)
|
|
|
85
112
|
return false;
|
|
86
113
|
if (client.format === "vscode" && registration.type !== "stdio")
|
|
87
114
|
return false;
|
|
115
|
+
// OMP and Pi infer stdio for a command entry without an explicit type.
|
|
116
|
+
if ((client.format === "omp" || client.format === "pi") &&
|
|
117
|
+
registration.type !== undefined &&
|
|
118
|
+
registration.type !== "stdio")
|
|
119
|
+
return false;
|
|
88
120
|
if (client.format === "copilot_cli" &&
|
|
89
121
|
(registration.type !== "stdio" ||
|
|
90
122
|
JSON.stringify(registration.tools) !== JSON.stringify(["*"])))
|
|
@@ -127,12 +159,22 @@ const parseRegistration = (value, client) => {
|
|
|
127
159
|
throw new TypeError("Expected an stdio registration");
|
|
128
160
|
if (client.format === "commandcode" && registration.transport !== "stdio")
|
|
129
161
|
throw new TypeError("Expected an stdio registration");
|
|
162
|
+
if ((client.format === "omp" || client.format === "pi") &&
|
|
163
|
+
registration.type !== undefined &&
|
|
164
|
+
registration.type !== "stdio")
|
|
165
|
+
throw new TypeError("Expected an stdio registration");
|
|
130
166
|
return registration;
|
|
131
167
|
};
|
|
132
168
|
const remediation = "Run rea setup to refresh this registration, then restart the client.";
|
|
133
|
-
const configuredStatus = (client, configPath, command, state) => state === "aligned"
|
|
169
|
+
const configuredStatus = (client, configPath, command, state, policyRemediation) => state === "aligned"
|
|
134
170
|
? { client, config_path: configPath, command, state, remediation: null }
|
|
135
|
-
: {
|
|
171
|
+
: {
|
|
172
|
+
client,
|
|
173
|
+
config_path: configPath,
|
|
174
|
+
command,
|
|
175
|
+
state,
|
|
176
|
+
remediation: policyRemediation ?? remediation,
|
|
177
|
+
};
|
|
136
178
|
const unavailableStatus = (client, configPath, state) => ({
|
|
137
179
|
client,
|
|
138
180
|
config_path: configPath,
|
|
@@ -140,6 +182,12 @@ const unavailableStatus = (client, configPath, state) => ({
|
|
|
140
182
|
state,
|
|
141
183
|
remediation,
|
|
142
184
|
});
|
|
185
|
+
const clientEvidencePresent = async (client) => {
|
|
186
|
+
for (const path of clientEvidencePaths(client))
|
|
187
|
+
if (await exists(path))
|
|
188
|
+
return true;
|
|
189
|
+
return false;
|
|
190
|
+
};
|
|
143
191
|
const exists = async (path) => {
|
|
144
192
|
if (path === undefined)
|
|
145
193
|
return false;
|
|
@@ -43,7 +43,7 @@ export const runProviderAnalysis = async (dependencies, ...[path, tool, argument
|
|
|
43
43
|
}));
|
|
44
44
|
/** Execute managed metadata inspection in an isolated managed-only session. */
|
|
45
45
|
export const runManagedProviderExecution = async (dependencies, path, tool, signal) => withProcessCancellation(signal, async (operationSignal) => {
|
|
46
|
-
const session = dependencies.createManagedBinarySession();
|
|
46
|
+
const session = await dependencies.createManagedBinarySession();
|
|
47
47
|
return withSessionCleanup(session, async () => {
|
|
48
48
|
const opened = await session.open(path, { signal: operationSignal });
|
|
49
49
|
if (!opened.ok)
|
|
@@ -70,11 +70,12 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
|
|
|
70
70
|
const config = dependencies.readConfiguration();
|
|
71
71
|
if (!config.ok)
|
|
72
72
|
return cliError(config.error);
|
|
73
|
-
const session = dependencies.createBinarySession(config.value, logger);
|
|
73
|
+
const session = await dependencies.createBinarySession(config.value, logger);
|
|
74
74
|
return withSessionCleanup(session, async () => {
|
|
75
75
|
const prepared = await prepareSnapshot({
|
|
76
76
|
path,
|
|
77
77
|
snapshotPath,
|
|
78
|
+
signal,
|
|
78
79
|
...(options.formatHint === undefined
|
|
79
80
|
? {}
|
|
80
81
|
: { formatHint: options.formatHint }),
|
|
@@ -144,7 +145,7 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
|
|
|
144
145
|
if (evidence !== undefined) {
|
|
145
146
|
const recorded = session.recordEvidence(evidence);
|
|
146
147
|
if (!recorded.ok)
|
|
147
|
-
return cliError(recorded.error);
|
|
148
|
+
return cliError(recorded.error.retainPartialObservation(evidence));
|
|
148
149
|
if (isWorkflowEvidenceTool(tool)) {
|
|
149
150
|
const unknowns = recordWorkflowUnknowns({
|
|
150
151
|
name: tool,
|
|
@@ -153,7 +154,7 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
|
|
|
153
154
|
recordUnknown: (unknown) => session.recordUnknown(unknown),
|
|
154
155
|
});
|
|
155
156
|
if (!unknowns.ok)
|
|
156
|
-
return cliError(unknowns.error);
|
|
157
|
+
return cliError(unknowns.error.retainPartialObservation(evidence));
|
|
157
158
|
}
|
|
158
159
|
}
|
|
159
160
|
if (isWorkflowEvidenceTool(tool) &&
|
|
@@ -165,7 +166,7 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
|
|
|
165
166
|
if (workflowRecord !== undefined) {
|
|
166
167
|
const recorded = session.recordWorkflowSnapshot(workflowRecord);
|
|
167
168
|
if (!recorded.ok)
|
|
168
|
-
return cliError(recorded.error);
|
|
169
|
+
return cliError(recorded.error.retainPartialObservation(evidence));
|
|
169
170
|
}
|
|
170
171
|
}
|
|
171
172
|
if (tool !== "trace_native_ui_action" &&
|
|
@@ -173,10 +174,10 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
|
|
|
173
174
|
evidence !== undefined) {
|
|
174
175
|
const snapshot = session.exportAnalysisSnapshot();
|
|
175
176
|
if (!snapshot.ok)
|
|
176
|
-
return cliError(snapshot.error);
|
|
177
|
+
return cliError(snapshot.error.retainPartialObservation(evidence));
|
|
177
178
|
const written = await writeAnalysisSnapshot(snapshot.value, snapshotPath, true);
|
|
178
179
|
if (!written.ok)
|
|
179
|
-
return cliError(written.error);
|
|
180
|
+
return cliError(written.error.retainPartialObservation(evidence));
|
|
180
181
|
}
|
|
181
182
|
return output;
|
|
182
183
|
}, directAnalysisCleanupFailure);
|
|
@@ -266,7 +267,12 @@ const prepareSnapshot = async (options) => {
|
|
|
266
267
|
const loaded = await readAnalysisSnapshot(snapshotPath);
|
|
267
268
|
if (!loaded.ok)
|
|
268
269
|
return loaded;
|
|
269
|
-
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
|
+
});
|
|
270
276
|
if (!target.ok)
|
|
271
277
|
return target;
|
|
272
278
|
if (!snapshotMatchesTarget(loaded.value.target, target.value))
|
|
@@ -3,7 +3,7 @@ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
|
3
3
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
4
4
|
import { ProviderAdapterError } from "../domain/providerAdapterError.js";
|
|
5
5
|
import { err } from "../domain/result.js";
|
|
6
|
-
import { analysisErrorWithCleanupFailure } from "
|
|
6
|
+
import { analysisErrorWithCleanupFailure } from "../domain/analysisErrorCleanup.js";
|
|
7
7
|
/** Await one-shot cleanup and retain either the outcome or both failures. */
|
|
8
8
|
export const withSessionCleanup = async (session, operation, onCleanupFailure) => {
|
|
9
9
|
let value;
|
|
@@ -39,7 +39,6 @@ export const directAnalysisCleanupFailure = (output, error) => {
|
|
|
39
39
|
"execution_failure" in primary.data.details
|
|
40
40
|
? (primary.data.details.execution_failure ?? primary.data.code)
|
|
41
41
|
: primary.data.code,
|
|
42
|
-
primary_error: projection,
|
|
43
42
|
cleanup_error: cleanup,
|
|
44
43
|
},
|
|
45
44
|
};
|
|
@@ -2,11 +2,12 @@ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
|
2
2
|
import { jsonObjectSchema } from "../domain/jsonValue.js";
|
|
3
3
|
import { createServerIdentity } from "../serverIdentity.js";
|
|
4
4
|
import { silentLogger } from "../logger.js";
|
|
5
|
-
|
|
5
|
+
/** Read target-free provider status and operation availability. */
|
|
6
|
+
export const runSessionStatus = async (dependencies, logger = silentLogger) => {
|
|
6
7
|
const config = dependencies.readConfiguration();
|
|
7
8
|
if (!config.ok)
|
|
8
9
|
return { error: projectAnalysisError(config.error) };
|
|
9
|
-
const session = dependencies.createBinarySession(config.value, logger);
|
|
10
|
+
const session = await dependencies.createBinarySession(config.value, logger);
|
|
10
11
|
try {
|
|
11
12
|
return {
|
|
12
13
|
...jsonObjectSchema.parse(session.status()),
|
|
@@ -19,7 +20,3 @@ const runSessionStatus = async (dependencies, logger = silentLogger) => {
|
|
|
19
20
|
await session.close();
|
|
20
21
|
}
|
|
21
22
|
};
|
|
22
|
-
/** List binary-session provider candidates and auxiliary operation availability. */
|
|
23
|
-
export const runProviderStatus = (dependencies, logger = silentLogger) => runSessionStatus(dependencies, logger);
|
|
24
|
-
/** List binary-session operation descriptors; this is not the full MCP catalog. */
|
|
25
|
-
export const runCapabilityStatus = (dependencies, logger = silentLogger) => runSessionStatus(dependencies, logger);
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { constants } from "node:fs";
|
|
2
|
-
import { access,
|
|
2
|
+
import { access, readdir, stat } from "node:fs/promises";
|
|
3
3
|
import { homeDirectoryFromEnvironment } from "../config/homeDirectory.js";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { analysisErrorRemediationAction } from "../domain/analysisErrorPresentation.js";
|
|
6
|
+
import { BinaryTargetError } from "../domain/configurationErrors.js";
|
|
6
7
|
import { parseBinaryTarget } from "./BinaryTargetResolver.js";
|
|
7
8
|
import { execFileOutput } from "../process/ExecFileOutput.js";
|
|
8
9
|
import { installedCaskAppdir, probeHomebrew } from "./homebrew.js";
|
|
9
10
|
import { linuxHopperBinarySupported, linuxSharedLibrariesAvailable, readLinuxDistribution, } from "./LinuxHopper.js";
|
|
10
|
-
import {
|
|
11
|
+
import { readInstalledSkillIdentity, } from "./SetupSkill.js";
|
|
11
12
|
import { CATALOG_IDENTITY } from "../catalogIdentity.js";
|
|
12
13
|
import { PRODUCT_IDENTITY, SDK_IDENTITY } from "../identity.js";
|
|
13
14
|
import { readClientRegistrationStatuses, } from "./ClientRegistrationStatus.js";
|
|
@@ -21,8 +22,9 @@ export const DOCTOR_PROVIDER_IDS = ["hopper", "ghidra", "ida"];
|
|
|
21
22
|
* or an agent consuming the structured result.
|
|
22
23
|
*/
|
|
23
24
|
export const runDoctor = async (target, host = systemDoctorHost(), requestedScope) => {
|
|
25
|
+
const scope = normalizeDoctorScope(requestedScope, target);
|
|
24
26
|
const { checks: diagnosticChecks, hopperPath, providerInspections, } = await collectDoctorDiagnostics(target, host);
|
|
25
|
-
const identity = await collectDoctorIdentity(host);
|
|
27
|
+
const identity = await collectDoctorIdentity(host, scope);
|
|
26
28
|
const checks = [...diagnosticChecks, ...identity.checks];
|
|
27
29
|
const providers = {
|
|
28
30
|
hopperAvailable: hopperPath !== undefined &&
|
|
@@ -33,7 +35,6 @@ export const runDoctor = async (target, host = systemDoctorHost(), requestedScop
|
|
|
33
35
|
providerInspections,
|
|
34
36
|
};
|
|
35
37
|
const environmentHealthy = doctorHealthy(checks, providers);
|
|
36
|
-
const scope = normalizeDoctorScope(requestedScope, target);
|
|
37
38
|
const scoped = scopeDoctorChecks({
|
|
38
39
|
checks,
|
|
39
40
|
registrations: identity.value.registrations,
|
|
@@ -53,11 +54,14 @@ export const runDoctor = async (target, host = systemDoctorHost(), requestedScop
|
|
|
53
54
|
identity: identity.value,
|
|
54
55
|
};
|
|
55
56
|
};
|
|
56
|
-
const collectDoctorIdentity = async (host) => {
|
|
57
|
+
const collectDoctorIdentity = async (host, scope) => {
|
|
57
58
|
const installationPaths = (await host.installationPaths?.()) ?? [];
|
|
58
|
-
const installedSkillIdentity = await host.installedSkillIdentity?.();
|
|
59
|
-
const skillAligned = skillIdentityAligned(installedSkillIdentity);
|
|
60
59
|
const registrations = (await host.clientRegistrations?.()) ?? [];
|
|
60
|
+
const skillClientIds = scope.mode === "audit-wide"
|
|
61
|
+
? registrations.map(({ client }) => client)
|
|
62
|
+
: scope.clients;
|
|
63
|
+
const installedSkillIdentity = await host.installedSkillIdentity?.(skillClientIds);
|
|
64
|
+
const skillAligned = skillIdentityAligned(installedSkillIdentity);
|
|
61
65
|
return {
|
|
62
66
|
checks: [
|
|
63
67
|
...(skillAligned ? [] : [skillIdentityCheck(installedSkillIdentity)]),
|
|
@@ -81,7 +85,6 @@ const collectDoctorIdentity = async (host) => {
|
|
|
81
85
|
skill: {
|
|
82
86
|
installed_version: installedSkillIdentity?.version ?? null,
|
|
83
87
|
installed_tool_count: installedSkillIdentity?.toolCount ?? null,
|
|
84
|
-
installed_catalog_digest: installedSkillIdentity?.catalogDigest ?? null,
|
|
85
88
|
state: installedSkillIdentity === undefined
|
|
86
89
|
? "missing"
|
|
87
90
|
: skillAligned
|
|
@@ -137,10 +140,16 @@ export const systemDoctorHost = (options = {}) => {
|
|
|
137
140
|
macosVersion: () => readMacosVersion(hostExecFileOutput, commandEnvironment),
|
|
138
141
|
linuxDistribution: readLinuxDistribution,
|
|
139
142
|
async validTarget(path) {
|
|
140
|
-
return (await parseBinaryTarget(path,
|
|
143
|
+
return (await parseBinaryTarget(path, {
|
|
144
|
+
cwd: process.cwd(),
|
|
145
|
+
hostArchitecture: architecture,
|
|
146
|
+
})).ok;
|
|
141
147
|
},
|
|
142
148
|
async inspectTarget(path) {
|
|
143
|
-
const result = await parseBinaryTarget(path,
|
|
149
|
+
const result = await parseBinaryTarget(path, {
|
|
150
|
+
cwd: process.cwd(),
|
|
151
|
+
hostArchitecture: architecture,
|
|
152
|
+
});
|
|
144
153
|
if (result.ok)
|
|
145
154
|
return {
|
|
146
155
|
name: "target",
|
|
@@ -149,18 +158,19 @@ export const systemDoctorHost = (options = {}) => {
|
|
|
149
158
|
detail: path,
|
|
150
159
|
};
|
|
151
160
|
const error = result.error;
|
|
161
|
+
const targetError = error instanceof BinaryTargetError ? error : undefined;
|
|
152
162
|
return {
|
|
153
163
|
name: "target",
|
|
154
164
|
ok: false,
|
|
155
|
-
classification:
|
|
165
|
+
classification: targetError?.constraint === "directory_requires_file"
|
|
156
166
|
? "unsupported_target"
|
|
157
167
|
: "config_drift",
|
|
158
168
|
detail: path,
|
|
159
169
|
details: {
|
|
160
|
-
reason: error.
|
|
161
|
-
...(
|
|
170
|
+
reason: targetError?.reason ?? error.message,
|
|
171
|
+
...(targetError?.constraint === undefined
|
|
162
172
|
? {}
|
|
163
|
-
: { constraint:
|
|
173
|
+
: { constraint: targetError.constraint }),
|
|
164
174
|
},
|
|
165
175
|
remediation: analysisErrorRemediationAction(error),
|
|
166
176
|
};
|
|
@@ -218,7 +228,7 @@ export const systemDoctorHost = (options = {}) => {
|
|
|
218
228
|
return [];
|
|
219
229
|
}
|
|
220
230
|
},
|
|
221
|
-
installedSkillIdentity: () =>
|
|
231
|
+
installedSkillIdentity: (clientIds) => readInstalledSkillIdentity(homeDirectory, clientIds, environment, platform),
|
|
222
232
|
clientRegistrations: () => readClientRegistrationStatuses(homeDirectory, undefined, {
|
|
223
233
|
platform,
|
|
224
234
|
environment,
|
|
@@ -238,6 +248,8 @@ const readMacosVersion = async (run, options) => {
|
|
|
238
248
|
const executableAvailable = async (path, platform, run, options) => {
|
|
239
249
|
try {
|
|
240
250
|
await access(path, constants.X_OK);
|
|
251
|
+
if (!(await stat(path)).isFile())
|
|
252
|
+
return false;
|
|
241
253
|
if (platform !== "linux")
|
|
242
254
|
return true;
|
|
243
255
|
const linked = await run("ldd", [path], options);
|
|
@@ -272,25 +284,6 @@ const manualHopperPaths = async (home) => {
|
|
|
272
284
|
}
|
|
273
285
|
return paths;
|
|
274
286
|
};
|
|
275
|
-
const readInstalledSkill = (home) => readFile(join(home, ".agents/skills", PRODUCT_IDENTITY.skillName, "SKILL.md"), "utf8");
|
|
276
|
-
const installedSkillIdentity = async (home) => {
|
|
277
|
-
try {
|
|
278
|
-
const content = await readInstalledSkill(home);
|
|
279
|
-
const countText = /^\s{2}tool_count:\s*(\d+)\s*$/mu.exec(content)?.[1];
|
|
280
|
-
return {
|
|
281
|
-
canonical: !(await canonicalSkillNeedsInstall(home)),
|
|
282
|
-
version: /^\s{2}version:\s*"([^"]+)"\s*$/mu.exec(content)?.[1] ?? null,
|
|
283
|
-
toolCount: countText === undefined ? null : Number.parseInt(countText, 10),
|
|
284
|
-
catalogDigest: /^\s{2}catalog_digest:\s*"([a-f0-9]{64})"\s*$/mu.exec(content)?.[1] ??
|
|
285
|
-
null,
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
catch (cause) {
|
|
289
|
-
// best-effort cleanup: optional skill probing; failure means unknown.
|
|
290
|
-
void cause;
|
|
291
|
-
return undefined;
|
|
292
|
-
}
|
|
293
|
-
};
|
|
294
287
|
const uniqueLines = (value) => [
|
|
295
288
|
...new Set(value
|
|
296
289
|
.split(/\r?\n/u)
|
|
@@ -65,7 +65,7 @@ const hostCheck = async (host) => {
|
|
|
65
65
|
? `${host.platform} ${host.architecture}`
|
|
66
66
|
: `${linuxDistribution.id} ${linuxDistribution.versionId ?? "unknown"}`);
|
|
67
67
|
return check("host", supported, detail, {
|
|
68
|
-
remediation: "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, 64-bit Arch Linux, CachyOS, and the experimental Windows x64 Ghidra P0 boundary.",
|
|
68
|
+
remediation: "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, Nobara 44+, 64-bit Arch Linux, CachyOS, Omarchy, and the experimental Windows x64 Ghidra P0 boundary.",
|
|
69
69
|
classification: "unsupported_host",
|
|
70
70
|
});
|
|
71
71
|
};
|
|
@@ -3,22 +3,17 @@ import {} from "../domain/analysisErrorBase.js";
|
|
|
3
3
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
4
4
|
import { err, ok } from "../domain/result.js";
|
|
5
5
|
import { compareBundles } from "../domain/bundleComparison.js";
|
|
6
|
-
import { EvidenceLedger } from "./investigation/EvidenceLedger.js";
|
|
7
6
|
import { readEvidenceBundle, writeEvidenceBundle, } from "./EvidenceBundleFiles.js";
|
|
8
|
-
/** Validate
|
|
7
|
+
/** Validate a standalone bundle and report its complete record/revision counts. */
|
|
9
8
|
export const importEvidenceBundleCommand = async (path) => {
|
|
10
9
|
const loaded = await readEvidenceBundle(path);
|
|
11
10
|
if (!loaded.ok)
|
|
12
11
|
return loaded;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
unknowns_added: imported.value.unknownsAdded,
|
|
19
|
-
total: ledger.export().records.length,
|
|
20
|
-
})
|
|
21
|
-
: imported;
|
|
12
|
+
return ok({
|
|
13
|
+
imported: loaded.value.records.length,
|
|
14
|
+
unknowns_added: loaded.value.unknowns.length,
|
|
15
|
+
total: loaded.value.records.length,
|
|
16
|
+
});
|
|
22
17
|
};
|
|
23
18
|
/** Validate a source bundle and atomically export canonical bytes. */
|
|
24
19
|
export const exportEvidenceBundleCommand = async (sourcePath, outputPath, overwrite) => {
|
|
@@ -46,7 +41,6 @@ export const compareEvidenceBundlesCommand = async (input) => {
|
|
|
46
41
|
}));
|
|
47
42
|
}
|
|
48
43
|
};
|
|
49
|
-
const createLedger = () => new EvidenceLedger();
|
|
50
44
|
const projectWrite = (bundle, written) => written.ok
|
|
51
45
|
? ok({
|
|
52
46
|
path: written.value.path,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describeEvidenceBundleFailure, describeValidationFailure, parseEvidenceBundle, } from "../domain/evidenceBundle.js";
|
|
2
2
|
import { EvidenceFileError, EvidenceIntegrityError, } from "../domain/evidenceErrors.js";
|
|
3
3
|
import { err, ok } from "../domain/result.js";
|
|
4
|
-
import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
|
|
4
|
+
import { AnalysisCancelledError, } from "../domain/analysisErrorCore.js";
|
|
5
5
|
import { parseProcessCapture } from "../domain/process/processCaptureParsing.js";
|
|
6
6
|
import { bufferedJsonParts, canonicalJsonParts, } from "../domain/jsonSerialization.js";
|
|
7
7
|
import { readJsonFile, writeTextParts } from "./JsonFiles.js";
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { realpath } from "node:fs/promises";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
import { stripComments } from "jsonc-parser";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { err, ok } from "../domain/result.js";
|
|
6
|
+
import { PRODUCT_IDENTITY } from "../identity.js";
|
|
7
|
+
import { npxRegistrationCommand } from "./ClientRegistrationIdentity.js";
|
|
8
|
+
import { clientConfigurationValuesEqual, clientRegistrationEntry, geminiServerPolicyBlock, parseGeminiMcpPolicy, } from "./ClientConfigurationDocument.js";
|
|
9
|
+
import { readConfigurationFile, readConfigurationText, } from "./ClientConfigurationFiles.js";
|
|
10
|
+
const folderTrustSchema = z
|
|
11
|
+
.object({
|
|
12
|
+
security: z
|
|
13
|
+
.object({
|
|
14
|
+
folderTrust: z
|
|
15
|
+
.object({ enabled: z.boolean().optional() })
|
|
16
|
+
.passthrough()
|
|
17
|
+
.optional(),
|
|
18
|
+
})
|
|
19
|
+
.passthrough()
|
|
20
|
+
.optional(),
|
|
21
|
+
})
|
|
22
|
+
.passthrough();
|
|
23
|
+
const trustRulesSchema = z.record(z.string(), z.enum(["TRUST_FOLDER", "TRUST_PARENT", "DO_NOT_TRUST"]));
|
|
24
|
+
const sourceFailure = (path, cause) => ({
|
|
25
|
+
kind: "malformed",
|
|
26
|
+
path,
|
|
27
|
+
detail: `Gemini settings in ${path} are malformed: ${cause instanceof Error ? cause.message : String(cause)}`,
|
|
28
|
+
});
|
|
29
|
+
// Gemini resolves symlinks when possible and compares macOS/Windows paths without case.
|
|
30
|
+
const normalizedPath = async (path, platform) => {
|
|
31
|
+
const physical = await realpath(path).catch(() => path);
|
|
32
|
+
const absolute = resolve(physical).replaceAll("\\", "/");
|
|
33
|
+
return platform === "win32" || platform === "darwin"
|
|
34
|
+
? absolute.toLowerCase()
|
|
35
|
+
: absolute;
|
|
36
|
+
};
|
|
37
|
+
const workspaceTrusted = async (settings, sources) => {
|
|
38
|
+
let enabled = true;
|
|
39
|
+
for (const { path, document } of sources) {
|
|
40
|
+
const parsed = folderTrustSchema.safeParse(document.document);
|
|
41
|
+
if (!parsed.success)
|
|
42
|
+
return err(sourceFailure(path, parsed.error));
|
|
43
|
+
enabled = parsed.data.security?.folderTrust?.enabled ?? enabled;
|
|
44
|
+
}
|
|
45
|
+
if (settings.trustOverride !== undefined)
|
|
46
|
+
return ok(settings.trustOverride);
|
|
47
|
+
if (!enabled)
|
|
48
|
+
return ok(true);
|
|
49
|
+
const text = await readConfigurationText(settings.trustedFoldersPath);
|
|
50
|
+
if (!text.ok)
|
|
51
|
+
return text;
|
|
52
|
+
if (text.value === undefined)
|
|
53
|
+
return ok(false);
|
|
54
|
+
let rules;
|
|
55
|
+
try {
|
|
56
|
+
// Gemini strips comments, but rejects trailing commas, BOMs and invalid trust levels.
|
|
57
|
+
rules = trustRulesSchema.parse(JSON.parse(stripComments(text.value)));
|
|
58
|
+
}
|
|
59
|
+
catch (cause) {
|
|
60
|
+
return err(sourceFailure(settings.trustedFoldersPath, cause));
|
|
61
|
+
}
|
|
62
|
+
const workspace = await normalizedPath(settings.workspaceDirectory, settings.platform);
|
|
63
|
+
let longest = -1;
|
|
64
|
+
let trusted = false;
|
|
65
|
+
for (const [path, level] of Object.entries(rules)) {
|
|
66
|
+
const effective = await normalizedPath(level === "TRUST_PARENT" ? dirname(path) : path, settings.platform);
|
|
67
|
+
if ((workspace === effective ||
|
|
68
|
+
workspace.startsWith(effective.endsWith("/") ? effective : `${effective}/`)) &&
|
|
69
|
+
path.length > longest) {
|
|
70
|
+
longest = path.length;
|
|
71
|
+
trusted = level !== "DO_NOT_TRUST";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return ok(trusted);
|
|
75
|
+
};
|
|
76
|
+
/** Check effective Gemini scopes while preserving their authority and source identity. */
|
|
77
|
+
export const readClientPolicyBlock = async (client, userDocument, desiredRegistration) => {
|
|
78
|
+
if (client.name !== "gemini_cli" || client.geminiSettings === undefined)
|
|
79
|
+
return ok(undefined);
|
|
80
|
+
const settings = client.geminiSettings;
|
|
81
|
+
const sources = [];
|
|
82
|
+
const higher = [];
|
|
83
|
+
for (const path of [
|
|
84
|
+
settings.defaultsPath,
|
|
85
|
+
client.configPath,
|
|
86
|
+
settings.systemPath,
|
|
87
|
+
]) {
|
|
88
|
+
const parsed = path === client.configPath && userDocument !== undefined
|
|
89
|
+
? ok(userDocument)
|
|
90
|
+
: await readConfigurationFile(path, "json");
|
|
91
|
+
if (!parsed.ok)
|
|
92
|
+
return parsed;
|
|
93
|
+
if (parsed.value !== undefined)
|
|
94
|
+
sources.push({ path, document: parsed.value });
|
|
95
|
+
}
|
|
96
|
+
const workspace = await normalizedPath(settings.workspaceDirectory, settings.platform);
|
|
97
|
+
const home = await normalizedPath(dirname(dirname(client.configPath)), settings.platform);
|
|
98
|
+
if (workspace !== home) {
|
|
99
|
+
const path = resolve(settings.workspaceDirectory, ".gemini", "settings.json");
|
|
100
|
+
const document = await readConfigurationFile(path, "json");
|
|
101
|
+
if (!document.ok)
|
|
102
|
+
return document;
|
|
103
|
+
if (document.value !== undefined) {
|
|
104
|
+
const trusted = await workspaceTrusted(settings, sources);
|
|
105
|
+
if (!trusted.ok)
|
|
106
|
+
return trusted;
|
|
107
|
+
if (trusted.value) {
|
|
108
|
+
const source = { path, document: document.value };
|
|
109
|
+
const systemIndex = sources.findIndex((item) => item.path === settings.systemPath);
|
|
110
|
+
sources.splice(systemIndex < 0 ? sources.length : systemIndex, 0, source);
|
|
111
|
+
higher.push(source);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const system = sources.find(({ path }) => path === settings.systemPath);
|
|
116
|
+
if (system !== undefined)
|
|
117
|
+
higher.push(system);
|
|
118
|
+
const policies = [];
|
|
119
|
+
for (const { path, document } of sources) {
|
|
120
|
+
try {
|
|
121
|
+
policies.push(parseGeminiMcpPolicy(document));
|
|
122
|
+
}
|
|
123
|
+
catch (cause) {
|
|
124
|
+
return err(sourceFailure(path, cause));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const policy = geminiServerPolicyBlock(policies, PRODUCT_IDENTITY.mcpServerKey);
|
|
128
|
+
if (policy !== undefined)
|
|
129
|
+
return ok(`${policy} Settings sources: ${sources.map(({ path }) => path).join(", ")}.`);
|
|
130
|
+
// mcpServers uses shallow merge: the entire same-name definition is replaced.
|
|
131
|
+
const override = higher.findLast(({ document }) => Object.hasOwn(document.servers, PRODUCT_IDENTITY.mcpServerKey));
|
|
132
|
+
const desired = desiredRegistration ??
|
|
133
|
+
userDocument?.servers[PRODUCT_IDENTITY.mcpServerKey] ??
|
|
134
|
+
clientRegistrationEntry("json", npxRegistrationCommand(), {});
|
|
135
|
+
if (override !== undefined &&
|
|
136
|
+
!clientConfigurationValuesEqual(override.document.servers[PRODUCT_IDENTITY.mcpServerKey], desired))
|
|
137
|
+
return ok(`Gemini mcpServers.${PRODUCT_IDENTITY.mcpServerKey} in ${override.path} overrides the user registration. Review that settings file before rerunning setup; REA does not modify system or workspace settings.`);
|
|
138
|
+
return ok(undefined);
|
|
139
|
+
};
|